sys_post.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. package controller
  2. import (
  3. "cold-delivery/app/admin/model"
  4. "cold-delivery/app/admin/service"
  5. "cold-delivery/app/admin/service/dto"
  6. "cold-delivery/common/actions"
  7. "cold-delivery/common/global"
  8. "fmt"
  9. "strings"
  10. "github.com/gin-gonic/gin"
  11. "github.com/gin-gonic/gin/binding"
  12. "gogs.baozhida.cn/zoie/OAuth-core/api"
  13. "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/user"
  14. )
  15. type SysPostController struct {
  16. api.Api
  17. }
  18. // GetPage 获取岗位列表
  19. // @Summary 获取岗位列表
  20. // @Description 分页查询岗位列表
  21. // @Tags 岗位管理
  22. // @Param postName query string false "岗位名称"
  23. // @Param postCode query string false "岗位编码"
  24. // @Param status query string false "状态"
  25. // @Param deptId query int false "部门ID"
  26. // @Param page query int false "页码"
  27. // @Param pageSize query int false "每页数量"
  28. // @Success 200 {object} response.Response{data=response.Page{list=[]model.SysPost}} "{"code": 200, "data": [...]}"
  29. // @Router /api/post [get]
  30. // @Security Bearer
  31. func (e SysPostController) GetPage(c *gin.Context) {
  32. s := service.SysPost{}
  33. req := dto.SysPostGetPageReq{}
  34. err := e.MakeContext(c).
  35. MakeOrm().
  36. Bind(&req, binding.Query).
  37. MakeService(&s.Service).
  38. Errors
  39. if err != nil {
  40. e.Logger.Error(err)
  41. e.Error(500, err, err.Error())
  42. return
  43. }
  44. p := actions.GetPermissionFromContext(c)
  45. list := make([]model.SysPost, 0)
  46. var count int64
  47. err = s.GetPage(&req, &list, &count, p)
  48. if err != nil {
  49. e.Error(500, err, err.Error())
  50. return
  51. }
  52. e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
  53. }
  54. // Get 获取单个岗位详情
  55. // @Summary 获取单个岗位
  56. // @Description 获取岗位详情(含权限菜单ID列表)
  57. // @Tags 岗位管理
  58. // @Param id path int true "岗位ID"
  59. // @Success 200 {object} response.Response{data=model.SysPost} "{"code": 200, "data": {...}}"
  60. // @Router /api/post/{id} [get]
  61. // @Security Bearer
  62. func (e SysPostController) Get(c *gin.Context) {
  63. s := service.SysPost{}
  64. req := dto.SysPostGetReq{}
  65. err := e.MakeContext(c).
  66. MakeOrm().
  67. Bind(&req, nil).
  68. MakeService(&s.Service).
  69. Errors
  70. if err != nil {
  71. e.Logger.Error(err)
  72. e.Error(500, err, err.Error())
  73. return
  74. }
  75. p := actions.GetPermissionFromContext(c)
  76. var postModel model.SysPost
  77. err = s.Get(&req, &postModel, p)
  78. if err != nil {
  79. e.Error(500, err, err.Error())
  80. return
  81. }
  82. e.OK(postModel, "查询成功")
  83. }
  84. // Insert 新增岗位
  85. // @Summary 新增岗位
  86. // @Description 新增岗位(含菜单权限分配)
  87. // @Tags 岗位管理
  88. // @Param data body dto.SysPostInsertReq true "岗位信息"
  89. // @Success 200 {object} response.Response "{"code": 200, "msg": "添加成功"}"
  90. // @Router /api/post [post]
  91. // @Security Bearer
  92. func (e SysPostController) Insert(c *gin.Context) {
  93. s := service.SysPost{}
  94. req := dto.SysPostInsertReq{}
  95. err := e.MakeContext(c).
  96. MakeOrm().
  97. Bind(&req, binding.JSON).
  98. MakeService(&s.Service).
  99. Errors
  100. if err != nil {
  101. e.Logger.Error(err)
  102. e.Error(500, err, err.Error())
  103. return
  104. }
  105. req.SetCreateBy(user.GetUserId(c))
  106. err = s.Insert(&req)
  107. if err != nil {
  108. e.Error(500, err, err.Error())
  109. return
  110. }
  111. e.OK(req.Id, "添加成功")
  112. }
  113. // Update 修改岗位
  114. // @Summary 修改岗位
  115. // @Description 修改岗位(含菜单权限重新分配)
  116. // @Tags 岗位管理
  117. // @Param data body dto.SysPostUpdateReq true "岗位信息"
  118. // @Success 200 {object} response.Response "{"code": 200, "msg": "更新成功"}"
  119. // @Router /api/post [put]
  120. // @Security Bearer
  121. func (e SysPostController) Update(c *gin.Context) {
  122. s := service.SysPost{}
  123. req := dto.SysPostUpdateReq{}
  124. err := e.MakeContext(c).
  125. MakeOrm().
  126. Bind(&req, binding.JSON).
  127. MakeService(&s.Service).
  128. Errors
  129. if err != nil {
  130. e.Logger.Error(err)
  131. e.Error(500, err, err.Error())
  132. return
  133. }
  134. req.SetUpdateBy(user.GetUserId(c))
  135. p := actions.GetPermissionFromContext(c)
  136. cb, err := global.LoadPolicy(c)
  137. if err != nil {
  138. e.Error(500, err, "Casbin加载失败")
  139. return
  140. }
  141. err = s.Update(&req, p, cb)
  142. if err != nil {
  143. e.Error(500, err, err.Error())
  144. return
  145. }
  146. e.OK(req.Id, "更新成功")
  147. }
  148. // Delete 删除岗位(逻辑删除)
  149. // @Summary 删除岗位
  150. // @Description 删除岗位(逻辑删除,检查是否有用户关联)
  151. // @Tags 岗位管理
  152. // @Param data body dto.SysPostDeleteReq true "岗位ID"
  153. // @Success 200 {object} response.Response "{"code": 200, "msg": "删除成功"}"
  154. // @Router /api/post [delete]
  155. // @Security Bearer
  156. func (e SysPostController) Delete(c *gin.Context) {
  157. s := service.SysPost{}
  158. req := dto.SysPostDeleteReq{}
  159. err := e.MakeContext(c).
  160. MakeOrm().
  161. Bind(&req, binding.JSON).
  162. MakeService(&s.Service).
  163. Errors
  164. if err != nil {
  165. e.Logger.Error(err)
  166. e.Error(500, err, err.Error())
  167. return
  168. }
  169. p := actions.GetPermissionFromContext(c)
  170. cb, err := global.LoadPolicy(c)
  171. if err != nil {
  172. e.Error(500, err, "Casbin加载失败")
  173. return
  174. }
  175. err = s.Remove(&req, p, cb)
  176. if err != nil {
  177. e.Error(500, err, err.Error())
  178. return
  179. }
  180. e.OK(req.Id, "删除成功")
  181. }
  182. // GetAll 获取所有岗位(下拉选择用)
  183. // @Summary 获取所有岗位
  184. // @Description 获取所有岗位(用于下拉选择)
  185. // @Tags 岗位管理
  186. // @Param deptId query int false "部门ID"
  187. // @Success 200 {object} response.Response{data=[]model.SysPost} "{"code": 200, "data": [...]}"
  188. // @Router /api/post/all [get]
  189. // @Security Bearer
  190. func (e SysPostController) GetAll(c *gin.Context) {
  191. s := service.SysPost{}
  192. err := e.MakeContext(c).
  193. MakeOrm().
  194. MakeService(&s.Service).
  195. Errors
  196. if err != nil {
  197. e.Logger.Error(err)
  198. e.Error(500, err, err.Error())
  199. return
  200. }
  201. p := actions.GetPermissionFromContext(c)
  202. // 从前端请求参数获取 deptId,不用当前登录用户的部门ID
  203. deptIdStr := c.Query("deptId")
  204. deptId := 0
  205. if deptIdStr != "" {
  206. fmt.Sscanf(deptIdStr, "%d", &deptId)
  207. }
  208. list := make([]model.SysPost, 0)
  209. err = s.GetAll(deptId, &list, p)
  210. if err != nil {
  211. e.Error(500, err, err.Error())
  212. return
  213. }
  214. e.OK(list, "查询成功")
  215. }
  216. // GetMenuTree 获取菜单权限树
  217. // @Summary 获取菜单权限树
  218. // @Description 获取完整菜单树(用于权限分配界面)
  219. // @Tags 岗位管理
  220. // @Success 200 {object} response.Response{data=[]dto.MenuLabel} "{"code": 200, "data": [...]}"
  221. // @Router /api/post/menu-tree [get]
  222. // @Security Bearer
  223. func (e SysPostController) GetMenuTree(c *gin.Context) {
  224. s := service.SysPost{}
  225. err := e.MakeContext(c).
  226. MakeOrm().
  227. MakeService(&s.Service).
  228. Errors
  229. if err != nil {
  230. e.Logger.Error(err)
  231. e.Error(500, err, err.Error())
  232. return
  233. }
  234. tree, err := s.GetMenuTree()
  235. if err != nil {
  236. e.Error(500, err, err.Error())
  237. return
  238. }
  239. e.OK(tree, "查询成功")
  240. }
  241. // GetPostMenuIds 获取岗位已分配的菜单ID
  242. // @Summary 获取岗位菜单权限
  243. // @Description 获取岗位已分配的菜单ID列表
  244. // @Tags 岗位管理
  245. // @Param id path int true "岗位ID"
  246. // @Success 200 {object} response.Response{data=dto.SysPostMenuIdsResp} "{"code": 200, "data": {"menuIds": [...]}}"
  247. // @Router /api/post/{id}/menu-ids [get]
  248. // @Security Bearer
  249. func (e SysPostController) GetPostMenuIds(c *gin.Context) {
  250. s := service.SysPost{}
  251. req := dto.SysPostGetReq{}
  252. err := e.MakeContext(c).
  253. MakeOrm().
  254. Bind(&req, nil).
  255. MakeService(&s.Service).
  256. Errors
  257. if err != nil {
  258. e.Logger.Error(err)
  259. e.Error(500, err, err.Error())
  260. return
  261. }
  262. menuIds, err := s.GetPostMenuIds(req.Id)
  263. if err != nil {
  264. e.Error(500, err, err.Error())
  265. return
  266. }
  267. e.OK(dto.SysPostMenuIdsResp{MenuIds: menuIds}, "查询成功")
  268. }
  269. // GetPostNames 根据ID列表批量获取岗位名称
  270. // @Summary 根据ID列表获取岗位名称
  271. // @Description 根据岗位ID列表批量查询岗位名称,返回 id→名称 的映射
  272. // @Tags 岗位管理
  273. // @Param ids query string true "岗位ID列表(逗号分隔,如 1,2,3)"
  274. // @Success 200 {object} response.Response{data=map[int]string} "{"code": 200, "data": {"1":"管理员","2":"配送员"}}"
  275. // @Router /api/post/names [get]
  276. // @Security Bearer
  277. func (e SysPostController) GetPostNames(c *gin.Context) {
  278. s := service.SysPost{}
  279. err := e.MakeContext(c).
  280. MakeOrm().
  281. MakeService(&s.Service).
  282. Errors
  283. if err != nil {
  284. e.Logger.Error(err)
  285. e.Error(500, err, err.Error())
  286. return
  287. }
  288. idsStr := c.Query("ids")
  289. if idsStr == "" {
  290. e.OK(map[int]string{}, "查询成功")
  291. return
  292. }
  293. // 解析逗号分隔的ID列表
  294. idStrs := strings.Split(idsStr, ",")
  295. ids := make([]int, 0, len(idStrs))
  296. for _, s := range idStrs {
  297. id := 0
  298. fmt.Sscanf(strings.TrimSpace(s), "%d", &id)
  299. if id > 0 {
  300. ids = append(ids, id)
  301. }
  302. }
  303. result, err := s.GetPostNamesByIds(ids)
  304. if err != nil {
  305. e.Error(500, err, err.Error())
  306. return
  307. }
  308. e.OK(result, "查询成功")
  309. }