sys_menu.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package service
  2. import (
  3. "errors"
  4. "gin-vue-admin/global"
  5. "gin-vue-admin/model"
  6. "gin-vue-admin/model/request"
  7. "gorm.io/gorm"
  8. "strconv"
  9. )
  10. // @title getMenuTreeMap
  11. // @description 获取路由总树map
  12. // @auth qm (2020/05/06 10:26)
  13. // @return err error
  14. // @return menusMsp map{string}[]SysBaseMenu
  15. func getMenuTreeMap(authorityId string) (err error, treeMap map[string][]model.SysMenu) {
  16. var allMenus []model.SysMenu
  17. treeMap = make(map[string][]model.SysMenu)
  18. err = global.GVA_DB.Where("authority_id = ?", authorityId).Order("sort").Preload("Parameters").Find(&allMenus).Error
  19. for _, v := range allMenus {
  20. treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
  21. }
  22. return err, treeMap
  23. }
  24. // @title GetMenuTree
  25. // @description 获取动态菜单树
  26. // @auth (2020/04/05 20:22)
  27. // @param authorityId string
  28. // @return err error
  29. // @return menus []model.SysMenu
  30. func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) {
  31. err, menuTree := getMenuTreeMap(authorityId)
  32. menus = menuTree["0"]
  33. for i := 0; i < len(menus); i++ {
  34. err = getChildrenList(&menus[i], menuTree)
  35. }
  36. return err, menus
  37. }
  38. // @title getChildrenList
  39. // @description 获取子菜单
  40. // @auth (2020/04/05 20:22)
  41. // @param menu *model.SysMenu
  42. // @param sql string
  43. // @return err error
  44. func getChildrenList(menu *model.SysMenu, treeMap map[string][]model.SysMenu) (err error) {
  45. menu.Children = treeMap[menu.MenuId]
  46. for i := 0; i < len(menu.Children); i++ {
  47. err = getChildrenList(&menu.Children[i], treeMap)
  48. }
  49. return err
  50. }
  51. // @title GetInfoList
  52. // @description 获取路由分页
  53. // @auth (2020/04/05 20:22)
  54. // @param info request.PageInfo
  55. // @return err error
  56. // @return list interface{}
  57. // @return total int
  58. func GetInfoList() (err error, list interface{}, total int64) {
  59. var menuList []model.SysBaseMenu
  60. err, treeMap := getBaseMenuTreeMap()
  61. menuList = treeMap["0"]
  62. for i := 0; i < len(menuList); i++ {
  63. err = getBaseChildrenList(&menuList[i], treeMap)
  64. }
  65. return err, menuList, total
  66. }
  67. // @title getBaseChildrenList
  68. // @description get children of menu, 获取菜单的子菜单
  69. // @auth (2020/04/05 20:22)
  70. // @param menu *model.SysBaseMenu
  71. // @return err error
  72. func getBaseChildrenList(menu *model.SysBaseMenu, treeMap map[string][]model.SysBaseMenu) (err error) {
  73. menu.Children = treeMap[strconv.Itoa(int(menu.ID))]
  74. for i := 0; i < len(menu.Children); i++ {
  75. err = getBaseChildrenList(&menu.Children[i], treeMap)
  76. }
  77. return err
  78. }
  79. // @title AddBaseMenu
  80. // @description 函数的详细描述
  81. // @auth (2020/04/05 20:22)
  82. // @param menu *model.SysBaseMenu
  83. // @return err error
  84. // 增加基础路由
  85. func AddBaseMenu(menu model.SysBaseMenu) (err error) {
  86. if !errors.Is(global.GVA_DB.Where("name = ?", menu.Name).First(&model.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
  87. err = errors.New("存在重复name,请修改name")
  88. }
  89. err = global.GVA_DB.Create(&menu).Error
  90. return err
  91. }
  92. // @title getBaseMenuTreeMap
  93. // @description 获取路由总树map
  94. // @auth qm (2020/05/06 10:26)
  95. // @return err error
  96. // @return menusMsp map{string}[]SysBaseMenu
  97. func getBaseMenuTreeMap() (err error, treeMap map[string][]model.SysBaseMenu) {
  98. var allMenus []model.SysBaseMenu
  99. treeMap = make(map[string][]model.SysBaseMenu)
  100. err = global.GVA_DB.Order("sort").Preload("Parameters").Find(&allMenus).Error
  101. for _, v := range allMenus {
  102. treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
  103. }
  104. return err, treeMap
  105. }
  106. // @title GetBaseMenuTree
  107. // @description 获取基础路由树
  108. // @auth (2020/04/05 20:22)
  109. // @return err error
  110. // @return menus []SysBaseMenu
  111. func GetBaseMenuTree() (err error, menus []model.SysBaseMenu) {
  112. err, treeMap := getBaseMenuTreeMap()
  113. menus = treeMap["0"]
  114. for i := 0; i < len(menus); i++ {
  115. err = getBaseChildrenList(&menus[i], treeMap)
  116. }
  117. return err, menus
  118. }
  119. // @title AddMenuAuthority
  120. // @description 为角色增加menu树
  121. // @auth (2020/04/05 20:22)
  122. // @param menus []model.SysBaseMenu
  123. // @param authorityId string
  124. // @return error
  125. func AddMenuAuthority(menus []model.SysBaseMenu, authorityId string) (err error) {
  126. var auth model.SysAuthority
  127. auth.AuthorityId = authorityId
  128. auth.SysBaseMenus = menus
  129. err = SetMenuAuthority(&auth)
  130. return err
  131. }
  132. // @title GetMenuAuthority
  133. // @description 查看当前角色树
  134. // @auth (2020/04/05 20:22)
  135. // @param authorityId string
  136. // @return err error
  137. // @return menus []SysBaseMenu
  138. func GetMenuAuthority(info *request.GetAuthorityId) (err error, menus []model.SysMenu) {
  139. err = global.GVA_DB.Where("authority_id = ? ", info.AuthorityId).Order("sort").Find(&menus).Error
  140. //sql := "SELECT authority_menu.keep_alive,authority_menu.default_menu,authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM authority_menu WHERE authority_menu.authority_id = ? ORDER BY authority_menu.sort ASC"
  141. //err = global.GVA_DB.Raw(sql, authorityId).Scan(&menus).Error
  142. return err, menus
  143. }