From 0da75418d0bacfed38fd2a912dfed0923b5ac14b Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Fri, 30 May 2025 17:51:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=8F=9C=E5=8D=95=E7=AE=A1?= =?UTF-8?q?=E7=90=86=20=E5=88=B7=E6=96=B0=E6=8E=A5=E5=8F=A3=E5=90=8E=20?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=B1=95=E5=BC=80=E8=A1=8C=E7=9A=84=E6=83=85?= =?UTF-8?q?=E5=86=B5=20(=E6=94=B9=E4=B8=BAvxe=E9=85=8D=E7=BD=AE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/views/system/menu/helper.ts | 25 ------------------- apps/web-antd/src/views/system/menu/index.vue | 25 +++++++++---------- 2 files changed, 12 insertions(+), 38 deletions(-) delete mode 100644 apps/web-antd/src/views/system/menu/helper.ts diff --git a/apps/web-antd/src/views/system/menu/helper.ts b/apps/web-antd/src/views/system/menu/helper.ts deleted file mode 100644 index 61181f50..00000000 --- a/apps/web-antd/src/views/system/menu/helper.ts +++ /dev/null @@ -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[1], - callback: () => MaybePromise, -) { - // 保存当前状态 - const scrollState = tableApi.grid.getScroll(); - const expandRecords = tableApi.grid.getTreeExpandRecords(); - - // 执行回调 - await callback(); - - // 恢复状态 - tableApi.grid.setTreeExpand(expandRecords, true); - tableApi.grid.scrollTo(scrollState.scrollLeft, scrollState.scrollTop); -} diff --git a/apps/web-antd/src/views/system/menu/index.vue b/apps/web-antd/src/views/system/menu/index.vue index 194290ee..14bda194 100644 --- a/apps/web-antd/src/views/system/menu/index.vue +++ b/apps/web-antd/src/views/system/menu/index.vue @@ -17,7 +17,6 @@ import { useVbenVxeGrid } from '#/adapter/vxe-table'; import { menuCascadeRemove, menuList, menuRemove } from '#/api/system/menu'; import { columns, querySchema } from './data'; -import { preserveTreeTableState } from './helper'; import menuDrawer from './menu-drawer.vue'; /** @@ -69,6 +68,8 @@ const gridOptions: VxeGridProps = { rowField: 'menuId', // 自动转换为tree 由vxe处理 无需手动转换 transform: true, + // 刷新接口后 记录展开行的情况 + reserve: true, }, id: 'system-menu-index', }; @@ -118,17 +119,15 @@ async function handleEdit(record: Menu) { */ const cascadingDeletion = ref(false); async function handleDelete(row: Menu) { - await preserveTreeTableState(tableApi, async () => { - if (cascadingDeletion.value) { - // 级联删除 - const menuAndChildren: Menu[] = treeToList([row], { id: 'menuId' }); - await menuCascadeRemove(menuAndChildren.map((item) => item.menuId)); - } else { - // 单删除 - await menuRemove([row.menuId]); - } - await tableApi.query(); - }); + if (cascadingDeletion.value) { + // 级联删除 + const menuAndChildren: Menu[] = treeToList([row], { id: 'menuId' }); + await menuCascadeRemove(menuAndChildren.map((item) => item.menuId)); + } else { + // 单删除 + await menuRemove([row.menuId]); + } + await tableApi.query(); } function removeConfirmTitle(row: Menu) { @@ -147,7 +146,7 @@ function removeConfirmTitle(row: Menu) { * 编辑/添加成功后刷新表格 */ async function afterEditOrAdd() { - await preserveTreeTableState(tableApi, () => tableApi.query()); + tableApi.query(); } /**