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,