diff --git a/src/components/Form/src/components/FormItem.vue b/src/components/Form/src/components/FormItem.vue index 57b63ac7..b9701e0b 100644 --- a/src/components/Form/src/components/FormItem.vue +++ b/src/components/Form/src/components/FormItem.vue @@ -174,8 +174,12 @@ return Promise.resolve(); } - if ((!rules || rules.length === 0) && required) { - rules = [{ required, validator }]; + const getRequired = isFunction(required) + ? required(unref(getValues)) + : required; + + if ((!rules || rules.length === 0) && getRequired) { + rules = [{ required: getRequired, validator }]; } const requiredRuleIndex: number = rules.findIndex( diff --git a/src/components/Form/src/types/form.ts b/src/components/Form/src/types/form.ts index 1cc0b16c..d5159aac 100644 --- a/src/components/Form/src/types/form.ts +++ b/src/components/Form/src/types/form.ts @@ -149,7 +149,7 @@ export interface FormSchema { }) => Recordable) | object; // Required - required?: boolean; + required?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); suffix?: string | number | ((values: RenderCallbackParams) => string | number);