fix: form data that is not submitted by the form should not be carried when switching paging (#4847)

pull/48/MERGE
Vben 2024-11-09 21:04:58 +08:00 committed by GitHub
parent 5e44aa9283
commit 546c0928fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 2 deletions

View File

@ -1,3 +1,4 @@
import type { Recordable } from '@vben-core/typings';
import type { import type {
FormState, FormState,
GenericObject, GenericObject,
@ -41,11 +42,14 @@ function getDefaultState(): VbenFormProps {
} }
export class FormApi { export class FormApi {
// 最后一次点击提交时的表单值
private latestSubmissionValues: null | Recordable<any> = null;
private prevState: null | VbenFormProps = null; private prevState: null | VbenFormProps = null;
// private api: Pick<VbenFormProps, 'handleReset' | 'handleSubmit'>; // private api: Pick<VbenFormProps, 'handleReset' | 'handleSubmit'>;
public form = {} as FormActions; public form = {} as FormActions;
isMounted = false; isMounted = false;
public state: null | VbenFormProps = null; public state: null | VbenFormProps = null;
stateHandler: StateHandler; stateHandler: StateHandler;
@ -110,6 +114,10 @@ export class FormApi {
this.store.batch(cb); this.store.batch(cb);
} }
getLatestSubmissionValues() {
return this.latestSubmissionValues || {};
}
getState() { getState() {
return this.state; return this.state;
} }
@ -164,6 +172,7 @@ export class FormApi {
if (!this.isMounted) { if (!this.isMounted) {
Object.assign(this.form, formActions); Object.assign(this.form, formActions);
this.stateHandler.setConditionTrue(); this.stateHandler.setConditionTrue();
this.setLatestSubmissionValues({ ...toRaw(this.form.values) });
this.isMounted = true; this.isMounted = true;
} }
} }
@ -207,6 +216,10 @@ export class FormApi {
form.setFieldValue(field, value, shouldValidate); form.setFieldValue(field, value, shouldValidate);
} }
setLatestSubmissionValues(values: null | Recordable<any>) {
this.latestSubmissionValues = { ...toRaw(values) };
}
setState( setState(
stateOrFn: stateOrFn:
| ((prev: VbenFormProps) => Partial<VbenFormProps>) | ((prev: VbenFormProps) => Partial<VbenFormProps>)
@ -249,12 +262,14 @@ export class FormApi {
await form.submitForm(); await form.submitForm();
const rawValues = toRaw(form.values || {}); const rawValues = toRaw(form.values || {});
await this.state?.handleSubmit?.(rawValues); await this.state?.handleSubmit?.(rawValues);
return rawValues; return rawValues;
} }
unmount() { unmount() {
this.form?.resetForm?.(); this.form?.resetForm?.();
// this.state = null; // this.state = null;
this.latestSubmissionValues = null;
this.isMounted = false; this.isMounted = false;
this.stateHandler.reset(); this.stateHandler.reset();
} }

View File

@ -66,11 +66,13 @@ const slots = useSlots();
const [Form, formApi] = useTableForm({ const [Form, formApi] = useTableForm({
handleSubmit: async () => { handleSubmit: async () => {
const formValues = formApi.form.values; const formValues = formApi.form.values;
formApi.setLatestSubmissionValues(toRaw(formValues));
props.api.reload(formValues); props.api.reload(formValues);
}, },
handleReset: async () => { handleReset: async () => {
await formApi.resetForm(); await formApi.resetForm();
const formValues = formApi.form.values; const formValues = formApi.form.values;
formApi.setLatestSubmissionValues(formValues);
props.api.reload(formValues); props.api.reload(formValues);
}, },
commonConfig: { commonConfig: {
@ -225,7 +227,9 @@ async function init() {
} }
props.api?.setState?.({ gridOptions: defaultGridOptions }); props.api?.setState?.({ gridOptions: defaultGridOptions });
// form vben-form query // form vben-form query
extendProxyOptions(props.api, defaultGridOptions, () => formApi.form.values); extendProxyOptions(props.api, defaultGridOptions, () =>
formApi.getLatestSubmissionValues(),
);
} }
// formOptions // formOptions