[代码完善](v2.5): v2.5 beta 修复角色管理中分配菜单后子菜单丢失的问题

问题:角色管理中的分配菜单由于是懒加载的,导致保存分配的菜单时只保存了选择的父节点
修复:在保存前先将部分菜单加载出来

2.5 Beta 详情:https://www.ydyno.com/archives/1225.html
pull/361/head^2
ZhengJie 2020-05-11 18:36:46 +08:00
parent f3f803e5a4
commit a51aeb604b
4 changed files with 54 additions and 61 deletions

View File

@ -33,11 +33,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/** /**
* @author Zheng Jie * @author Zheng Jie
@ -48,7 +44,6 @@ import java.util.Set;
@RequiredArgsConstructor @RequiredArgsConstructor
@Api(tags = "系统:菜单管理") @Api(tags = "系统:菜单管理")
@RequestMapping("/api/menus") @RequestMapping("/api/menus")
@SuppressWarnings("unchecked")
public class MenuController { public class MenuController {
private final MenuService menuService; private final MenuService menuService;
@ -67,7 +62,7 @@ public class MenuController {
@GetMapping(value = "/build") @GetMapping(value = "/build")
public ResponseEntity<Object> buildMenus(){ public ResponseEntity<Object> buildMenus(){
List<MenuDto> menuDtoList = menuService.findByRoles(roleService.findByUsersId(SecurityUtils.getCurrentUserId())); List<MenuDto> menuDtoList = menuService.findByRoles(roleService.findByUsersId(SecurityUtils.getCurrentUserId()));
List<MenuDto> menuDtos = (List<MenuDto>) menuService.buildTree(menuDtoList).get("content"); List<MenuDto> menuDtos = menuService.buildTree(menuDtoList);
return new ResponseEntity<>(menuService.buildMenus(menuDtos),HttpStatus.OK); return new ResponseEntity<>(menuService.buildMenus(menuDtos),HttpStatus.OK);
} }
@ -91,10 +86,13 @@ public class MenuController {
@ApiOperation("查询菜单:根据ID获取同级与上级数据") @ApiOperation("查询菜单:根据ID获取同级与上级数据")
@GetMapping("/superior") @GetMapping("/superior")
@PreAuthorize("@el.check('menu:list')") @PreAuthorize("@el.check('menu:list')")
public ResponseEntity<Object> getSuperior(@RequestParam Long id) { public ResponseEntity<Object> getSuperior(@RequestParam List<Long> ids) {
Set<MenuDto> menuDtos = new LinkedHashSet<>();
for (Long id : ids) {
MenuDto menuDto = menuService.findById(id); MenuDto menuDto = menuService.findById(id);
List<MenuDto> menuDtos = menuService.getSuperior(menuDto, new ArrayList<>()); menuDtos.addAll(menuService.getSuperior(menuDto, new ArrayList<>()));
return new ResponseEntity<>(menuService.buildTree(menuDtos),HttpStatus.OK); }
return new ResponseEntity<>(menuService.buildTree(new ArrayList<>(menuDtos)),HttpStatus.OK);
} }
@Log("新增菜单") @Log("新增菜单")

View File

@ -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.MenuDto;
import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.MenuQueryCriteria;
import me.zhengjie.modules.system.service.dto.RoleSmallDto; import me.zhengjie.modules.system.service.dto.RoleSmallDto;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
@ -81,7 +79,7 @@ public interface MenuService {
* @param menuDtos * @param menuDtos
* @return / * @return /
*/ */
Map<String,Object> buildTree(List<MenuDto> menuDtos); List<MenuDto> buildTree(List<MenuDto> menuDtos);
/** /**
* *

View File

@ -173,7 +173,7 @@ public class DeptServiceImpl implements DeptService {
trees.add(deptDTO); trees.add(deptDTO);
} }
for (DeptDto it : deptDtos) { for (DeptDto it : deptDtos) {
if (it.getPid() != null && it.getPid().equals(deptDTO.getId())) { if (deptDTO.getId().equals(it.getPid())) {
isChild = true; isChild = true;
if (deptDTO.getChildren() == null) { if (deptDTO.getChildren() == null) {
deptDTO.setChildren(new ArrayList<>()); deptDTO.setChildren(new ArrayList<>());

View File

@ -217,7 +217,7 @@ public class MenuServiceImpl implements MenuService {
} }
@Override @Override
public Map<String,Object> buildTree(List<MenuDto> menuDtos) { public List<MenuDto> buildTree(List<MenuDto> menuDtos) {
List<MenuDto> trees = new ArrayList<>(); List<MenuDto> trees = new ArrayList<>();
Set<Long> ids = new HashSet<>(); Set<Long> ids = new HashSet<>();
for (MenuDto menuDTO : menuDtos) { for (MenuDto menuDTO : menuDtos) {
@ -225,7 +225,7 @@ public class MenuServiceImpl implements MenuService {
trees.add(menuDTO); trees.add(menuDTO);
} }
for (MenuDto it : menuDtos) { for (MenuDto it : menuDtos) {
if (it.getPid() != null && it.getPid().equals(menuDTO.getId())) { if (menuDTO.getId().equals(it.getPid())) {
if (menuDTO.getChildren() == null) { if (menuDTO.getChildren() == null) {
menuDTO.setChildren(new ArrayList<>()); menuDTO.setChildren(new ArrayList<>());
} }
@ -234,13 +234,10 @@ public class MenuServiceImpl implements MenuService {
} }
} }
} }
Map<String,Object> map = new HashMap<>(2);
if(trees.size() == 0){ if(trees.size() == 0){
trees = menuDtos.stream().filter(s -> !ids.contains(s.getId())).collect(Collectors.toList()); trees = menuDtos.stream().filter(s -> !ids.contains(s.getId())).collect(Collectors.toList());
} }
map.put("content",trees); return trees;
map.put("totalElements", menuDtos.size());
return map;
} }
@Override @Override