web-app/src/utils/timeFormatter.jsformatMinutes(durationInSeconds):将秒数格式化为"XX分钟"calculateDuration(startTime):计算从startTime到现在的分钟数getFallbackStartTime():获取页面加载时间作为降级方案parseTimeString(timeString):解析API时间字符串web-app/src/hooks/useTaskTimer.jsuseTaskTimer(startTime, isFallback){ duration, formattedTime, isFallback } 状态web-app/src/services/ProcessAPIService.jsgetTaskTime(mediation_id, node_id) 方法的JSDoc注释web-app/src/contexts/CaseDataContext.jsxloadCaseData 成功后,提取 timeline.id 和 timeline.current_node.idProcessAPIService.getTaskTime(mediation_id, node_id)startTime 存储到Context状态中getFallbackStartTime() 作为降级方案web-app/src/components/dashboard/FloatingControlPanel.jsxuseTaskTimer HooktaskStartTime 和 isTaskTimeFallbackuseTaskTimer 获取实时duration"已进行:25分钟" 替换为动态时间显示web-app/src/utils/timeFormatter.js - 时间格式化工具web-app/src/hooks/useTaskTimer.js - 任务计时Hookweb-app/src/mocks/timeline.js - Mock数据web-app/src/services/ProcessAPIService.js - 完善API文档web-app/src/contexts/CaseDataContext.jsx - 集成任务时间数据web-app/src/components/dashboard/FloatingControlPanel.jsx - 展示实时时间✅ 参数映射正确:mediation_id = timeline.id, node_id = timeline.current_node.id
✅ 时间源策略:API主时间源 + 本地降级方案
✅ 定时器管理:10秒间隔更新,自动清理
✅ 防重复调用:添加hasLoaded状态防止重复API请求
✅ 容错机制:API失败自动降级到本地计时
Task 1.1 (时间工具) ─┐
Task 1.2 (计时Hook) ─┤
├→ Task 3.1 (Context集成) → Task 4.1 (UI展示)
Task 2.1 (API文档) ──┘
如果集成过程中出现问题,可以:
1. 注释掉FloatingControlPanel中的动态时间显示
2. 恢复为固定的"25分钟"显示
3. 删除新增的hooks和utils文件