From a8b848d3676b867d64005c416ed11eef67f1ecf3 Mon Sep 17 00:00:00 2001 From: boisduval Date: Tue, 23 Sep 2025 23:45:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E4=B8=ADarrayToStringFields=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E6=97=A0=E6=B3=95=E5=9C=A8=E6=90=9C=E7=B4=A2=E6=97=B6?= =?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98=20(#6591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 合并handleArrayToStringFields与handleStringToArrayFields为handleMultiFields - 在handleMultiFields判断arrayToString或stringToArray - 删除两个方法在其他地方的引用 统一为在handleRangeTimeValue内调用handleMultiFields实现数据转换 Co-authored-by: 宛晴 --- packages/@core/ui-kit/form-ui/src/form-api.ts | 87 +++++-------------- 1 file changed, 20 insertions(+), 67 deletions(-) diff --git a/packages/@core/ui-kit/form-ui/src/form-api.ts b/packages/@core/ui-kit/form-ui/src/form-api.ts index bdc44de7..aa148629 100644 --- a/packages/@core/ui-kit/form-ui/src/form-api.ts +++ b/packages/@core/ui-kit/form-ui/src/form-api.ts @@ -348,7 +348,6 @@ export class FormApi { return true; }); const filteredFields = fieldMergeFn(fields, form.values); - this.handleStringToArrayFields(filteredFields); form.setValues(filteredFields, shouldValidate); } @@ -358,7 +357,6 @@ export class FormApi { const form = await this.getForm(); await form.submitForm(); const rawValues = toRaw(await this.getValues()); - this.handleArrayToStringFields(rawValues); await this.state?.handleSubmit?.(rawValues); return rawValues; @@ -458,16 +456,31 @@ export class FormApi { return this.form; } - private handleArrayToStringFields = (originValues: Record) => { + private handleMultiFields = (originValues: Record) => { const arrayToStringFields = this.state?.arrayToStringFields; if (!arrayToStringFields || !Array.isArray(arrayToStringFields)) { return; } const processFields = (fields: string[], separator: string = ',') => { - this.processFields(fields, separator, originValues, (value, sep) => - Array.isArray(value) ? value.join(sep) : value, - ); + this.processFields(fields, separator, originValues, (value, sep) => { + if (Array.isArray(value)) { + return value.join(sep); + } else if (typeof value === 'string') { + // 处理空字符串的情况 + if (value === '') { + return []; + } + // 处理复杂分隔符的情况 + const escapedSeparator = sep.replaceAll( + /[.*+?^${}()|[\]\\]/g, + String.raw`\$&`, + ); + return value.split(new RegExp(escapedSeparator)); + } else { + return value; + } + }); }; // 处理简单数组格式 ['field1', 'field2', ';'] 或 ['field1', 'field2'] @@ -503,8 +516,7 @@ export class FormApi { const values = { ...originValues }; const fieldMappingTime = this.state?.fieldMappingTime; - this.handleStringToArrayFields(values); - + this.handleMultiFields(values); if (!fieldMappingTime || !Array.isArray(fieldMappingTime)) { return values; } @@ -550,65 +562,6 @@ export class FormApi { return values; }; - private handleStringToArrayFields = (originValues: Record) => { - const arrayToStringFields = this.state?.arrayToStringFields; - if (!arrayToStringFields || !Array.isArray(arrayToStringFields)) { - return; - } - - const processFields = (fields: string[], separator: string = ',') => { - this.processFields(fields, separator, originValues, (value, sep) => { - if (typeof value !== 'string') { - return value; - } - // 处理空字符串的情况 - if (value === '') { - return []; - } - // 处理复杂分隔符的情况 - const escapedSeparator = sep.replaceAll( - /[.*+?^${}()|[\]\\]/g, - String.raw`\$&`, - ); - return value.split(new RegExp(escapedSeparator)); - }); - }; - - // 处理简单数组格式 ['field1', 'field2', ';'] 或 ['field1', 'field2'] - if (arrayToStringFields.every((item) => typeof item === 'string')) { - const lastItem = - arrayToStringFields[arrayToStringFields.length - 1] || ''; - const fields = - lastItem.length === 1 - ? arrayToStringFields.slice(0, -1) - : arrayToStringFields; - const separator = lastItem.length === 1 ? lastItem : ','; - processFields(fields, separator); - return; - } - - // 处理嵌套数组格式 [['field1'], ';'] - arrayToStringFields.forEach((fieldConfig) => { - if (Array.isArray(fieldConfig)) { - const [fields, separator = ','] = fieldConfig; - if (Array.isArray(fields)) { - processFields(fields, separator); - } else if (typeof originValues[fields] === 'string') { - const value = originValues[fields]; - if (value === '') { - originValues[fields] = []; - } else { - const escapedSeparator = separator.replaceAll( - /[.*+?^${}()|[\]\\]/g, - String.raw`\$&`, - ); - originValues[fields] = value.split(new RegExp(escapedSeparator)); - } - } - } - }); - }; - private processFields = ( fields: string[], separator: string, From 26f8d2aa306639cffe20614306c5d41b0b5d411d Mon Sep 17 00:00:00 2001 From: pangyajun123 <284390918@qq.com> Date: Tue, 23 Sep 2025 23:48:27 +0800 Subject: [PATCH 2/3] =?UTF-8?q?perf:=20=E8=A1=A8=E5=8D=95=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E9=80=9A=E8=BF=87=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E9=9C=80=E8=A6=81=E5=B1=95=E7=A4=BA=EF=BC=8C?= =?UTF-8?q?dependencies.if=20=E8=BF=99=E7=A7=8D=E6=96=B9=E5=BC=8F=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=88=ABtriggerFields=E8=A7=A6=E5=8F=91=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E4=B8=8D=E8=83=BD=E6=BB=A1=E8=B6=B3=E8=A6=81?= =?UTF-8?q?=E6=B1=82=20(#6756)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/components/common-ui/vben-form.md | 2 ++ packages/@core/ui-kit/form-ui/src/form-render/form-field.vue | 5 +++-- packages/@core/ui-kit/form-ui/src/types.ts | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/src/components/common-ui/vben-form.md b/docs/src/components/common-ui/vben-form.md index 0ed02384..48772bfa 100644 --- a/docs/src/components/common-ui/vben-form.md +++ b/docs/src/components/common-ui/vben-form.md @@ -473,6 +473,8 @@ export interface FormSchema< fieldName: string; /** 帮助信息 */ help?: CustomRenderType; + /** 是否隐藏表单项 */ + hide?: boolean; /** 表单的标签(如果是一个string,会用于默认必选规则的消息提示) */ label?: CustomRenderType; /** 自定义组件内部渲染 */ diff --git a/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue b/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue index d650b849..86ca8166 100644 --- a/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue +++ b/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue @@ -41,6 +41,7 @@ const { emptyStateValue, fieldName, formFieldProps, + hide, label, labelClass, labelWidth, @@ -95,7 +96,7 @@ const currentRules = computed(() => { }); const visible = computed(() => { - return isIf.value && isShow.value; + return !hide && isIf.value && isShow.value; }); const shouldRequired = computed(() => { @@ -283,7 +284,7 @@ onUnmounted(() => {