refactor: preserveTreeTableState

This commit is contained in:
dap 2025-05-26 09:28:54 +08:00
parent 95859e36a2
commit bea7c1a094
3 changed files with 28 additions and 24 deletions

View File

@ -1,5 +1,4 @@
import type { VxeGridPropTypes } from '@vben/plugins/vxe-table'; import type { VxeGridPropTypes } from '@vben/plugins/vxe-table';
import type { MaybePromise } from '@vben/types';
import { h } from 'vue'; import { h } from 'vue';
@ -134,25 +133,3 @@ export function addSortParams(
params.orderByColumn = orderByColumn; params.orderByColumn = orderByColumn;
params.isAsc = isAsc; params.isAsc = isAsc;
} }
/**
* / // ()
*
* @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

@ -0,0 +1,25 @@
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

@ -8,14 +8,16 @@ import { computed, ref } from 'vue';
import { useAccess } from '@vben/access'; import { useAccess } from '@vben/access';
import { Fallback, Page, useVbenDrawer } from '@vben/common-ui'; import { Fallback, Page, useVbenDrawer } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { eachTree, getVxePopupContainer, treeToList } from '@vben/utils'; import { eachTree, getVxePopupContainer, treeToList } from '@vben/utils';
import { Popconfirm, Space, Switch, Tooltip } from 'ant-design-vue'; import { Popconfirm, Space, Switch, Tooltip } from 'ant-design-vue';
import { preserveTreeTableState, useVbenVxeGrid } from '#/adapter/vxe-table'; 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';
/** /**