# 预约时段显示错误调试文档 ## 问题描述 当医生只排了上午班(出诊),下午未排班时,预约页面仍然显示下午的时间段。 ## 问题示例 - 医生1 在 2026-03-06 - 上午: 出诊(20) ✓ - 下午: 未排班 ✗ - 但预约页面显示: - 上午时段: 09:00-11:45 ✓ 正确 - 下午时段: 14:00-17:45 ✗ 不应该显示 ## 可能的原因 ### 原因1: 数据库中有多条记录 数据库中可能存在两条记录: ```sql -- 记录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. 前端调试 在浏览器控制台查看: ```javascript 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. 根据结果调整代码