From a8b848d3676b867d64005c416ed11eef67f1ecf3 Mon Sep 17 00:00:00 2001 From: boisduval Date: Tue, 23 Sep 2025 23:45:26 +0800 Subject: [PATCH] =?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,