diff --git a/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java index e037b34..051f8cb 100644 --- a/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java +++ b/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -46,7 +46,7 @@ public interface SysUserMapper extends BaseMapper { * * @return 用户对象信息 */ - public SysUser selectUserByUserName (String userName); + public SysUser selectUserByUserName (@Param("userName") String userName); /** * 通过用户ID查询用户 diff --git a/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java b/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java index e4e2ec8..017efd7 100644 --- a/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java +++ b/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java @@ -51,26 +51,60 @@ public class SysMenuServiceImpl extends ServiceImpl impl return selectMenuList(new SysMenu(), userId); } + + + + /** * 查询系统菜单列表 * - * @param menu 菜单信息 - * - * @return 菜单列表 + * @param menu 菜单信息,用于查询条件 + * @param userId 用户ID,用于判断是否为管理员以及获取用户菜单列表 + * @return 菜单列表,根据用户权限返回不同的菜单列表 */ @Override public List selectMenuList (SysMenu menu, Long userId) { List menuList = null; - // 管理员显示所有菜单信息 + // 判断用户是否为管理员,管理员显示所有菜单 if (SysUser.isAdmin(userId)) { menuList = menuMapper.selectMenuList(menu); + System.out.println ( "menuList"+menuList ); } else { + // 非管理员根据用户ID获取菜单列表 menu.getParams().put("userId", userId); menuList = menuMapper.selectMenuListByUserId(menu); } + // 若菜单列表只有一个元素,则尝试获取其子菜单并添加到菜单列表中 + if (menuList.size ()==1){ + SysMenu sysMenu = menuList.get ( 0 ); + + this.getMeentList(menuList,sysMenu); + // 获取当前菜单的子菜单列表 + List< SysMenu > childList = this.getChildList ( menuMapper.selectMenuList ( null ), sysMenu ); +// // 将子菜单添加到菜单列表中 + menuList.addAll ( childList ); + } return menuList; } + /** + * 获取祖节点 + * 递归遍历菜单列表,找到指定菜单的所有祖先菜单,并将它们添加到菜单列表中。 + * @param menuList 菜单列表,用于存储找到的祖先菜单。 + * @param menu 指定的菜单项,寻找它的祖先菜单。 + */ + 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查询权限 * @@ -454,17 +488,36 @@ public class SysMenuServiceImpl extends ServiceImpl impl } /** - * 得到子节点列表 + * 获取指定节点的子节点列表。 + * @param list 菜单列表,包含所有菜单项。 + * @param t 指定的菜单项,用于查找其子菜单。 + * @return 返回指定菜单项的子节点列表。 */ private List getChildList (List list, SysMenu t) { + // 初始化用于存放子节点的列表 List tlist = new ArrayList(); + 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 it = list.iterator(); while (it.hasNext()) { + // 遍历菜单列表的每个元素 SysMenu n = (SysMenu) it.next(); + // 判断当前元素的父节点ID是否与指定菜单项的ID相等,若相等则添加到子节点列表 if (n.getParentId().longValue() == t.getMenuId().longValue()) { tlist.add(n); } } + // 返回找到的子节点列表 return tlist; } diff --git a/muyu-modules/muyu-system/src/main/resources/mapper/system/SysUserMapper.xml b/muyu-modules/muyu-system/src/main/resources/mapper/system/SysUserMapper.xml index 33e1832..9d6e707 100644 --- a/muyu-modules/muyu-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/muyu-modules/muyu-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -152,7 +152,7 @@