• 后端返回parentId,前端处理成children嵌套数据


    rouyi 的 vuetree函数结合elementui  el-table组件使用

    把有parentId和id结构的数据处理成children嵌套数据,字段名称不一致,可以设置。

    vuetree函数

    1. /**
    2.  * 构造树型结构数据
    3.  * @param {*} data 数据源
    4.  * @param {*} id id字段 默认 'id'
    5.  * @param {*} parentId 父节点字段 默认 'parentId'
    6.  * @param {*} children 孩子节点字段 默认 'children'
    7.  */
    8. export function handleTree(data, id, parentId, children) {
    9.   let config = {
    10.     id: id || 'id',
    11.     parentId: parentId || 'parentId',
    12.     childrenList: children || 'children'
    13.   };
    14.   var childrenListMap = {};
    15.   var nodeIds = {};
    16.   var tree = [];
    17.   for (let d of data) {
    18.     let parentId = d[config.parentId];
    19.     if (childrenListMap[parentId] == null) {
    20.       childrenListMap[parentId] = [];
    21.     }
    22.     nodeIds[d[config.id]] = d;
    23.     childrenListMap[parentId].push(d);
    24.   }
    25.   for (let d of data) {
    26.     let parentId = d[config.parentId];
    27.     if (nodeIds[parentId] == null) {
    28.       tree.push(d);
    29.     }
    30.   }
    31.   for (let t of tree) {
    32.     adaptToChildrenList(t);
    33.   }
    34.   function adaptToChildrenList(o) {
    35.     if (childrenListMap[o[config.id]] !== null) {
    36.       o[config.childrenList] = childrenListMap[o[config.id]];
    37.     }
    38.     if (o[config.childrenList]) {
    39.       for (let c of o[config.childrenList]) {
    40.         adaptToChildrenList(c);
    41.       }
    42.     }
    43.   }
    44.   return tree;
    45. }
    1. <template>
    2. <el-table
    3.       v-if="refreshTable"
    4.       v-loading="loading"
    5.       :data="typeList"
    6.       row-key="typeId"
    7.       :default-expand-all="isExpandAll"
    8.       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
    9.      >
    10.       <el-table-column label="主键" align="center" prop="typeId" />
    11.       <el-table-column label="类型编码" align="center" prop="typeCode" />
    12.      ......
    13. el-table>
    14. template>
    15. export default{
    16. data(){
    17. return{
    18. //一维数组:
    19. testdata:[
    20.         {"id": 30035, "name": "分类1"},
    21.         {"id": 30036, "name": "分类2"},
    22.         {"id": 30037, "name": "分类3"},
    23.         {"id": 30040, "name": "分类1-1", "parentId": 30035},
    24.         {"id": 30041, "name": "分类2-1", "parentId": 30036},
    25.         {"id": 30042, "name": "分类1-1-1", "parentId": 30040},
    26.         {"id": 30043, "name": "分类1-1-2", "parentId": 30040},
    27.         {"id": 30044, "name": "分类1-1-2-1", "parentId": 30043}
    28.       ]
    29. }
    30. },
    31. methods:{
    32. getList() {
    33.       this.loading = true;
    34.       listType(this.queryParams).then(response => {
    35.         this.typeList = this.handleTree(response.rows, 'typeCode', 'parentCode')
    36.         this.total = response.total;
    37.         this.loading = false;
    38.       });
    39.     },
    40. }
    41. }

     

  • 相关阅读:
    第2章 docker镜像管理
    C#—VB.NET的相同点与不同点
    【ARM CoreLink 系列 1 -- CoreLink 系列 产品介绍】
    分享一个超好看回忆相册(代码自取)
    《无与伦比》Centos7 安装git
    const修饰详解
    天翎知识管理系统:智能化搜索引擎,快速定位知识资源
    每日一博 - 闲聊 Java 中的中断
    Excel最基本的常用函数
    性能优化陷阱之hash真的比strcmp快吗
  • 原文地址:https://blog.csdn.net/yang295242361/article/details/132758017