package cc.mrbird.febs.common.core.utils; import cc.mrbird.febs.common.core.entity.Tree; import cc.mrbird.febs.common.core.entity.router.VueRouter; import java.util.ArrayList; import java.util.List; /** * @author MrBird */ public abstract class TreeUtil { private final static String TOP_NODE_ID = "0"; /** * 用于构建菜单或部门树 * * @param nodes nodes * @return List */ public static List> build(List> nodes) { if (nodes == null) { return null; } List> topNodes = new ArrayList<>(); nodes.forEach(node -> { String pid = node.getParentId(); if (pid == null || TOP_NODE_ID.equals(pid)) { topNodes.add(node); return; } for (Tree n : nodes) { String id = n.getId(); if (id != null && id.equals(pid)) { if (n.getChildren() == null) { n.initChildren(); } n.getChildren().add(node); node.setHasParent(true); n.setHasChildren(true); n.setHasParent(true); return; } } if (topNodes.isEmpty()) { topNodes.add(node); } }); return topNodes; } /** * 构造前端路由 * * @param routes routes * @param T * @return ArrayList> */ public static List> buildVueRouter(List> routes) { if (routes == null) { return null; } List> topRoutes = new ArrayList<>(); VueRouter router = new VueRouter<>(); routes.forEach(route -> { String parentId = route.getParentId(); if (parentId == null || TOP_NODE_ID.equals(parentId)) { topRoutes.add(route); return; } for (VueRouter parent : routes) { String id = parent.getId(); if (id != null && id.equals(parentId)) { if (parent.getChildren() == null) { parent.initChildren(); } parent.getChildren().add(route); parent.setAlwaysShow(true); parent.setHasChildren(true); route.setHasParent(true); parent.setHasParent(true); return; } } }); VueRouter router404 = new VueRouter<>(); router404.setName("404"); router404.setComponent("error-page/404"); router404.setPath("*"); topRoutes.add(router404); return topRoutes; } }