From 07b64ad3846d794652f78dc27d99c7c8456c7fb5 Mon Sep 17 00:00:00 2001 From: panda7 Date: Thu, 17 Jul 2025 09:37:39 +0800 Subject: [PATCH] feat: add function support for formItemClass prop (#6511) * feat: add function support for formItemClass prop * feat: add try-catch to formItemClass function * fix: formItemClass function ts error --------- Co-authored-by: sqchen --- docs/src/components/common-ui/vben-form.md | 2 +- .../ui-kit/form-ui/src/form-render/form.vue | 20 +++++++++++++++++-- packages/@core/ui-kit/form-ui/src/types.ts | 4 ++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/docs/src/components/common-ui/vben-form.md b/docs/src/components/common-ui/vben-form.md index a6d455253..aed2b9f85 100644 --- a/docs/src/components/common-ui/vben-form.md +++ b/docs/src/components/common-ui/vben-form.md @@ -395,7 +395,7 @@ export interface FormCommonConfig { * 所有表单项的栅格布局 * @default "" */ - formItemClass?: string; + formItemClass?: (() => string) | string; /** * 隐藏所有表单项label * @default false diff --git a/packages/@core/ui-kit/form-ui/src/form-render/form.vue b/packages/@core/ui-kit/form-ui/src/form-render/form.vue index ff827c42a..a8ca22a49 100644 --- a/packages/@core/ui-kit/form-ui/src/form-render/form.vue +++ b/packages/@core/ui-kit/form-ui/src/form-render/form.vue @@ -12,7 +12,12 @@ import type { import { computed } from 'vue'; import { Form } from '@vben-core/shadcn-ui'; -import { cn, isString, mergeWithArrayOverride } from '@vben-core/shared/utils'; +import { + cn, + isFunction, + isString, + mergeWithArrayOverride, +} from '@vben-core/shared/utils'; import { provideFormRenderProps } from './context'; import { useExpandable } from './expandable'; @@ -110,6 +115,17 @@ const computedSchema = computed( ? keepIndex <= index : false; + // 处理函数形式的formItemClass + let resolvedSchemaFormItemClass = schema.formItemClass; + if (isFunction(schema.formItemClass)) { + try { + resolvedSchemaFormItemClass = schema.formItemClass(); + } catch (error) { + console.error('Error calling formItemClass function:', error); + resolvedSchemaFormItemClass = ''; + } + } + return { colon, disabled, @@ -133,7 +149,7 @@ const computedSchema = computed( 'flex-shrink-0', { hidden }, formItemClass, - schema.formItemClass, + resolvedSchemaFormItemClass, ), labelClass: cn(labelClass, schema.labelClass), }; diff --git a/packages/@core/ui-kit/form-ui/src/types.ts b/packages/@core/ui-kit/form-ui/src/types.ts index ccfe8dd89..a8501e810 100644 --- a/packages/@core/ui-kit/form-ui/src/types.ts +++ b/packages/@core/ui-kit/form-ui/src/types.ts @@ -174,10 +174,10 @@ export interface FormCommonConfig { */ formFieldProps?: FormFieldOptions; /** - * 所有表单项的栅格布局 + * 所有表单项的栅格布局,支持函数形式 * @default "" */ - formItemClass?: string; + formItemClass?: (() => string) | string; /** * 隐藏所有表单项label * @default false