el-table 树形数据,子行数据可以异步加载

1、

javascript 复制代码
<el-table
	border
    :header-cell-style="tableStyle?.headerCellStyle"
    ref="tableRef"
    :data="tableData"
    row-key="id"
    
	:default-expand-all="false" // 默认不展开所有树形节点

    :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
	/*
		配置树形结构的属性,
		children:指定子节点数据的字段名,
		hasChildren:指定一个布尔值字段,表示是否有子节点
		这样组件就知道如何递归渲染树形结构。*/

    lazy // 启用懒加载模式(子节点数据不会一次性加载,而是当用户展开某个节点时,通过load方法动态加载)
    
	:load="load"
	/*
		指定懒加载时调用的方法,这里绑定的是load方法。
		当用户展开一个节点时,会触发这个方法,传入当前行的数据和resolve回调函数,用于异步加载子节点数据。
	*/
></el-table>



import { treeByParentId } from '/@/api/admin/dept';

const tableData = ref([])
let nowRowId = ref('')

const getTableList = (parentId) => {
  return new Promise(resolve => {
    treeByParentId({parentId}).then(res => {
      if(res.code == 0 && Array.isArray(res.data)){
        resolve(res.data)
      } else {
        resolve([])
        useMessage().error(res.msg || '数据已加载完毕')
      }
    }).catch(() => {
       resolve([])
    })
  })
}

const load = async (row, treeNode, resolve) => {
  if (!row.hasChildren) {
    return resolve([])
  } else {
    nowRowId.value = row.id
    const data = await getTableList(row.id)
    row.children = data
    resolve(data)
  }
}

const getData = async (parentId = nowRowId.value) => {
  // 查询的时候,如果deptName的值不为空,parentId置为空
  if(state.queryForm.deptName != ''){
    parentId = ''
  }
  const { data } = await treeByParentId({ parentId, deptName: state.queryForm.deptName })
  tableData.value = data
}

onMounted(() => {
  getData()
})

// 重置
const reset = () => {
  nowRowId.value = ''
  state.queryForm.deptName = ''
  getData()
}

2、

接口的数据结构:

javascript 复制代码
{
  "code": 0,
  "data": [
    {
      "id": "唯一标识",
      "name": "节点名称",
      "hasChildren": true,  // 必须字段!
      "children": []        // 必须字段(即使为空数组)
    },
    // ...其他节点
  ]
}
相关推荐
张元清5 小时前
React useEventSource Hook:自带断线重连的 Server-Sent Events (2026)
javascript·react.js
铁皮饭盒5 小时前
网页端, 6.5MB人脸识别模型, 谷歌框架, 又快又准
前端·javascript·后端
自进化Agent智能体6 小时前
Hermes 工具与工具集——Hermes 的内置能力
javascript
你挚爱的强哥6 小时前
【exportExcel】单纯靠js不用任何其他第三方插件导出xls格式文件
开发语言·javascript·ecmascript
大家的林语冰7 小时前
👉 尤雨溪再次成立新公司,同时官宣 Pinia 4 正式发布!
前端·javascript·vue.js
用户938515635077 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战(二)
前端·javascript·typescript
BD_Marathon8 小时前
部署Spark
大数据·javascript·spark
gis开发之家9 小时前
《Vue3 从入门到大神50篇》Vue3 源码详解(二十):生命周期钩子源码解析 —— onMounted / onUpdated 如何实现?
前端·javascript·前端框架·vue3·vue3源码
全栈项目管理程序猿9 小时前
ArcGIS JS 基础教程(9):天空盒与大气效果
javascript
平凡的阿泽9 小时前
我用TRAE Work手搓了一个「谁是卧底」小游戏
前端·javascript