1.el-table 代码
<el-table
v-if="refreshTable"
ref="cTable"
v-loading="loading"
:data="list"
:default-expand-all="isExpandAll"
row-key="id"
max-height="500px"
lazy
:load="load"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>
<el-table-column align="right" label="操作" width="260">
<template #default="scope">
<el-button
v-hasPermi="['system:menu:delete']"
link
type="danger"
@click="handleDelete(scope.$index, scope.row)"
>
删除
</el-button>
</template>
2.vue3代码
const loadMap = new Map()
const load = async (row: City, treeNode: unknown, resolve: (date: City[]) => void) => {
loadMap.set(row.id, { row, treeNode, resolve })
queryParams.code = row.code
//请求子节点数据
const data = await baseApi.getCityInfoPage(queryParams)
resolve(data)
}
/** 删除按钮操作 */
const handleDelete = async (index, item) => {
// 删除的二次确认
await message.delConfirm()
//子节点中需要有父级的id
const { row, treeNode, resolve } = loadMap.get(item.parentId)
// 发起删除
await baseApi.deleteCityInfoe(item.id)
if (cTable.value.store.states.lazyTreeNodeMap.value[item.parentId].length > 1) {
//说明该节点下有多个子节点
cTable.value.store.states.lazyTreeNodeMap[item.parentId] = []
} else {
//说明该节点只有一个节点
cTable.value.store.states.lazyTreeNodeMap.value[item.parentId] = []
}
load(row, treeNode, resolve)
// 刷新列表
await getList()
}