Skip to content

js
getTreeData() {
      // 获取树的数据
      get_dept_post_list().then((response) => {
        // this.treeOptions_gw = this.buildTree(response.data, "id");
        function buildTree(data) {
          const map = new Map();
          data.forEach((item) => map.set(item.id, { ...item, children: [] }));

          const tree = [];
          data.forEach((item) => {
            if (item.parentId == 0) {
              tree.push(map.get(item.id));
            } else {
              const parent = map.get(item.parentId);
              if (parent) {
                parent.children.push(map.get(item.id));
              }
            }
          });

          // 递归清理无子节点且 type 为 'DEPT' 的节点,并删除空的 children
          function cleanTree(nodes) {
            return nodes
              .map((node) => {
                let newNode = { ...node };
                newNode.children = cleanTree(newNode.children); // 递归处理子节点

                // 过滤掉无子节点且 type 为 'DEPT' 的节点
                if (newNode.children.length === 0) {
                  delete newNode.children; // 删除空 children
                  if (newNode.type === "DEPT") {
                    return null; // 标记为删除
                  }
                }

                return newNode;
              })
              .filter((node) => node !== null); // 移除被标记删除的节点
          }

          return cleanTree(tree);
        }

        this.treeOptions_gw = buildTree(response.data);
        console.log(this.treeOptions_gw);
      });
    },
getTreeData() {
      // 获取树的数据
      get_dept_post_list().then((response) => {
        // this.treeOptions_gw = this.buildTree(response.data, "id");
        function buildTree(data) {
          const map = new Map();
          data.forEach((item) => map.set(item.id, { ...item, children: [] }));

          const tree = [];
          data.forEach((item) => {
            if (item.parentId == 0) {
              tree.push(map.get(item.id));
            } else {
              const parent = map.get(item.parentId);
              if (parent) {
                parent.children.push(map.get(item.id));
              }
            }
          });

          // 递归清理无子节点且 type 为 'DEPT' 的节点,并删除空的 children
          function cleanTree(nodes) {
            return nodes
              .map((node) => {
                let newNode = { ...node };
                newNode.children = cleanTree(newNode.children); // 递归处理子节点

                // 过滤掉无子节点且 type 为 'DEPT' 的节点
                if (newNode.children.length === 0) {
                  delete newNode.children; // 删除空 children
                  if (newNode.type === "DEPT") {
                    return null; // 标记为删除
                  }
                }

                return newNode;
              })
              .filter((node) => node !== null); // 移除被标记删除的节点
          }

          return cleanTree(tree);
        }

        this.treeOptions_gw = buildTree(response.data);
        console.log(this.treeOptions_gw);
      });
    },