menu_service.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package service
  2. import (
  3. "strings"
  4. "ulink-admin/frame"
  5. dao2 "ulink-admin/modules/system/dao"
  6. "ulink-admin/modules/system/models/model"
  7. "ulink-admin/modules/system/models/req"
  8. "ulink-admin/pkg/base"
  9. "xorm.io/xorm"
  10. )
  11. type MenuService struct {
  12. MenuDao *dao2.MenuDao `inject:""`
  13. RoleDao *dao2.RoleDao `inject:""`
  14. }
  15. // GetMenuTreeByUserId 根据用户ID查询菜单
  16. func (s MenuService) GetMenuTreeByUserId(user *model.SysUser) *[]model.SysMenu {
  17. var menuList *[]model.SysMenu
  18. //判断是否是管理员
  19. flag := model.SysUser{}.IsAdmin(user.Id)
  20. if flag {
  21. menuList = s.MenuDao.GetMenuAll()
  22. } else {
  23. menuList = s.MenuDao.GetMenuByUserId(user.Id)
  24. }
  25. return menuList
  26. }
  27. // GetMenusTreeByUserId 根据用户ID查询菜单
  28. func (s MenuService) GetMenusTreeByUserId(user *model.SysUser) *[]model.SysMenu {
  29. var menuList *[]model.SysMenu
  30. //判断是否是管理员
  31. flag := model.SysUser{}.IsAdmin(user.Id)
  32. if flag {
  33. menuList = s.MenuDao.GetMenusAll()
  34. } else {
  35. menuList = s.MenuDao.GetMenusByUserId(user.Id)
  36. }
  37. return menuList
  38. }
  39. // SelectMenuListByRoleId 根据角色ID查询菜单树信息
  40. func (s MenuService) SelectMenuListByRoleId(id int64) *[]int64 {
  41. role := s.RoleDao.SelectRoleByRoleId(id)
  42. return s.MenuDao.GetMenuByRoleId(id, role.MenuCheckStrictly)
  43. }
  44. // GetMenuList 获取菜单列表
  45. func (s MenuService) GetMenuList(query *req.MenuQuery, info *model.SysUser) []model.SysMenu {
  46. if info.IsAdmin(info.Id) {
  47. return s.MenuDao.GetMenuList(query)
  48. } else {
  49. query.Id = info.Id
  50. return s.MenuDao.GetMenuListByUserId(query)
  51. }
  52. }
  53. // GetMenuByMenuId 根据菜单ID查询信息
  54. func (s MenuService) GetMenuByMenuId(id int64) *model.SysMenu {
  55. return s.MenuDao.GetMenuByMenuId(id)
  56. }
  57. // InsertMenu 添加菜单数据
  58. func (s MenuService) InsertMenu(menu *model.SysMenu) {
  59. base.Transaction(func(session *xorm.Session) {
  60. s.MenuDao.Insert(menu)
  61. //自动插入菜单的通用按钮权限
  62. if menu.MenuType == "C" {
  63. ary := strings.Split(menu.Perms, ":")
  64. prex := strings.Join(ary[:len(ary)-1], ":")
  65. list := &model.SysMenu{MenuName: "查询", Status: "0", ParentId: menu.Id, OrderNum: 1, Path: menu.Path + "/list:get", MenuType: "F", Perms: prex + ":" + "list"}
  66. add := &model.SysMenu{MenuName: "新增", Status: "0", ParentId: menu.Id, OrderNum: 2, Path: menu.Path + "/list/add:post", MenuType: "F", Perms: prex + ":" + "edit"}
  67. edit := &model.SysMenu{MenuName: "修改", Status: "0", ParentId: menu.Id, OrderNum: 3, Path: menu.Path + "/:put", MenuType: "F", Perms: prex + ":" + "edit"}
  68. remove := &model.SysMenu{MenuName: "删除", Status: "0", ParentId: menu.Id, OrderNum: 4, Path: menu.Path + "/:delete", MenuType: "F", Perms: prex + ":" + "remove"}
  69. detail := &model.SysMenu{MenuName: "详情", Status: "0", ParentId: menu.Id, OrderNum: 5, Path: menu.Path + "/list:detail", MenuType: "F", Perms: prex + ":" + "detail"}
  70. // export := &model.SysMenu{MenuName: "导出", ParentId: menu.Id, OrderNum: 6, Path: menu.Path + "/list:export", MenuType: "F", Perms: prex + ":" + "export"}
  71. s.MenuDao.Insert(list)
  72. s.MenuDao.Insert(add)
  73. s.MenuDao.Insert(edit)
  74. s.MenuDao.Insert(remove)
  75. s.MenuDao.Insert(detail)
  76. }
  77. })
  78. }
  79. // Update 修改菜单数据
  80. func (s MenuService) Update(menu *model.SysMenu) {
  81. //查询原来菜单类型
  82. base.Transaction(func(session *xorm.Session) {
  83. oldMenu := s.MenuDao.GetMenuByMenuId(menu.GetId())
  84. s.MenuDao.Update(menu)
  85. if oldMenu.MenuType != menu.MenuType {
  86. if menu.MenuType == "C" {
  87. ary := strings.Split(menu.Perms, ":")
  88. prex := strings.Join(ary[:len(ary)-1], ":")
  89. list := &model.SysMenu{MenuName: "查询", ParentId: menu.Id, OrderNum: 1, Path: menu.Path + "/list:get", MenuType: "F", Perms: prex + ":" + "list"}
  90. add := &model.SysMenu{MenuName: "新增", ParentId: menu.Id, OrderNum: 2, Path: menu.Path + "/list/add:post", MenuType: "F", Perms: prex + ":" + "edit"}
  91. edit := &model.SysMenu{MenuName: "修改", ParentId: menu.Id, OrderNum: 3, Path: menu.Path + "/:put", MenuType: "F", Perms: prex + ":" + "edit"}
  92. remove := &model.SysMenu{MenuName: "删除", ParentId: menu.Id, OrderNum: 4, Path: menu.Path + "/:delete", MenuType: "F", Perms: prex + ":" + "remove"}
  93. detail := &model.SysMenu{MenuName: "详情", ParentId: menu.Id, OrderNum: 5, Path: menu.Path + "/list:detail", MenuType: "F", Perms: prex + ":" + "detail"}
  94. s.MenuDao.Insert(list)
  95. s.MenuDao.Insert(add)
  96. s.MenuDao.Insert(edit)
  97. s.MenuDao.Insert(remove)
  98. s.MenuDao.Insert(detail)
  99. } else {
  100. //删除parentId为menuId的菜单
  101. query := &req.MenuQuery{}
  102. query.ParentId = int64(menu.Id)
  103. list := s.MenuDao.GetMenuList(query)
  104. for _, item := range list {
  105. s.MenuDao.Delete(item.Id, &model.SysMenu{})
  106. }
  107. }
  108. }
  109. })
  110. }
  111. // 删除菜单操作
  112. func (s MenuService) Delete(id int64) {
  113. //判断是否存在子节点
  114. if s.MenuDao.SelectSubMenuCount(id) > 0 {
  115. frame.Throw(frame.BUSINESS_CODE, "请先删除子接节点")
  116. }
  117. s.MenuDao.Delete(&model.SysMenu{}, id)
  118. }
  119. func (s MenuService) SelectSubMenuCount(id int64) int64 {
  120. return s.MenuDao.SelectSubMenuCount(id)
  121. }
  122. func (s MenuService) GetMenus(query *req.MenuQuery) []model.SysMenu {
  123. return s.MenuDao.GetMenuList(query)
  124. }
  125. func (s MenuService) GetMenuByCon(query *req.MenuQuery) *model.SysMenu {
  126. list := s.GetMenus(query)
  127. if len(list) > 0 {
  128. return &list[0]
  129. }
  130. return nil
  131. }