背景:右边表格中可以选择多选或者单选,选择之后租场树形结构,展示在左侧,主项名称不一样的,创建一个新的主项节点,主项名称一样子项名称不一样的,在相同主项下创建一个新的子项办理项节点。主项名称和子项名称都一样的在此子项下面创建办理项节点,
如下图所示:
实现思路如下:
代码实现如下:
// 右侧表格选择
handleSelectionChange(val) {
this.multipleSelection = val;
// this.itemTree=this.arrayToTree(this.multipleSelection);
console.log(this.multipleSelection);
this.arrayToTree()
},
//将选中的数组转换为树
arrayToTree(){
this.itemTree=[]
this.multipleSelection.forEach((item, index) => {
this.box(item)
})
// console.log(this.itemTree)
},
box (data) {
const oneRes = this.itemTree.find(x => x.label === data.majorName)
if (!oneRes) {
this.itemTree.push({
label: data.majorName,
children: [{
label: data.minorName,
children: [
{ label: data.itemName }
]
}]
})
} else {
this.itemTree.forEach((item, index) => {
if(item.label===data.majorName) {
// 相等的时候查找一级标签children下是否有相同的标签
const findRes = item.children.find(x => x.label === data.minorName)
// 判断是否找到相同的
if (findRes) {
// 找到二级相同的
findRes.children.push({ label: data.itemName })
} else {
// 没找到相同的,就创建一条
item.children.push({
label: data.minorName,
children: [
{ label: data.itemName }
]
})
}
}
})
}
console.log(this.itemTree)
}}