admin_role.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package service
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "gadmin/config"
  7. "gadmin/internal/admin/consts"
  8. "gadmin/internal/admin/forms"
  9. "gadmin/internal/gorm/model"
  10. "gadmin/internal/gorm/query"
  11. "gadmin/utility/serializer"
  12. "github.com/gin-gonic/gin"
  13. "github.com/sirupsen/logrus"
  14. "github.com/spf13/cast"
  15. "gorm.io/gorm"
  16. "time"
  17. )
  18. // AdminRole 后台角色
  19. var AdminRole = new(sAdminRole)
  20. type sAdminRole struct{}
  21. func (s *sAdminRole) List(ctx *gin.Context, req forms.AdminRoleListReq) serializer.Response {
  22. var (
  23. q = query.Use(config.AdminDB).AdminRole
  24. m = q.WithContext(ctx)
  25. mq = query.Use(config.DB).AdminRoleMenu
  26. mm = mq.WithContext(context.Background())
  27. offset int64 = 0
  28. models forms.UserAccountListRes
  29. lists []*forms.AdminRoleListModel
  30. )
  31. m = m.Order(q.Sort).Order(q.ID.Desc())
  32. req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
  33. count, err := m.Count()
  34. if err != nil {
  35. return serializer.Err(consts.CodeParamErr, "查询出错 count", err)
  36. }
  37. if count > 0 {
  38. if err = m.Limit(int(req.PerPage)).Offset(int(offset)).Scan(&lists); err != nil {
  39. return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
  40. }
  41. }
  42. for _, v := range lists {
  43. err = json.Unmarshal([]byte(cast.ToString(v.Permissions)), &v.Permissions)
  44. pages := make([]int64, 0)
  45. if err := mm.Where(mq.RoleID.Eq(int32(v.ID))).Pluck(mq.PageID, &pages); err != nil {
  46. return serializer.Err(consts.CodeParamErr, "查询出错 pages", err)
  47. }
  48. v.Pages = pages
  49. }
  50. models.List = lists
  51. models.Page = req.Page
  52. models.PerPage = req.PerPage
  53. models.PageCount = (count + req.PerPage - 1) / req.PerPage
  54. return serializer.Suc(models)
  55. }
  56. func (s *sAdminRole) Edit(ctx *gin.Context, req forms.AdminRoleEditReq) serializer.Response {
  57. q := query.Use(config.AdminDB).AdminRole
  58. mq := query.Use(config.DB).AdminRoleMenu
  59. m := mq.WithContext(context.Background())
  60. logrus.Warnf("req:%+v", req)
  61. marshal, err := json.Marshal(req.Permissions)
  62. if err != nil {
  63. return serializer.Err(consts.CodeParamErr, "Marshal err", err)
  64. }
  65. menusModel := make([]*model.AdminRoleMenu, 0)
  66. for _, menu := range req.Pages {
  67. menusModel = append(menusModel, &model.AdminRoleMenu{
  68. RoleID: int32(req.ID),
  69. PageID: int32(menu),
  70. })
  71. }
  72. // 修改
  73. if req.ID > 0 {
  74. update := &model.AdminRole{
  75. Name: req.Name,
  76. Key: req.Key,
  77. Sort: req.Sort,
  78. Permissions: string(marshal),
  79. Remark: req.Remark,
  80. Status: req.Status,
  81. UpdatedAt: time.Now(),
  82. }
  83. _, err := q.WithContext(ctx).Where(q.ID.Eq(req.ID)).Updates(update)
  84. if err != nil {
  85. return serializer.Err(consts.CodeParamErr, "更新出错", err)
  86. }
  87. // 删除旧的菜单权限
  88. if _, err := m.Where(mq.RoleID.Eq(int32(req.ID))).Delete(); err != nil {
  89. return serializer.Response{}
  90. }
  91. // 插入新的菜单权限
  92. if err := m.Create(menusModel...); err != nil {
  93. return serializer.Response{}
  94. }
  95. return serializer.Suc(nil)
  96. }
  97. // 新增
  98. create := &model.AdminRole{
  99. Name: req.Name,
  100. Key: req.Key,
  101. Sort: req.Sort,
  102. Permissions: string(marshal),
  103. Remark: req.Remark,
  104. Status: req.Status,
  105. UpdatedAt: time.Now(),
  106. CreatedAt: time.Now(),
  107. }
  108. if err := query.Use(config.AdminDB).AdminRole.WithContext(ctx).Create(create); err != nil {
  109. logrus.Error(err)
  110. return serializer.DBErr(err.Error(), err)
  111. }
  112. // 插入新的菜单权限
  113. for _, item := range menusModel {
  114. item.RoleID = int32(create.ID)
  115. }
  116. if err := m.Create(menusModel...); err != nil {
  117. logrus.Error(err)
  118. return serializer.DBErr(err.Error(), err)
  119. }
  120. return serializer.Suc(nil)
  121. }
  122. func (s *sAdminRole) GetRole(ctx *gin.Context, req forms.AdminRoleReq) (*model.AdminRole, error) {
  123. var (
  124. q = query.Use(config.AdminDB).AdminRole
  125. m = q.WithContext(ctx)
  126. )
  127. result, err := m.Where(q.ID.Eq(req.ID)).First()
  128. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  129. return nil, err
  130. }
  131. return result, nil
  132. }