sys_base_menu.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package system
  2. import (
  3. "errors"
  4. "github.com/flipped-aurora/gin-vue-admin/server/global"
  5. "github.com/flipped-aurora/gin-vue-admin/server/model/system"
  6. "gorm.io/gorm"
  7. )
  8. type BaseMenuService struct{}
  9. //@author: [piexlmax](https://github.com/piexlmax)
  10. //@function: DeleteBaseMenu
  11. //@description: 删除基础路由
  12. //@param: id float64
  13. //@return: err error
  14. var BaseMenuServiceApp = new(BaseMenuService)
  15. func (baseMenuService *BaseMenuService) DeleteBaseMenu(id int) (err error) {
  16. err = global.GVA_DB.First(&system.SysBaseMenu{}, "parent_id = ?", id).Error
  17. if err == nil {
  18. return errors.New("此菜单存在子菜单不可删除")
  19. }
  20. var menu system.SysBaseMenu
  21. err = global.GVA_DB.First(&menu, id).Error
  22. if err != nil {
  23. return errors.New("记录不存在")
  24. }
  25. err = global.GVA_DB.First(&system.SysAuthority{}, "default_router = ?", menu.Name).Error
  26. if err == nil {
  27. return errors.New("此菜单有角色正在作为首页,不可删除")
  28. }
  29. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  30. err = tx.Delete(&system.SysBaseMenu{}, "id = ?", id).Error
  31. if err != nil {
  32. return err
  33. }
  34. err = tx.Delete(&system.SysBaseMenuParameter{}, "sys_base_menu_id = ?", id).Error
  35. if err != nil {
  36. return err
  37. }
  38. err = tx.Delete(&system.SysBaseMenuBtn{}, "sys_base_menu_id = ?", id).Error
  39. if err != nil {
  40. return err
  41. }
  42. err = tx.Delete(&system.SysAuthorityBtn{}, "sys_menu_id = ?", id).Error
  43. if err != nil {
  44. return err
  45. }
  46. err = tx.Delete(&system.SysAuthorityMenu{}, "sys_base_menu_id = ?", id).Error
  47. if err != nil {
  48. return err
  49. }
  50. return nil
  51. })
  52. }
  53. //@author: [piexlmax](https://github.com/piexlmax)
  54. //@function: UpdateBaseMenu
  55. //@description: 更新路由
  56. //@param: menu model.SysBaseMenu
  57. //@return: err error
  58. func (baseMenuService *BaseMenuService) UpdateBaseMenu(menu system.SysBaseMenu) (err error) {
  59. var oldMenu system.SysBaseMenu
  60. upDateMap := make(map[string]interface{})
  61. upDateMap["keep_alive"] = menu.KeepAlive
  62. upDateMap["transition_type"] = menu.TransitionType
  63. upDateMap["close_tab"] = menu.CloseTab
  64. upDateMap["default_menu"] = menu.DefaultMenu
  65. upDateMap["parent_id"] = menu.ParentId
  66. upDateMap["path"] = menu.Path
  67. upDateMap["name"] = menu.Name
  68. upDateMap["hidden"] = menu.Hidden
  69. upDateMap["component"] = menu.Component
  70. upDateMap["title"] = menu.Title
  71. upDateMap["active_name"] = menu.ActiveName
  72. upDateMap["icon"] = menu.Icon
  73. upDateMap["sort"] = menu.Sort
  74. err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  75. tx.Where("id = ?", menu.ID).Find(&oldMenu)
  76. if oldMenu.Name != menu.Name {
  77. if !errors.Is(tx.Where("id <> ? AND name = ?", menu.ID, menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
  78. global.GVA_LOG.Debug("存在相同name修改失败")
  79. return errors.New("存在相同name修改失败")
  80. }
  81. }
  82. txErr := tx.Unscoped().Delete(&system.SysBaseMenuParameter{}, "sys_base_menu_id = ?", menu.ID).Error
  83. if txErr != nil {
  84. global.GVA_LOG.Debug(txErr.Error())
  85. return txErr
  86. }
  87. txErr = tx.Unscoped().Delete(&system.SysBaseMenuBtn{}, "sys_base_menu_id = ?", menu.ID).Error
  88. if txErr != nil {
  89. global.GVA_LOG.Debug(txErr.Error())
  90. return txErr
  91. }
  92. if len(menu.Parameters) > 0 {
  93. for k := range menu.Parameters {
  94. menu.Parameters[k].SysBaseMenuID = menu.ID
  95. }
  96. txErr = tx.Create(&menu.Parameters).Error
  97. if txErr != nil {
  98. global.GVA_LOG.Debug(txErr.Error())
  99. return txErr
  100. }
  101. }
  102. if len(menu.MenuBtn) > 0 {
  103. for k := range menu.MenuBtn {
  104. menu.MenuBtn[k].SysBaseMenuID = menu.ID
  105. }
  106. txErr = tx.Create(&menu.MenuBtn).Error
  107. if txErr != nil {
  108. global.GVA_LOG.Debug(txErr.Error())
  109. return txErr
  110. }
  111. }
  112. txErr = tx.Model(&oldMenu).Updates(upDateMap).Error
  113. if txErr != nil {
  114. global.GVA_LOG.Debug(txErr.Error())
  115. return txErr
  116. }
  117. return nil
  118. })
  119. return err
  120. }
  121. //@author: [piexlmax](https://github.com/piexlmax)
  122. //@function: GetBaseMenuById
  123. //@description: 返回当前选中menu
  124. //@param: id float64
  125. //@return: menu system.SysBaseMenu, err error
  126. func (baseMenuService *BaseMenuService) GetBaseMenuById(id int) (menu system.SysBaseMenu, err error) {
  127. err = global.GVA_DB.Preload("MenuBtn").Preload("Parameters").Where("id = ?", id).First(&menu).Error
  128. return
  129. }