From ce77556eebb6896903be1dc8ac3202b42b96649d Mon Sep 17 00:00:00 2001
From: tony.cheng <chengmingwei_1984122@126.com>
Date: Wed, 04 Feb 2026 21:06:04 +0800
Subject: [PATCH] feat: 实现首页任务时间实时计时功能
---
web-app/src/contexts/CaseDataContext.jsx | 62 ++++++++++++++++++++++++++++++
1 files changed, 61 insertions(+), 1 deletions(-)
diff --git a/web-app/src/contexts/CaseDataContext.jsx b/web-app/src/contexts/CaseDataContext.jsx
index fed5062..fa77efe 100644
--- a/web-app/src/contexts/CaseDataContext.jsx
+++ b/web-app/src/contexts/CaseDataContext.jsx
@@ -7,6 +7,8 @@
import { message } from 'antd';
import ProcessAPIService from '../services/ProcessAPIService';
import { getMergedParams } from '../utils/urlParams';
+import { mockTimelineData } from '../mocks/timeline';
+import { getFallbackStartTime, parseTimeString } from '../utils/timeFormatter';
// 创建Context
const CaseDataContext = createContext(null);
@@ -22,6 +24,8 @@
const [caseData, setCaseData] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
+ const [taskStartTime, setTaskStartTime] = useState(null); // 任务开始时间
+ const [isTaskTimeFallback, setIsTaskTimeFallback] = useState(false); // 是否降级模式
/**
* 从localStorage读取数据
@@ -49,6 +53,46 @@
}
};
+ /**
+ * 加载任务时间数据
+ */
+ const loadTaskTime = async (timeline) => {
+ try {
+ const mediationId = timeline.id;
+ const nodeId = timeline.current_node?.id;
+
+ if (!mediationId || !nodeId) {
+ throw new Error('缺少必要的参数: mediation_id 或 node_id');
+ }
+
+ console.log('Loading task time with:', { mediationId, nodeId });
+
+ const response = await ProcessAPIService.getTaskTime(mediationId, nodeId);
+
+ // 解析API返回的开始时间
+ const startTimeStr = response.data?.startTime;
+ if (startTimeStr) {
+ const startTime = parseTimeString(startTimeStr);
+ if (startTime) {
+ setTaskStartTime(startTime);
+ setIsTaskTimeFallback(false);
+ console.log('Task start time loaded:', new Date(startTime).toLocaleString());
+ return;
+ }
+ }
+
+ throw new Error('无法解析开始时间');
+ } catch (err) {
+ console.error('Failed to load task time:', err);
+
+ // 降级到本地计时
+ const fallbackTime = getFallbackStartTime();
+ setTaskStartTime(fallbackTime);
+ setIsTaskTimeFallback(true);
+ message.warning('任务时间API不可用,使用本地计时');
+ console.log('Using fallback start time:', new Date(fallbackTime).toLocaleString());
+ }
+ };
/**
* 加载案件数据
*/
@@ -89,6 +133,9 @@
// 保存到localStorage
saveToStorage(timelineData);
+ // 加载任务时间数据
+ await loadTaskTime(timelineData);
+
console.log('Case data loaded successfully:', timelineData);
} catch (err) {
console.error('Failed to load case data:', err);
@@ -102,6 +149,17 @@
if (cachedData && !forceRefresh) {
message.warning('已加载历史数据');
setCaseData(cachedData);
+ // 缓存数据也加载任务时间
+ await loadTaskTime(cachedData);
+ } else {
+ // 使用Mock数据
+ console.log('使用Mock数据');
+ const mockData = mockTimelineData.data.timeline;
+ setCaseData(mockData);
+ saveToStorage(mockData);
+
+ // Mock数据也加载任务时间
+ await loadTaskTime(mockData);
}
} finally {
setLoading(false);
@@ -129,7 +187,9 @@
loading,
error,
refreshData,
- loadCaseData
+ loadCaseData,
+ taskStartTime, // 任务开始时间
+ isTaskTimeFallback // 是否降级模式
};
return (
--
Gitblit v1.8.0