5.5 KiB
5.5 KiB
预约系统问题修复指南
问题:没有时间段数据
原因分析
- ✅ API参数错误:前端传
date,后端期望appointment_date- 已修复 - ⏳ 数据库表未创建:需要执行SQL脚本
- ⏳ 医生没有排班数据:需要创建测试数据
修复步骤
步骤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
},
...
]
}
}
前端修复内容
修复1:API参数名称
文件: 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
完整测试流程
-
创建数据库表
mysql -u username -p database < server/sql/doctor_appointment.sql -
创建测试数据
mysql -u username -p database < server/sql/test_appointment_data.sql -
清除缓存
cd server && php think clear -
刷新前端页面
- 按 Ctrl+F5 强制刷新
- 清除浏览器缓存
-
测试预约流程
- 打开预约弹窗
- 选择医生(医生2或医生1)
- 查看是否显示时间段
- 选择时间段
- 点击确定
-
查看控制台日志
- 应该看到"上午时段"、"下午时段"、"合并后的时间段"的日志
- 应该看到时间段数组有数据
成功标志
当你看到以下情况时,说明修复成功:
- ✅ 选择医生后,显示时间段网格
- ✅ 时间段显示可用号源数量
- ✅ 可以点击选择时间段
- ✅ 点击确定后提示"预约成功"
- ✅ 控制台没有错误信息
最后更新: 2024-02-26