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

5.5 KiB
Raw Blame History

预约系统问题修复指南

问题:没有时间段数据

原因分析

  1. API参数错误:前端传 date,后端期望 appointment_date - 已修复
  2. 数据库表未创建:需要执行SQL脚本
  3. 医生没有排班数据:需要创建测试数据

修复步骤

步骤1:创建数据库表

# 执行预约表创建脚本
mysql -u username -p database < server/sql/doctor_appointment.sql

步骤2:创建测试排班数据

# 执行测试数据脚本
mysql -u username -p database < server/sql/test_appointment_data.sql

或者手动执行SQL

-- 为医生ID=1创建今天和明天的排班
INSERT INTO `la_doctor_roster` 
(`doctor_id`, `date`, `period`, `status`, `quota`, `max_patients`, `create_time`, `update_time`)
VALUES
(1, CURDATE(), 'morning', 1, 10, 15, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(1, CURDATE(), 'afternoon', 1, 10, 15, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(1, DATE_ADD(CURDATE(), INTERVAL 1 DAY), 'morning', 1, 10, 15, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(1, DATE_ADD(CURDATE(), INTERVAL 1 DAY), 'afternoon', 1, 10, 15, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());

步骤3:验证数据

-- 查询医生排班
SELECT * FROM la_doctor_roster 
WHERE doctor_id = 1 
  AND date >= CURDATE()
ORDER BY date, period;

应该看到类似输出:

+----+-----------+------------+---------+--------+-------+--------------+
| id | doctor_id | date       | period  | status | quota | max_patients |
+----+-----------+------------+---------+--------+-------+--------------+
|  1 |         1 | 2026-03-03 | morning |      1 |    10 |           15 |
|  2 |         1 | 2026-03-03 | afternoon|      1 |    10 |           15 |
+----+-----------+------------+---------+--------+-------+--------------+

步骤4:清除缓存

cd server
php think clear

步骤5:测试API

# 测试获取可用时间段
curl "http://localhost/adminapi/doctor.appointment/availableSlots?doctor_id=1&appointment_date=2026-03-03&period=morning"

预期返回:

{
  "code": 1,
  "msg": "success",
  "data": {
    "slots": [
      {
        "time": "09:00",
        "available": true,
        "quota": 10
      },
      {
        "time": "09:30",
        "available": true,
        "quota": 10
      },
      ...
    ]
  }
}

前端修复内容

修复1API参数名称

文件: admin/src/views/tcm/diagnosis/appointment.vue

修改前:

const morningRes = await getAvailableSlots({
  doctor_id: selectedDoctorId.value,
  date: form.date,  // ❌ 错误
  period: 'morning'
})

修改后:

const morningRes = await getAvailableSlots({
  doctor_id: selectedDoctorId.value,
  appointment_date: form.date,  // ✅ 正确
  period: 'morning'
})

修复2:添加调试日志

添加了 console.log 输出,方便调试:

console.log('上午时段:', morningRes)
console.log('下午时段:', afternoonRes)
console.log('合并后的时间段:', timeSlots.value)

调试检查清单

前端检查

  • 打开浏览器开发者工具(F12
  • 打开预约弹窗
  • 选择医生
  • 查看Network标签,找到 availableSlots 请求
  • 检查请求参数是否包含 appointment_date
  • 检查响应数据中是否有 slots 数组

后端检查

  • 数据库表 la_doctor_appointment 已创建
  • 数据库表 la_doctor_roster 有数据
  • 医生排班状态为 1(出诊)
  • 日期是今天或未来日期
  • 后端日志没有错误

数据库检查

-- 1. 检查预约表是否存在
SHOW TABLES LIKE 'la_doctor_appointment';

-- 2. 检查排班表是否存在
SHOW TABLES LIKE 'la_doctor_roster';

-- 3. 检查医生排班数据
SELECT * FROM la_doctor_roster WHERE doctor_id = 1;

-- 4. 检查医生是否存在
SELECT id, name FROM la_admin WHERE role_id = 1;

常见问题

Q1: 返回空数组 Array(0)

原因:

  • 医生没有排班数据
  • 排班状态不是"出诊"(status=1)
  • 日期不匹配

解决: 执行 test_appointment_data.sql 创建测试数据

Q2: 提示"预约日期不能为空"

原因:

  • 前端参数名错误(已修复)
  • 日期没有被选中

解决:

  • 确保已更新前端代码
  • 点击日期按钮选择日期

Q3: 控制器不存在

原因: 缓存未清除

解决:

cd server
php think clear

Q4: 数据库表不存在

原因: 未执行SQL脚本

解决:

mysql -u username -p database < server/sql/doctor_appointment.sql

完整测试流程

  1. 创建数据库表

    mysql -u username -p database < server/sql/doctor_appointment.sql
    
  2. 创建测试数据

    mysql -u username -p database < server/sql/test_appointment_data.sql
    
  3. 清除缓存

    cd server && php think clear
    
  4. 刷新前端页面

    • 按 Ctrl+F5 强制刷新
    • 清除浏览器缓存
  5. 测试预约流程

    • 打开预约弹窗
    • 选择医生(医生2或医生1
    • 查看是否显示时间段
    • 选择时间段
    • 点击确定
  6. 查看控制台日志

    • 应该看到"上午时段"、"下午时段"、"合并后的时间段"的日志
    • 应该看到时间段数组有数据

成功标志

当你看到以下情况时,说明修复成功:

  1. 选择医生后,显示时间段网格
  2. 时间段显示可用号源数量
  3. 可以点击选择时间段
  4. 点击确定后提示"预约成功"
  5. 控制台没有错误信息

最后更新: 2024-02-26