mirror of
https://github.com/dataease/dataease.git
synced 2026-05-20 11:38:11 +08:00
feat: 系统管理弹框改为隐藏路由
This commit is contained in:
@@ -7,6 +7,7 @@ import io.dataease.commons.utils.BeanUtils;
|
||||
import io.dataease.controller.sys.request.MenuCreateRequest;
|
||||
import io.dataease.controller.sys.request.MenuDeleteRequest;
|
||||
import io.dataease.controller.sys.response.MenuNodeResponse;
|
||||
import io.dataease.controller.sys.response.MenuTreeNode;
|
||||
import io.dataease.service.sys.MenuService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -62,6 +63,12 @@ public class SysMenuController {
|
||||
sets.add(pid);
|
||||
return sets;
|
||||
}
|
||||
@PostMapping("/nodesByMenuId/{menuId}")
|
||||
public List<MenuTreeNode> nodesByMenuId(@PathVariable("menuId") Long menuId) {
|
||||
return menuService.searchTree(menuId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package io.dataease.controller.sys.response;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MenuTreeNode implements Serializable {
|
||||
|
||||
private Long id;
|
||||
|
||||
private String label;
|
||||
|
||||
private Boolean hasChildren;
|
||||
|
||||
private List<MenuTreeNode> children;
|
||||
|
||||
public List<MenuTreeNode> toList(){
|
||||
List<MenuTreeNode> lists = new ArrayList<>();
|
||||
lists.add(this);
|
||||
return lists;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.dataease.service.sys;
|
||||
|
||||
import io.dataease.base.domain.SysDept;
|
||||
import io.dataease.base.domain.SysMenu;
|
||||
import io.dataease.base.domain.SysMenuExample;
|
||||
import io.dataease.base.mapper.SysMenuMapper;
|
||||
@@ -7,8 +8,10 @@ import io.dataease.base.mapper.ext.ExtMenuMapper;
|
||||
import io.dataease.commons.utils.BeanUtils;
|
||||
import io.dataease.controller.sys.request.MenuCreateRequest;
|
||||
import io.dataease.controller.sys.request.MenuDeleteRequest;
|
||||
import io.dataease.controller.sys.response.DeptTreeNode;
|
||||
import io.dataease.controller.sys.response.MenuNodeResponse;
|
||||
|
||||
import io.dataease.controller.sys.response.MenuTreeNode;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -16,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -121,6 +125,24 @@ public class MenuService {
|
||||
return responses;
|
||||
}
|
||||
|
||||
public List<MenuTreeNode> searchTree(Long menuId) {
|
||||
List<SysMenu> roots = nodesByPid(0L);
|
||||
if (menuId == MENU_ROOT_PID) return roots.stream().map(this::format).collect(Collectors.toList());
|
||||
SysMenu sysMenu = sysMenuMapper.selectByPrimaryKey(menuId);
|
||||
if (roots.stream().anyMatch(node -> node.getMenuId() == menuId)) return roots.stream().map(this::format).collect(Collectors.toList());
|
||||
SysMenu current = sysMenu;
|
||||
MenuTreeNode currentNode = format(sysMenu);
|
||||
while (current.getPid() != MENU_ROOT_PID){
|
||||
SysMenu parent = sysMenuMapper.selectByPrimaryKey(current.getPid()); //pid上有索引 所以效率不会太差
|
||||
MenuTreeNode parentNode = format(parent);
|
||||
parentNode.setChildren(currentNode.toList());
|
||||
current = parent;
|
||||
currentNode = parentNode;
|
||||
}
|
||||
MenuTreeNode targetRootNode = currentNode;
|
||||
return roots.stream().map(node -> node.getMenuId() == targetRootNode.getId() ? targetRootNode : format(node)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private Set<SysMenu> getChilds(List<SysMenu> lists, Set<SysMenu> sets){
|
||||
lists.forEach(menu -> {
|
||||
sets.add(menu);
|
||||
@@ -132,6 +154,15 @@ public class MenuService {
|
||||
return sets;
|
||||
}
|
||||
|
||||
private MenuTreeNode format(SysMenu sysMenu) {
|
||||
MenuTreeNode menuTreeNode = new MenuTreeNode();
|
||||
menuTreeNode.setId(sysMenu.getMenuId());
|
||||
menuTreeNode.setLabel(sysMenu.getName());
|
||||
menuTreeNode.setHasChildren(false);
|
||||
Optional.ofNullable(sysMenu.getMenuSort()).ifPresent(num -> menuTreeNode.setHasChildren(num > 0));
|
||||
return menuTreeNode;
|
||||
}
|
||||
|
||||
public List<MenuNodeResponse> convert(List<SysMenu> menus){
|
||||
return menus.stream().map(node -> {
|
||||
MenuNodeResponse menuNodeResponse = BeanUtils.copyBean(new MenuNodeResponse(), node);
|
||||
|
||||
Reference in New Issue
Block a user