diff --git a/packages/@core/ui-kit/form-ui/src/form-api.ts b/packages/@core/ui-kit/form-ui/src/form-api.ts index a834a28285d..ebd2f7362a4 100644 --- a/packages/@core/ui-kit/form-ui/src/form-api.ts +++ b/packages/@core/ui-kit/form-ui/src/form-api.ts @@ -1,3 +1,4 @@ +import type { Recordable } from '@vben-core/typings'; import type { FormState, GenericObject, @@ -41,11 +42,14 @@ function getDefaultState(): VbenFormProps { } export class FormApi { + // 最后一次点击提交时的表单值 + private latestSubmissionValues: null | Recordable = null; private prevState: null | VbenFormProps = null; + // private api: Pick; public form = {} as FormActions; - isMounted = false; + public state: null | VbenFormProps = null; stateHandler: StateHandler; @@ -110,6 +114,10 @@ export class FormApi { this.store.batch(cb); } + getLatestSubmissionValues() { + return this.latestSubmissionValues || {}; + } + getState() { return this.state; } @@ -164,6 +172,7 @@ export class FormApi { if (!this.isMounted) { Object.assign(this.form, formActions); this.stateHandler.setConditionTrue(); + this.setLatestSubmissionValues({ ...toRaw(this.form.values) }); this.isMounted = true; } } @@ -207,6 +216,10 @@ export class FormApi { form.setFieldValue(field, value, shouldValidate); } + setLatestSubmissionValues(values: null | Recordable) { + this.latestSubmissionValues = { ...toRaw(values) }; + } + setState( stateOrFn: | ((prev: VbenFormProps) => Partial) @@ -249,12 +262,14 @@ export class FormApi { await form.submitForm(); const rawValues = toRaw(form.values || {}); await this.state?.handleSubmit?.(rawValues); + return rawValues; } unmount() { this.form?.resetForm?.(); // this.state = null; + this.latestSubmissionValues = null; this.isMounted = false; this.stateHandler.reset(); } diff --git a/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue b/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue index 8154d7ee854..d8347f70788 100644 --- a/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue +++ b/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue @@ -66,11 +66,13 @@ const slots = useSlots(); const [Form, formApi] = useTableForm({ handleSubmit: async () => { const formValues = formApi.form.values; + formApi.setLatestSubmissionValues(toRaw(formValues)); props.api.reload(formValues); }, handleReset: async () => { await formApi.resetForm(); const formValues = formApi.form.values; + formApi.setLatestSubmissionValues(formValues); props.api.reload(formValues); }, commonConfig: { @@ -225,7 +227,9 @@ async function init() { } props.api?.setState?.({ gridOptions: defaultGridOptions }); // form 由 vben-form 代替,所以需要保证query相关事件可以拿到参数 - extendProxyOptions(props.api, defaultGridOptions, () => formApi.form.values); + extendProxyOptions(props.api, defaultGridOptions, () => + formApi.getLatestSubmissionValues(), + ); } // formOptions支持响应式