refactor: 菜单管理 刷新接口后 记录展开行的情况 (改为vxe配置)

This commit is contained in:
dap 2025-05-30 17:51:06 +08:00
parent 55f0da3085
commit 0da75418d0
2 changed files with 12 additions and 38 deletions

View File

@ -1,25 +0,0 @@
import type { MaybePromise } from '@vben/types';
import type { useVbenVxeGrid } from '#/adapter/vxe-table';
/**
* / // ()
*
* @param tableApi api
* @param callback
*/
export async function preserveTreeTableState(
tableApi: ReturnType<typeof useVbenVxeGrid>[1],
callback: () => MaybePromise<void>,
) {
// 保存当前状态
const scrollState = tableApi.grid.getScroll();
const expandRecords = tableApi.grid.getTreeExpandRecords();
// 执行回调
await callback();
// 恢复状态
tableApi.grid.setTreeExpand(expandRecords, true);
tableApi.grid.scrollTo(scrollState.scrollLeft, scrollState.scrollTop);
}

View File

@ -17,7 +17,6 @@ import { useVbenVxeGrid } from '#/adapter/vxe-table';
import { menuCascadeRemove, menuList, menuRemove } from '#/api/system/menu'; import { menuCascadeRemove, menuList, menuRemove } from '#/api/system/menu';
import { columns, querySchema } from './data'; import { columns, querySchema } from './data';
import { preserveTreeTableState } from './helper';
import menuDrawer from './menu-drawer.vue'; import menuDrawer from './menu-drawer.vue';
/** /**
@ -69,6 +68,8 @@ const gridOptions: VxeGridProps = {
rowField: 'menuId', rowField: 'menuId',
// tree vxe // tree vxe
transform: true, transform: true,
//
reserve: true,
}, },
id: 'system-menu-index', id: 'system-menu-index',
}; };
@ -118,17 +119,15 @@ async function handleEdit(record: Menu) {
*/ */
const cascadingDeletion = ref(false); const cascadingDeletion = ref(false);
async function handleDelete(row: Menu) { async function handleDelete(row: Menu) {
await preserveTreeTableState(tableApi, async () => { if (cascadingDeletion.value) {
if (cascadingDeletion.value) { //
// const menuAndChildren: Menu[] = treeToList([row], { id: 'menuId' });
const menuAndChildren: Menu[] = treeToList([row], { id: 'menuId' }); await menuCascadeRemove(menuAndChildren.map((item) => item.menuId));
await menuCascadeRemove(menuAndChildren.map((item) => item.menuId)); } else {
} else { //
// await menuRemove([row.menuId]);
await menuRemove([row.menuId]); }
} await tableApi.query();
await tableApi.query();
});
} }
function removeConfirmTitle(row: Menu) { function removeConfirmTitle(row: Menu) {
@ -147,7 +146,7 @@ function removeConfirmTitle(row: Menu) {
* 编辑/添加成功后刷新表格 * 编辑/添加成功后刷新表格
*/ */
async function afterEditOrAdd() { async function afterEditOrAdd() {
await preserveTreeTableState(tableApi, () => tableApi.query()); tableApi.query();
} }
/** /**