From a5e58d9e107d4f5a90015a547a3e11a087f1a2e8 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Mon, 30 Dec 2024 17:04:36 +0800 Subject: [PATCH] 1 --- .../Design/components/NodeConfigModal.tsx | 127 ++++++++++++++---- frontend/src/utils/jsonSchemaUtils.ts | 15 ++- 2 files changed, 112 insertions(+), 30 deletions(-) diff --git a/frontend/src/pages/Workflow/Definition/Design/components/NodeConfigModal.tsx b/frontend/src/pages/Workflow/Definition/Design/components/NodeConfigModal.tsx index 4af583b9..002f412f 100644 --- a/frontend/src/pages/Workflow/Definition/Design/components/NodeConfigModal.tsx +++ b/frontend/src/pages/Workflow/Definition/Design/components/NodeConfigModal.tsx @@ -12,6 +12,16 @@ import { import {Button} from "@/components/ui/button"; import {Input} from "@/components/ui/input"; import {Label} from "@/components/ui/label"; +import { convertJsonSchemaToColumns } from '@/utils/jsonSchemaUtils'; +import { Textarea } from "@/components/ui/textarea"; +import { Switch } from "@/components/ui/switch"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; interface NodeConfigDrawerProps { visible: boolean; @@ -35,33 +45,44 @@ const NodeConfigDrawer: React.FC = ({ const [panelValues, setPanelValues] = React.useState({}); const [localValues, setLocalValues] = React.useState({}); - // 初始化表单值,包括默认值 - const initializeFormValues = (schema: any) => { - if (!schema?.properties) return {}; - - const initialValues: Variables = {}; - Object.entries(schema.properties).forEach(([key, property]: [string, any]) => { - if (property.default !== undefined) { - initialValues[key] = property.default; - } - }); - return initialValues; - }; - useEffect(() => { if (nodeDefinition) { - // 合并默认值和已有值 - const panelDefaults = initializeFormValues(nodeDefinition.panelVariablesSchema); - const localDefaults = initializeFormValues(nodeDefinition.localVariablesSchema); - + // 使用 convertJsonSchemaToColumns 获取字段配置 + const panelColumns = convertJsonSchemaToColumns(nodeDefinition.panelVariablesSchema || { type: 'object', properties: {} }); + const localColumns = convertJsonSchemaToColumns(nodeDefinition.localVariablesSchema || { type: 'object', properties: {} }); + + // 初始化表单值,包括默认值 + const initialPanelValues = panelColumns.reduce((acc, column) => { + if (column.initialValue !== undefined) { + acc[column.dataIndex] = column.initialValue; + } + return acc; + }, {} as Variables); + + const initialLocalValues = localColumns.reduce((acc, column) => { + if (column.initialValue !== undefined) { + acc[column.dataIndex] = column.initialValue; + } + return acc; + }, {} as Variables); + + // 设置初始值 setPanelValues({ - ...panelDefaults, + ...initialPanelValues, ...(nodeDefinition.panelVariables || {}) }); setLocalValues({ - ...localDefaults, + ...initialLocalValues, ...(nodeDefinition.localVariables || {}) }); + + // 打印调试信息 + console.log('Panel Columns:', panelColumns); + console.log('Local Columns:', localColumns); + console.log('Initial Panel Values:', initialPanelValues); + console.log('Initial Local Values:', initialLocalValues); + console.log('Node Definition Panel Variables:', nodeDefinition.panelVariables); + console.log('Node Definition Local Variables:', nodeDefinition.localVariables); } }, [nodeDefinition]); @@ -74,19 +95,67 @@ const NodeConfigDrawer: React.FC = ({ onOk(updatedNodeDefinition); }; + const renderFormField = (column: any, value: any, onChange: (value: any) => void) => { + const isReadOnly = column.readonly || column.fieldProps?.disabled; + const props = { + value: value || '', + onChange: (e: any) => onChange(e.target?.value ?? e), + placeholder: column.fieldProps?.placeholder, + readOnly: isReadOnly, + className: isReadOnly ? "bg-muted" : "", + }; + + switch (column.valueType) { + case 'select': + return ( + + ); + case 'switch': + return ( + + ); + case 'textarea': + case 'code': + return