From 94d4260653bcca9fd7613c0fd1e6272930914e9f Mon Sep 17 00:00:00 2001 From: zouli520 Date: Fri, 12 Jun 2026 15:07:34 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix():=20=E4=BC=98=E5=8C=96=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=A1=A8=E5=8D=95=E9=A1=B9=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dynamic-form-item-v2/ColumnComponent.tsx | 3 +- .../src/dynamic-form-item-v2/excelUtils.tsx | 30 ++++++++++++++++++- .../src/interfaces/dynamic-form-item-v2.ts | 1 + 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/bricks/forms/src/dynamic-form-item-v2/ColumnComponent.tsx b/bricks/forms/src/dynamic-form-item-v2/ColumnComponent.tsx index e05ec047a..1389a5a61 100644 --- a/bricks/forms/src/dynamic-form-item-v2/ColumnComponent.tsx +++ b/bricks/forms/src/dynamic-form-item-v2/ColumnComponent.tsx @@ -126,6 +126,7 @@ export function ColumnComponent( formValue, rowValue, rowIndex, + column, }), }; } @@ -146,7 +147,7 @@ export function ColumnComponent( } return rule; }), - [column.rules, formValue, name, rowIndex, rowValue] + [column.rules, formValue, name, rowIndex, rowValue, column] ); const options = useMemo( diff --git a/bricks/forms/src/dynamic-form-item-v2/excelUtils.tsx b/bricks/forms/src/dynamic-form-item-v2/excelUtils.tsx index 67cb198b4..ded7e286d 100644 --- a/bricks/forms/src/dynamic-form-item-v2/excelUtils.tsx +++ b/bricks/forms/src/dynamic-form-item-v2/excelUtils.tsx @@ -41,13 +41,31 @@ export const exportFormData = async ( const headers = columns.map((col) => ({ key: col.name, header: col.label || col.name, + type: (col as any).type, + mode: (col as any).props?.mode, })); // 处理数据,确保数据格式正确 const exportData = formData.map((row) => { const exportRow: Record = {}; headers.forEach((header) => { - exportRow[header.header] = row[header.key]; + let value = row[header.key]; + + // 处理数组类型的值(如 select 多选、cascader 多选等) + if (Array.isArray(value)) { + // 对于多选模式,将数组转换为逗号分隔的字符串 + if (header.type === 'select' && (header.mode === 'multiple' || header.mode === 'tags')) { + value = value.join(', '); + } else if (header.type === 'cascader') { + // Cascader 可能是多维数组,递归处理 + value = flattenArray(value).join(', '); + } else { + // 其他数组类型也转换为字符串 + value = value.join(', '); + } + } + + exportRow[header.header] = value; }); return exportRow; }); @@ -59,6 +77,16 @@ export const exportFormData = async ( XLSXWriteFile(workbook, `${fileName}.xlsx`); }; +// 辅助函数:将嵌套数组展平为一维数组 +const flattenArray = (arr: any[]): any[] => { + return arr.reduce((flat, item) => { + if (Array.isArray(item)) { + return flat.concat(flattenArray(item)); + } + return flat.concat(item); + }, []); +}; + export const importFromExcel = async ( file: File, columns: Column[], diff --git a/bricks/forms/src/interfaces/dynamic-form-item-v2.ts b/bricks/forms/src/interfaces/dynamic-form-item-v2.ts index 08888aa1d..888546bdb 100644 --- a/bricks/forms/src/interfaces/dynamic-form-item-v2.ts +++ b/bricks/forms/src/interfaces/dynamic-form-item-v2.ts @@ -295,6 +295,7 @@ export interface BasicColumn { formValue: Record[]; rowValue: Record; rowIndex: number; + column?: Column; } ) => Promise | void; })[]; From 8caeeefe9c3a460b0f11e9ebfd321aa7bb0d8104 Mon Sep 17 00:00:00 2001 From: zouli520 Date: Mon, 15 Jun 2026 10:17:48 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix():=20=E6=9B=B4=E6=96=B0=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=A1=A8=E5=8D=95=E9=A1=B9=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bricks/forms/src/dynamic-form-item-v2/ColumnComponent.spec.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/bricks/forms/src/dynamic-form-item-v2/ColumnComponent.spec.tsx b/bricks/forms/src/dynamic-form-item-v2/ColumnComponent.spec.tsx index 777699228..8ea06e39f 100644 --- a/bricks/forms/src/dynamic-form-item-v2/ColumnComponent.spec.tsx +++ b/bricks/forms/src/dynamic-form-item-v2/ColumnComponent.spec.tsx @@ -419,6 +419,7 @@ describe("ColumnComponent", () => { formValue, rowIndex, rowValue: formValue[rowIndex], + column, }); }); From 0aad73011edff30bfe071cc41a6628b1c1992ff4 Mon Sep 17 00:00:00 2001 From: zouli520 Date: Mon, 15 Jun 2026 11:11:26 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix():=20=E4=BC=98=E5=8C=96cascader?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E9=A1=B9=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/dynamic-form-item-v2/excelUtils.tsx | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/bricks/forms/src/dynamic-form-item-v2/excelUtils.tsx b/bricks/forms/src/dynamic-form-item-v2/excelUtils.tsx index ded7e286d..838138a5c 100644 --- a/bricks/forms/src/dynamic-form-item-v2/excelUtils.tsx +++ b/bricks/forms/src/dynamic-form-item-v2/excelUtils.tsx @@ -53,16 +53,18 @@ export const exportFormData = async ( // 处理数组类型的值(如 select 多选、cascader 多选等) if (Array.isArray(value)) { - // 对于多选模式,将数组转换为逗号分隔的字符串 + // 对于多选模式,将数组转换为逗号加空格分隔的字符串 if (header.type === 'select' && (header.mode === 'multiple' || header.mode === 'tags')) { - value = value.join(', '); + value = value.length > 0 ? value.join(', ') : ''; } else if (header.type === 'cascader') { - // Cascader 可能是多维数组,递归处理 - value = flattenArray(value).join(', '); + value = JSON.stringify(value); } else { - // 其他数组类型也转换为字符串 - value = value.join(', '); + // 其他数组类型统一按逗号加空格分隔格式处理 + value = value.length > 0 ? value.join(', ') : ''; } + } else if (value === undefined || value === null) { + // 处理未定义或null值,转换为空字符串 + value = ''; } exportRow[header.header] = value; @@ -77,16 +79,6 @@ export const exportFormData = async ( XLSXWriteFile(workbook, `${fileName}.xlsx`); }; -// 辅助函数:将嵌套数组展平为一维数组 -const flattenArray = (arr: any[]): any[] => { - return arr.reduce((flat, item) => { - if (Array.isArray(item)) { - return flat.concat(flattenArray(item)); - } - return flat.concat(item); - }, []); -}; - export const importFromExcel = async ( file: File, columns: Column[],