el-tree 树形结构数据转换

后端返回的数据格式

 

 转成el-tree接收的格式

复制代码
 // 树形结构数据转换 每个元素的 children 属性对应的 value 通过 pid 去找到,然后递归执行下去
    arrToTree(arr, upperDeptId = '0') {
      const res = []
      arr.forEach(item => {
        if (item.upperDeptId == upperDeptId) {
          const children = this.arrToTree(arr.filter(v => v.upperDeptId !== upperDeptId), item.id)
          if (children.length) {
            res.push({ ...item, children })
          } else {
            res.push({ ...item })
          }
        }
      })
      return res
    },
    getDeptList({ pageIndex: 1, pageSize: 1000, upperDeptId: '' }).then(res => {
        const list = res.data.list
        this.departmentList = this.arrToTree(list, '0')
 
        // 默认高亮第一个节点
        this.$nextTick(() => {
          this.$refs.deptTree.setCurrentKey(list[0].id)
        })
 
      })
 
复制代码

 转换后的数据格式

  方式二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
 * 构造树型结构数据
 * @param {*} data 数据源
 * @param {*} id id字段 默认 'id'
 * @param {*} parentId 父节点字段 默认 'parentId'
 * @param {*} children 孩子节点字段 默认 'children'
 */
export function handleTree(data, id, parentId, children) {
  let config = {
    id: id || 'id',
    parentId: parentId || 'parentId',
    childrenList: children || 'children'
  };
 
  var childrenListMap = {};
  var nodeIds = {};
  var tree = [];
 
  for (let d of data) {
    let parentId = d[config.parentId];
    if (childrenListMap[parentId] == null) {
      childrenListMap[parentId] = [];
    }
    nodeIds[d[config.id]] = d;
    childrenListMap[parentId].push(d);
  }
 
  for (let d of data) {
    let parentId = d[config.parentId];
    if (nodeIds[parentId] == null) {
      tree.push(d);
    }
  }
 
  for (let t of tree) {
    adaptToChildrenList(t);
  }
 
  function adaptToChildrenList(o) {
    if (childrenListMap[o[config.id]] !== null) {
      o[config.childrenList] = childrenListMap[o[config.id]];
    }
    if (o[config.childrenList]) {
      for (let c of o[config.childrenList]) {
        adaptToChildrenList(c);
      }
    }
  }
  return tree;
}

  

 

posted @   柠檬青味  阅读(906)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示