el-table树形数据序号展示

本文介绍了如何在Vue项目中使用ElementUI的el-table组件展示树形数据,重点讲解了如何设置row-key和tree-props属性,以及如何通过自定义方法计算并显示每个节点的序号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

el-table树形数据序号展示

最终效果图:
在这里插入图片描述

  1. el-table中通过设置 row-key="id" :tree-props="{children: 'subList'}" :default-expand-all="true"实现树状展示数据。
 <el-table
     :data="list"
     row-key="id"
     :tree-props="{children: 'subList'}"
     :default-expand-all="true"
   >
     <el-table-column
       prop="parentIndex" 
       label="序号"
       width="300"
       align="left">
     </el-table-column>
     <el-table-column
       prop="name"
       label="评价指标"
       width="300"
       align="left"
       show-overflow-tooltip
     />
</table>

data(){
	return {
	    // 表格数据
		list:[
			{
				name:undefined,
				parentIndex: undefined,
				subList: [
					name:undefined,
					parentIndex: undefined,
					subList: null
				]
			},
			{
				name:undefined,
				parentIndex: undefined,
				subList: [
					name:undefined,
					parentIndex: undefined,
					subList: null
				]
			},
		]
	}
}
  1. 序号列绑定自定义的字段prop="parentIndex" ,控制数据序号的展示;
    实现方式: 通过接口获取数据时调用setParentIndex方法,并将接口返回的列表数据传入,重新处理数据,为每项数据增加parentIndex字段。
    setParentIndex(list){
      list.forEach((item, index) => {
          item.parentIndex = index + 1 + ''
          if(item.subsetList && item.subsetList.length > 0){
              this._setParentIndex(item, item.parentIndex)
          }
      });
    },
    _setParentIndex(item, oldIndex){
      if (item.subsetList && item.subsetList.length > 0) {
          item.subsetList.forEach((subItem, i) => {
            subItem.parentIndex = oldIndex + '.' + (i + 1);
            this._setParentIndex(subItem, subItem.parentIndex);
          });
      }else {
        return
      }
  },
<!--表格--> <el-table ref="tablelist" class="eltable" :data="model.tabledata.list" :height="model.tableheight" size="small" row-key="id" :highlight-current-row="true" @selection-change="handleTableChange" :default-sort="model.sort" @sort-change="sortchange" @row-contextmenu="rightclick" :default-expand-all="(model.config.childs.length>0 || model.config.istree) && model.config.opentable"> <el-table-column v-if="model.config.havecheck" type="selection" width="50" align="center"></el-table-column> <el-table-column v-if="model.config.haveid" type="" fixed="left" prop="id" label="编号" width="70" align="center"></el-table-column> <el-table-column label="明细表" width="80" type="expand"> <template slot-scope="childScope"> <el-table :data="JSON.parse(childScope.row.material)" size="small" class="eltable" :border="true" v-if="JSON.parse(childScope.row.material)&&JSON.parse(childScope.row.material).length" row-key="id"> <el-table-column type="expand" label="二级物料" width="80"> <template slot-scope="childScope1"> <el-table :data="childScope1.row.list" size="small" class="eltable" :border="true" v-if="childScope1.row.list&&childScope1.row.list.length" row-key="id" > <el-table-column label="三级物料" width="80"></el-table-column> <el-table-column label="序号" prop="id"></el-table-column> <el-table-column prop="proname" label="物料名称"></el-table-column> <el-table-column prop="procode" label="成品编码"></el-table-column> <el-table-column prop="specname" label="规格名称"></el-table-column> <el-table-column prop="speccode" label="规格编码"></el-table-column> </el-table> </template> </el-table-column> <el-table-column label="序号" pr
03-28
<think>嗯,用户想了解如何在Element UI的el-table中实现嵌套多级可展开的表格结构以及相关的配置参数。我需要根据提供的引用资料来整理答案。 首先,用户提到的引用[1]和[4]都涉及多级表头和嵌套表格的实现。引用[1]提到多级表头通过嵌套table-column实现,而引用[4]则提到使用expand配置项实现三层嵌套表格,可能需要结合展开行功能。 然后,引用[3]提到当有children下级时,第一列不对齐的问题,可以通过设置indent属性为0解决。这可能在多级嵌套时需要注意。 接下来,我需要整理实现步骤。根据引用[4],可能需要使用el-table的expand插槽来展开子表格。同时,引用[1]中的多级表头结构可能需要嵌套table-column元素。 对于配置参数,type="expand"是关键,用来定义展开行。row-key和row-class-name可能用于管理行的唯一标识和样式。另外,引用[3]中的indent属性调整缩进可能也需要提及。 示例代码部分,可能需要展示父表格使用expand插槽,子表格嵌套其中,并传递数据。同时,处理分页和加载状态,如引用[4]中的流加载和分页加载。 注意事项方面,数据结构的children字段是必须的,引用[3]的缩进问题,以及样式覆盖可能需要注意层级。性能方面,分页和懒加载可以优化,如引用[4]提到的分页加载。 最后生成相关问题,可以围绕性能优化、动态表头、样式调整和树形表格展开。</think>### Element-ui el-table多级嵌套可展开表格实现步骤 #### 一、基础结构实现 1. **核心配置参数**: - 使用`type="expand"`定义展开列 - `row-key`指定唯一标识字段 - `row-class-name`控制行样式 ```html <el-table :data="tableData" row-key="id" :row-class-name="tableRowClassName"> <el-table-column type="expand"> <!-- 嵌套子表格 --> </el-table-column> </el-table> ``` 2. **多级嵌套实现**: ```html <!-- 三级嵌套示例 --> <el-table :data="parentData"> <el-table-column type="expand"> <template #default="{row}"> <el-table :data="row.children"> <el-table-column type="expand"> <template #default="{subRow}"> <el-table :data="subRow.grandChildren"></el-table> </template> </el-table-column> </el-table> </template> </el-table-column> </el-table> ``` #### 二、关键配置参数说明 | 参数 | 类型 | 说明 | 示例 | |------|------|------|------| | indent | Number | 子节点缩进距离 | `:indent="0"`[^3] | | lazy | Boolean | 是否懒加载子节点 | `:lazy="true"` | | load | Function | 子节点数据加载方法 | `:load="loadChildren"` | | tree-props | Object | 树形结构属性配置 | `:tree-props="{ children: 'items' }"` | #### 三、数据格式要求 ```javascript // 三级嵌套数据结构示例 { id: 1, name: '父级', children: [{ id: 1-1, name: '子级', grandChildren: [{id: 1-1-1, name: '孙级'}] }] } ``` #### 四、特殊样式处理 1. **对齐问题解决方案**: ```html <el-table :indent="0"> // 消除默认缩进 <el-table-column label="名称" width="200"></el-table-column> </el-table> ``` 2. **行样式覆盖**: ```css /* 消除嵌套表格边框 */ .el-table__expanded-cell { padding: 0 !important; border: none; } ``` #### 五、完整示例代码 ```html <el-table :data="tableData" row-key="id" :indent="0"> <el-table-column type="expand"> <template #default="{row}"> <el-table :data="row.children" :show-header="false"> <el-table-column prop="childName"></el-table-column> <el-table-column type="expand"> <template #default="{subRow}"> <el-table :data="subRow.grandChildren" :pagination="grandPagination"> <el-table-column prop="grandName"></el-table-column> </el-table> </template> </el-table-column> </el-table> </template> </el-table-column> </el-table> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值