serv_menu.go 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. package controller
  2. import (
  3. "Medical_OAuth/app/admin/model"
  4. "Medical_OAuth/app/admin/service"
  5. "Medical_OAuth/app/admin/service/dto"
  6. "encoding/json"
  7. "fmt"
  8. "github.com/gin-gonic/gin"
  9. "github.com/gin-gonic/gin/binding"
  10. "github.com/tealeg/xlsx"
  11. "gogs.baozhida.cn/zoie/OAuth-core/api"
  12. "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
  13. _ "gogs.baozhida.cn/zoie/OAuth-core/pkg/response"
  14. "os"
  15. )
  16. type ServMenu struct {
  17. api.Api
  18. }
  19. // GetPage 获取菜单列表
  20. // @Summary 获取菜单列表
  21. // @Description 获取菜单列表
  22. // @Tags 服务菜单
  23. // @Param serviceId query string true "服务ID"
  24. // @Param name query string false "菜单名称"
  25. // @Param visible query string false "显示状态"
  26. // @Success 200 {object} response.Response{data=response.Page{list=[]model.ServMenu}} "{"code": 200, "data": [...]}"
  27. // @Router /api/serv-menu [get]
  28. // @Security Bearer
  29. func (e ServMenu) GetPage(c *gin.Context) {
  30. s := service.ServMenu{}
  31. serv := service.SysService{}
  32. req := dto.ServMenuGetPageReq{}
  33. err := e.MakeContext(c).
  34. MakeOrm().
  35. Bind(&req, binding.Form).
  36. MakeService(&s.Service).
  37. Errors
  38. if err != nil {
  39. e.Logger.Error(err)
  40. e.Error(500, err, err.Error())
  41. return
  42. }
  43. // 查询服务信息
  44. var servObject model.SysService
  45. servReq := dto.SysServiceGetReq{Id: req.ServiceId}
  46. err = serv.Get(&servReq, &servObject, nil)
  47. if err != nil {
  48. e.Error(500, err, err.Error())
  49. return
  50. }
  51. var list = make([]model.ServMenu, 0)
  52. if err = s.GetPage(&req, &list).Error; err != nil {
  53. e.Error(500, err, "查询失败")
  54. return
  55. }
  56. e.OK(list, "查询成功")
  57. }
  58. // Get 通过id获取菜单
  59. // @Summary 通过id获取菜单
  60. // @Description 通过id获取菜单
  61. // @Tags 服务菜单
  62. // @Param id path string true "菜单id"
  63. // @Success 200 {object} response.Response{data=model.ServMenu} "{"code": 200, "data": [...]}"
  64. // @Router /api/serv-menu/{id} [get]
  65. // @Security Bearer
  66. func (e ServMenu) Get(c *gin.Context) {
  67. req := dto.ServMenuGetReq{}
  68. s := service.ServMenu{}
  69. err := e.MakeContext(c).
  70. MakeOrm().
  71. Bind(&req, nil).
  72. MakeService(&s.Service).
  73. Errors
  74. if err != nil {
  75. e.Logger.Error(err)
  76. e.Error(500, err, err.Error())
  77. return
  78. }
  79. var object = model.ServMenu{}
  80. err = s.Get(&req, &object).Error
  81. if err != nil {
  82. e.Error(500, err, "查询失败")
  83. return
  84. }
  85. e.OK(object, "查询成功")
  86. }
  87. // Insert 创建菜单
  88. // @Summary 创建菜单
  89. // @Description 创建菜单
  90. // @Tags 服务菜单
  91. // @Accept application/json
  92. // @Product application/json
  93. // @Param data body dto.ServMenuInsertReq true "data"
  94. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  95. // @Router /api/serv-menu [post]
  96. // @Security Bearer
  97. func (e ServMenu) Insert(c *gin.Context) {
  98. req := dto.ServMenuInsertReq{}
  99. s := service.ServMenu{}
  100. err := e.MakeContext(c).
  101. MakeOrm().
  102. Bind(&req, binding.JSON).
  103. MakeService(&s.Service).
  104. Errors
  105. if err != nil {
  106. e.Logger.Error(err)
  107. e.Error(500, err, err.Error())
  108. return
  109. }
  110. // 设置创建人
  111. req.SetCreateBy(user.GetUserId(c))
  112. err = s.Insert(&req).Error
  113. if err != nil {
  114. e.Error(500, err, err.Error())
  115. return
  116. }
  117. e.OK(req.GetId(), "创建成功")
  118. }
  119. // Update 修改菜单
  120. // @Summary 修改菜单
  121. // @Description 修改菜单
  122. // @Tags 服务菜单
  123. // @Accept application/json
  124. // @Product application/json
  125. // @Param id path string true "菜单id"
  126. // @Param data body dto.ServMenuUpdateReq true "body"
  127. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  128. // @Router /api/serv-menu/{id} [put]
  129. // @Security Bearer
  130. func (e ServMenu) Update(c *gin.Context) {
  131. s := service.ServMenu{}
  132. req := dto.ServMenuUpdateReq{}
  133. err := e.MakeContext(c).
  134. MakeOrm().
  135. Bind(&req, binding.JSON, nil).
  136. MakeService(&s.Service).
  137. Errors
  138. if err != nil {
  139. e.Logger.Error(err)
  140. e.Error(500, err, err.Error())
  141. return
  142. }
  143. req.SetUpdateBy(user.GetUserId(c))
  144. err = s.Update(&req).Error
  145. if err != nil {
  146. e.Error(500, err, err.Error())
  147. return
  148. }
  149. e.OK(req.GetId(), "更新成功")
  150. }
  151. // Delete 删除菜单
  152. // @Summary 删除菜单
  153. // @Description 删除菜单
  154. // @Tags 服务菜单
  155. // @Accept application/json
  156. // @Product application/json
  157. // @Param data body dto.ServMenuDeleteReq true "body"
  158. // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
  159. // @Router /api/serv-menu [delete]
  160. // @Security Bearer
  161. func (e ServMenu) Delete(c *gin.Context) {
  162. s := service.ServMenu{}
  163. req := dto.ServMenuDeleteReq{}
  164. err := e.MakeContext(c).
  165. MakeOrm().
  166. Bind(&req, binding.JSON).
  167. MakeService(&s.Service).
  168. Errors
  169. if err != nil {
  170. e.Logger.Error(err)
  171. e.Error(500, err, err.Error())
  172. return
  173. }
  174. req.SetUpdateBy(user.GetUserId(c))
  175. err = s.Remove(&req).Error
  176. if err != nil {
  177. e.Logger.Errorf("RemoveServMenu error, %s", err)
  178. e.Error(500, err, "删除失败")
  179. return
  180. }
  181. e.OK(req.GetId(), "删除成功")
  182. }
  183. // Export 导出菜单
  184. // @Summary 导出菜单
  185. // @Description 导出菜单
  186. // @Tags 服务菜单
  187. // @Accept application/json
  188. // @Product application/json
  189. // @Param data body dto.ServMenuExportReq true "body"
  190. // @Success 200 {object} response.Response "{"code": 200}"
  191. // @Router /api/serv-menu/export [get]
  192. // @Security Bearer
  193. func (e ServMenu) Export(c *gin.Context) {
  194. s := service.ServMenu{}
  195. serv := service.SysService{}
  196. req := dto.ServMenuExportReq{}
  197. err := e.MakeContext(c).
  198. MakeOrm().
  199. Bind(&req, binding.Form).
  200. MakeService(&s.Service).
  201. MakeService(&serv.Service).
  202. Errors
  203. if err != nil {
  204. e.Logger.Error(err)
  205. e.Error(500, err, err.Error())
  206. return
  207. }
  208. // 查询服务信息
  209. var servObject model.SysService
  210. servReq := dto.SysServiceGetReq{Id: req.ServiceId}
  211. err = serv.Get(&servReq, &servObject, nil)
  212. if err != nil {
  213. e.Error(500, err, err.Error())
  214. return
  215. }
  216. if req.Type == "json" {
  217. var list = make([]model.ServMenu, 0)
  218. jsonReq := dto.ServMenuGetPageReq{
  219. ServiceId: req.ServiceId,
  220. }
  221. if err = s.GetPage(&jsonReq, &list).Error; err != nil {
  222. e.Error(500, err, "查询失败")
  223. return
  224. }
  225. jsonBytes, err := json.Marshal(list)
  226. if err != nil {
  227. e.Error(500, err, err.Error())
  228. return
  229. }
  230. filename := fmt.Sprintf("%s菜单.json", servObject.Name)
  231. file, err := os.Create(filename)
  232. if err != nil {
  233. e.Error(500, err, err.Error())
  234. return
  235. }
  236. defer file.Close()
  237. if _, err := file.Write(jsonBytes); err != nil {
  238. e.Error(500, err, err.Error())
  239. return
  240. }
  241. c.Header("Content-Disposition", "attachment; filename="+filename)
  242. c.Header("Content-Type", "application/octet-stream")
  243. c.FileAttachment(filename, file.Name())
  244. }
  245. if req.Type == "excel" {
  246. var list = make([]model.ServMenu, 0)
  247. jsonReq := dto.ServMenuGetPageReq{
  248. ServiceId: req.ServiceId,
  249. }
  250. if err = s.GetList(&jsonReq, &list); err != nil {
  251. e.Error(500, err, "查询失败")
  252. return
  253. }
  254. file := xlsx.NewFile()
  255. sheet, err := file.AddSheet("Sheet1")
  256. if err != nil {
  257. e.Error(500, err, err.Error())
  258. return
  259. }
  260. // Add header row
  261. headerRow := sheet.AddRow()
  262. headerRow.AddCell().SetValue("id")
  263. headerRow.AddCell().SetValue("service_id")
  264. headerRow.AddCell().SetValue("menu_path")
  265. headerRow.AddCell().SetValue("parent_id")
  266. headerRow.AddCell().SetValue("name")
  267. headerRow.AddCell().SetValue("sort")
  268. headerRow.AddCell().SetValue("menu_type")
  269. headerRow.AddCell().SetValue("icon")
  270. headerRow.AddCell().SetValue("component")
  271. headerRow.AddCell().SetValue("is_frame")
  272. headerRow.AddCell().SetValue("path")
  273. headerRow.AddCell().SetValue("permission")
  274. headerRow.AddCell().SetValue("visible")
  275. // Add data rows
  276. for _, v := range list {
  277. dataRow := sheet.AddRow()
  278. dataRow.AddCell().SetValue(v.Id)
  279. dataRow.AddCell().SetValue(v.ServiceId)
  280. dataRow.AddCell().SetValue(v.MenuPath)
  281. dataRow.AddCell().SetValue(v.ParentId)
  282. dataRow.AddCell().SetValue(v.Name)
  283. dataRow.AddCell().SetValue(v.Sort)
  284. dataRow.AddCell().SetValue(v.MenuType)
  285. dataRow.AddCell().SetValue(v.Icon)
  286. dataRow.AddCell().SetValue(v.Component)
  287. dataRow.AddCell().SetValue(v.IsFrame)
  288. dataRow.AddCell().SetValue(v.Path)
  289. dataRow.AddCell().SetValue(v.Permission)
  290. dataRow.AddCell().SetValue(v.Visible)
  291. }
  292. filename := fmt.Sprintf("%s菜单.xlsx", servObject.Name)
  293. // Set content type and headers
  294. c.Header("Content-Disposition", "attachment; filename="+filename)
  295. c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
  296. // Write file to response
  297. err = file.Write(c.Writer)
  298. if err != nil {
  299. e.Error(500, err, err.Error())
  300. return
  301. }
  302. c.FileAttachment(filename, filename)
  303. }
  304. e.Error(500, err, "类型错误!")
  305. return
  306. }