diff --git a/src/components/Form/src/components/FormItem.vue b/src/components/Form/src/components/FormItem.vue index d4a6073c..004fc291 100644 --- a/src/components/Form/src/components/FormItem.vue +++ b/src/components/Form/src/components/FormItem.vue @@ -159,7 +159,6 @@ isShow = isShow && itemIsAdvanced; return { isShow, isIfShow }; } - function handleRules(): ValidationRule[] { const { rules: defRules = [], @@ -179,7 +178,7 @@ const joinLabel = Reflect.has(props.schema, 'rulesMessageJoinLabel') ? rulesMessageJoinLabel : globalRulesMessageJoinLabel; - const assertLabel = joinLabel ? label : ''; + const assertLabel = joinLabel ? (isFunction(label) ? '' : label) : ''; const defaultMsg = component ? createPlaceholderMessage(component) + assertLabel : assertLabel; @@ -337,12 +336,13 @@ function renderLabelHelpMessage() { const { label, helpMessage, helpComponentProps, subLabel } = props.schema; + const getLabel = isFunction(label) ? label(unref(getValues)) : label; const renderLabel = subLabel ? ( - {label} {subLabel} + {getLabel} {subLabel} ) : ( - label + getLabel ); const getHelpMessage = isFunction(helpMessage) ? helpMessage(unref(getValues)) @@ -385,8 +385,8 @@ return slot ? getSlot(slots, slot, unref(getValues), opts) : render - ? render(unref(getValues), opts) - : renderComponent(); + ? render(unref(getValues), opts) + : renderComponent(); }; const showSuffix = !!suffix; @@ -437,8 +437,8 @@ return colSlot ? getSlot(slots, colSlot, values, opts) : renderColContent - ? renderColContent(values, opts) - : renderItem(); + ? renderColContent(values, opts) + : renderItem(); }; return ( diff --git a/src/components/Form/src/types/form.ts b/src/components/Form/src/types/form.ts index 56f75e26..276a4776 100644 --- a/src/components/Form/src/types/form.ts +++ b/src/components/Form/src/types/form.ts @@ -140,7 +140,7 @@ interface BaseFormSchema { // Variable name bound to v-model Default value valueField?: string; // Label name - label?: string | VNode; + label?: string | VNode | ((renderCallbackParams: RenderCallbackParams) => string | VNode); // Auxiliary text subLabel?: string; // Help text on the right side of the text diff --git a/src/views/demo/form/index.vue b/src/views/demo/form/index.vue index 315c8dbd..0f8ca2e3 100644 --- a/src/views/demo/form/index.vue +++ b/src/views/demo/form/index.vue @@ -152,7 +152,9 @@ { field: 'field1', component: 'Input', - label: '字段1', + label: ({ model }) => { + return `字段1${model.field3 ? model.field3 : ''}`; + }, colProps: { span: 8,