Files
zyt/APPOINTMENT_PERIOD_BUG_DEBUG.md
T
2026-03-04 15:32:30 +08:00

2.4 KiB

预约时段显示错误调试文档

问题描述

当医生只排了上午班(出诊),下午未排班时,预约页面仍然显示下午的时间段。

问题示例

  • 医生1 在 2026-03-06
    • 上午: 出诊(20) ✓
    • 下午: 未排班 ✗
  • 但预约页面显示:
    • 上午时段: 09:00-11:45 ✓ 正确
    • 下午时段: 14:00-17:45 ✗ 不应该显示

可能的原因

原因1: 数据库中有多条记录

数据库中可能存在两条记录:

-- 记录1: 上午出诊
doctor_id=1, date='2026-03-06', period='morning', status=1

-- 记录2: 下午未排班(但status可能也是1?)
doctor_id=1, date='2026-03-06', period='afternoon', status=?

原因2: 前端缓存问题

前端可能缓存了之前的时间段数据。

原因3: API返回数据问题

后端API可能返回了错误的数据。

调试步骤

1. 检查数据库实际数据

运行 CHECK_DOCTOR_1_ROSTER_0306.sql 查看实际的排班记录。

2. 检查API返回

访问: adminapi/doctor.appointment/availableSlots?doctor_id=1&appointment_date=2026-03-06&period=all

查看返回的 slots 数组,确认是否包含下午时段。

3. 检查日志

查看 runtime/log/ 目录下的日志文件,搜索关键字:

  • "查询到的排班数据"
  • "该日期所有排班数据"
  • "处理排班时段"

4. 前端调试

在浏览器控制台查看:

console.log('时间段数据:', response)
console.log('处理后的时间段:', timeSlots.value)

修复方案

已实施的修复

  1. 在查询排班时,明确只查询 status = 1 的记录
  2. 在循环处理排班时,再次检查 status == 1
  3. 添加详细的日志记录

待验证

需要确认数据库中的实际数据结构和状态值。

测试用例

测试1: 只有上午排班

  • 数据: doctor_id=1, date='2026-03-06', period='morning', status=1
  • 期望: 只显示 09:00-11:45 的时间段
  • 实际: 待测试

测试2: 只有下午排班

  • 数据: doctor_id=1, date='2026-03-07', period='afternoon', status=1
  • 期望: 只显示 14:00-17:45 的时间段
  • 实际: 待测试

测试3: 上下午都排班

  • 数据: doctor_id=2, date='2026-03-04', period='morning'+'afternoon', status=1
  • 期望: 显示 09:00-11:45 和 14:00-17:45 的时间段
  • 实际: 待测试

下一步

  1. 运行 SQL 查询确认数据库数据
  2. 测试 API 接口返回
  3. 根据结果调整代码