接近完美版本

This commit is contained in:
2025-04-10 10:16:15 +08:00
parent 80a6764ba0
commit 8be2fd5d67
2 changed files with 279 additions and 240 deletions
+148 -179
View File
@@ -87,8 +87,153 @@ export function ReviewSettings({
// 使用useRef跟踪是否已经初始化过
const initializedRef = useRef(false);
// 保存初始数据的引用,用于检测是否有实际变更
const initialDataRef = useRef<any>(null);
const initialDataRef = useRef<ReviewSettingsProps['initialData'] | null>(null);
// 生成评查配置并发送给父组件
const generateEvaluationConfig = useCallback(() => {
// 构建评查配置对象
const evaluationConfig = {
logicType: combinationLogic,
customLogic: customLogic,
rules: rules
.filter(rule => rule.type) // 过滤掉没有选择类型的规则
.map(rule => {
// 处理不同规则类型的特殊配置
const processedConfig = { ...rule.config };
switch(rule.type) {
case 'exists':
// 确保fields字段是数组
if (!Array.isArray(processedConfig.fields)) {
processedConfig.fields = [];
}
// 确保logic字段有值
if (!processedConfig.logic) {
processedConfig.logic = 'and';
}
break;
case 'consistency':
// 确保pairs字段是数组
if (!Array.isArray(processedConfig.pairs)) {
processedConfig.pairs = [];
}
// 确保logic字段有值
if (!processedConfig.logic) {
processedConfig.logic = 'and';
}
break;
case 'format':
// 确保field字段正确设置
if (processedConfig.checkField) {
processedConfig.field = processedConfig.checkField;
delete processedConfig.checkField;
}
// 确保field字段有值
if (!processedConfig.field) {
processedConfig.field = '';
}
if (processedConfig.formatParams) {
processedConfig.parameters = processedConfig.formatParams;
delete processedConfig.formatParams;
}
// 确保formatType字段有值
if (!processedConfig.formatType) {
processedConfig.formatType = '';
}
// 确保parameters字段有值
if (!processedConfig.parameters) {
processedConfig.parameters = '';
}
break;
case 'regex':
// 确保field和pattern字段正确设置
if (processedConfig.checkField) {
processedConfig.field = processedConfig.checkField;
delete processedConfig.checkField;
}
// 确保field字段有值
if (!processedConfig.field) {
processedConfig.field = '';
}
if (processedConfig.regexPattern) {
processedConfig.pattern = processedConfig.regexPattern;
delete processedConfig.regexPattern;
}
// 确保pattern字段有值
if (!processedConfig.pattern) {
processedConfig.pattern = '';
}
// 确保matchType字段有值
if (!processedConfig.matchType) {
processedConfig.matchType = 'match';
}
break;
case 'ai':
// 确保model字段有值
if (!processedConfig.model) {
processedConfig.model = 'qwen14b';
}
// 确保temperature字段是数字
if (typeof processedConfig.temperature !== 'number') {
processedConfig.temperature = 0.1;
}
// 确保prompt字段有值
if (!processedConfig.prompt) {
processedConfig.prompt = '';
}
break;
case 'code':
// 确保language字段有值
if (!processedConfig.language) {
processedConfig.language = 'javascript';
}
// 确保code字段有值
if (!processedConfig.code) {
processedConfig.code = '';
}
break;
}
// 移除辅助用的UI字段
delete processedConfig.availableFields;
return {
id: rule.id,
type: rule.type,
config: processedConfig
};
})
};
// 使用setTimeout避免连锁更新
setTimeout(() => {
if (onChange) {
// 仅将一个evaluation_config对象传递给父组件
onChange({ evaluation_config: evaluationConfig });
}
}, 0);
return evaluationConfig;
}, [rules, combinationLogic, customLogic, onChange]);
// 加载初始数据
useEffect(() => {
// 如果已经初始化过,则跳过此次处理
@@ -200,7 +345,7 @@ export function ReviewSettings({
}, 0);
}
// 移除availableFields依赖,避免死循环
}, [initialData]);
}, [initialData, availableFields, generateEvaluationConfig]);
// 监听extractionFields的变化
useEffect(() => {
@@ -271,7 +416,7 @@ export function ReviewSettings({
useEffect(() => {
// 生成并更新评查配置
generateEvaluationConfig();
}, []);
}, [generateEvaluationConfig]);
// 处理已删除字段的函数
const handleDeletedFields = (deletedFields: string[]) => {
@@ -1528,182 +1673,6 @@ export function ReviewSettings({
}
};
// 生成完整的评查配置数据并在提交保存时使用
const generateEvaluationConfig = useCallback(() => {
// 创建符合数据库模式的evaluation_config对象
const evaluationConfig = {
logicType: combinationLogic || 'and',
customLogic: combinationLogic === 'custom' ? (customLogic || '') : '',
rules: rules
.filter(rule => rule.type && rule.type.trim() !== '')
.map(rule => {
// 创建一个深拷贝以避免修改原始对象
const processedConfig = JSON.parse(JSON.stringify(rule.config || {}));
// 根据规则类型处理特定的字段映射
switch(rule.type) {
case 'exists':
// 将UI字段名映射为API字段名
if (Array.isArray(processedConfig.selectedFields)) {
processedConfig.fields = processedConfig.selectedFields;
delete processedConfig.selectedFields;
}
// 确保fields字段存在且是数组
if (!Array.isArray(processedConfig.fields)) {
processedConfig.fields = [];
}
if (processedConfig.existsLogic) {
processedConfig.logic = processedConfig.existsLogic;
delete processedConfig.existsLogic;
}
// 确保logic字段有默认值
if (!processedConfig.logic) {
processedConfig.logic = 'and';
}
break;
case 'consistency':
case 'logic':
// 将UI字段名映射为API字段名
if (processedConfig.logicRelation) {
processedConfig.logic = processedConfig.logicRelation;
delete processedConfig.logicRelation;
}
// 确保logic字段有默认值
if (!processedConfig.logic) {
processedConfig.logic = 'and';
}
// 确保pairs/conditions字段是数组
if (rule.type === 'consistency' && !Array.isArray(processedConfig.pairs)) {
processedConfig.pairs = [];
}
if (rule.type === 'logic' && !Array.isArray(processedConfig.conditions)) {
processedConfig.conditions = [];
}
// 删除用于UI的临时字段
delete processedConfig.initialSourceField;
delete processedConfig.initialTargetField;
delete processedConfig.initialCompareMethod;
delete processedConfig.initialField;
delete processedConfig.initialOperator;
delete processedConfig.initialValue;
break;
case 'format':
// 确保field字段正确设置
if (processedConfig.checkField) {
processedConfig.field = processedConfig.checkField;
delete processedConfig.checkField;
}
// 确保field字段有值
if (!processedConfig.field) {
processedConfig.field = '';
}
if (processedConfig.formatParams) {
processedConfig.parameters = processedConfig.formatParams;
delete processedConfig.formatParams;
}
// 确保formatType字段有值
if (!processedConfig.formatType) {
processedConfig.formatType = '';
}
// 确保parameters字段有值
if (!processedConfig.parameters) {
processedConfig.parameters = '';
}
break;
case 'regex':
// 确保field和pattern字段正确设置
if (processedConfig.checkField) {
processedConfig.field = processedConfig.checkField;
delete processedConfig.checkField;
}
// 确保field字段有值
if (!processedConfig.field) {
processedConfig.field = '';
}
if (processedConfig.regexPattern) {
processedConfig.pattern = processedConfig.regexPattern;
delete processedConfig.regexPattern;
}
// 确保pattern字段有值
if (!processedConfig.pattern) {
processedConfig.pattern = '';
}
// 确保matchType字段有值
if (!processedConfig.matchType) {
processedConfig.matchType = 'match';
}
break;
case 'ai':
// 确保model字段有值
if (!processedConfig.model) {
processedConfig.model = 'qwen14b';
}
// 确保temperature字段是数字
if (typeof processedConfig.temperature !== 'number') {
processedConfig.temperature = 0.1;
}
// 确保prompt字段有值
if (!processedConfig.prompt) {
processedConfig.prompt = '';
}
break;
case 'code':
// 确保language字段有值
if (!processedConfig.language) {
processedConfig.language = 'javascript';
}
// 确保code字段有值
if (!processedConfig.code) {
processedConfig.code = '';
}
break;
}
// 移除辅助用的UI字段
delete processedConfig.availableFields;
return {
id: rule.id,
type: rule.type,
config: processedConfig
};
})
};
// 使用setTimeout避免连锁更新
setTimeout(() => {
if (onChange) {
// 仅将一个evaluation_config对象传递给父组件
onChange({ evaluation_config: evaluationConfig });
}
}, 0);
return evaluationConfig;
}, [rules, combinationLogic, customLogic, onChange]);
// 组件初次渲染后,主动发送一次完整配置数据
useEffect(() => {
// 如果有初始数据,在组件挂载后主动发送一次完整规则配置