system_menu.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package model
  2. import (
  3. "kpt-pasture/util"
  4. "sort"
  5. "time"
  6. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  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:"menuType"`
  18. ParentId int64 `json:"parentId"`
  19. Rank int32 `json:"rank"`
  20. ExtraIcon string `json:"extraIcon"`
  21. EnterTransition string `json:"enterTransition"`
  22. ActivePath string `json:"activePath"`
  23. FrameSrc string `json:"frameSrc"`
  24. FrameLoading pasturePb.IsShow_Kind `json:"frameLoading"`
  25. Keepalive pasturePb.IsShow_Kind `json:"keepalive"`
  26. HiddenTag pasturePb.IsShow_Kind `json:"hiddenTag"`
  27. ShowLink pasturePb.IsShow_Kind `json:"showLink"`
  28. ShowParent pasturePb.IsShow_Kind `json:"showParent"`
  29. IsShow pasturePb.IsShow_Kind `json:"isShow"`
  30. IsDelete pasturePb.IsShow_Kind `json:"isDelete"`
  31. CreatedAt int64 `json:"createdAt"`
  32. UpdatedAt int64 `json:"updatedAt"`
  33. }
  34. func (s *SystemMenu) TableName() string {
  35. return "system_menu"
  36. }
  37. func (s *SystemMenu) MenuUpdate(req *pasturePb.SearchMenuRequest) {
  38. s.Name = req.Name
  39. s.Path = req.Path
  40. s.MenuType = req.MenuType
  41. s.Title = req.Title
  42. s.ParentId = int64(req.ParentId)
  43. s.FrameSrc = req.FrameSrc
  44. s.FrameLoading = util.BooleanToIsShow(req.FrameLoading)
  45. s.Keepalive = util.BooleanToIsShow(req.Keepalive)
  46. s.HiddenTag = util.BooleanToIsShow(req.HiddenTag)
  47. s.ShowLink = util.BooleanToIsShow(req.ShowLink)
  48. s.ShowParent = util.BooleanToIsShow(req.ShowParent)
  49. s.Icon = req.Icon
  50. s.Component = req.Component
  51. s.Redirect = req.Redirect
  52. s.Auths = req.Auths
  53. s.Rank = req.Rank
  54. s.ExtraIcon = req.ExtraIcon
  55. s.EnterTransition = req.EnterTransition
  56. s.ActivePath = req.ActivePath
  57. s.IsShow = req.IsShow
  58. }
  59. // NewSystemMenu AddMenuRequest
  60. func NewSystemMenu(req *pasturePb.SearchMenuRequest) *SystemMenu {
  61. return &SystemMenu{
  62. Name: req.Name,
  63. Title: req.Title,
  64. Path: req.Path,
  65. Icon: req.Icon,
  66. Component: req.Component,
  67. Redirect: req.Redirect,
  68. Auths: req.Auths,
  69. MenuType: req.MenuType,
  70. ParentId: int64(req.ParentId),
  71. Rank: req.Rank,
  72. ExtraIcon: req.ExtraIcon,
  73. EnterTransition: req.EnterTransition,
  74. ActivePath: req.ActivePath,
  75. FrameSrc: req.FrameSrc,
  76. FrameLoading: util.BooleanToIsShow(req.FrameLoading),
  77. Keepalive: util.BooleanToIsShow(req.Keepalive),
  78. HiddenTag: util.BooleanToIsShow(req.HiddenTag),
  79. ShowLink: util.BooleanToIsShow(req.ShowLink),
  80. ShowParent: util.BooleanToIsShow(req.ShowParent),
  81. IsShow: pasturePb.IsShow_Ok,
  82. IsDelete: pasturePb.IsShow_Ok,
  83. }
  84. }
  85. type SystemMenuSlice []*SystemMenu
  86. func (s SystemMenuSlice) ToPB() []*pasturePb.SearchMenuRequest {
  87. res := make([]*pasturePb.SearchMenuRequest, len(s))
  88. for i, menu := range s {
  89. var frameLoading, keepalive, hiddenTag, showLink, showParent bool
  90. if menu.FrameLoading == pasturePb.IsShow_Ok {
  91. frameLoading = true
  92. }
  93. if menu.Keepalive == pasturePb.IsShow_Ok {
  94. keepalive = true
  95. }
  96. if menu.HiddenTag == pasturePb.IsShow_Ok {
  97. hiddenTag = true
  98. }
  99. if menu.ShowLink == pasturePb.IsShow_Ok {
  100. showLink = true
  101. }
  102. if menu.ShowParent == pasturePb.IsShow_Ok {
  103. showParent = true
  104. }
  105. res[i] = &pasturePb.SearchMenuRequest{
  106. Id: int32(menu.Id),
  107. Name: menu.Name,
  108. ParentId: int32(menu.ParentId),
  109. MenuType: menu.MenuType,
  110. Title: menu.Title,
  111. Path: menu.Path,
  112. IsShow: menu.IsShow,
  113. Component: menu.Component,
  114. Icon: menu.Icon,
  115. Redirect: menu.Redirect,
  116. Auths: menu.Auths,
  117. Rank: menu.Rank,
  118. ExtraIcon: menu.ExtraIcon,
  119. EnterTransition: menu.EnterTransition,
  120. ActivePath: menu.ActivePath,
  121. FrameSrc: menu.FrameSrc,
  122. FrameLoading: frameLoading,
  123. Keepalive: keepalive,
  124. HiddenTag: hiddenTag,
  125. ShowLink: showLink,
  126. ShowParent: showParent,
  127. CreatedAtFormat: time.Unix(menu.CreatedAt, 0).Local().Format(LayoutTime),
  128. UpdatedAtFormat: time.Unix(menu.UpdatedAt, 0).Local().Format(LayoutTime),
  129. }
  130. }
  131. return res
  132. }
  133. func (s SystemMenuSlice) ToTree() []*pasturePb.MenuTree {
  134. res := make([]*pasturePb.MenuTree, len(s))
  135. if 0 == len(s) {
  136. return res
  137. }
  138. // 正排序
  139. sort.Slice(s, func(i, j int) bool {
  140. return s[i].ParentId < s[j].ParentId
  141. })
  142. for i, v := range s {
  143. res[i] = &pasturePb.MenuTree{
  144. Id: int32(v.Id),
  145. Path: v.Path,
  146. ParentId: int32(v.ParentId),
  147. Name: v.Name,
  148. Meta: &pasturePb.MenuMeta{
  149. Icon: v.Icon,
  150. Title: v.Title,
  151. Rank: v.Rank,
  152. Roles: []string{},
  153. ShowLink: v.ShowLink == pasturePb.IsShow_Ok,
  154. },
  155. Children: make([]*pasturePb.MenuTree, 0),
  156. }
  157. }
  158. // 构建树
  159. return buildTree(res)
  160. }
  161. func buildTree(menuTreeList []*pasturePb.MenuTree) []*pasturePb.MenuTree {
  162. tree := make([]*pasturePb.MenuTree, 0)
  163. for _, menu := range menuTreeList {
  164. if menu.ParentId == 0 {
  165. tree = append(tree, menu)
  166. } else {
  167. parent := findByID(menuTreeList, menu.ParentId)
  168. if parent != nil {
  169. parent.Children = append(parent.Children, menu)
  170. }
  171. }
  172. }
  173. return tree
  174. }
  175. func findByID(menuTreeList []*pasturePb.MenuTree, id int32) *pasturePb.MenuTree {
  176. for _, v := range menuTreeList {
  177. if id == v.Id {
  178. return v
  179. }
  180. if child := findByID(v.Children, id); child != nil {
  181. return child
  182. }
  183. }
  184. return nil
  185. }
  186. type MenuItem struct {
  187. Path string `json:"path"`
  188. Name string `json:"name"`
  189. Meta MenuMeta `json:"meta"`
  190. Children []*MenuItem `json:"children"`
  191. }
  192. type MenuMeta struct {
  193. Icon string `json:"icon"`
  194. Title string `json:"title"`
  195. Rank int32 `json:"rank"`
  196. ShowLink bool `json:"showLink"`
  197. Hidden bool `json:"hidden"`
  198. }