sys_base_menu.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package dao
  2. import (
  3. "errors"
  4. "gorm.io/gorm"
  5. "server/global"
  6. )
  7. type SysBaseMenu struct {
  8. global.GVA_MODEL
  9. MenuLevel uint `json:"-"`
  10. ParentId uint `json:"parentId" gorm:"comment:父菜单ID"` // 父菜单ID
  11. Path string `json:"path" gorm:"comment:路由path"` // 路由path
  12. Name string `json:"name" gorm:"comment:路由name"` // 路由name
  13. Hidden bool `json:"hidden" gorm:"comment:是否在列表隐藏"` // 是否在列表隐藏
  14. Component string `json:"component" gorm:"comment:对应前端文件路径"` // 对应前端文件路径
  15. Sort int `json:"sort" gorm:"comment:排序标记"` // 排序标记
  16. Meta `json:"meta" gorm:"embedded;comment:附加属性"` // 附加属性
  17. SysAuthoritys []SysAuthority `json:"authoritys" gorm:"many2many:sys_authority_menus;"`
  18. Children []SysBaseMenu `json:"children" gorm:"-"`
  19. Parameters []SysBaseMenuParameter `json:"parameters"`
  20. MenuBtn []SysBaseMenuBtn `json:"menuBtn"`
  21. }
  22. type Meta struct {
  23. ActiveName string `json:"activeName" gorm:"comment:高亮菜单"`
  24. KeepAlive bool `json:"keepAlive" gorm:"comment:是否缓存"` // 是否缓存
  25. DefaultMenu bool `json:"defaultMenu" gorm:"comment:是否是基础路由(开发中)"` // 是否是基础路由(开发中)
  26. Title string `json:"title" gorm:"comment:菜单名"` // 菜单名
  27. Icon string `json:"icon" gorm:"comment:菜单图标"` // 菜单图标
  28. CloseTab bool `json:"closeTab" gorm:"comment:自动关闭tab"` // 自动关闭tab
  29. }
  30. type SysBaseMenuParameter struct {
  31. global.GVA_MODEL
  32. SysBaseMenuID uint
  33. Type string `json:"type" gorm:"comment:地址栏携带参数为params还是query"` // 地址栏携带参数为params还是query
  34. Key string `json:"key" gorm:"comment:地址栏携带参数的key"` // 地址栏携带参数的key
  35. Value string `json:"value" gorm:"comment:地址栏携带参数的值"` // 地址栏携带参数的值
  36. }
  37. func (SysBaseMenu) TableName() string {
  38. return "sys_base_menus"
  39. }
  40. // TODO:菜单查询
  41. // QueryBaseMenuAndParametersByMenuId 查询菜单和参数 按菜单id
  42. func QueryBaseMenuAndParametersByMenuId(menuIds []string) (baseMenu []SysBaseMenu, err error) {
  43. err = global.GVA_DB.Where("id in (?)", menuIds).Order("sort").Preload("Parameters").Find(&baseMenu).Error
  44. return
  45. }
  46. // QueryBaseMenuByName 查询菜单 按名字
  47. func QueryBaseMenuByName(name string) (baseMenu SysBaseMenu, err error) {
  48. err = global.GVA_DB.Where("name = ?", name).First(&baseMenu).Error
  49. return
  50. }
  51. // QueryBaseMenuAndMenuBtnAndParameters 查询菜单和菜单按钮和参数
  52. func QueryBaseMenuAndMenuBtnAndParameters() (allMenus []SysBaseMenu, err error) {
  53. err = global.GVA_DB.Order("sort").Preload("MenuBtn").Preload("Parameters").Find(&allMenus).Error
  54. return
  55. }
  56. // QueryBaseMenuByIdAndDefaultRouter 查询菜单 按菜单id和默认路由
  57. func QueryBaseMenuByIdAndDefaultRouter(defaultRouter string, menuIds []string) (allMenus []SysBaseMenu, err error) {
  58. err = global.GVA_DB.First(&allMenus, "name = ? and id in (?)", defaultRouter, menuIds).Error
  59. return
  60. }
  61. func QueryBaseMenuAndMenuBtnAndParameterById(id int) (menu SysBaseMenu, err error) {
  62. err = global.GVA_DB.Preload("MenuBtn").Preload("Parameters").Where("id = ?", id).First(&menu).Error
  63. return
  64. }
  65. // TODO:菜单新增
  66. // CreateBaseMenu 创建菜单
  67. func (bm SysBaseMenu) CreateBaseMenu() error {
  68. return global.GVA_DB.Create(&bm).Error
  69. }
  70. // TODO:菜单修改
  71. func (bm SysBaseMenu) UpdateBaseMenu() (err error) {
  72. var oldMenu SysBaseMenu
  73. err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  74. tx.Where("id = ?", bm.ID).Find(&oldMenu)
  75. if oldMenu.Name != bm.Name {
  76. if !errors.Is(tx.Where("id <> ? AND name = ?", bm.ID, bm.Name).First(&SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
  77. global.GVA_LOG.Debug("存在相同name修改失败")
  78. return errors.New("存在相同name修改失败")
  79. }
  80. }
  81. txErr := tx.Unscoped().Delete(&SysBaseMenuParameter{}, "sys_base_menu_id = ?", bm.ID).Error
  82. if txErr != nil {
  83. global.GVA_LOG.Debug(txErr.Error())
  84. return txErr
  85. }
  86. txErr = tx.Unscoped().Delete(&SysBaseMenuBtn{}, "sys_base_menu_id = ?", bm.ID).Error
  87. if txErr != nil {
  88. global.GVA_LOG.Debug(txErr.Error())
  89. return txErr
  90. }
  91. if len(bm.Parameters) > 0 {
  92. for k := range bm.Parameters {
  93. bm.Parameters[k].SysBaseMenuID = bm.ID
  94. }
  95. txErr = tx.Create(&bm.Parameters).Error
  96. if txErr != nil {
  97. global.GVA_LOG.Debug(txErr.Error())
  98. return txErr
  99. }
  100. }
  101. if len(bm.MenuBtn) > 0 {
  102. for k := range bm.MenuBtn {
  103. bm.MenuBtn[k].SysBaseMenuID = bm.ID
  104. }
  105. txErr = tx.Create(&bm.MenuBtn).Error
  106. if txErr != nil {
  107. global.GVA_LOG.Debug(txErr.Error())
  108. return txErr
  109. }
  110. }
  111. txErr = tx.Model(&oldMenu).Select("*").Updates(bm).Error
  112. if txErr != nil {
  113. global.GVA_LOG.Debug(txErr.Error())
  114. return txErr
  115. }
  116. return nil
  117. })
  118. return err
  119. }
  120. // TODO:菜单删除