From ef390ae636fa630916dfb77433c998ef2ba8bd45 Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Tue, 8 Apr 2025 10:57:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=9F=E6=88=B7=E5=A5=97?= =?UTF-8?q?=E9=A4=90useBeforeCloseDiff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/system/tenantPackage/data.ts | 1 - .../tenantPackage/tenant-package-drawer.vue | 29 +++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/apps/web-antd/src/views/system/tenantPackage/data.ts b/apps/web-antd/src/views/system/tenantPackage/data.ts index 2dfe1994..eff6422e 100644 --- a/apps/web-antd/src/views/system/tenantPackage/data.ts +++ b/apps/web-antd/src/views/system/tenantPackage/data.ts @@ -65,7 +65,6 @@ export const drawerSchema: FormSchemaGetter = () => [ { component: 'Textarea', fieldName: 'remark', - formItemClass: 'items-start', label: '备注', }, ]; diff --git a/apps/web-antd/src/views/system/tenantPackage/tenant-package-drawer.vue b/apps/web-antd/src/views/system/tenantPackage/tenant-package-drawer.vue index 839dbaa3..8c4ba0d7 100644 --- a/apps/web-antd/src/views/system/tenantPackage/tenant-package-drawer.vue +++ b/apps/web-antd/src/views/system/tenantPackage/tenant-package-drawer.vue @@ -17,6 +17,7 @@ import { packageUpdate, } from '#/api/system/tenant-package'; import { MenuSelectTable } from '#/components/tree'; +import { defaultFormValueGetter, useBeforeCloseDiff } from '#/utils/popup'; import { drawerSchema } from './data'; @@ -65,8 +66,24 @@ async function setupMenuTree(id?: number | string) { } } +async function customFormValueGetter() { + const v = await defaultFormValueGetter(formApi)(); + // 获取勾选信息 + const menuIds = menuSelectRef.value?.getCheckedKeys?.() ?? []; + const mixStr = v + menuIds.join(','); + return mixStr; +} + +const { onBeforeClose, markInitialized, resetInitialized } = useBeforeCloseDiff( + { + initializedGetter: customFormValueGetter, + currentGetter: customFormValueGetter, + }, +); + const [BasicDrawer, drawerApi] = useVbenDrawer({ - onCancel: handleCancel, + onBeforeClose, + onClosed: handleClosed, onConfirm: handleConfirm, async onOpenChange(isOpen) { if (!isOpen) { @@ -84,6 +101,7 @@ const [BasicDrawer, drawerApi] = useVbenDrawer({ } // init菜单 注意顺序要放在赋值record之后 内部watch会依赖record await setupMenuTree(id); + await markInitialized(); drawerApi.drawerLoading(false); }, @@ -103,8 +121,9 @@ async function handleConfirm() { const data = cloneDeep(await formApi.getValues()); data.menuIds = menuIds; await (isUpdate.value ? packageUpdate(data) : packageAdd(data)); + resetInitialized(); emit('reload'); - await handleCancel(); + drawerApi.close(); } catch (error) { console.error(error); } finally { @@ -112,9 +131,9 @@ async function handleConfirm() { } } -async function handleCancel() { - drawerApi.close(); +async function handleClosed() { await formApi.resetForm(); + resetInitialized(); } /** @@ -127,7 +146,7 @@ function handleMenuCheckStrictlyChange(value: boolean) {