system_menu.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package model
  2. import (
  3. "sort"
  4. "time"
  5. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  6. operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
  7. )
  8. type SystemMenu struct {
  9. Id int64 `json:"id"`
  10. Name string `json:"name"`
  11. Title string `json:"title"`
  12. Path string `json:"path"`
  13. Icon string `json:"icon"`
  14. Component string `json:"component"`
  15. Redirect string `json:"redirect"`
  16. Auths string `json:"auths"`
  17. MenuType pasturePb.MenuType_Kind `json:"menu_type"`
  18. ParentId int64 `json:"parent_id"`
  19. Rank int32 `json:"rank"`
  20. ExtraIcon string `json:"extra_icon"`
  21. EnterTransition string `json:"enter_transition"`
  22. ActivePath string `json:"active_path"`
  23. FrameSrc string `json:"frame_src"`
  24. FrameLoading pasturePb.IsShow_Kind `json:"frame_loading"`
  25. Keepalive pasturePb.IsShow_Kind `json:"keepalive"`
  26. HiddenTag pasturePb.IsShow_Kind `json:"hidden_tag"`
  27. ShowLink pasturePb.IsShow_Kind `json:"show_link"`
  28. ShowParent pasturePb.IsShow_Kind `json:"show_parent"`
  29. IsShow pasturePb.IsShow_Kind `json:"is_show"`
  30. IsDelete pasturePb.IsShow_Kind `json:"is_delete"`
  31. CreatedAt int64 `json:"created_at"`
  32. UpdatedAt int64 `json:"updated_at"`
  33. }
  34. func (s *SystemMenu) TableName() string {
  35. return "system_menu"
  36. }
  37. func NewSystemMenu(req *operationPb.AddMenuRequest) *SystemMenu {
  38. return &SystemMenu{
  39. Name: req.Name,
  40. Title: req.Title,
  41. Path: req.Path,
  42. Component: req.Component,
  43. Icon: req.Icon,
  44. Redirect: req.Redirect,
  45. ParentId: int64(req.ParentId),
  46. IsShow: pasturePb.IsShow_Ok,
  47. IsDelete: pasturePb.IsShow_Ok,
  48. }
  49. }
  50. type SystemMenuSlice []*SystemMenu
  51. func (s SystemMenuSlice) ToPB() []*pasturePb.SearchMenuRequest {
  52. res := make([]*pasturePb.SearchMenuRequest, len(s))
  53. for i, menu := range s {
  54. var frameLoading, keepalive, hiddenTag, showLink, showParent bool
  55. if menu.FrameLoading == pasturePb.IsShow_Ok {
  56. frameLoading = true
  57. }
  58. if menu.Keepalive == pasturePb.IsShow_Ok {
  59. keepalive = true
  60. }
  61. if menu.HiddenTag == pasturePb.IsShow_Ok {
  62. hiddenTag = true
  63. }
  64. if menu.ShowLink == pasturePb.IsShow_Ok {
  65. showLink = true
  66. }
  67. if menu.ShowParent == pasturePb.IsShow_Ok {
  68. showParent = true
  69. }
  70. res[i] = &pasturePb.SearchMenuRequest{
  71. Id: int32(menu.Id),
  72. Name: menu.Name,
  73. ParentId: int32(menu.ParentId),
  74. MenuType: menu.MenuType,
  75. Title: menu.Title,
  76. Path: menu.Path,
  77. IsShow: menu.IsShow,
  78. Component: menu.Component,
  79. Icon: menu.Icon,
  80. Redirect: menu.Redirect,
  81. Auths: menu.Auths,
  82. Rank: menu.Rank,
  83. ExtraIcon: menu.ExtraIcon,
  84. EnterTransition: menu.EnterTransition,
  85. ActivePath: menu.ActivePath,
  86. FrameSrc: menu.FrameSrc,
  87. FrameLoading: frameLoading,
  88. Keepalive: keepalive,
  89. HiddenTag: hiddenTag,
  90. ShowLink: showLink,
  91. ShowParent: showParent,
  92. CreatedAtFormat: time.Unix(menu.CreatedAt, 0).Format(LayoutTime),
  93. UpdatedAtFormat: time.Unix(menu.UpdatedAt, 0).Format(LayoutTime),
  94. }
  95. }
  96. return res
  97. }
  98. func (s SystemMenuSlice) ToTree() []*pasturePb.MenuTree {
  99. res := make([]*pasturePb.MenuTree, len(s))
  100. if 0 == len(s) {
  101. return res
  102. }
  103. // 正排序
  104. sort.Slice(s, func(i, j int) bool {
  105. return s[i].ParentId < s[j].ParentId
  106. })
  107. for i, v := range s {
  108. res[i] = &pasturePb.MenuTree{
  109. Id: int32(v.Id),
  110. Path: v.Path,
  111. ParentId: int32(v.ParentId),
  112. Name: v.Name,
  113. Meta: &pasturePb.MenuMeta{
  114. Icon: v.Icon,
  115. Title: v.Title,
  116. Rank: v.Rank,
  117. Roles: []string{"admin"},
  118. ShowLink: v.ShowLink == pasturePb.IsShow_Ok,
  119. },
  120. Children: make([]*pasturePb.MenuTree, 0),
  121. }
  122. }
  123. // 构建树
  124. return buildTree(res)
  125. }
  126. func buildTree(menuTreeList []*pasturePb.MenuTree) []*pasturePb.MenuTree {
  127. tree := make([]*pasturePb.MenuTree, 0)
  128. for _, menu := range menuTreeList {
  129. if menu.ParentId == 0 {
  130. tree = append(tree, menu)
  131. } else {
  132. parent := findByID(menuTreeList, menu.ParentId)
  133. if parent != nil {
  134. parent.Children = append(parent.Children, menu)
  135. }
  136. }
  137. }
  138. return tree
  139. }
  140. func findByID(menuTreeList []*pasturePb.MenuTree, id int32) *pasturePb.MenuTree {
  141. for _, v := range menuTreeList {
  142. if id == v.Id {
  143. return v
  144. }
  145. if child := findByID(v.Children, id); child != nil {
  146. return child
  147. }
  148. }
  149. return nil
  150. }
  151. func BooleanToIsShow(isShow bool) pasturePb.IsShow_Kind {
  152. showKind := pasturePb.IsShow_No
  153. if isShow {
  154. showKind = pasturePb.IsShow_Ok
  155. }
  156. return showKind
  157. }