Skip to content

Commit

Permalink
fix: form data that is not submitted by the form should not be carrie…
Browse files Browse the repository at this point in the history
…d when switching paging
  • Loading branch information
anncwb committed Nov 9, 2024
1 parent 5e44aa9 commit adc2ffa
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
17 changes: 16 additions & 1 deletion packages/@core/ui-kit/form-ui/src/form-api.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { Recordable } from '@vben-core/typings';
import type {
FormState,
GenericObject,
Expand Down Expand Up @@ -41,11 +42,14 @@ function getDefaultState(): VbenFormProps {
}

export class FormApi {
// 最后一次点击提交时的表单值
private latestSubmissionValues: null | Recordable<any> = null;
private prevState: null | VbenFormProps = null;

// private api: Pick<VbenFormProps, 'handleReset' | 'handleSubmit'>;
public form = {} as FormActions;

isMounted = false;

public state: null | VbenFormProps = null;

stateHandler: StateHandler;
Expand Down Expand Up @@ -110,6 +114,10 @@ export class FormApi {
this.store.batch(cb);
}

getLatestSubmissionValues() {
return this.latestSubmissionValues || {};
}

getState() {
return this.state;
}
Expand Down Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -207,6 +216,10 @@ export class FormApi {
form.setFieldValue(field, value, shouldValidate);
}

setLatestSubmissionValues(values: null | Recordable<any>) {
this.latestSubmissionValues = { ...toRaw(values) };
}

setState(
stateOrFn:
| ((prev: VbenFormProps) => Partial<VbenFormProps>)
Expand Down Expand Up @@ -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();
}
Expand Down
6 changes: 5 additions & 1 deletion packages/effects/plugins/src/vxe-table/use-vxe-grid.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down Expand Up @@ -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支持响应式
Expand Down

0 comments on commit adc2ffa

Please sign in to comment.