/** * 获取菜单列表 */ @PreAuthorize("@ss.hasPermi('system:menu:list')") @GetMapping("/list") public AjaxResult list(SysMenu menu) { LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); Long userId = loginUser.getUser().getUserId(); List<SysMenu> menus = menuService.selectMenuList(menu, userId); //查询所有菜单 //返回的菜单树 List<SysMenu> rootMenus = new ArrayList<>(); for (SysMenu sysMenu : menus) { //pid(上级Id)为0的是根菜单 if (0 == sysMenu.getParentId()) { rootMenus.add(sysMenu); } } //遍历,找到二级菜单(根菜单的id和所有菜单中的pid比较) for (SysMenu rootMenu : rootMenus) { List<SysMenu> child = getChild(rootMenu.getMenuId(), menus); rootMenu.setChildren(child); } return AjaxResult.success(rootMenus); } /** * 递归获取下级菜单 * @param pid 上级Id * @param menus 所有菜单 * @return */ private List<SysMenu> getChild(Long pid, List<SysMenu> menus) { //子菜单列表 List<SysMenu> childList = new ArrayList<>(); for (SysMenu menu : menus) { if (pid == menu.getParentId()) { childList.add(menu); } } //遍历 获取子菜单的子菜单 for (SysMenu menu : childList) { List<SysMenu> child = getChild(menu.getMenuId(), menus); menu.setChildren(child); } //递归出口 childList长度为0 if (childList.size() == 0) { return new ArrayList<>(); } return childList; }