system_menu.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package model
  2. import (
  3. operationPb "kpt-tmr-group/proto/go/backend/operation"
  4. "time"
  5. )
  6. const (
  7. Level1 = iota + 1
  8. Level2
  9. Level3
  10. )
  11. type SystemMenu struct {
  12. Id int64 `json:"id,omitempty"`
  13. Name string `json:"name,omitempty"`
  14. MenuType int32 `json:"menu_type,omitempty"`
  15. Level int32 `json:"level,omitempty"`
  16. Title string `json:"title,omitempty"`
  17. Path string `json:"path,omitempty"`
  18. IsShow operationPb.IsShow_Kind `json:"is_show,omitempty"`
  19. IsDelete operationPb.IsShow_Kind `json:"is_delete,omitempty"`
  20. Component string `json:"component,omitempty"`
  21. Icon string `json:"icon,omitempty"`
  22. Sort int32 `json:"sort,omitempty"`
  23. ParentId int64 `json:"parent_id"`
  24. Redirect string `json:"redirect,omitempty"`
  25. CreatedAt int64 `json:"created_at,omitempty"`
  26. UpdatedAt int64 `json:"updated_at,omitempty"`
  27. }
  28. func (s *SystemMenu) TableName() string {
  29. return "system_menu"
  30. }
  31. func NewSystemMenu(req *operationPb.AddMenuRequest) *SystemMenu {
  32. return &SystemMenu{
  33. Name: req.Name,
  34. MenuType: req.MenuType,
  35. Title: req.Title,
  36. Path: req.Path,
  37. Component: req.Component,
  38. Icon: req.Icon,
  39. Sort: req.Sort,
  40. Redirect: req.Redirect,
  41. ParentId: req.ParentId,
  42. IsShow: operationPb.IsShow_OK,
  43. IsDelete: operationPb.IsShow_OK,
  44. }
  45. }
  46. type SystemMenuSlice []*SystemMenu
  47. func (s SystemMenuSlice) ToPB() []*operationPb.AddMenuRequest {
  48. level := make(map[int32][]*operationPb.AddMenuRequest, 0)
  49. for _, menu := range s {
  50. if _, ok := level[menu.Level]; !ok {
  51. level[menu.Level] = make([]*operationPb.AddMenuRequest, 0)
  52. }
  53. level[menu.Level] = append(level[menu.Level], &operationPb.AddMenuRequest{
  54. Id: menu.Id,
  55. Name: menu.Name,
  56. ParentId: menu.ParentId,
  57. MenuType: menu.MenuType,
  58. Title: menu.Title,
  59. Path: menu.Path,
  60. IsShow: menu.IsShow,
  61. Component: menu.Component,
  62. Icon: menu.Icon,
  63. Sort: menu.Sort,
  64. Redirect: menu.Redirect,
  65. CreatedAt: menu.CreatedAt,
  66. CreatedAtFormat: time.Unix(menu.CreatedAt, 0).Format(LayoutTime),
  67. Level: menu.Level,
  68. Affix: true,
  69. KeepAlive: true,
  70. Children: make([]*operationPb.AddMenuRequest, 0),
  71. })
  72. }
  73. for _, leve3Data := range level[Level3] {
  74. for _, leve2Data := range level[Level2] {
  75. if leve3Data.ParentId == leve2Data.Id {
  76. if leve2Data.Children == nil {
  77. leve2Data.Children = make([]*operationPb.AddMenuRequest, 0)
  78. }
  79. leve2Data.Children = append(leve2Data.Children, leve3Data)
  80. }
  81. }
  82. }
  83. for _, leve2Data := range level[Level2] {
  84. for _, leve1Data := range level[Level1] {
  85. if leve2Data.ParentId == leve1Data.Id {
  86. if leve1Data.Children == nil {
  87. leve1Data.Children = make([]*operationPb.AddMenuRequest, 0)
  88. }
  89. leve1Data.Children = append(leve1Data.Children, leve2Data)
  90. }
  91. }
  92. }
  93. return level[Level1]
  94. }
  95. func (s *SystemMenu) ToPb() *operationPb.AddMenuRequest {
  96. return &operationPb.AddMenuRequest{
  97. Id: s.Id,
  98. Name: s.Name,
  99. MenuType: s.MenuType,
  100. Level: s.Level,
  101. Title: s.Title,
  102. Path: s.Path,
  103. Component: s.Component,
  104. Icon: s.Icon,
  105. Sort: s.Sort,
  106. Redirect: s.Redirect,
  107. ParentId: s.ParentId,
  108. IsShow: s.IsShow,
  109. CreatedAt: s.CreatedAt,
  110. }
  111. }
  112. type SystemMenuResponse struct {
  113. Page int32 `json:"page"`
  114. Total int32 `json:"total"`
  115. List []*operationPb.AddMenuRequest `json:"list"`
  116. }
  117. func (s *SystemMenuResponse) ToPB() *operationPb.SearchMenuResponse {
  118. return &operationPb.SearchMenuResponse{
  119. Page: s.Page,
  120. Total: s.Total,
  121. List: s.List,
  122. }
  123. }