From 6f344a5292739e21d0c8f06c346be44c31c38552 Mon Sep 17 00:00:00 2001
From: tony.cheng <chengmingwei_1984122@126.com>
Date: Wed, 11 Feb 2026 10:54:23 +0800
Subject: [PATCH] 修复智能外呼气泡组件变量初始化错误和时间格式问题

---
 web-app/src/contexts/CaseDataContext.jsx |   51 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 38 insertions(+), 13 deletions(-)

diff --git a/web-app/src/contexts/CaseDataContext.jsx b/web-app/src/contexts/CaseDataContext.jsx
index c506d74..6c21aab 100644
--- a/web-app/src/contexts/CaseDataContext.jsx
+++ b/web-app/src/contexts/CaseDataContext.jsx
@@ -107,14 +107,20 @@
               personId: item.personId,
               mediationId: item.mediationId,
               caseId: String(caseId), // 添加 caseId 字段用于轮询
-              startTime: Date.now(),
+              perClassName: item.perClassName || '', // 添加人员类型名称
+              trueName: item.trueName || '', // 添加真实姓名
+              startTime: item.createdTime || item.start_time,
               pollStartTime: Date.now(),
               retryCount: 0
             });
-          } else {
+          } else if (item.errorCode > 0) {
             failedJobs.push({
               personId: item.personId,
-              message: item.message || '未知错误'
+              message: item.message || '未知错误',
+              perClassName: item.perClassName || '', // 添加人员类型名称
+              trueName: item.trueName || '', // 添加真实姓名
+              errorCode: item.errorCode, // 添加错误码
+              startTime: new Date(item.startTime || item.start_time).getTime() // 转换为时间戳
             });
           }
         });
@@ -123,6 +129,35 @@
         if (successJobs.length > 0) {
           localStorage.setItem(OUTBOUND_JOBS_KEY, JSON.stringify(successJobs));
           console.log('存储外呼任务成功,数量:', successJobs.length);
+        }
+
+        // 存储失败的任务到 localStorage(用于气泡显示)
+        if (failedJobs.length > 0) {
+          console.log('准备存储失败任务:', failedJobs);
+          // 读取现有的失败任务
+          const storedFailedJobs = JSON.parse(localStorage.getItem(`${OUTBOUND_JOBS_KEY}_failed`) || '[]');
+          
+          // 去重:按 personId 去重,保留最新的错误信息
+          const uniqueFailedJobs = [...storedFailedJobs];
+          failedJobs.forEach(newJob => {
+            const existingIndex = uniqueFailedJobs.findIndex(job => job.personId === newJob.personId);
+            if (existingIndex >= 0) {
+              // 更新已存在的失败任务
+              uniqueFailedJobs[existingIndex] = newJob;
+            } else {
+              // 添加新的失败任务
+              uniqueFailedJobs.push(newJob);
+            }
+          });
+          
+          // 清理超过24小时的失败任务
+          const now = Date.now();
+          const cleanedFailedJobs = uniqueFailedJobs.filter(job => {
+            return (now - job.startTime) < 24 * 60 * 60 * 1000; // 24小时
+          });
+          
+          localStorage.setItem(`${OUTBOUND_JOBS_KEY}_failed`, JSON.stringify(cleanedFailedJobs));
+          console.log('存储外呼失败任务,数量:', cleanedFailedJobs.length);
         }
 
         // 提示失败的任务
@@ -241,18 +276,8 @@
       message.error('加载案件数据失败,请稍后重试');
       
       // 使用Mock数据(缓存数据不包含nodes,所以统一使用Mock)
-      console.log('===== 使用Mock数据 =====');
-      const mockData = mockTimelineData.data.timeline;
-      const mockNodes = mockTimelineData.data.nodes || [];
-      console.log('mockData:', mockData);
-      console.log('mockNodes:', mockNodes);
-      setCaseData(mockData);
-      setProcessNodes(mockNodes);
-      saveToStorage(mockData);
       setHasLoaded(true);
       
-      // Mock数据也加载任务时间
-      await loadTaskTime(mockData);
     } finally {
       setLoading(false);
     }

--
Gitblit v1.8.0