From eae9725ccbbdbe8ffc9ded5af42993cff21bec77 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Wed, 15 Jun 2022 19:34:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(form):=20=E5=87=BD=E6=95=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=AD=E6=B7=BB=E5=8A=A0config=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/form/src/containers/Container.vue | 2 ++ packages/form/src/containers/Tabs.vue | 14 +++++++++++--- packages/form/src/fields/Select.vue | 3 +++ packages/form/src/schema.ts | 7 +++++++ packages/form/src/utils/form.ts | 2 ++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/form/src/containers/Container.vue b/packages/form/src/containers/Container.vue index cd06308b..99d547b2 100644 --- a/packages/form/src/containers/Container.vue +++ b/packages/form/src/containers/Container.vue @@ -217,6 +217,7 @@ export default defineComponent({ values: mForm?.initValues, formValue: mForm?.values, prop: itemProp.value, + config: props.config, }); } @@ -234,6 +235,7 @@ export default defineComponent({ values: mForm?.initValues, formValue: mForm?.values, prop: itemProp.value, + config: props.config, }); } }; diff --git a/packages/form/src/containers/Tabs.vue b/packages/form/src/containers/Tabs.vue index 5f5bbcf3..01972015 100644 --- a/packages/form/src/containers/Tabs.vue +++ b/packages/form/src/containers/Tabs.vue @@ -136,7 +136,11 @@ const Tab = defineComponent({ if (!props.config.name) throw new Error('dynamic tab 必须配置name'); if (typeof props.config.onTabAdd === 'function') { - props.config.onTabAdd(mForm, { model: props.model }); + props.config.onTabAdd(mForm, { + model: props.model, + prop: props.prop, + config: props.config, + }); } else if (tabs.value.length > 0) { const newObj = cloneDeep(tabs.value[0]); newObj.title = `标签${tabs.value.length + 1}`; @@ -150,7 +154,11 @@ const Tab = defineComponent({ if (!props.config.name) throw new Error('dynamic tab 必须配置name'); if (typeof props.config.onTabRemove === 'function') { - props.config.onTabRemove(mForm, tabName, { model: props.model }); + props.config.onTabRemove(mForm, tabName, { + model: props.model, + prop: props.prop, + config: props.config, + }); } else { props.model[props.config.name].splice(+tabName, 1); @@ -169,7 +177,7 @@ const Tab = defineComponent({ changeHandler: () => { emit('change', props.model); if (typeof props.config.onChange === 'function') { - props.config.onChange(mForm, { model: props.model }); + props.config.onChange(mForm, { model: props.model, prop: props.prop, config: props.config }); } }, }; diff --git a/packages/form/src/fields/Select.vue b/packages/form/src/fields/Select.vue index cbf02247..1c964d90 100644 --- a/packages/form/src/fields/Select.vue +++ b/packages/form/src/fields/Select.vue @@ -134,6 +134,7 @@ export default defineComponent({ model: props.model, formValue: mForm?.values, formValues: mForm?.values, + config: props.config, }) as Record; } @@ -163,6 +164,7 @@ export default defineComponent({ model: props.model, formValue: mForm?.values, formValues: mForm?.values, + config: props.config, }); } @@ -287,6 +289,7 @@ export default defineComponent({ prop: props.prop, formValues: mForm?.values, formValue: mForm?.values, + config: props.config, }), ).then((data) => { options.value = data; diff --git a/packages/form/src/schema.ts b/packages/form/src/schema.ts index b4e1e251..84066797 100644 --- a/packages/form/src/schema.ts +++ b/packages/form/src/schema.ts @@ -120,6 +120,7 @@ export interface Rule { /** 整个表单的值 */ formValue: FormValue; prop: string; + config: any; }, mForm: FormState | undefined, ) => void; @@ -145,6 +146,7 @@ type FilterFunction = ( parent?: Record; formValue: Record; prop: string; + config: any; }, ) => boolean; @@ -156,6 +158,7 @@ type OnChangeHandler = ( values: Record; parent?: Record; formValue: Record; + config: any; }, ) => any; @@ -191,6 +194,7 @@ type SelectOptionFunction = ( prop?: string; formValues: any; formValue: any; + config: any; }, ) => SelectOption[] | SelectGroupOption[]; @@ -200,6 +204,7 @@ type RemoteSelectOptionBodyFunction = ( model: any; formValue: any; formValues: any; + config: any; }, ) => Record; @@ -210,6 +215,7 @@ type RemoteSelectOptionRequestFunction = ( model: any; formValue: any; formValues: any; + config: any; }, ) => any; @@ -500,6 +506,7 @@ export interface TabPaneConfig { lazy?: boolean; labelWidth?: string; items: FormConfig; + [key: string]: any; } export interface TabConfig extends FormItem, ContainerCommonConfig { type: 'tab' | 'dynamic-tab'; diff --git a/packages/form/src/utils/form.ts b/packages/form/src/utils/form.ts index 652c2765..3fd619d3 100644 --- a/packages/form/src/utils/form.ts +++ b/packages/form/src/utils/form.ts @@ -201,6 +201,7 @@ export const filterFunction = (mForm: FormState | undefined, config: any, props: parent: mForm?.parentValues || {}, formValue: mForm?.values || props.model, prop: props.prop, + config: props.config, }); }; @@ -242,6 +243,7 @@ export const getRules = function (mForm: FormState | undefined, rules: Rule[] | parent: mForm?.parentValues || {}, formValue: mForm?.values || props.model, prop: props.prop, + config: props.config, }, mForm, );