Skip to content

Commit 857ba19

Browse files
committed
fix(menu): 更新成功消息提示,添加角色管理页面权限分配说明;优化菜单添加逻辑,增加父菜单存在性和权限检查
1 parent 6e27e3a commit 857ba19

File tree

4 files changed

+49
-7
lines changed

4 files changed

+49
-7
lines changed

server/api/v1/system/sys_menu.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func (a *AuthorityMenuApi) AddBaseMenu(c *gin.Context) {
143143
err = menuService.AddBaseMenu(menu)
144144
if err != nil {
145145
global.GVA_LOG.Error("添加失败!", zap.Error(err))
146-
response.FailWithMessage("添加失败", c)
146+
response.FailWithMessage("添加失败:"+err.Error(), c)
147147
return
148148
}
149149
response.OkWithMessage("添加成功", c)

server/service/system/sys_menu.go

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,52 @@ func (menuService *MenuService) getBaseChildrenList(menu *system.SysBaseMenu, tr
134134
//@return: error
135135

136136
func (menuService *MenuService) AddBaseMenu(menu system.SysBaseMenu) error {
137-
if !errors.Is(global.GVA_DB.Where("name = ?", menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
138-
return errors.New("存在重复name,请修改name")
139-
}
140-
return global.GVA_DB.Create(&menu).Error
137+
return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
138+
// 检查name是否重复
139+
if !errors.Is(tx.Where("name = ?", menu.Name).First(&system.SysBaseMenu{}).Error, gorm.ErrRecordNotFound) {
140+
return errors.New("存在重复name,请修改name")
141+
}
142+
143+
if menu.ParentId != 0 {
144+
// 检查父菜单是否存在
145+
var parentMenu system.SysBaseMenu
146+
if err := tx.First(&parentMenu, menu.ParentId).Error; err != nil {
147+
if errors.Is(err, gorm.ErrRecordNotFound) {
148+
return errors.New("父菜单不存在")
149+
}
150+
return err
151+
}
152+
153+
// 检查父菜单下现有子菜单数量
154+
var existingChildrenCount int64
155+
err := tx.Model(&system.SysBaseMenu{}).Where("parent_id = ?", menu.ParentId).Count(&existingChildrenCount).Error
156+
if err != nil {
157+
return err
158+
}
159+
160+
// 如果父菜单原本是叶子菜单(没有子菜单),现在要变成枝干菜单,需要清空其权限分配
161+
if existingChildrenCount == 0 {
162+
// 检查父菜单是否被其他角色设置为首页
163+
var defaultRouterCount int64
164+
err := tx.Model(&system.SysAuthority{}).Where("default_router = ?", parentMenu.Name).Count(&defaultRouterCount).Error
165+
if err != nil {
166+
return err
167+
}
168+
if defaultRouterCount > 0 {
169+
return errors.New("父菜单已被其他角色的首页占用,请先释放父菜单的首页权限")
170+
}
171+
172+
// 清空父菜单的所有权限分配
173+
err = tx.Where("sys_base_menu_id = ?", menu.ParentId).Delete(&system.SysAuthorityMenu{}).Error
174+
if err != nil {
175+
return err
176+
}
177+
}
178+
}
179+
180+
// 创建菜单
181+
return tx.Create(&menu).Error
182+
})
141183
}
142184

143185
//@author: [piexlmax](https://github.com/piexlmax)

web/src/view/superAdmin/api/api.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@
531531
if (res.code === 0) {
532532
ElMessage({
533533
type: 'success',
534-
message: '添加成功',
534+
message: '添加成功,请到角色管理页面分配权限',
535535
showClose: true
536536
})
537537
syncApiData.value.newApis = syncApiData.value.newApis.filter(

web/src/view/superAdmin/menu/menu.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@
700700
if (res.code === 0) {
701701
ElMessage({
702702
type: 'success',
703-
message: isEdit.value ? '编辑成功' : '添加成功!'
703+
message: isEdit.value ? '编辑成功' : '添加成功,请到角色管理页面分配权限'
704704
})
705705
getTableData()
706706
}

0 commit comments

Comments
 (0)