From 301f42c67a2e8b60c3460ac2da5ebb8113ec4562 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Thu, 19 Dec 2024 16:45:38 +0800 Subject: [PATCH] 1 --- .../src/pages/Workflow/NodeDesign/Design.tsx | 116 ++++++++++-------- 1 file changed, 63 insertions(+), 53 deletions(-) diff --git a/frontend/src/pages/Workflow/NodeDesign/Design.tsx b/frontend/src/pages/Workflow/NodeDesign/Design.tsx index 747d9150..c0bfdfa0 100644 --- a/frontend/src/pages/Workflow/NodeDesign/Design.tsx +++ b/frontend/src/pages/Workflow/NodeDesign/Design.tsx @@ -79,11 +79,15 @@ const NodeDesignForm: React.FC = () => { // 递归获取默认值 const getDefaultValues = (schema: any) => { + console.log('Current Schema:', schema); if (!schema || !schema.properties) return {}; - return Object.entries(schema.properties).reduce((acc, [key, value]: [string, any]) => { + const result = Object.entries(schema.properties).reduce((acc, [key, value]: [string, any]) => { + console.log(`Processing key: ${key}, value:`, value); if (value.type === 'object') { - acc[key] = getDefaultValues(value); + const nestedDefaults = getDefaultValues(value); + console.log(`Nested defaults for ${key}:`, nestedDefaults); + acc[key] = nestedDefaults; } else if (value.type === 'array' && value.items) { acc[key] = value.default || []; } else { @@ -91,6 +95,9 @@ const NodeDesignForm: React.FC = () => { } return acc; }, {}); + + console.log('Result for schema:', result); + return result; }; // 将 JSON Schema 转换为 ProForm Schema @@ -99,65 +106,22 @@ const NodeDesignForm: React.FC = () => { return Object.entries(schema.properties).map(([key, value]: [string, any]) => { const fullKey = parentKey ? `${parentKey}.${key}` : key; + console.log('Converting schema key:', fullKey, 'value:', value); + + // 基础字段配置 const baseField = { - title: value.title || key, + title: value.title, dataIndex: fullKey, tooltip: value.description, - fieldProps: { - style: { width: '100%' } - } }; - // 处理枚举类型 - if (value.enum) { - return { - ...baseField, - valueType: 'select', - valueEnum: value.enum.reduce((acc: any, item: string, index: number) => { - acc[item] = { text: value.enumNames?.[index] || item }; - return acc; - }, {}) - }; - } - // 处理不同类型的字段 - if (value.type === 'string') { - return { - ...baseField, - valueType: 'text' - }; - } else if (value.type === 'number' || value.type === 'integer') { - return { - ...baseField, - valueType: 'digit' - }; - } else if (value.type === 'boolean') { - return { - ...baseField, - valueType: 'switch' - }; - } else if (value.type === 'array') { - const itemColumns = value.items ? convertToProFormSchema( - { properties: { item: value.items } }, - `${fullKey}.item`, - level + 1 - ) : []; - - return { - ...baseField, - valueType: 'formList', - columns: itemColumns - }; - } else if (value.type === 'object') { - const childColumns = value.properties ? convertToProFormSchema(value, fullKey, level + 1) : []; - + if (value.type === 'object') { return { ...baseField, + dataIndex: fullKey, valueType: 'group', - columns: childColumns, - colProps: { - span: 24 - }, + columns: convertToProFormSchema(value, fullKey, level + 1), fieldProps: { title: value.title, style: { @@ -171,7 +135,48 @@ const NodeDesignForm: React.FC = () => { }; } - return baseField; + // 处理枚举类型 + if (value.enum) { + return { + ...baseField, + valueType: 'select', + valueEnum: value.enum.reduce((acc: any, item: string, index: number) => { + acc[item] = { text: value.enumNames?.[index] || item }; + return acc; + }, {}), + initialValue: value.default + }; + } + + // 处理数组类型 + if (value.type === 'array') { + const itemColumns = value.items ? convertToProFormSchema( + { properties: { item: value.items } }, + `${fullKey}.item`, + level + 1 + ) : []; + + return { + ...baseField, + valueType: 'formList', + columns: itemColumns, + initialValue: value.default + }; + } + + // 处理基础类型 + const typeMap: Record = { + 'string': 'text', + 'integer': 'digit', + 'number': 'digit', + 'boolean': 'switch' + }; + + return { + ...baseField, + valueType: typeMap[value.type] || 'text', + initialValue: value.default + }; }); }; @@ -187,6 +192,9 @@ const NodeDesignForm: React.FC = () => { // 判断是否是 schema 格式 const isSchema = typeof content === 'object' && 'type' in content && 'properties' in content; + console.log('Is Schema:', isSchema); + console.log('Content:', content); + const schema = isSchema ? content : { type: 'object', properties: Object.entries(content).reduce((acc, [key, value]) => ({ @@ -199,8 +207,10 @@ const NodeDesignForm: React.FC = () => { }), {}) }; + console.log('Final Schema:', schema); // 获取默认值 const defaultValues = getDefaultValues(schema); + console.log('Default Values:', defaultValues); return (