提交roll日创建

This commit is contained in:
2026-07-14 18:46:20 +08:00
parent 6971daf9a7
commit 01444937bd
6 changed files with 66 additions and 11 deletions
@@ -122,21 +122,13 @@ public class SysMenuController extends BaseController
} }
/** /**
* 删除菜单 * 删除菜单(存在子菜单时级联删除)
*/ */
@PreAuthorize("@ss.hasPermi('system:menu:remove')") @PreAuthorize("@ss.hasPermi('system:menu:remove')")
@Log(title = "菜单管理", businessType = BusinessType.DELETE) @Log(title = "菜单管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{menuId}") @DeleteMapping("/{menuId}")
public AjaxResult remove(@PathVariable("menuId") Long 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)); return toAjax(menuService.deleteMenuById(menuId));
} }
} }
@@ -114,6 +114,22 @@ public interface SysMenuMapper
*/ */
public int deleteMenuById(Long menuId); public int deleteMenuById(Long menuId);
/**
* 批量删除菜单信息
*
* @param menuIds 菜单ID集合
* @return 结果
*/
public int deleteMenuByIds(@Param("menuIds") List<Long> menuIds);
/**
* 根据父菜单ID查询子菜单
*
* @param parentId 父菜单ID
* @return 子菜单列表
*/
public List<SysMenu> selectChildrenByParentId(@Param("parentId") Long parentId);
/** /**
* 校验菜单名称是否唯一 * 校验菜单名称是否唯一
* *
@@ -1,6 +1,7 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.system.domain.SysRoleMenu; import com.ruoyi.system.domain.SysRoleMenu;
/** /**
@@ -34,6 +35,14 @@ public interface SysRoleMenuMapper
*/ */
public int deleteRoleMenu(Long[] ids); public int deleteRoleMenu(Long[] ids);
/**
* 通过菜单ID集合删除角色和菜单关联
*
* @param menuIds 菜单ID集合
* @return 结果
*/
public int deleteRoleMenuByMenuIds(@Param("menuIds") List<Long> menuIds);
/** /**
* 批量新增角色菜单信息 * 批量新增角色菜单信息
* *
@@ -317,7 +317,7 @@ public class SysMenuServiceImpl implements ISysMenuService
} }
/** /**
* 删除菜单管理信息 * 删除菜单管理信息,存在子菜单时级联删除子菜单及角色关联
* *
* @param menuId 菜单ID * @param menuId 菜单ID
* @return 结果 * @return 结果
@@ -325,7 +325,26 @@ public class SysMenuServiceImpl implements ISysMenuService
@Override @Override
public int deleteMenuById(Long menuId) public int deleteMenuById(Long menuId)
{ {
return menuMapper.deleteMenuById(menuId); List<Long> menuIds = new ArrayList<>();
collectAllMenuIds(menuId, menuIds);
if (!menuIds.isEmpty())
{
roleMenuMapper.deleteRoleMenuByMenuIds(menuIds);
}
return menuMapper.deleteMenuByIds(menuIds);
}
/**
* 递归收集当前菜单及其所有子菜单ID
*/
private void collectAllMenuIds(Long menuId, List<Long> menuIds)
{
menuIds.add(menuId);
List<SysMenu> children = menuMapper.selectChildrenByParentId(menuId);
for (SysMenu child : children)
{
collectAllMenuIds(child.getMenuId(), menuIds);
}
} }
/** /**
@@ -127,6 +127,18 @@
select count(1) from sys_menu where parent_id = #{menuId} select count(1) from sys_menu where parent_id = #{menuId}
</select> </select>
<select id="selectChildrenByParentId" resultMap="SysMenuResult">
<include refid="selectMenuVo"/>
where parent_id = #{parentId}
</select>
<delete id="deleteMenuByIds">
delete from sys_menu where menu_id in
<foreach collection="menuIds" item="menuId" open="(" separator="," close=")">
#{menuId}
</foreach>
</delete>
<select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult"> <select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
<include refid="selectMenuVo"/> <include refid="selectMenuVo"/>
where menu_name=#{menuName} and parent_id = #{parentId} limit 1 where menu_name=#{menuName} and parent_id = #{parentId} limit 1
@@ -24,6 +24,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach> </foreach>
</delete> </delete>
<delete id="deleteRoleMenuByMenuIds">
delete from sys_role_menu where menu_id in
<foreach collection="menuIds" item="menuId" open="(" separator="," close=")">
#{menuId}
</foreach>
</delete>
<insert id="batchRoleMenu"> <insert id="batchRoleMenu">
insert into sys_role_menu(role_id, menu_id) values insert into sys_role_menu(role_id, menu_id) values
<foreach item="item" index="index" collection="list" separator=","> <foreach item="item" index="index" collection="list" separator=",">