edit | blame | history | raw

Proposal: 首页任务时间实时展示API对接

Change ID

task-time-display

概述

为首页悬浮控制面板增加任务时间实时展示功能,通过API获取任务开始时间并结合本地定时器实现精确的时间计时显示。

动机

提升用户体验,让调解员能够实时了解当前任务的进行时长,便于掌握调解进度和时间管理。

影响范围

新增文件

  • web-app/src/hooks/useTaskTimer.js - 任务时间计时Hook
  • web-app/src/utils/timeFormatter.js - 时间格式化工具

修改文件

  • web-app/src/contexts/CaseDataContext.jsx - 集成任务时间数据获取
  • web-app/src/components/dashboard/FloatingControlPanel.jsx - 展示实时时间
  • web-app/src/services/ProcessAPIService.js - 补充getTaskTime方法文档

用户故事

调解员视角

作为调解员,我希望在悬浮控制面板上看到准确的任务进行时间,以便:
- 掌握当前调解环节的耗时
- 决定是否需要人工介入
- 评估调解效率

系统管理员视角

作为系统管理员,我希望时间显示具备容错能力,当API不可用时能降级到本地计时,确保功能可用性。

关键技术决策

1. 时间源策略

  • 主时间源:API返回的startTime(精确)
  • 备时间源:页面加载时刻(降级方案)
  • 增量计算:基于定时器每10秒累加

2. 定时器管理

  • 轮询间隔:10秒
  • 生命周期:页面卸载时自动清理
  • 性能优化:使用requestAnimationFrame优化渲染

3. 错误处理

  • API失败时自动降级到本地计时
  • 控制台记录错误日志
  • UI保持正常显示(不中断用户体验)

4. 数据流设计

CaseDataContext加载timeline
        ↓
提取mediation_id和node_id
        ↓
调用ProcessAPIService.getTaskTime
        ↓
获取startTime → useTaskTimer Hook
        ↓
定时器每10秒计算新duration
        ↓
FloatingControlPanel展示实时时间

验收标准

功能性

  • [ ] 成功调用getTaskTime API并获取startTime
  • [ ] 页面每10秒更新一次时间显示
  • [ ] 时间格式正确显示为"XX分钟"
  • [ ] 页面刷新后时间计时连续
  • [ ] 页面卸载时定时器正确清理

可靠性

  • [ ] API失败时自动降级到本地计时
  • [ ] 网络异常时不阻塞页面其他功能
  • [ ] 多次组件重渲染不重复创建定时器

性能

  • [ ] 定时器内存泄漏为0
  • [ ] 页面FPS保持60帧
  • [ ] CPU占用率增加不超过5%

用户体验

  • [ ] 时间显示平滑更新,无闪烁
  • [ ] 错误状态下有适当提示
  • [ ] 加载状态有视觉反馈

风险评估

高风险

  • 定时器内存泄漏:可能导致页面性能下降
  • 缓解措施:严格管理定时器生命周期

中风险

  • API响应延迟:影响初始时间准确性
  • 缓解措施:设置合理的超时时间

低风险

  • 时间计算精度:JavaScript定时器存在微小偏差
  • 缓解措施:定期与服务器时间同步校准

时间估算

  • 设计与规划:0.5小时
  • 编码实现:2小时
  • 测试验证:1小时
  • 总计:3.5小时