最终实现图
. 1. 接口扁平化数据转树型结构数据 (递归)
// 转换树行数据的方法
export const transTree = (list, pidKey, idKey = 'id') => {
// 最终生成的树行结构
const treeData = []
// 对传入进来的 数据进行遍历,查找对应的子级
list.forEach((item) => {
// 给每一项添加子节点
// item.children = []
// 如果没有子数据 则去掉children字段
item.children && item.children.length === 0 && delete item.children
// 如果 pid 为空,说明是最顶级,直接放到 treeData 中即可
if (!item[pidKey]) {
treeData.push(item)
}
// 根据前面的分析,pid 代表的是父级的 id,从而可以进行筛选子级
// filter 方法会把满足条件到的每一项,组成一个数组进行返回
const children = list.filter((data) => data[pidKey] === item[idKey])
// 如果没有子节点,直接 return 不做任何处理
if (!children.length) return
// 将返回的子级进行赋值给父级(item)的 children 属性
item.children = children
})
// 将最终生成的数据返回出去
return treeData
}
树形结构数据添加序号
this.dataList = transTree(后端返回值, 'pidKey') // 扁平化数据转树形结构数据
this.dataList = this.setData(JSON.parse(JSON.stringify(this.dataList))) // 添加序号
// 添加序号方法
setData(data, parentIndex) {
data.forEach((item, index) => {
item.index = parentIndex ? parentIndex + '-' + Number(index + 1) : index + 1
if (item.children) {
this.setData(item.children, item.index)
}
})
return data
}