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 208ae552..3e9150b0 100644 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx +++ b/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx @@ -1,5 +1,6 @@ import React, { useMemo, useEffect } from 'react'; import { Form, Input, Select, InputNumber, Switch, Divider } from 'antd'; +import type { Rule } from 'antd/es/form'; import { NodeType } from '../../../../types'; interface NodeConfigProps { @@ -103,33 +104,75 @@ const NodeConfig: React.FC = ({ nodeType, form, onValuesChange format, } = property; - const rules = []; + const rules: Rule[] = []; // 添加必填规则 if (required) { - rules.push({ required: true, message: `请输入${title}` }); + rules.push({ required: true, message: `请输入${title}` } as Rule); } // 添加长度限制 if (minLength !== undefined) { - rules.push({ min: minLength, message: `最少输入${minLength}个字符` }); + rules.push({ type: 'string', min: minLength, message: `最少输入${minLength}个字符` } as Rule); } if (maxLength !== undefined) { - rules.push({ max: maxLength, message: `最多输入${maxLength}个字符` }); + rules.push({ type: 'string', max: maxLength, message: `最多输入${maxLength}个字符` } as Rule); } // 添加数值范围限制 - if (minimum !== undefined) { - rules.push({ min: minimum, message: `不能小于${minimum}` }); - } - if (maximum !== undefined) { - rules.push({ max: maximum, message: `不能大于${maximum}` }); + 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: `格式不正确` }); + rules.push({ pattern: new RegExp(pattern), message: `格式不正确` } as Rule); } catch (error) { console.error('正则表达式解析错误:', error); } @@ -162,6 +205,8 @@ const NodeConfig: React.FC = ({ nodeType, form, onValuesChange placeholder={`请输入${title}`} min={minimum} max={maximum} + precision={0} // 只允许整数 + step={1} // 步长为1 /> ); break; @@ -185,6 +230,18 @@ const NodeConfig: React.FC = ({ nodeType, form, onValuesChange ); }; + // 获取初始值 + const getInitialValues = () => { + const values = { ...nodeDefaultConfig }; + + // 如果有执行器配置,添加执行器的默认值 + if (selectedExecutor && executorDefaultConfig) { + Object.assign(values, executorDefaultConfig); + } + + return values; + }; + // 渲染节点基本配置 const renderNodeConfig = () => { if (!nodeSchema?.properties) return null; @@ -207,10 +264,7 @@ const NodeConfig: React.FC = ({ nodeType, form, onValuesChange form={form} layout="vertical" onValuesChange={onValuesChange} - initialValues={{ - ...nodeDefaultConfig, - ...executorDefaultConfig - }} + initialValues={getInitialValues()} > {/* 节点基本配置 */} {renderNodeConfig()}