From a51aeb604bc7c8a90104b022a689019ab6479801 Mon Sep 17 00:00:00 2001 From: ZhengJie <201507802@qq.com> Date: Mon, 11 May 2020 18:36:46 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BB=A3=E7=A0=81=E5=AE=8C=E5=96=84](v2.5):?= =?UTF-8?q?=20v2.5=20beta=20=E4=BF=AE=E5=A4=8D=E8=A7=92=E8=89=B2=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=B8=AD=E5=88=86=E9=85=8D=E8=8F=9C=E5=8D=95=E5=90=8E?= =?UTF-8?q?=E5=AD=90=E8=8F=9C=E5=8D=95=E4=B8=A2=E5=A4=B1=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:角色管理中的分配菜单由于是懒加载的,导致保存分配的菜单时只保存了选择的父节点 修复:在保存前先将部分菜单加载出来 2.5 Beta 详情:https://www.ydyno.com/archives/1225.html --- .../modules/system/rest/MenuController.java | 20 ++--- .../modules/system/service/MenuService.java | 4 +- .../system/service/impl/DeptServiceImpl.java | 2 +- .../system/service/impl/MenuServiceImpl.java | 89 +++++++++---------- 4 files changed, 54 insertions(+), 61 deletions(-) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java index 6f434ed0..0243d30d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java @@ -33,11 +33,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; /** * @author Zheng Jie @@ -48,7 +44,6 @@ import java.util.Set; @RequiredArgsConstructor @Api(tags = "系统:菜单管理") @RequestMapping("/api/menus") -@SuppressWarnings("unchecked") public class MenuController { private final MenuService menuService; @@ -67,7 +62,7 @@ public class MenuController { @GetMapping(value = "/build") public ResponseEntity buildMenus(){ List menuDtoList = menuService.findByRoles(roleService.findByUsersId(SecurityUtils.getCurrentUserId())); - List menuDtos = (List) menuService.buildTree(menuDtoList).get("content"); + List menuDtos = menuService.buildTree(menuDtoList); return new ResponseEntity<>(menuService.buildMenus(menuDtos),HttpStatus.OK); } @@ -91,10 +86,13 @@ public class MenuController { @ApiOperation("查询菜单:根据ID获取同级与上级数据") @GetMapping("/superior") @PreAuthorize("@el.check('menu:list')") - public ResponseEntity getSuperior(@RequestParam Long id) { - MenuDto menuDto = menuService.findById(id); - List menuDtos = menuService.getSuperior(menuDto, new ArrayList<>()); - return new ResponseEntity<>(menuService.buildTree(menuDtos),HttpStatus.OK); + public ResponseEntity getSuperior(@RequestParam List ids) { + Set menuDtos = new LinkedHashSet<>(); + for (Long id : ids) { + MenuDto menuDto = menuService.findById(id); + menuDtos.addAll(menuService.getSuperior(menuDto, new ArrayList<>())); + } + return new ResponseEntity<>(menuService.buildTree(new ArrayList<>(menuDtos)),HttpStatus.OK); } @Log("新增菜单") diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java index 190278cb..231c3e8d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java @@ -19,11 +19,9 @@ import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.service.dto.MenuDto; import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDto; - import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; -import java.util.Map; import java.util.Set; /** @@ -81,7 +79,7 @@ public interface MenuService { * @param menuDtos 原始数据 * @return / */ - Map buildTree(List menuDtos); + List buildTree(List menuDtos); /** * 根据角色查询 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java index 0c7978fa..010b6642 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java @@ -173,7 +173,7 @@ public class DeptServiceImpl implements DeptService { trees.add(deptDTO); } for (DeptDto it : deptDtos) { - if (it.getPid() != null && it.getPid().equals(deptDTO.getId())) { + if (deptDTO.getId().equals(it.getPid())) { isChild = true; if (deptDTO.getChildren() == null) { deptDTO.setChildren(new ArrayList<>()); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java index b4b078c9..60c76e6f 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java @@ -217,7 +217,7 @@ public class MenuServiceImpl implements MenuService { } @Override - public Map buildTree(List menuDtos) { + public List buildTree(List menuDtos) { List trees = new ArrayList<>(); Set ids = new HashSet<>(); for (MenuDto menuDTO : menuDtos) { @@ -225,7 +225,7 @@ public class MenuServiceImpl implements MenuService { trees.add(menuDTO); } for (MenuDto it : menuDtos) { - if (it.getPid() != null && it.getPid().equals(menuDTO.getId())) { + if (menuDTO.getId().equals(it.getPid())) { if (menuDTO.getChildren() == null) { menuDTO.setChildren(new ArrayList<>()); } @@ -234,61 +234,58 @@ public class MenuServiceImpl implements MenuService { } } } - Map map = new HashMap<>(2); if(trees.size() == 0){ trees = menuDtos.stream().filter(s -> !ids.contains(s.getId())).collect(Collectors.toList()); } - map.put("content",trees); - map.put("totalElements", menuDtos.size()); - return map; + return trees; } @Override public List buildMenus(List menuDtos) { List list = new LinkedList<>(); menuDtos.forEach(menuDTO -> { - if (menuDTO!=null){ - List menuDtoList = menuDTO.getChildren(); - MenuVo menuVo = new MenuVo(); - menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponentName()) ? menuDTO.getComponentName() : menuDTO.getTitle()); - // 一级目录需要加斜杠,不然会报警告 - menuVo.setPath(menuDTO.getPid() == null ? "/" + menuDTO.getPath() :menuDTO.getPath()); - menuVo.setHidden(menuDTO.getHidden()); - // 如果不是外链 - if(!menuDTO.getIFrame()){ - if(menuDTO.getPid() == null){ - menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent())?"Layout":menuDTO.getComponent()); - }else if(!StrUtil.isEmpty(menuDTO.getComponent())){ - menuVo.setComponent(menuDTO.getComponent()); + if (menuDTO!=null){ + List menuDtoList = menuDTO.getChildren(); + MenuVo menuVo = new MenuVo(); + menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponentName()) ? menuDTO.getComponentName() : menuDTO.getTitle()); + // 一级目录需要加斜杠,不然会报警告 + menuVo.setPath(menuDTO.getPid() == null ? "/" + menuDTO.getPath() :menuDTO.getPath()); + menuVo.setHidden(menuDTO.getHidden()); + // 如果不是外链 + if(!menuDTO.getIFrame()){ + if(menuDTO.getPid() == null){ + menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent())?"Layout":menuDTO.getComponent()); + }else if(!StrUtil.isEmpty(menuDTO.getComponent())){ + menuVo.setComponent(menuDTO.getComponent()); + } + } + menuVo.setMeta(new MenuMetaVo(menuDTO.getTitle(),menuDTO.getIcon(),!menuDTO.getCache())); + if(menuDtoList !=null && menuDtoList.size()!=0){ + menuVo.setAlwaysShow(true); + menuVo.setRedirect("noredirect"); + menuVo.setChildren(buildMenus(menuDtoList)); + // 处理是一级菜单并且没有子菜单的情况 + } else if(menuDTO.getPid() == null){ + MenuVo menuVo1 = new MenuVo(); + menuVo1.setMeta(menuVo.getMeta()); + // 非外链 + if(!menuDTO.getIFrame()){ + menuVo1.setPath("index"); + menuVo1.setName(menuVo.getName()); + menuVo1.setComponent(menuVo.getComponent()); + } else { + menuVo1.setPath(menuDTO.getPath()); + } + menuVo.setName(null); + menuVo.setMeta(null); + menuVo.setComponent("Layout"); + List list1 = new ArrayList<>(); + list1.add(menuVo1); + menuVo.setChildren(list1); + } + list.add(menuVo); } } - menuVo.setMeta(new MenuMetaVo(menuDTO.getTitle(),menuDTO.getIcon(),!menuDTO.getCache())); - if(menuDtoList !=null && menuDtoList.size()!=0){ - menuVo.setAlwaysShow(true); - menuVo.setRedirect("noredirect"); - menuVo.setChildren(buildMenus(menuDtoList)); - // 处理是一级菜单并且没有子菜单的情况 - } else if(menuDTO.getPid() == null){ - MenuVo menuVo1 = new MenuVo(); - menuVo1.setMeta(menuVo.getMeta()); - // 非外链 - if(!menuDTO.getIFrame()){ - menuVo1.setPath("index"); - menuVo1.setName(menuVo.getName()); - menuVo1.setComponent(menuVo.getComponent()); - } else { - menuVo1.setPath(menuDTO.getPath()); - } - menuVo.setName(null); - menuVo.setMeta(null); - menuVo.setComponent("Layout"); - List list1 = new ArrayList<>(); - list1.add(menuVo1); - menuVo.setChildren(list1); - } - list.add(menuVo); - } - } ); return list; }