el-table树状表格,默认展开第一个节点的每一层

效果如图

复制代码
<template>
  <el-table
    :data="tableData"
    style="width: 100%"
    :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
    :expand-row-keys="expandRowKeys"
    row-key="id"
    @expand-change="handleExpandChange"
  >
    <el-table-column
      prop="name"
      label="名称"
      width="180"
    ></el-table-column>
    <el-table-column
      prop="value"
      label="值"
    ></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        {
          id: 1,
          name: "一级1",
          value: "A",
          children: [
            {
              id: 2,
              name: "二级1-1",
              value: "A-1",
              children: [
                { id: 3, name: "三级1-1-1", value: "A-1-1" },
                { id: 4, name: "三级1-1-2", value: "A-1-2" }
              ]
            },
            {
              id: 5,
              name: "二级1-2",
              value: "A-2",
              children: [
                { id: 6, name: "三级1-2-1", value: "A-2-1" }
              ]
            }
          ]
        },
        {
          id: 7,
          name: "一级2",
          value: "B",
          children: [
            {
              id: 8,
              name: "二级2-1",
              value: "B-1",
              children: [
                { id: 9, name: "三级2-1-1", value: "B-1-1" }
              ]
            }
          ]
        }
      ],
      expandRowKeys: [], // 保存展开的行的key
    };
  },
  methods: {
    // 递归函数来获取每层的第一个节点id 
   
    getFirstNodeKeys(data) {
      let keys = [];
      data.forEach(item => {
        keys.push(item.id); // 添加当前节点的id
        if (item.children && item.children.length) {
          keys = keys.concat(this.getFirstNodeKeys(item.children)); // 递归获取子节点的第一个
        }
      });
      return keys;
    },
    // 处理展开行的变化
    handleExpandChange(row, expandedRows) {
      // 可选处理扩展展开事件
    }
  },
  created() {
    // 初始化时设置默认展开每一层第一个节点
     // 注意!!!展开节点id数组必须是字符串的
    this.expandRowKeys = this.getFirstNodeKeys(this.tableData);
  }
};
</script>

<style scoped>
</style>
相关推荐
代码老y1 小时前
十年回望:Vue 与 React 的设计哲学、演进轨迹与生态博弈
前端·vue.js·react.js
zzywxc7871 小时前
详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
开发语言·javascript·人工智能·深度学习·金融·prompt·流程图
大明881 小时前
用 mouseover/mouseout 事件代理模拟 mouseenter/mouseleave
前端·javascript
林太白1 小时前
Nuxt.js搭建一个官网如何简单
前端·javascript·后端
晴空雨1 小时前
一个符号让 indexOf 判断更优雅!JavaScript 位运算的隐藏技巧
前端·javascript
前端snow2 小时前
前端无接口实现Table导出Excel的两种方案(附完整代码)
javascript·vue.js·react.js
古夕2 小时前
my-first-ai-web_问题记录03——NextJS 项目框架基础扫盲
前端·javascript·react.js
曲意已决3 小时前
《深入源码理解webpac构建流程》
前端·javascript
CC__xy3 小时前
04 类型别名type + 检测数据类型(typeof+instanceof) + 空安全+剩余和展开(运算符 ...)简单类型和复杂类型 + 模块化
开发语言·javascript·harmonyos·鸿蒙
小奋斗3 小时前
深入浅出:ES5/ES6+数组扁平化详解
javascript·面试