| | |
| | | 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); |
| | |
| | | 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读取数据 |
| | |
| | | } |
| | | }; |
| | | |
| | | /** |
| | | * 加载任务时间数据 |
| | | */ |
| | | 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()); |
| | | } |
| | | }; |
| | | /** |
| | | * 加载案件数据 |
| | | */ |
| | |
| | | // 保存到localStorage |
| | | saveToStorage(timelineData); |
| | | |
| | | // 加载任务时间数据 |
| | | await loadTaskTime(timelineData); |
| | | |
| | | console.log('Case data loaded successfully:', timelineData); |
| | | } catch (err) { |
| | | console.error('Failed to load case data:', err); |
| | |
| | | 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); |
| | |
| | | loading, |
| | | error, |
| | | refreshData, |
| | | loadCaseData |
| | | loadCaseData, |
| | | taskStartTime, // 任务开始时间 |
| | | isTaskTimeFallback // 是否降级模式 |
| | | }; |
| | | |
| | | return ( |