diff --git a/server/api/v1/system/sys_menu.go b/server/api/v1/system/sys_menu.go
index 864b61f3..30859621 100644
--- a/server/api/v1/system/sys_menu.go
+++ b/server/api/v1/system/sys_menu.go
@@ -143,7 +143,7 @@ func (a *AuthorityMenuApi) AddBaseMenu(c *gin.Context) {
err = menuService.AddBaseMenu(menu)
if err != nil {
global.GVA_LOG.Error("添加失败!", zap.Error(err))
- response.FailWithMessage("添加失败", c)
+ response.FailWithMessage("添加失败:"+err.Error(), c)
return
}
response.OkWithMessage("添加成功", c)
diff --git a/server/resource/package/web/view/table.vue.tpl b/server/resource/package/web/view/table.vue.tpl
index 0aac57c6..895ad2d4 100644
--- a/server/resource/package/web/view/table.vue.tpl
+++ b/server/resource/package/web/view/table.vue.tpl
@@ -161,7 +161,7 @@ getDataSourceFunc()
>
{{ if .GvaModel }}
-
+
{{ "{{ formatDate(scope.row.CreatedAt) }}" }}
{{ end }}
diff --git a/server/resource/plugin/web/view/view.vue.tpl b/server/resource/plugin/web/view/view.vue.tpl
index 143a4528..8363bdbd 100644
--- a/server/resource/plugin/web/view/view.vue.tpl
+++ b/server/resource/plugin/web/view/view.vue.tpl
@@ -158,7 +158,7 @@ getDataSourceFunc()
>
{{ if .GvaModel }}
-
+
{{ "{{ formatDate(scope.row.CreatedAt) }}" }}
{{ end }}
diff --git a/server/service/system/sys_menu.go b/server/service/system/sys_menu.go
index 4d5a0ea7..0a411129 100644
--- a/server/service/system/sys_menu.go
+++ b/server/service/system/sys_menu.go
@@ -134,10 +134,52 @@ func (menuService *MenuService) getBaseChildrenList(menu *system.SysBaseMenu, tr
//@return: error
func (menuService *MenuService) AddBaseMenu(menu system.SysBaseMenu) error {
- if !errors.Is(global.GVA_DB.Where("name = ?", menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
- return errors.New("存在重复name,请修改name")
- }
- return global.GVA_DB.Create(&menu).Error
+ return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
+ // 检查name是否重复
+ if !errors.Is(tx.Where("name = ?", menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
+ return errors.New("存在重复name,请修改name")
+ }
+
+ if menu.ParentId != 0 {
+ // 检查父菜单是否存在
+ var parentMenu system.SysBaseMenu
+ if err := tx.First(&parentMenu, menu.ParentId).Error; err != nil {
+ if errors.Is(err, gorm.ErrRecordNotFound) {
+ return errors.New("父菜单不存在")
+ }
+ return err
+ }
+
+ // 检查父菜单下现有子菜单数量
+ var existingChildrenCount int64
+ err := tx.Model(&system.SysBaseMenu{}).Where("parent_id = ?", menu.ParentId).Count(&existingChildrenCount).Error
+ if err != nil {
+ return err
+ }
+
+ // 如果父菜单原本是叶子菜单(没有子菜单),现在要变成枝干菜单,需要清空其权限分配
+ if existingChildrenCount == 0 {
+ // 检查父菜单是否被其他角色设置为首页
+ var defaultRouterCount int64
+ err := tx.Model(&system.SysAuthority{}).Where("default_router = ?", parentMenu.Name).Count(&defaultRouterCount).Error
+ if err != nil {
+ return err
+ }
+ if defaultRouterCount > 0 {
+ return errors.New("父菜单已被其他角色的首页占用,请先释放父菜单的首页权限")
+ }
+
+ // 清空父菜单的所有权限分配
+ err = tx.Where("sys_base_menu_id = ?", menu.ParentId).Delete(&system.SysAuthorityMenu{}).Error
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ // 创建菜单
+ return tx.Create(&menu).Error
+ })
}
//@author: [piexlmax](https://github.com/piexlmax)
diff --git a/web/src/view/superAdmin/api/api.vue b/web/src/view/superAdmin/api/api.vue
index 21e971c3..db0d21ab 100644
--- a/web/src/view/superAdmin/api/api.vue
+++ b/web/src/view/superAdmin/api/api.vue
@@ -531,7 +531,7 @@
if (res.code === 0) {
ElMessage({
type: 'success',
- message: '添加成功',
+ message: '添加成功,请到角色管理页面分配权限',
showClose: true
})
syncApiData.value.newApis = syncApiData.value.newApis.filter(
diff --git a/web/src/view/superAdmin/authority/components/menus.vue b/web/src/view/superAdmin/authority/components/menus.vue
index 65b35d77..2dd571dc 100644
--- a/web/src/view/superAdmin/authority/components/menus.vue
+++ b/web/src/view/superAdmin/authority/components/menus.vue
@@ -132,7 +132,7 @@
defaultRouter: data.name
})
if (res.code === 0) {
- ElMessage({ type: 'success', message: '设置成功' })
+ relation()
emit('changeRow', 'defaultRouter', res.data.authority.defaultRouter)
}
}
diff --git a/web/src/view/superAdmin/menu/menu.vue b/web/src/view/superAdmin/menu/menu.vue
index f0f1b3b9..c32c1c93 100644
--- a/web/src/view/superAdmin/menu/menu.vue
+++ b/web/src/view/superAdmin/menu/menu.vue
@@ -700,7 +700,7 @@
if (res.code === 0) {
ElMessage({
type: 'success',
- message: isEdit.value ? '编辑成功' : '添加成功!'
+ message: isEdit.value ? '编辑成功' : '添加成功,请到角色管理页面分配权限'
})
getTableData()
}