chengmw
yesterday 149fd7c6e1bca35377dd86bee97a295f9e52f442
web-app/src/contexts/CaseDataContext.jsx
@@ -9,6 +9,7 @@
import OutboundBotAPIService from '../services/OutboundBotAPIService';
import EvidenceAPIService from '../services/EvidenceAPIService';
import MediationAgreementAPIService from '../services/MediationAgreementAPIService';
import MediationTimelineAPIService from '../services/MediationTimelineAPIService';
import { getMergedParams } from '../utils/urlParams';
import { mockTimelineData } from '../mocks/timeline';
import { getFallbackStartTime, parseTimeString } from '../utils/timeFormatter';
@@ -369,20 +370,6 @@
        return;
      }
      EvidenceAPIService.processCaseFilesOcr(params.caseId).catch((ocrError) => {
        console.error('触发案件文件OCR失败:', ocrError);
      });
      try {
        await OutboundBotAPIService.syncStatusByCase({ caseId: params.caseId });
      } catch (syncError) {
        console.error('同步外呼状态失败:', syncError);
      }
      try {
        await OutboundBotAPIService.backfillConversationByCase({ caseId: params.caseId });
      } catch (backfillError) {
        console.error('回补通话记录失败:', backfillError);
      }
      // 调用API获取数据
      // 将URL中的auth_token转换为authorization传入API
@@ -398,6 +385,14 @@
      // 提取timeline数据
      const timelineData = response.timeline || response.data?.timeline || response;
      
      // 调试日志:输出提取的timeline数据
      console.log('===== API数据提取 =====');
      console.log('原始response:', response);
      console.log('提取的timelineData:', timelineData);
      console.log('timelineData.mediation:', timelineData.mediation);
      console.log('timelineData.mediation?.state:', timelineData.mediation?.state);
      console.log('========================');
      // 提取nodes数据(确保为数组),兼容 nodeList 和 nodes 两种字段名
      const nodesData = response.data?.nodeList || response.data?.nodes || response.nodes || [];
      
@@ -409,7 +404,7 @@
      setProcessNodes(Array.isArray(nodesData) ? nodesData : []);  // 确保为数组
      setHasLoaded(true);  // 标记已加载
      
      // 并行加载证据材料和调解协议数据(在终态检查之前,确保数据完整性)
      // 并行加载证据材料、调解协议、预警消息和当事人列表数据(在终态检查之前,确保数据完整性)
      await Promise.all([
        loadEvidenceData({
          caseId: params.caseId,
@@ -417,12 +412,22 @@
          caseTypeFirst: params.caseTypeFirst,
          platformCode: params.platform_code
        }),
        loadAgreementData(params.caseId)
        loadAgreementData(params.caseId),
        // 加载预警消息列表
        MediationTimelineAPIService.getWarningNotifyList(timelineData.id).catch(err => {
          console.error('加载预警消息失败:', err);
          return [];
        }),
        // 加载当事人列表
        MediationTimelineAPIService.getPersonList(params.caseId).catch(err => {
          console.error('加载当事人列表失败:', err);
          return [];
        })
      ]);
      
      // 检查终态状态(调解成功/失败/人工接管),终态不执行外呼和存储
      const mediationState = timelineData.mediation?.state;
      const isTerminalState = [2, 3, 4].includes(mediationState);
      const isTerminalState = [2, 3, 4, 5].includes(mediationState);
      
      if (isTerminalState) {
        console.log('案件已处于终态状态:', mediationState, ',跳过外呼和存储');
@@ -439,6 +444,21 @@
      // 加载任务时间数据
      await loadTaskTime(timelineData);
       EvidenceAPIService.processCaseFilesOcr(params.caseId).catch((ocrError) => {
        console.error('触发案件文件OCR失败:', ocrError);
      });
      try {
        await OutboundBotAPIService.syncStatusByCase({ caseId: params.caseId });
      } catch (syncError) {
        console.error('同步外呼状态失败:', syncError);
      }
      try {
        await OutboundBotAPIService.backfillConversationByCase({ caseId: params.caseId });
      } catch (backfillError) {
        console.error('回补通话记录失败:', backfillError);
      }
      console.log('Case data loaded successfully:', timelineData);
    } catch (err) {
      console.error('Failed to load case data:', err);
@@ -449,6 +469,7 @@
      
      // 使用Mock数据作为降级方案
      const mockTimeline = mockTimelineData.data?.timeline || mockTimelineData;
      console.log('使用Mock数据降级:', mockTimeline);
      setCaseData(mockTimeline);
      setProcessNodes(mockTimelineData.data?.nodes || []);
      setHasLoaded(true);