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);
});
},
liang14658fox