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 3e9150b0..f1e93e36 100644 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx +++ b/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx @@ -67,218 +67,108 @@ const NodeConfig: React.FC = ({ nodeType, form, onValuesChange return config || {}; }, [selectedExecutor, nodeType.executors]); - // 当执行器变更时,重置执行器相关的配置 - useEffect(() => { - if (selectedExecutor) { - const fields = form.getFieldsValue() as FormFields; - const executorFields: FormFields = {}; - - // 清除旧的执行器配置 - Object.keys(fields).forEach(key => { - if (key !== 'executor' && key !== 'name' && key !== 'description') { - executorFields[key] = undefined; - } - }); - - // 设置新的执行器默认配置 - form.setFieldsValue({ - ...executorFields, - ...executorDefaultConfig - }); - } - }, [selectedExecutor, form, executorDefaultConfig]); - - // 根据属性类型渲染表单控件 - const renderFormItem = (key: string, property: any, required: boolean = false) => { - const { - type, - title, - description, - minimum, - maximum, - minLength, - maxLength, - enum: enumValues, - enumNames, - pattern, - format, - } = property; - - const rules: Rule[] = []; - - // 添加必填规则 - if (required) { - rules.push({ required: true, message: `请输入${title}` } as Rule); - } - - // 添加长度限制 - if (minLength !== undefined) { - rules.push({ type: 'string', min: minLength, message: `最少输入${minLength}个字符` } as Rule); - } - if (maxLength !== undefined) { - rules.push({ type: 'string', max: maxLength, message: `最多输入${maxLength}个字符` } as Rule); - } - - // 添加数值范围限制 - if (type === 'number') { - // 添加数字类型验证 - rules.push({ - type: 'number', - message: '请输入有效的数字', - transform(value) { - if (value === '' || value === undefined || value === null) return undefined; - const num = Number(value); - return isNaN(num) ? undefined : num; - }, - } as Rule); - - // 添加整数验证 - rules.push({ - validator: async (_: any, value: any) => { - if (value === undefined || value === null || value === '') return; - if (!Number.isInteger(Number(value))) { - throw new Error('请输入整数'); - } - } - } as Rule); - - // 最小值验证 - if (minimum !== undefined) { - rules.push({ - validator: async (_: any, value: any) => { - if (value === undefined || value === null || value === '') return; - const num = Number(value); - if (num < minimum) { - throw new Error(`不能小于${minimum}`); - } - } - } as Rule); - } - - // 最大值验证 - if (maximum !== undefined) { - rules.push({ - validator: async (_: any, value: any) => { - if (value === undefined || value === null || value === '') return; - const num = Number(value); - if (num > maximum) { - throw new Error(`不能大于${maximum}`); - } - } - } as Rule); - } - } - - // 添加正则校验 - if (pattern) { - try { - rules.push({ pattern: new RegExp(pattern), message: `格式不正确` } as Rule); - } catch (error) { - console.error('正则表达式解析错误:', error); - } - } - - let formItem; - switch (type) { - case 'string': - if (enumValues) { - formItem = ( - ; - } - break; - case 'number': - formItem = ( - - ); - break; - case 'boolean': - formItem = ; - break; - default: - formItem = ; - } - - return ( + // 渲染基本配置表单项 + const renderBasicFormItems = () => ( + <> - {formItem} + - ); - }; + + + + + ); - // 获取初始值 - const getInitialValues = () => { - const values = { ...nodeDefaultConfig }; + // 渲染Shell执行器特定配置 + const renderShellExecutorConfig = () => { + if (selectedExecutor !== 'SHELL') return null; - // 如果有执行器配置,添加执行器的默认值 - if (selectedExecutor && executorDefaultConfig) { - Object.assign(values, executorDefaultConfig); - } - - return values; - }; - - // 渲染节点基本配置 - const renderNodeConfig = () => { - if (!nodeSchema?.properties) return null; - return Object.entries(nodeSchema.properties).map(([key, property]) => - renderFormItem(key, property, nodeSchema.required?.includes(key)) - ); - }; - - // 渲染执行器配置 - const renderExecutorConfig = () => { - if (!executorSchema?.properties) return null; - return Object.entries(executorSchema.properties).map(([key, property]) => - renderFormItem(key, property, executorSchema.required?.includes(key)) + return ( + <> + + + + + + + + + + + + + + + + + + + + + + ); }; return ( -
-
+ {renderBasicFormItems()} + + + - {/* 节点基本配置 */} - {renderNodeConfig()} +