评查点,增改逻辑完善

This commit is contained in:
2025-04-07 01:49:24 +08:00
parent e0f1725c23
commit 8885aec931
3 changed files with 462 additions and 127 deletions
+50 -42
View File
@@ -136,54 +136,59 @@ export function ReviewSettings({ onChange, initialData }: ReviewSettingsProps) {
// 监听抽取设置中的字段变化
useEffect(() => {
// 当Context中的字段发生变化时,更新可用字段但保留已有配置
if (extractionFields.length > 0) {
// 检查是否有字段被删除
const deletedFields = availableFields.filter(field => !extractionFields.includes(field));
// 处理新增的字段
const newFields = extractionFields.filter((field: string) => !availableFields.includes(field));
if (newFields.length > 0 || deletedFields.length > 0) {
// 设置最新的可用字段列表
setAvailableFields(extractionFields);
// 处理规则中已删除的字段
if (deletedFields.length > 0) {
handleDeletedFields(deletedFields);
}
// 使用最新的字段列表更新规则配置
updateRulesWithNewFields(extractionFields);
}
}
// 用于防抖的变量
let fieldUpdateTimeout: NodeJS.Timeout | null = null;
const debounceDelay = 800; // 防抖延迟时间
const lastProcessedFieldsRef = { current: [] as string[] };
// 监听抽取设置的变化 - 用于捕获非Context更新的情况
const handleExtractionChange = (event: Event) => {
if (event instanceof CustomEvent && event.detail && Array.isArray(event.detail.fields)) {
const incomingFields = event.detail.fields;
// 检查是否有实际变化
if (JSON.stringify(incomingFields) !== JSON.stringify(availableFields)) {
// 检查是否有字段被删除
const deletedFields = availableFields.filter(field => !incomingFields.includes(field));
// 识别新增的字段
const newFields = incomingFields.filter((field: string) => !availableFields.includes(field));
if (newFields.length > 0 || deletedFields.length > 0) {
// 设置最新的可用字段列表
setAvailableFields(incomingFields);
// 处理规则中已删除的字段
if (deletedFields.length > 0) {
handleDeletedFields(deletedFields);
}
// 使用最新的字段列表更新规则配置
updateRulesWithNewFields(incomingFields);
}
// 检查是否与上次处理的字段相同,避免重复处理
if (JSON.stringify(incomingFields) === JSON.stringify(lastProcessedFieldsRef.current)) {
return;
}
// 清除之前的定时器
if (fieldUpdateTimeout) {
clearTimeout(fieldUpdateTimeout);
}
// 设置防抖处理
fieldUpdateTimeout = setTimeout(() => {
// 检查字段是否有实质性变化
if (JSON.stringify(incomingFields) !== JSON.stringify(availableFields)) {
// 获取被删除的字段(过滤掉临时性的删除)
const deletedFields = availableFields.filter(field =>
// 只有存在超过一定数量时间的字段才认为是真正删除
!incomingFields.includes(field)
);
// 识别新增的字段
const newFields = incomingFields.filter((field: string) =>
!availableFields.includes(field)
);
// 仅当字段变化明显时才更新(防止临时空字段触发)
if ((newFields.length > 0) || (deletedFields.length > 0 && incomingFields.length > 0)) {
console.log('字段变更:', {deletedFields, newFields, incomingFields, availableFields});
// 设置最新的可用字段列表
setAvailableFields(incomingFields);
lastProcessedFieldsRef.current = [...incomingFields];
// 处理规则中已删除的字段
if (deletedFields.length > 0) {
handleDeletedFields(deletedFields);
}
// 使用最新的字段列表更新规则配置
updateRulesWithNewFields(incomingFields);
}
}
}, debounceDelay);
}
};
@@ -193,8 +198,11 @@ export function ReviewSettings({ onChange, initialData }: ReviewSettingsProps) {
// 组件卸载时移除事件监听
return () => {
document.removeEventListener('extraction-fields-updated', handleExtractionChange);
if (fieldUpdateTimeout) {
clearTimeout(fieldUpdateTimeout);
}
};
}, [extractionFields, availableFields]);
}, [availableFields]);
// 检查并更新字段(仍然保留此函数供需要时手动触发)
// eslint-disable-next-line @typescript-eslint/no-unused-vars