element plus table树形数据,增、删、改子节点数据时,进行局部刷新,而不刷新整个页面
·
<template>
<el-table
ref="tableRef"
v-loading="listLoading"
border
:data="list"
:indent="24"
lazy
:load="load"
row-key="task_guid"
:scrollbar-always-on="true"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>...
</el-table>
</template>
<script setup>
const listLoading = ref(false)
// 保存节点映射的 Map
const maps = reactive(new Map())
const load = async (row, treeNode, resolve) => {
const pid = row.id
maps.set(pid, { row, treeNode, resolve })
const post_data = {
parent_id: row.id,
}
listLoading.value = true
...
接口调用成功
if (success == true) {
if (list.length > 0) {
resolve(list)
} else {
row.hasChildren = false
}
} else {
showMsgError(msg)
}
listLoading.value = false
}
const tableRef = ref()
//重新获取数据,并保留上次的展开状态
const maintainStatus = async () => {
//拷贝更新前的表格数据状态
const oldTreeData = JSON.parse(
JSON.stringify(state['tableRef'].store.states)
)
//重新获取数据
await fetchData()
nextTick(() => {
//将旧节点的展开状态赋给新节点
for (const item in oldTreeData.treeData._value) {
if (state['tableRef'].store.states.treeData.value[item]) {
state['tableRef'].store.states.treeData.value[item] =
oldTreeData.treeData._value[item]
}
}
})
}
//删除
const onDelete = (_row) => {
if (_row.task_guid) {
state.listLoading = true
//调用删除接口
if (success == true) {
//进行删除成功提示
if (_row.parent_id == '0') {
//若删除的数据为根节点数据,需要重新获取数据,否则页面显示条数会不匹配,如显示一页显示20条数据,但是删除之后只剩19条数据
maintainStatus()
} else {
//若删除的为非根节点数据,只需更新删除节点的父节点数据即可
const pid = _row.parent_id //取出当前删除行的pid
const { row, treeNode, resolve } = maps.get(pid) //根据pid取出对应的节点数据
state['tableRef'].store.states.lazyTreeNodeMap.value[pid] = []
await load(row, treeNode, resolve)
}
maps.delete(_row.id)
} else {
//进行错误提示
}
state.listLoading = false
}
}
//新增根节点数据
const addRootData = (_row) => {
maintainStatus()
}
//编辑数据
const editData = (_row) => {
const objs = maps.get(_row.parent_id)
if (objs !== undefined && objs !== '') {
//如果是子节点数据,先进行更新子节点数据
const { row, treeNode, resolve } = maps.get(_row.parent_task_guid)
await load(row, treeNode, resolve) //await 为了确保执行将节点数据赋值给oldTreeData时,已经是更新了的数据
} else {
maintainStatus()
}
}
//新增子节点数据
const addSubData = (_row) => {
if (_row.parent_id == '0') {
// 若新增子节点的父节点为根节点
const objs = maps.get(_row.id)
if (objs == undefined || objs == '') {
// 新增子节点后,其父节点原来可能没有子节点数据不可暂开,现在变为有子节点的数据,故需要重新获取页面数据,才能显示>进行展开
maintainStatus()
} else {
const { row, treeNode, resolve } = maps.get(
_row.id
)
await load(row, treeNode, resolve)
}
} else {
// 若新增子节点的父节点不为根节点,则只需更新其父节点数据
const { row, treeNode, resolve } = maps.get(
_row.parent_id
)
await load(row, treeNode, resolve)
}
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)