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