sys_auth_rule.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package service
  2. import (
  3. "gfast/app/common/global"
  4. "gfast/app/common/service"
  5. "gfast/app/system/dao"
  6. "gfast/app/system/model"
  7. "github.com/gogf/gf/frame/gmvc"
  8. "github.com/gogf/gf/util/gconv"
  9. )
  10. type rule struct {
  11. }
  12. var Rule = new(rule)
  13. // GetIsMenuStatusList 获取isMenu=0|1且status=1的菜单列表
  14. func (s *rule) GetIsMenuStatusList() ([]*model.SysAuthRuleInfoRes, error) {
  15. list, err := s.GetMenuList()
  16. if err != nil {
  17. return nil, err
  18. }
  19. var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
  20. for _, v := range list {
  21. if (v.MenuType == 0 || v.MenuType == 1) && v.Status == 1 {
  22. gList = append(gList, v)
  23. }
  24. }
  25. return gList, nil
  26. }
  27. //获取所有菜单
  28. func (s *rule) GetMenuList() (list []*model.SysAuthRuleInfoRes, err error) {
  29. cache := service.Cache.New()
  30. //从缓存获取
  31. iList := cache.Get(global.SysAuthMenu)
  32. if iList != nil {
  33. err = gconv.Struct(iList, &list)
  34. return
  35. }
  36. //从数据库获取
  37. list, err = dao.SysAuthRule.GetMenuList()
  38. if err != nil || list == nil {
  39. return
  40. }
  41. //缓存菜单
  42. cache.Set(global.SysAuthMenu, list, 0, global.SysAuthTag)
  43. return
  44. }
  45. func (s *rule) GetMenuListSearch(req *model.SysAuthRuleReqSearch) (list []*model.SysAuthRuleInfoRes, err error) {
  46. list, err = dao.SysAuthRule.Scope(func(m gmvc.M) gmvc.M {
  47. if req != nil && !req.IsEmpty() {
  48. if req.Title != "" {
  49. m = m.Where("title like ?", "%"+req.Title+"%")
  50. }
  51. if req.Status != "" {
  52. m = m.Where("status = ?", req.Status)
  53. }
  54. }
  55. return m
  56. }).GetMenuList()
  57. if err != nil || list == nil {
  58. return
  59. }
  60. return
  61. }
  62. func (s *rule) GetMenuListTree(pid uint, list []*model.SysAuthRuleInfoRes) []*model.SysAuthRuleTreeRes {
  63. tree := make([]*model.SysAuthRuleTreeRes, 0, len(list))
  64. for _, menu := range list {
  65. if menu.Pid == pid {
  66. t := &model.SysAuthRuleTreeRes{
  67. SysAuthRuleInfoRes: menu,
  68. }
  69. child := s.GetMenuListTree(menu.Id, list)
  70. if child != nil {
  71. t.Children = child
  72. }
  73. tree = append(tree, t)
  74. }
  75. }
  76. return tree
  77. }
  78. // GetIsButtonStatusList 获取所有按钮isMenu=2 且status=1的菜单列表
  79. func (s *rule) GetIsButtonStatusList() ([]*model.SysAuthRuleInfoRes, error) {
  80. list, err := s.GetMenuList()
  81. if err != nil {
  82. return nil, err
  83. }
  84. var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
  85. for _, v := range list {
  86. if v.MenuType == 2 && v.Status == 1 {
  87. gList = append(gList, v)
  88. }
  89. }
  90. return gList, nil
  91. }
  92. // GetIsMenuList 获取MenuType==0,1菜单列表
  93. func (s *rule) GetIsMenuList() ([]*model.SysAuthRuleInfoRes, error) {
  94. list, err := s.GetMenuList()
  95. if err != nil {
  96. return nil, err
  97. }
  98. var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
  99. for _, v := range list {
  100. if v.MenuType == 0 || v.MenuType == 1 {
  101. gList = append(gList, v)
  102. }
  103. }
  104. return gList, nil
  105. }
  106. // GetMenuIsStatusList 获取status==1的菜单列表
  107. func (s *rule) GetMenuIsStatusList() ([]*model.SysAuthRuleInfoRes, error) {
  108. list, err := s.GetMenuList()
  109. if err != nil {
  110. return nil, err
  111. }
  112. var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
  113. for _, v := range list {
  114. if v.Status == 1 {
  115. gList = append(gList, v)
  116. }
  117. }
  118. return gList, nil
  119. }
  120. //检查菜单规则是否存在
  121. func (s *rule) CheckMenuNameUnique(name string, id int) bool {
  122. return dao.SysAuthRule.CheckMenuNameUnique(name, id)
  123. }
  124. //检查菜单路由地址是否已经存在
  125. func (s *rule) CheckMenuPathUnique(path string, id int) bool {
  126. return dao.SysAuthRule.CheckMenuPathUnique(path, id)
  127. }
  128. func (s *rule) AddMenu(req *model.MenuReq) (err error, insertId int64) {
  129. result, e := dao.SysAuthRule.Save(req)
  130. if e != nil {
  131. return e, 0
  132. }
  133. lastId, e := result.LastInsertId()
  134. if e != nil {
  135. return e, 0
  136. }
  137. return nil, lastId
  138. }
  139. //获取分类模型选项
  140. func (s *rule) ModelOptions(module string) (models []*model.SysModelInfo, err error) {
  141. dictType := ""
  142. switch module {
  143. case "gov_work":
  144. //政务平台
  145. dictType = "gov_cate_models"
  146. }
  147. if dictType != "" {
  148. //栏目模型分类
  149. //var modelOptions g.Map
  150. modelOptions, e := SysDictData.GetDictWithDataByType(&model.GetDictReq{
  151. DictType: dictType,
  152. })
  153. if e != nil {
  154. err = e
  155. return
  156. }
  157. values := gconv.SliceAny(modelOptions.Values)
  158. keys := make([]int, len(values))
  159. for k, val := range values {
  160. data := gconv.Map(val)
  161. keys[k] = gconv.Int(data["key"])
  162. }
  163. //获取对应模型
  164. models, err = SysInfo.GetModelsByCateIds(keys)
  165. if err != nil {
  166. return
  167. }
  168. }
  169. return
  170. }
  171. func (s *rule) One(id uint64) (*model.SysAuthRule, error) {
  172. return dao.SysAuthRule.Where("id = ?", id).FindOne()
  173. }
  174. func (s *rule) EditMenu(req *model.MenuReq, id int) (err error, rows int64) {
  175. result, e := dao.SysAuthRule.Where("id = ?", id).Update(req)
  176. if e != nil {
  177. err = e
  178. return
  179. }
  180. r, e := result.RowsAffected()
  181. if e != nil {
  182. err = e
  183. return
  184. }
  185. return nil, r
  186. }
  187. func (s *rule) DeleteMenuByIds(ids []int) (err error) {
  188. var list []*model.SysAuthRuleInfoRes
  189. list, err = s.GetMenuList()
  190. if err != nil {
  191. return
  192. }
  193. childrenIds := make([]int, 0, len(list))
  194. for _, id := range ids {
  195. rules := s.FindSonByParentId(list, gconv.Uint(id))
  196. for _, child := range rules {
  197. childrenIds = append(childrenIds, gconv.Int(child.Id))
  198. }
  199. }
  200. ids = append(ids, childrenIds...)
  201. _, err = dao.SysAuthRule.Where("id in (?)", ids).Unscoped().Delete() // 硬删除
  202. return
  203. }
  204. func (s *rule) ParentSonSort(list []*model.SysAuthRuleInfoRes, pid uint) []*model.SysAuthRuleInfoRes {
  205. newList := make([]*model.SysAuthRuleInfoRes, 0, len(list))
  206. for _, v := range list {
  207. if pid == v.Pid {
  208. newList = append(newList, v)
  209. newList2 := s.ParentSonSort(list, v.Id)
  210. newList = append(newList, newList2...)
  211. }
  212. }
  213. return newList
  214. }
  215. func (s *rule) FindSonByParentId(list []*model.SysAuthRuleInfoRes, pid uint) []*model.SysAuthRuleInfoRes {
  216. children := make([]*model.SysAuthRuleInfoRes, 0, len(list))
  217. for _, v := range list {
  218. if v.Pid == pid {
  219. children = append(children, v)
  220. fChildren := s.FindSonByParentId(list, v.Id)
  221. children = append(children, fChildren...)
  222. }
  223. }
  224. return children
  225. }