/** * 验证规则编辑器 */ import React from 'react'; import { Select, Input, InputNumber, Button, Space, Typography } from 'antd'; import { PlusOutlined, DeleteOutlined } from '@ant-design/icons'; import type { ValidationRule } from '../types'; const { Text } = Typography; interface ValidationRuleEditorProps { value?: ValidationRule[]; onChange?: (value: ValidationRule[]) => void; } const ValidationRuleEditor: React.FC = ({ value = [], onChange }) => { const handleAddRule = () => { const newRule: ValidationRule = { type: 'required', message: '', trigger: 'blur', }; onChange?.([...value, newRule]); }; const handleDeleteRule = (index: number) => { const newRules = value.filter((_, i) => i !== index); onChange?.(newRules); }; const handleRuleChange = (index: number, field: keyof ValidationRule, fieldValue: any) => { const newRules = [...value]; newRules[index] = { ...newRules[index], [field]: fieldValue }; onChange?.(newRules); }; const getRuleValueInput = (rule: ValidationRule, index: number) => { switch (rule.type) { case 'required': return null; case 'pattern': return ( handleRuleChange(index, 'value', e.target.value)} /> ); case 'min': case 'max': case 'minLength': case 'maxLength': return ( handleRuleChange(index, 'value', val)} /> ); case 'email': case 'url': case 'phone': case 'idCard': return null; case 'custom': return ( handleRuleChange(index, 'value', e.target.value)} /> ); default: return null; } }; return (
验证规则
{value.length === 0 ? (
暂无验证规则,点击上方按钮添加
) : ( {value.map((rule, index) => (
规则 {index + 1}
验证类型
{getRuleValueInput(rule, index) && (
规则值 {getRuleValueInput(rule, index)}
)}
错误提示 handleRuleChange(index, 'message', e.target.value)} />
触发时机
))}
)}
); }; export default ValidationRuleEditor;