From 2d31b3812f2195f4afc5f16774e155f00cb0ec20 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Thu, 21 May 2026 14:58:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(form):=20=E5=AE=B9=E5=99=A8=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=96=B0=E5=A2=9E=20extendState=20=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FormBox、FormDialog、FormDrawer 新增 extendState 属性,并透传给内部 MForm, 方便外层注入 $message、$store 等扩展上下文到 formState。 Co-authored-by: Cursor --- packages/form/src/FormBox.vue | 4 +++- packages/form/src/FormDialog.vue | 5 ++++- packages/form/src/FormDrawer.vue | 5 ++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/form/src/FormBox.vue b/packages/form/src/FormBox.vue index 629a1267..e9439d30 100644 --- a/packages/form/src/FormBox.vue +++ b/packages/form/src/FormBox.vue @@ -13,6 +13,7 @@ :label-position="labelPosition" :inline="inline" :prevent-submit-default="preventSubmitDefault" + :extend-state="extendState" @change="changeHandler" > @@ -40,7 +41,7 @@ import { computed, ref, watchEffect } from 'vue'; import { TMagicButton, TMagicScrollbar } from '@tmagic/design'; import Form from './Form.vue'; -import type { ContainerChangeEventData, FormConfig, FormValue } from './schema'; +import type { ContainerChangeEventData, FormConfig, FormState, FormValue } from './schema'; defineOptions({ name: 'MFormBox', @@ -60,6 +61,7 @@ const props = withDefaults( inline?: boolean; labelPosition?: string; preventSubmitDefault?: boolean; + extendState?: (_state: FormState) => Record | Promise>; }>(), { config: () => [], diff --git a/packages/form/src/FormDialog.vue b/packages/form/src/FormDialog.vue index 1ddfc9af..6bb81215 100644 --- a/packages/form/src/FormDialog.vue +++ b/packages/form/src/FormDialog.vue @@ -31,6 +31,7 @@ :label-position="labelPosition" :inline="inline" :prevent-submit-default="preventSubmitDefault" + :extend-state="extendState" @change="changeHandler" > @@ -68,7 +69,7 @@ import { computed, ref } from 'vue'; import { TMagicButton, TMagicCol, TMagicDialog, TMagicRow } from '@tmagic/design'; import Form from './Form.vue'; -import { ContainerChangeEventData, FormConfig, FormValue, StepConfig } from './schema'; +import { ContainerChangeEventData, FormConfig, FormState, FormValue, StepConfig } from './schema'; defineOptions({ name: 'MFormDialog', @@ -95,6 +96,8 @@ const props = withDefaults( destroyOnClose?: boolean; showClose?: boolean; showCancel?: boolean; + /** 透传给内部 `MForm`,用于扩展 `formState`(如注入 `$message` / `$store` 等) */ + extendState?: (_state: FormState) => Record | Promise>; }>(), { config: () => [], diff --git a/packages/form/src/FormDrawer.vue b/packages/form/src/FormDrawer.vue index 6b2c3039..43b71bf6 100644 --- a/packages/form/src/FormDrawer.vue +++ b/packages/form/src/FormDrawer.vue @@ -28,6 +28,7 @@ :label-position="labelPosition" :inline="inline" :prevent-submit-default="preventSubmitDefault" + :extend-state="extendState" @change="changeHandler" > @@ -59,7 +60,7 @@ import { ref, watchEffect } from 'vue'; import { TMagicButton, TMagicCol, TMagicDrawer, TMagicRow } from '@tmagic/design'; import Form from './Form.vue'; -import type { ContainerChangeEventData, FormConfig, FormValue } from './schema'; +import type { ContainerChangeEventData, FormConfig, FormState, FormValue } from './schema'; defineOptions({ name: 'MFormDialog', @@ -83,6 +84,8 @@ withDefaults( preventSubmitDefault?: boolean; /** 关闭前的回调,会暂停 Drawer 的关闭; done 是个 function type 接受一个 boolean 参数, 执行 done 使用 true 参数或不提供参数将会终止关闭 */ beforeClose?: (_done: (_cancel?: boolean) => void) => void; + /** 透传给内部 `MForm`,用于扩展 `formState`(如注入 `$message` / `$store` 等) */ + extendState?: (_state: FormState) => Record | Promise>; }>(), { closeOnPressEscape: true,