Skip to content

Latest commit

 

History

History
201 lines (157 loc) · 5.11 KB

File metadata and controls

201 lines (157 loc) · 5.11 KB

时间冲突检测功能测试指南

功能概述

时间冲突检测功能会自动检测用户日程事项之间的时间重叠,并以醒目的视觉效果标注冲突的事项。

视觉效果

冲突的日程事项会有以下视觉标识:

  1. 红色左边框 - 卡片左侧有明显的红色竖条
  2. 红色背景 - 卡片有淡红色背景高亮
  3. 冲突标签 - 标题旁显示红色"时间冲突"标签
  4. 冲突图标 - 橙色警告三角形图标
  5. 提示信息 - 鼠标悬停显示详细的冲突说明

测试用例

测试1: 完全重叠

输入以下两个日程:

今天下午2点开会
今天下午2点半有接待

预期结果

  • 两个事项都应该显示冲突标识
  • 第一个事项:14:00-15:00(默认1小时)
  • 第二个事项:14:30-15:30(默认1小时)
  • 时间段重叠:14:30-15:00

测试2: 部分重叠(开始时间重叠)

今天下午3点开会,2小时
今天下午4点培训

预期结果

  • 两个事项都显示冲突
  • 第一个事项:15:00-17:00
  • 第二个事项:16:00-17:00
  • 时间段重叠:16:00-17:00

测试3: 部分重叠(结束时间重叠)

明天上午10点会议,2小时
明天上午11点项目评审

预期结果

  • 两个事项都显示冲突
  • 第一个事项:10:00-12:00
  • 第二个事项:11:00-12:00
  • 时间段重叠:11:00-12:00

测试4: 完全包含

周三下午2点到5点研讨会
周三下午3点演示,30分钟

预期结果

  • 两个事项都显示冲突
  • 第一个事项:14:00-17:00
  • 第二个事项:15:00-15:30
  • 第二个事项完全在第一个事项时间范围内

测试5: 连续事项(不冲突)

今天上午9点会议,1小时
今天上午10点培训

预期结果

  • 两个事项都不显示冲突
  • 第一个事项:09:00-10:00
  • 第二个事项:10:00-11:00
  • 第一个结束时第二个开始,无重叠

测试6: 同时开始

下周一早上9点团队会议
下周一早上9点项目启动会

预期结果

  • 两个事项都显示冲突
  • 两个事项开始时间完全相同

测试7: 多个事项冲突

后天下午2点开会
后天下午2点半接待
后天下午2点45分电话会议

预期结果

  • 三个事项都应该显示冲突标识
  • 形成一个冲突链

测试8: 修改后解决冲突

  1. 创建两个冲突的事项
  2. 编辑其中一个,修改时间使其不再冲突
  3. 保存

预期结果

  • 修改前两个事项都显示冲突
  • 修改后两个事项的冲突标识都应该消失

测试9: 删除冲突事项

  1. 创建两个冲突的事项
  2. 删除其中一个

预期结果

  • 删除前两个事项都显示冲突
  • 删除后剩余事项的冲突标识应该消失

测试10: 归档冲突事项

  1. 创建两个冲突的事项
  2. 归档其中一个

预期结果

  • 归档前两个事项都显示冲突
  • 归档后未归档事项的冲突标识应该消失
  • 恢复归档后,冲突标识应该重新出现

测试步骤

1. 启动应用

# 确保数据库正在运行
npm run db:start

# 启动后端服务器
npm run server

# 启动前端开发服务器
npm run dev

2. 创建测试数据

在快速输入框中依次输入上述测试用例的语句

3. 验证视觉效果

检查每个测试用例的预期结果是否正确:

  • 冲突标识是否正确显示
  • 视觉效果是否醒目
  • Tooltip 提示是否准确

4. 测试交互

  • 编辑冲突的事项
  • 删除冲突的事项
  • 归档冲突的事项
  • 验证冲突状态的实时更新

注意事项

  1. 时间解析:默认事项时长为1小时
  2. 同一用户:只检测同一用户的事项冲突
  3. 事项类型:只有 event 类型的事项才会检测冲突
  4. 实时更新:创建、更新、删除、归档操作都会触发冲突状态重新计算

已知限制

  1. 目前不支持跨天事项的冲突检测优化
  2. 不支持显示具体冲突的事项列表(可在未来版本中添加)
  3. 不支持批量解决冲突的功能

技术实现

后端(server/routes/items.ts)

  • detectTimeConflicts(): 检测单个事项是否与其他事项冲突
  • updateConflictStatus(): 批量更新所有事项的冲突状态
  • 在创建、更新、删除、归档操作后自动调用冲突检测

前端(src/utils/conflictDetector.ts)

  • hasTimeConflict(): 判断两个时间段是否重叠
  • detectConflicts(): 检测一个事项与事项列表的冲突
  • formatConflictMessage(): 格式化冲突提示信息

UI(src/components/items/ItemCard.tsx)

  • 冲突标识的视觉效果
  • Tooltip 提示组件
  • 红色高亮样式

故障排查

冲突未正确显示

  1. 检查事项是否有 start_timeend_time
  2. 检查事项类型是否为 event
  3. 查看浏览器控制台是否有错误
  4. 检查后端日志

冲突状态未更新

  1. 刷新页面重新加载数据
  2. 检查后端 updateConflictStatus 函数是否被调用
  3. 检查数据库中 has_conflict 字段的值

时间解析错误

  1. 检查时区设置
  2. 确认日期时间格式正确
  3. 查看 parseLocalDateTime 函数的处理逻辑