diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx b/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx index 20b13291..56f68eec 100644 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx +++ b/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx @@ -112,23 +112,27 @@ const NodeConfig: React.FC = ({ nodeType, form, onValuesChange const renderTimerConfig = () => { if (!nodeType.code?.includes('TIMER')) return null; + // 从schema中获取cron字段的配置 + const cronField = nodeSchema?.properties?.cron; + if (!cronField) return null; + return ( - + ); }; diff --git a/frontend/src/pages/Workflow/Definition/Designer/index.tsx b/frontend/src/pages/Workflow/Definition/Designer/index.tsx index f193d644..954cb6f3 100644 --- a/frontend/src/pages/Workflow/Definition/Designer/index.tsx +++ b/frontend/src/pages/Workflow/Definition/Designer/index.tsx @@ -6,17 +6,17 @@ import {getDefinition, updateDefinition} from '../../service'; import {WorkflowDefinition, WorkflowStatus} from '../../../Workflow/types'; import {Graph, Node, Cell} from '@antv/x6'; import '@antv/x6-react-shape'; -import { Selection } from '@antv/x6-plugin-selection'; -import { History } from '@antv/x6-plugin-history'; -import { Clipboard } from '@antv/x6-plugin-clipboard'; -import { Transform } from '@antv/x6-plugin-transform'; -import { Keyboard } from '@antv/x6-plugin-keyboard'; -import { Snapline } from '@antv/x6-plugin-snapline'; +import {Selection} from '@antv/x6-plugin-selection'; +import {History} from '@antv/x6-plugin-history'; +import {Clipboard} from '@antv/x6-plugin-clipboard'; +import {Transform} from '@antv/x6-plugin-transform'; +import {Keyboard} from '@antv/x6-plugin-keyboard'; +import {Snapline} from '@antv/x6-plugin-snapline'; import './index.module.less'; import NodePanel from './components/NodePanel'; import NodeConfig from './components/NodeConfig'; import Toolbar from './components/Toolbar'; -import { NodeType, getNodeTypes } from './service'; +import {NodeType, getNodeTypes} from './service'; const {Sider, Content} = Layout; @@ -55,7 +55,7 @@ const FlowDesigner: React.FC = () => { // 获取所有节点类型 const fetchNodeTypes = async () => { try { - const types = await getNodeTypes({ enabled: true }); + const types = await getNodeTypes({enabled: true}); setNodeTypes(types); return types; } catch (error) { @@ -258,38 +258,24 @@ const FlowDesigner: React.FC = () => { containerRef.current.addEventListener('drop', handleDrop); // 监听节点点击事件 - graph.on('node:click', ({node}: {node: Node}) => { + graph.on('node:click', ({node}: { node: Node }) => { setCurrentNode(node); const data = node.getData() as NodeData; console.log('Node clicked, data:', data); - + if (data) { // 获取节点类型 const nodeType = nodeTypes.find(type => type.code === data.type); if (nodeType) { setCurrentNodeType(nodeType); - + // 合并节点基本配置和执行器配置 const formValues = { name: data.name || nodeType.name, description: data.description, - executor: data.config?.executor, + ...data.config // 直接展开所有配置 }; - // 如果是Shell节点,添加执行器特定配置 - if (data.type === 'SHELL' && data.config?.executor === 'SHELL') { - console.log('Shell node config:', data.config); - Object.assign(formValues, { - script: data.config.script, - timeout: data.config.timeout, - workingDirectory: data.config.workingDirectory, - environment: data.config.environment, - successExitCode: data.config.successExitCode, - retryTimes: data.config.retryTimes, - retryInterval: data.config.retryInterval, - }); - } - console.log('Setting form values:', formValues); form.setFieldsValue(formValues); setConfigVisible(true); @@ -445,8 +431,8 @@ const FlowDesigner: React.FC = () => { const values = await form.validateFields(); if (currentNode) { const data = currentNode.getData() as NodeData; - const { name, description, ...config } = values; - + const {name, description, ...config} = values; + // 如果是Shell节点,验证配置 if (data.type === 'SHELL' && config.executor === 'SHELL') { validateShellConfig(config); @@ -493,7 +479,7 @@ const FlowDesigner: React.FC = () => { try { // 获取图形数据 const graphData = graphRef.current.toJSON(); - + // 收集节点配置数据 const nodes = graphRef.current.getNodes().map(node => { const data = node.getData() as NodeData; @@ -510,7 +496,7 @@ const FlowDesigner: React.FC = () => { const data = { ...detail, graphDefinition: JSON.stringify(graphData), - nodeConfig: JSON.stringify({ nodes }) + nodeConfig: JSON.stringify({nodes}) }; // 调用更新接口 @@ -563,15 +549,12 @@ const FlowDesigner: React.FC = () => { // 加载节点配置数据 if (detail.nodeConfig) { - console.log('Loading node config:', detail.nodeConfig); const nodeConfigData = JSON.parse(detail.nodeConfig); - console.log('Parsed node config:', nodeConfigData); - // 更新节点数据和显示 graph.getNodes().forEach(node => { const nodeConfig = nodeConfigData.nodes.find((n: any) => n.id === node.id); if (nodeConfig) { - console.log('Node config found:', nodeConfig); + console.log('Node config found:', nodeConfig.config); const nodeData = { type: nodeConfig.type, name: nodeConfig.name, @@ -622,7 +605,7 @@ const FlowDesigner: React.FC = () => { - +
@@ -644,7 +627,7 @@ const FlowDesigner: React.FC = () => { } > {currentNodeType && ( - + )}