mirror of https://github.com/elunez/eladmin
[代码完善](v2.5): v2.5 beta 修复角色管理中分配菜单后子菜单丢失的问题
问题:角色管理中的分配菜单由于是懒加载的,导致保存分配的菜单时只保存了选择的父节点 修复:在保存前先将部分菜单加载出来 2.5 Beta 详情:https://www.ydyno.com/archives/1225.htmlpull/361/head^2
parent
f3f803e5a4
commit
a51aeb604b
|
@ -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<Object> buildMenus(){
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -91,10 +86,13 @@ public class MenuController {
|
|||
@ApiOperation("查询菜单:根据ID获取同级与上级数据")
|
||||
@GetMapping("/superior")
|
||||
@PreAuthorize("@el.check('menu:list')")
|
||||
public ResponseEntity<Object> getSuperior(@RequestParam Long id) {
|
||||
MenuDto menuDto = menuService.findById(id);
|
||||
List<MenuDto> menuDtos = menuService.getSuperior(menuDto, new ArrayList<>());
|
||||
return new ResponseEntity<>(menuService.buildTree(menuDtos),HttpStatus.OK);
|
||||
public ResponseEntity<Object> getSuperior(@RequestParam List<Long> ids) {
|
||||
Set<MenuDto> 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("新增菜单")
|
||||
|
|
|
@ -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<String,Object> buildTree(List<MenuDto> menuDtos);
|
||||
List<MenuDto> buildTree(List<MenuDto> menuDtos);
|
||||
|
||||
/**
|
||||
* 根据角色查询
|
||||
|
|
|
@ -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<>());
|
||||
|
|
|
@ -217,7 +217,7 @@ public class MenuServiceImpl implements MenuService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Map<String,Object> buildTree(List<MenuDto> menuDtos) {
|
||||
public List<MenuDto> buildTree(List<MenuDto> menuDtos) {
|
||||
List<MenuDto> trees = new ArrayList<>();
|
||||
Set<Long> 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<String,Object> 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<MenuVo> buildMenus(List<MenuDto> menuDtos) {
|
||||
List<MenuVo> list = new LinkedList<>();
|
||||
menuDtos.forEach(menuDTO -> {
|
||||
if (menuDTO!=null){
|
||||
List<MenuDto> 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<MenuDto> 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<MenuVo> 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<MenuVo> list1 = new ArrayList<>();
|
||||
list1.add(menuVo1);
|
||||
menuVo.setChildren(list1);
|
||||
}
|
||||
list.add(menuVo);
|
||||
}
|
||||
}
|
||||
);
|
||||
return list;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue