TreeUtil.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package cc.mrbird.febs.common.utils;
  2. import cc.mrbird.febs.common.entity.Tree;
  3. import cc.mrbird.febs.common.entity.router.VueRouter;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. /**
  7. * @author MrBird
  8. */
  9. public class TreeUtil {
  10. private final static String TOP_NODE_ID = "0";
  11. /**
  12. * 用于构建菜单或部门树
  13. *
  14. * @param nodes nodes
  15. * @return <T> List<? extends Tree>
  16. */
  17. public static <T> List<? extends Tree<?>> build(List<? extends Tree<T>> nodes) {
  18. if (nodes == null) {
  19. return null;
  20. }
  21. List<Tree<T>> topNodes = new ArrayList<>();
  22. nodes.forEach(node -> {
  23. String pid = node.getParentId();
  24. if (pid == null || TOP_NODE_ID.equals(pid)) {
  25. topNodes.add(node);
  26. return;
  27. }
  28. for (Tree<T> n : nodes) {
  29. String id = n.getId();
  30. if (id != null && id.equals(pid)) {
  31. if (n.getChildren() == null)
  32. n.initChildren();
  33. n.getChildren().add(node);
  34. node.setHasParent(true);
  35. n.setHasChildren(true);
  36. n.setHasParent(true);
  37. return;
  38. }
  39. }
  40. if (topNodes.isEmpty())
  41. topNodes.add(node);
  42. });
  43. return topNodes;
  44. }
  45. /**
  46. * 构造前端路由
  47. *
  48. * @param routes routes
  49. * @param <T> T
  50. * @return ArrayList<VueRouter < T>>
  51. */
  52. public static <T> List<VueRouter<T>> buildVueRouter(List<VueRouter<T>> routes) {
  53. if (routes == null) {
  54. return null;
  55. }
  56. List<VueRouter<T>> topRoutes = new ArrayList<>();
  57. VueRouter<T> router = new VueRouter<>();
  58. routes.forEach(route -> {
  59. String parentId = route.getParentId();
  60. if (parentId == null || TOP_NODE_ID.equals(parentId)) {
  61. topRoutes.add(route);
  62. return;
  63. }
  64. for (VueRouter<T> parent : routes) {
  65. String id = parent.getId();
  66. if (id != null && id.equals(parentId)) {
  67. if (parent.getChildren() == null)
  68. parent.initChildren();
  69. parent.getChildren().add(route);
  70. parent.setAlwaysShow(true);
  71. parent.setHasChildren(true);
  72. route.setHasParent(true);
  73. parent.setHasParent(true);
  74. return;
  75. }
  76. }
  77. });
  78. VueRouter<T> router404 = new VueRouter<>();
  79. router404.setName("404");
  80. router404.setComponent("error-page/404");
  81. router404.setPath("*");
  82. topRoutes.add(router404);
  83. return topRoutes;
  84. }
  85. }