diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java index 03b6b65..fe807ca 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java @@ -122,21 +122,13 @@ public class SysMenuController extends BaseController } /** - * 删除菜单 + * 删除菜单(存在子菜单时级联删除) */ @PreAuthorize("@ss.hasPermi('system:menu:remove')") @Log(title = "菜单管理", businessType = BusinessType.DELETE) @DeleteMapping("/{menuId}") public AjaxResult remove(@PathVariable("menuId") Long menuId) { - if (menuService.hasChildByMenuId(menuId)) - { - return warn("存在子菜单,不允许删除"); - } - if (menuService.checkMenuExistRole(menuId)) - { - return warn("菜单已分配,不允许删除"); - } return toAjax(menuService.deleteMenuById(menuId)); } } \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java index 99c0c50..54f1a90 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java @@ -114,6 +114,22 @@ public interface SysMenuMapper */ public int deleteMenuById(Long menuId); + /** + * 批量删除菜单信息 + * + * @param menuIds 菜单ID集合 + * @return 结果 + */ + public int deleteMenuByIds(@Param("menuIds") List menuIds); + + /** + * 根据父菜单ID查询子菜单 + * + * @param parentId 父菜单ID + * @return 子菜单列表 + */ + public List selectChildrenByParentId(@Param("parentId") Long parentId); + /** * 校验菜单名称是否唯一 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java index 6602bee..2057a30 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java @@ -1,6 +1,7 @@ package com.ruoyi.system.mapper; import java.util.List; +import org.apache.ibatis.annotations.Param; import com.ruoyi.system.domain.SysRoleMenu; /** @@ -34,6 +35,14 @@ public interface SysRoleMenuMapper */ public int deleteRoleMenu(Long[] ids); + /** + * 通过菜单ID集合删除角色和菜单关联 + * + * @param menuIds 菜单ID集合 + * @return 结果 + */ + public int deleteRoleMenuByMenuIds(@Param("menuIds") List menuIds); + /** * 批量新增角色菜单信息 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index 225c280..3dfbb24 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -317,7 +317,7 @@ public class SysMenuServiceImpl implements ISysMenuService } /** - * 删除菜单管理信息 + * 删除菜单管理信息,存在子菜单时级联删除子菜单及角色关联 * * @param menuId 菜单ID * @return 结果 @@ -325,7 +325,26 @@ public class SysMenuServiceImpl implements ISysMenuService @Override public int deleteMenuById(Long menuId) { - return menuMapper.deleteMenuById(menuId); + List menuIds = new ArrayList<>(); + collectAllMenuIds(menuId, menuIds); + if (!menuIds.isEmpty()) + { + roleMenuMapper.deleteRoleMenuByMenuIds(menuIds); + } + return menuMapper.deleteMenuByIds(menuIds); + } + + /** + * 递归收集当前菜单及其所有子菜单ID + */ + private void collectAllMenuIds(Long menuId, List menuIds) + { + menuIds.add(menuId); + List children = menuMapper.selectChildrenByParentId(menuId); + for (SysMenu child : children) + { + collectAllMenuIds(child.getMenuId(), menuIds); + } } /** diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml index 6762007..bff944d 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -126,6 +126,18 @@ + + + + + delete from sys_menu where menu_id in + + #{menuId} + +