element-plus表格默认展开有子的数据

思路如下:

使用组件提供的

@expand-change="handleExpandChange",和:expand-row-keys="tableConfig.expandRowKeys"

html 复制代码
<el-table
        ref="refTable"
        :data="tableConfig.tableData"
        v-loading="tableConfig.loading"
        :header-cell-style="{ background: '#F5F7FA', height: '30px' }"
        style="width: 100%; margin: 0 auto"
        height="100%"
        align="center"
        row-key="interfacecode"
        stripe
        border
        @select="select"
        @select-all="handleSelectAllRow"
        class="custom-table"
        @expand-change="handleExpandChange"
        :expand-row-keys="tableConfig.expandRowKeys"
      >
        xxxxxxx
</el-table>
javascript 复制代码
const tableConfig = reactive({
  tableData: [],
  page: 1,
  pageSize: 15,
  total: 0,
  loading: false,
  selectIdList: [],
  selectRow: [],
  expandRowKeys: [] //处理展示的数据
})


//查询
const fniSearchTable = async () => {
  tableConfig.loading = false
  try {
    const params = {
      pageindex: tableConfig.page,
      pagesize: tableConfig.pageSize,
      searchstr: {
       //查询的参数,当前是我自己项目中的传参
      }
    }
    const res = await qryInterfaceConfigList(params)
    const { data } = res
    if (data.rows && data.rows.length > 0) {
      tableConfig.tableData = data.rows.map((item) => {
        // 处理父元素
        const processedItem = {
          ...item,
          interfaceText: item.interfacesend ? item.interfacesend + '->' + (item.interfacereceive ? item.interfacereceive : '') : '',
          interfaceavailable: item.interfaceavailable ? (item.interfaceavailable == 'Y' ? '启用' : '停用') : ''
        }

        // 递归处理子元素
        if (item.children && item.children.length > 0) {
          processedItem.children = item.children.map((child) => ({
            hasChildren: true, //表格行是否显示展开箭头
            ...child,
            interfaceText: child.interfacesend ? child.interfacesend + '->' + (child.interfacereceive ? child.interfacereceive : '') : '',
            interfaceavailable: child.interfaceavailable ? (child.interfaceavailable == 'Y' ? '启用' : '停用') : ''
          }))
        }
        return processedItem
      })
//handleExpandChange方法中第一个是要展开的行信息,第二个参数是数组形式的行数据信息
      nextTick(() => {
        handleExpandChange(tableConfig.tableData[0], tableConfig.tableData)
      })
    } else {
      tableConfig.tableData = []
    }
    tableConfig.total = data.rowcount || 0
    tableConfig.loading = false
  } catch (error) {
    tableConfig.tableData = []
    tableConfig.total = 0
    tableConfig.loading = false
    console.error(error)
  }
}

// 触发点击箭头事件: interfacecalccode是我数据的唯一值
const handleExpandChange = (row, expandedRows) => {
  if (expandedRows.includes(row)) {
    tableConfig.expandRowKeys.push(row.interfacecalccode)
  } else {
    const index = tableConfig.expandRowKeys.indexOf(row.interfacecalccode)
    if (index > -1) {
      tableConfig.expandRowKeys.splice(index, 1)
    }
  }
}
相关推荐
一个懒人懒人2 分钟前
Promise async/await与fetch的概念
前端·javascript·html
Mintopia8 分钟前
Web 安全与反编译源码下的权限设计:构筑前后端一致的防护体系
前端·安全
输出输入10 分钟前
前端核心技术
开发语言·前端
Mintopia14 分钟前
Web 安全与反编译源码下的权限设计:构建前后端一体的信任防线
前端·安全·编译原理
林深现海35 分钟前
Jetson Orin nano/nx刷机后无法打开chrome/firefox浏览器
前端·chrome·firefox
EchoEcho1 小时前
深入理解 Vue.js 渲染机制:从声明式到虚拟 DOM 的完整实现
vue.js
黄诂多1 小时前
APP原生与H5互调Bridge技术原理及基础使用
前端
前端市界1 小时前
用 React 手搓一个 3D 翻页书籍组件,呼吸海浪式翻页,交互体验带感!
前端·架构·github
文艺理科生1 小时前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
前端·后端·架构
千寻girling1 小时前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试