feat(新增): 动态菜单和bug解决

This commit is contained in:
bunny 2024-03-25 10:24:46 +08:00
parent 4b2141bb5a
commit 26eb9bd5fa
6 changed files with 73 additions and 6 deletions

View File

@ -50,4 +50,12 @@ public interface SysMenuMapper {
* @return 菜单列表 * @return 菜单列表
*/ */
List<SysMenu> selectListByUserId(Long userId); List<SysMenu> selectListByUserId(Long userId);
/**
* 根据父级ID查询菜单
*
* @param id 父级ID
* @return 系统菜单实体类
*/
SysMenu selectParentMenu(Long id);
} }

View File

@ -12,4 +12,11 @@ public interface SysRoleMenuMapper {
void doAssign(AssginMenuDto assginMenuDto); void doAssign(AssginMenuDto assginMenuDto);
void deleteByRoleId(Long roleId); void deleteByRoleId(Long roleId);
/**
* 将该id的菜单设置为半开
*
* @param parentId 父级ID
*/
void updateSysRoleMenuIsHalf(Long parentId);
} }

View File

@ -5,6 +5,7 @@ import com.atguigu.context.BaseContext;
import com.atguigu.exception.BunnyException; import com.atguigu.exception.BunnyException;
import com.atguigu.spzx.manger.mapper.SysMenuMapper; import com.atguigu.spzx.manger.mapper.SysMenuMapper;
import com.atguigu.spzx.manger.service.SysMenuService; import com.atguigu.spzx.manger.service.SysMenuService;
import com.atguigu.spzx.manger.service.module.SysMenuServiceImplModule;
import com.atguigu.spzx.model.entity.system.SysMenu; import com.atguigu.spzx.model.entity.system.SysMenu;
import com.atguigu.spzx.model.vo.system.SysMenuVo; import com.atguigu.spzx.model.vo.system.SysMenuVo;
import com.atguigu.utils.MenuHelper; import com.atguigu.utils.MenuHelper;
@ -20,6 +21,8 @@ public class SysMenuServiceImpl implements SysMenuService {
private SysMenuMapper sysMenuMapper; private SysMenuMapper sysMenuMapper;
@Autowired @Autowired
private StringEmptyUtil emptyUtil; private StringEmptyUtil emptyUtil;
@Autowired
private SysMenuServiceImplModule sysMenuServiceImplModule;
/** /**
* 查询菜单 * 查询菜单
@ -39,6 +42,8 @@ public class SysMenuServiceImpl implements SysMenuService {
*/ */
@Override @Override
public void save(SysMenu sysMenu) { public void save(SysMenu sysMenu) {
// 如果添加子菜单把父菜单isHalf改为半开状态1
sysMenuServiceImplModule.updateSysRoleMenu(sysMenu);
sysMenuMapper.insert(sysMenu); sysMenuMapper.insert(sysMenu);
} }

View File

@ -0,0 +1,32 @@
package com.atguigu.spzx.manger.service.module;
import com.atguigu.spzx.manger.mapper.SysMenuMapper;
import com.atguigu.spzx.manger.mapper.SysRoleMenuMapper;
import com.atguigu.spzx.manger.service.impl.SysMenuServiceImpl;
import com.atguigu.spzx.model.entity.system.SysMenu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SysMenuServiceImplModule extends SysMenuServiceImpl {
@Autowired
private SysMenuMapper sysMenuMapper;
@Autowired
private SysRoleMenuMapper sysRoleMenuMapper;
/**
* 添加子菜单把父菜单半开状态改为1
*
* @param sysMenu 系统菜单实体类
*/
public void updateSysRoleMenu(SysMenu sysMenu) {
// 查询是否存在父节点
SysMenu parentMenu = sysMenuMapper.selectParentMenu(sysMenu.getParentId());
if (parentMenu != null) {
// 将该id的菜单设置为半开
sysRoleMenuMapper.updateSysRoleMenuIsHalf(parentMenu.getParentId());
// 递归调用
updateSysRoleMenu(parentMenu);
}
}
}

View File

@ -62,6 +62,18 @@
<!-- 根据用户ID查找 --> <!-- 根据用户ID查找 -->
<select id="selectListByUserId" resultType="com.atguigu.spzx.model.entity.system.SysMenu"> <select id="selectListByUserId" resultType="com.atguigu.spzx.model.entity.system.SysMenu">
SELECT distinct sm.*
FROM sys_menu sm
INNER JOIN sys_role_menu srm ON sm.id = srm.menu_id
INNER JOIN sys_user_role sur ON srm.role_id = sur.role_id
AND sur.user_id = #{userId}
WHERE sm.is_deleted = 0
</select>
<!-- 根据父级ID查询菜单 -->
<select id="selectParentMenu" resultType="com.atguigu.spzx.model.entity.system.SysMenu">
select
<include refid="columns"/>
from sys_menu where id = #{id}
</select> </select>
</mapper> </mapper>

View File

@ -2,6 +2,13 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.atguigu.spzx.manger.mapper.SysRoleMenuMapper"> <mapper namespace="com.atguigu.spzx.manger.mapper.SysRoleMenuMapper">
<!-- 将该id的菜单设置为半开 -->
<update id="updateSysRoleMenuIsHalf">
update sys_role_menu srm
set srm.is_half = 1
where menu_id = #{parentId}
</update>
<delete id="deleteByRoleId"> <delete id="deleteByRoleId">
delete delete
from sys_role_menu from sys_role_menu
@ -15,13 +22,9 @@
and is_deleted = 0 and is_deleted = 0
and is_half = 0 and is_half = 0
</select> </select>
<insert id="doAssign"> <insert id="doAssign">
insert into sys_role_menu ( insert into sys_role_menu ( role_id, menu_id, create_time , update_time , is_deleted , is_half ) values
role_id,
menu_id,
create_time , update_time , is_deleted , is_half
) values
<foreach collection="menuIdList" item="menuInfo" separator=","> <foreach collection="menuIdList" item="menuInfo" separator=",">
(#{roleId} , #{menuInfo.id} , now() , now() , 0 , #{menuInfo.isHalf}) (#{roleId} , #{menuInfo.id} , now() , now() , 0 , #{menuInfo.isHalf})
</foreach> </foreach>