完美版本

This commit is contained in:
2025-04-10 10:34:28 +08:00
parent 8be2fd5d67
commit 0411599f18
+97 -57
View File
@@ -627,7 +627,8 @@ export function ReviewSettings({
initialConfig = { initialConfig = {
field: originalConfig.field || '', field: originalConfig.field || '',
checkField: originalConfig.checkField || originalConfig.field || '', checkField: originalConfig.checkField || originalConfig.field || '',
formatType: originalConfig.formatType || '', formatType: originalConfig.formatType || 'date',
parameters: originalConfig.parameters || '',
formatParams: originalConfig.formatParams || originalConfig.parameters || '', formatParams: originalConfig.formatParams || originalConfig.parameters || '',
availableFields: availableFields availableFields: availableFields
}; };
@@ -636,6 +637,9 @@ export function ReviewSettings({
initialConfig = { initialConfig = {
conditions: Array.isArray(originalConfig.conditions) ? originalConfig.conditions : [], conditions: Array.isArray(originalConfig.conditions) ? originalConfig.conditions : [],
logic: originalConfig.logic || originalConfig.logicRelation || 'and', logic: originalConfig.logic || originalConfig.logicRelation || 'and',
initialField: '',
initialOperator: 'eq',
initialValue: '',
availableFields: availableFields availableFields: availableFields
}; };
break; break;
@@ -1260,10 +1264,16 @@ export function ReviewSettings({
const field = (config.initialField as string) || ''; const field = (config.initialField as string) || '';
const operator = e.target.value; const operator = e.target.value;
handleRuleConfigChange(id, { // 如果field已经设置,则创建完整的条件
initialOperator: operator, if (field) {
conditions: [{ field, operator, value: '' }] handleRuleConfigChange(id, {
}); initialOperator: operator,
conditions: [{ field, operator, value: '' }]
});
} else {
// 仅保存操作符值
handleRuleConfigChange(id, { initialOperator: operator });
}
// 触发配置更新 // 触发配置更新
generateEvaluationConfig(); generateEvaluationConfig();
}} }}
@@ -1292,10 +1302,16 @@ export function ReviewSettings({
const operator = (config.initialOperator as string) || 'eq'; const operator = (config.initialOperator as string) || 'eq';
const value = e.target.value; const value = e.target.value;
handleRuleConfigChange(id, { // 如果已经设置了字段,则创建条件
initialValue: value, if (field) {
conditions: [{ field, operator, value }] handleRuleConfigChange(id, {
}); initialValue: value,
conditions: [{ field, operator, value }]
});
} else {
// 否则只保存值
handleRuleConfigChange(id, { initialValue: value });
}
// 触发配置更新 // 触发配置更新
generateEvaluationConfig(); generateEvaluationConfig();
}} }}
@@ -1314,10 +1330,19 @@ export function ReviewSettings({
// 直接获取当前的conditions数组,或初始化为空数组 // 直接获取当前的conditions数组,或初始化为空数组
const conditions = Array.isArray(config.conditions) ? [...(config.conditions as Condition[])] : []; const conditions = Array.isArray(config.conditions) ? [...(config.conditions as Condition[])] : [];
// 如果数组为空,尝试从初始字段创建条件
if (conditions.length === 0 && config.initialField) {
const field = config.initialField as string;
const operator = (config.initialOperator as string) || 'eq';
const value = (config.initialValue as string) || '';
if (field) {
conditions.push({ field, operator, value });
}
}
// 创建新的空白条件 // 创建新的空白条件
const newCondition = { field: '', operator: 'eq', value: '' }; const newCondition = { field: '', operator: 'eq', value: '' };
// 无论如何,都添加一个新的空白行
conditions.push(newCondition); conditions.push(newCondition);
// 更新配置 // 更新配置
@@ -1384,7 +1409,7 @@ export function ReviewSettings({
<select <select
id={`regex-field-${id}`} id={`regex-field-${id}`}
className="form-select" className="form-select"
value={config.checkField as string || ''} value={config.checkField as string || config.field as string || ''}
onChange={(e) => { onChange={(e) => {
handleRuleConfigChange(id, { handleRuleConfigChange(id, {
checkField: e.target.value, checkField: e.target.value,
@@ -1402,11 +1427,12 @@ export function ReviewSettings({
</div> </div>
<div className="mb-4"> <div className="mb-4">
<label className="form-label" htmlFor={`regex-pattern-${id}`}> <span className="required-mark">*</span></label> <label className="form-label" htmlFor={`regex-pattern-${id}`}> <span className="required-mark">*</span></label>
<textarea <input
type="text"
id={`regex-pattern-${id}`} id={`regex-pattern-${id}`}
className="form-textarea" className="form-input"
placeholder="请输入正则表达式" placeholder="请输入正则表达式"
value={config.regexPattern as string || ''} value={config.regexPattern as string || config.pattern as string || ''}
onChange={(e) => { onChange={(e) => {
handleRuleConfigChange(id, { handleRuleConfigChange(id, {
regexPattern: e.target.value, regexPattern: e.target.value,
@@ -1415,36 +1441,47 @@ export function ReviewSettings({
// 直接触发配置更新 // 直接触发配置更新
generateEvaluationConfig(); generateEvaluationConfig();
}} }}
></textarea> />
<div className="form-tip">
: &quot;^[a-zA-Z0-9]+$&quot;
</div>
</div> </div>
<div className="mb-4"> <div className="mb-4">
<fieldset> <label className="form-label" htmlFor={`match-type-${id}`}> <span className="required-mark">*</span></label>
<legend className="form-label"> <span className="required-mark">*</span></legend> <div className="form-radio-group">
<div className="form-radio-group"> <label className="form-radio-item">
<label className="form-radio-item"> <input
<input type="radio"
type="radio" id={`match-type-match-${id}`}
name={`regexMatchType_${id}`} name={`match_type_${id}`}
className="form-radio" className="form-radio"
value="match" value="match"
checked={!config.matchType || config.matchType === 'match'} checked={!config.matchType || config.matchType === 'match'}
onChange={(e) => handleRuleConfigChange(id, { matchType: e.target.value })} onChange={(e) => {
/> handleRuleConfigChange(id, { matchType: e.target.value });
<span></span> // 直接触发配置更新
</label> generateEvaluationConfig();
<label className="form-radio-item"> }}
<input />
type="radio" <span></span>
name={`regexMatchType_${id}`} </label>
className="form-radio" <label className="form-radio-item">
value="not_match" <input
checked={config.matchType === 'not_match'} type="radio"
onChange={(e) => handleRuleConfigChange(id, { matchType: e.target.value })} id={`match-type-not-match-${id}`}
/> name={`match_type_${id}`}
<span></span> className="form-radio"
</label> value="not_match"
</div> checked={config.matchType === 'not_match'}
</fieldset> onChange={(e) => {
handleRuleConfigChange(id, { matchType: e.target.value });
// 直接触发配置更新
generateEvaluationConfig();
}}
/>
<span></span>
</label>
</div>
</div> </div>
</div> </div>
); );
@@ -1600,11 +1637,11 @@ export function ReviewSettings({
return ( return (
<div className="config-section"> <div className="config-section">
<div className="mb-4"> <div className="mb-4">
<label className="form-label" htmlFor={`format-field-${id}`}> <span className="required-mark">*</span></label> <label className="form-label" htmlFor={`format-field-${id}`}> <span className="required-mark">*</span></label>
<select <select
id={`format-field-${id}`} id={`format-field-${id}`}
className="form-select" className="form-select"
value={config.checkField as string || ''} value={config.checkField as string || config.field as string || ''}
onChange={(e) => { onChange={(e) => {
handleRuleConfigChange(id, { handleRuleConfigChange(id, {
checkField: e.target.value, checkField: e.target.value,
@@ -1614,7 +1651,7 @@ export function ReviewSettings({
generateEvaluationConfig(); generateEvaluationConfig();
}} }}
> >
<option value=""></option> <option value=""></option>
{availableFields.map((field, idx) => ( {availableFields.map((field, idx) => (
<option key={`format-field-${idx}`} value={field}>{field}</option> <option key={`format-field-${idx}`} value={field}>{field}</option>
))} ))}
@@ -1624,8 +1661,8 @@ export function ReviewSettings({
<label className="form-label" htmlFor={`format-type-${id}`}> <span className="required-mark">*</span></label> <label className="form-label" htmlFor={`format-type-${id}`}> <span className="required-mark">*</span></label>
<select <select
id={`format-type-${id}`} id={`format-type-${id}`}
className="form-select format-type" className="form-select"
value={config.formatType as string || ''} value={config.formatType as string || 'date'}
onChange={(e) => { onChange={(e) => {
handleRuleConfigChange(id, { formatType: e.target.value }); handleRuleConfigChange(id, { formatType: e.target.value });
// 直接触发配置更新 // 直接触发配置更新
@@ -1637,29 +1674,32 @@ export function ReviewSettings({
<option value="number"></option> <option value="number"></option>
<option value="phone"></option> <option value="phone"></option>
<option value="email"></option> <option value="email"></option>
<option value="bankcard"></option> <option value="bank"></option>
<option value="idcard"></option> <option value="id"></option>
<option value="zipcode"></option> <option value="postal"></option>
<option value="uscc"></option> <option value="credit"></option>
</select> </select>
</div> </div>
<div className="mb-4"> <div className="mb-4">
<label className="form-label" htmlFor={`format-params-${id}`}></label> <label className="form-label" htmlFor={`format-parameters-${id}`}></label>
<input <input
type="text" type="text"
id={`format-params-${id}`} id={`format-parameters-${id}`}
className="form-input" className="form-input"
placeholder="请输入参数设置" value={config.formatParams as string || config.parameters as string || ''}
value={config.formatParams as string || ''} placeholder="输入格式参数,如日期格式YYYY-MM-DD"
onChange={(e) => { onChange={(e) => {
handleRuleConfigChange(id, { handleRuleConfigChange(id, {
formatParams: e.target.value, formatParams: e.target.value,
parameters: e.target.value // 同步更新内部参数字段 parameters: e.target.value
}); });
// 直接触发配置更新 // 直接触发配置更新
generateEvaluationConfig(); generateEvaluationConfig();
}} }}
/> />
<div className="form-tip">
&quot;YYYY-MM-DD&quot;
</div>
</div> </div>
</div> </div>
); );