后台菜单节点
parent
126c8e1fe6
commit
eefdbda6c9
|
@ -12,6 +12,9 @@ import java.util.List;
|
|||
* @author muyu
|
||||
*/
|
||||
public interface SysMenuMapper extends BaseMapper<SysMenu> {
|
||||
public List<SysMenu> selectSysMenuList(@Param("longs") List<Long> longs);
|
||||
|
||||
public List<SysMenu> selectSysChdMenuList(@Param("longs") List<Long> longs);
|
||||
/**
|
||||
* 查询系统菜单列表
|
||||
*
|
||||
|
|
|
@ -39,6 +39,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
@Autowired
|
||||
private SysRoleMenuMapper roleMenuMapper;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 根据用户查询系统菜单列表
|
||||
*
|
||||
|
@ -68,8 +70,29 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
menu.getParams().put("userId", userId);
|
||||
menuList = menuMapper.selectMenuListByUserId(menu);
|
||||
}
|
||||
if (menuList.size ()==1){
|
||||
// 如果是查找 menuList 的第一条数据
|
||||
SysMenu sysMenu = menuList.get ( 0 );
|
||||
|
||||
this.getMeentList(menuList,sysMenu);
|
||||
// 获取当前菜单的子菜单列表
|
||||
List< SysMenu > childList = this.getChildList ( menuMapper.selectMenuList ( null ), sysMenu );
|
||||
// // 将子菜单添加到菜单列表中
|
||||
menuList.addAll ( childList );
|
||||
}
|
||||
return menuList;
|
||||
}
|
||||
private void getMeentList(List< SysMenu> menuList, SysMenu menu) {
|
||||
// 如果当前菜单的父菜单ID不等于0(表示根菜单),则查找并添加其父菜单到菜单列表中,然后递归查找父菜单的祖先菜单
|
||||
if (!menu.getParentId ().equals ( 0L )){
|
||||
// 通过父菜单ID选择父菜单
|
||||
SysMenu sysMenu = this.selectMenuById ( menu.getParentId ( ) );
|
||||
// 将父菜单添加到菜单列表中
|
||||
menuList.add ( sysMenu );
|
||||
// 递归查找父菜单的祖先菜单
|
||||
getMeentList ( menuList,sysMenu );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户ID查询权限
|
||||
|
@ -192,6 +215,66 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
return routers;
|
||||
}
|
||||
|
||||
public List<SysMenu> selectSysChdMenuList(List<SysMenu> menuList) {
|
||||
List<Long> longs = menuList.stream()
|
||||
.map(menu -> menu.getMenuId())
|
||||
.toList();
|
||||
List<SysMenu> sysMenus = menuMapper.selectSysChdMenuList(longs);
|
||||
if (sysMenus != null && sysMenus.size() != 0) {
|
||||
List<SysMenu> sysMenus1 = selectSysMenuList(sysMenus);
|
||||
if (sysMenus1 != null) {
|
||||
sysMenus.addAll(sysMenus1);
|
||||
}
|
||||
}else {
|
||||
return null;
|
||||
}
|
||||
return sysMenus;
|
||||
}
|
||||
|
||||
public List<SysMenu> selectSysMenuList(List<SysMenu> menus){
|
||||
List<Long> longs = menus.stream()
|
||||
.map(menu -> menu.getParentId())
|
||||
.filter(parentId -> parentId != 0)
|
||||
.distinct()
|
||||
.toList();
|
||||
if (longs.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
List<SysMenu> sysMenus = menuMapper.selectSysMenuList(longs);
|
||||
List<SysMenu> sysMenus1 = selectSysMenuList(sysMenus);
|
||||
if (sysMenus1 != null) {
|
||||
sysMenus.addAll(sysMenus1);
|
||||
}
|
||||
return sysMenus;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询系统菜单列表
|
||||
*
|
||||
@ -64,13 +98,31 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
||||
// 管理员显示所有菜单信息
|
||||
if (SysUser.isAdmin(userId)) {
|
||||
menuList = menuMapper.selectMenuList(menu);
|
||||
|
||||
List<SysMenu> sysMenus = selectSysMenuList(menuList);
|
||||
|
||||
if (sysMenus != null && sysMenus.size() != 0) {
|
||||
menuList.addAll(sysMenus);
|
||||
}
|
||||
|
||||
List<SysMenu> sysMenus1 = selectSysChdMenuList(menuMapper.selectMenuList(menu));
|
||||
if (sysMenus1 != null && sysMenus1.size() !=0) {
|
||||
menuList.addAll(sysMenus1);
|
||||
}
|
||||
} else {
|
||||
menu.getParams().put("userId", userId);
|
||||
menuList = menuMapper.selectMenuListByUserId(menu);
|
||||
}
|
||||
menuList = menuList.stream()
|
||||
.distinct()
|
||||
.toList();
|
||||
return menuList;
|
||||
}
|
||||
/**
|
||||
* 构建前端所需要树结构
|
||||
*
|
||||
|
@ -457,7 +540,17 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
* 得到子节点列表
|
||||
*/
|
||||
private List<SysMenu> getChildList (List<SysMenu> list, SysMenu t) {
|
||||
// 初始化用于存放子节点的列表
|
||||
List<SysMenu> tlist = new ArrayList<SysMenu>();
|
||||
List< SysMenu > sysMenus = new ArrayList<> ( );
|
||||
|
||||
Iterator< SysMenu > iterator = list.iterator ( );
|
||||
while (iterator.hasNext ()){
|
||||
SysMenu next = iterator.next ( );
|
||||
if (next.getParentId ().longValue ()==t.getMenuId ().longValue ()){
|
||||
tlist.add ( next );
|
||||
}
|
||||
}
|
||||
Iterator<SysMenu> it = list.iterator();
|
||||
while (it.hasNext()) {
|
||||
SysMenu n = (SysMenu) it.next();
|
||||
|
@ -465,6 +558,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
tlist.add(n);
|
||||
}
|
||||
}
|
||||
// 返回找到的子节点列表
|
||||
return tlist;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,28 @@
|
|||
<result property="updateBy" column="update_by"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
<select id="selectSysMenuList" resultType="com.muyu.system.domain.SysMenu">
|
||||
<include refid="selectMenuVo"/>
|
||||
<where>
|
||||
menu_id in (
|
||||
<foreach collection="longs" separator="," item="id">
|
||||
#{id}
|
||||
</foreach>
|
||||
)
|
||||
</where>
|
||||
order by parent_id, order_num
|
||||
</select>
|
||||
<select id="selectSysChdMenuList" resultType="com.muyu.system.domain.SysMenu">
|
||||
<include refid="selectMenuVo"/>
|
||||
<where>
|
||||
parent_id in (
|
||||
<foreach collection="longs" separator="," item="id">
|
||||
#{id}
|
||||
</foreach>
|
||||
)
|
||||
</where>
|
||||
order by parent_id, order_num
|
||||
</select>
|
||||
|
||||
<sql id="selectMenuVo">
|
||||
select menu_id,
|
||||
|
|
Loading…
Reference in New Issue