service_listmenu.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package admin
  2. import (
  3. "github.com/xinliangnote/go-gin-api/internal/pkg/core"
  4. "github.com/xinliangnote/go-gin-api/internal/repository/mysql"
  5. "github.com/xinliangnote/go-gin-api/internal/repository/mysql/admin_menu"
  6. "github.com/xinliangnote/go-gin-api/internal/repository/mysql/menu"
  7. )
  8. type SearchListMenuData struct {
  9. AdminId int32 `json:"admin_id"` // 管理员ID
  10. }
  11. type ListMenuData struct {
  12. Id int32 `json:"id"` // ID
  13. Pid int32 `json:"pid"` // 父类ID
  14. Name string `json:"name"` // 菜单名称
  15. IsHave int32 `json:"is_have"` // 是否已拥有权限
  16. }
  17. func (s *service) ListMenu(ctx core.Context, searchData *SearchListMenuData) (menuData []ListMenuData, err error) {
  18. menuQb := menu.NewQueryBuilder()
  19. menuQb.WhereIsDeleted(mysql.EqualPredicate, -1)
  20. menuListData, err := menuQb.
  21. OrderBySort(true).
  22. QueryAll(s.db.GetDbR().WithContext(ctx.RequestContext()))
  23. if err != nil {
  24. return nil, err
  25. }
  26. if len(menuListData) <= 0 {
  27. return
  28. }
  29. menuData = make([]ListMenuData, len(menuListData))
  30. for k, v := range menuListData {
  31. data := ListMenuData{
  32. Id: v.Id,
  33. Pid: v.Pid,
  34. Name: v.Name,
  35. IsHave: 0,
  36. }
  37. menuData[k] = data
  38. }
  39. adminMenuQb := admin_menu.NewQueryBuilder()
  40. if searchData.AdminId != 0 {
  41. adminMenuQb.WhereAdminId(mysql.EqualPredicate, searchData.AdminId)
  42. }
  43. adminMenuListData, err := adminMenuQb.
  44. OrderById(false).
  45. QueryAll(s.db.GetDbR().WithContext(ctx.RequestContext()))
  46. if err != nil {
  47. return nil, err
  48. }
  49. if len(adminMenuListData) <= 0 {
  50. return
  51. }
  52. for k, v := range menuData {
  53. for _, haveV := range adminMenuListData {
  54. if haveV.MenuId == v.Id {
  55. menuData[k].IsHave = 1
  56. }
  57. }
  58. }
  59. return
  60. }