sys_base_menu.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package system
  2. import (
  3. "errors"
  4. "gorm.io/gorm"
  5. "log-server/global"
  6. "log-server/model/system"
  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. func (baseMenuService *BaseMenuService) DeleteBaseMenu(id int) (err error) {
  15. err = global.GVA_DB.Preload("MenuBtn").Preload("Parameters").Where("parent_id = ?", id).First(&system.SysBaseMenu{}).Error
  16. if err != nil {
  17. var menu system.SysBaseMenu
  18. db := global.GVA_DB.Preload("SysAuthoritys").Where("id = ?", id).First(&menu).Delete(&menu)
  19. err = global.GVA_DB.Delete(&system.SysBaseMenuParameter{}, "sys_base_menu_id = ?", id).Error
  20. err = global.GVA_DB.Delete(&system.SysBaseMenuBtn{}, "sys_base_menu_id = ?", id).Error
  21. err = global.GVA_DB.Delete(&system.SysAuthorityBtn{}, "sys_menu_id = ?", id).Error
  22. if err != nil {
  23. return err
  24. }
  25. if len(menu.SysAuthoritys) > 0 {
  26. err = global.GVA_DB.Model(&menu).Association("SysAuthoritys").Delete(&menu.SysAuthoritys)
  27. } else {
  28. err = db.Error
  29. if err != nil {
  30. return
  31. }
  32. }
  33. } else {
  34. return errors.New("此菜单存在子菜单不可删除")
  35. }
  36. return err
  37. }
  38. //@author: [piexlmax](https://github.com/piexlmax)
  39. //@function: UpdateBaseMenu
  40. //@description: 更新路由
  41. //@param: menu model.SysBaseMenu
  42. //@return: err error
  43. func (baseMenuService *BaseMenuService) UpdateBaseMenu(menu system.SysBaseMenu) (err error) {
  44. var oldMenu system.SysBaseMenu
  45. upDateMap := make(map[string]interface{})
  46. upDateMap["keep_alive"] = menu.KeepAlive
  47. upDateMap["close_tab"] = menu.CloseTab
  48. upDateMap["default_menu"] = menu.DefaultMenu
  49. upDateMap["parent_id"] = menu.ParentId
  50. upDateMap["path"] = menu.Path
  51. upDateMap["name"] = menu.Name
  52. upDateMap["hidden"] = menu.Hidden
  53. upDateMap["component"] = menu.Component
  54. upDateMap["title"] = menu.Title
  55. upDateMap["icon"] = menu.Icon
  56. upDateMap["sort"] = menu.Sort
  57. err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  58. db := tx.Where("id = ?", menu.ID).Find(&oldMenu)
  59. if oldMenu.Name != menu.Name {
  60. if !errors.Is(tx.Where("id <> ? AND name = ?", menu.ID, menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
  61. global.GVA_LOG.Debug("存在相同name修改失败")
  62. return errors.New("存在相同name修改失败")
  63. }
  64. }
  65. txErr := tx.Unscoped().Delete(&system.SysBaseMenuParameter{}, "sys_base_menu_id = ?", menu.ID).Error
  66. if txErr != nil {
  67. global.GVA_LOG.Debug(txErr.Error())
  68. return txErr
  69. }
  70. txErr = tx.Unscoped().Delete(&system.SysBaseMenuBtn{}, "sys_base_menu_id = ?", menu.ID).Error
  71. if txErr != nil {
  72. global.GVA_LOG.Debug(txErr.Error())
  73. return txErr
  74. }
  75. if len(menu.Parameters) > 0 {
  76. for k := range menu.Parameters {
  77. menu.Parameters[k].SysBaseMenuID = menu.ID
  78. }
  79. txErr = tx.Create(&menu.Parameters).Error
  80. if txErr != nil {
  81. global.GVA_LOG.Debug(txErr.Error())
  82. return txErr
  83. }
  84. }
  85. if len(menu.MenuBtn) > 0 {
  86. for k := range menu.MenuBtn {
  87. menu.MenuBtn[k].SysBaseMenuID = menu.ID
  88. }
  89. txErr = tx.Create(&menu.MenuBtn).Error
  90. if txErr != nil {
  91. global.GVA_LOG.Debug(txErr.Error())
  92. return txErr
  93. }
  94. }
  95. txErr = db.Updates(upDateMap).Error
  96. if txErr != nil {
  97. global.GVA_LOG.Debug(txErr.Error())
  98. return txErr
  99. }
  100. return nil
  101. })
  102. return err
  103. }
  104. //@author: [piexlmax](https://github.com/piexlmax)
  105. //@function: GetBaseMenuById
  106. //@description: 返回当前选中menu
  107. //@param: id float64
  108. //@return: menu system.SysBaseMenu, err error
  109. func (baseMenuService *BaseMenuService) GetBaseMenuById(id int) (menu system.SysBaseMenu, err error) {
  110. err = global.GVA_DB.Preload("MenuBtn").Preload("Parameters").Where("id = ?", id).First(&menu).Error
  111. return
  112. }