240 lines
5.5 KiB
Markdown
240 lines
5.5 KiB
Markdown
# 预约系统问题修复指南
|
||
|
||
## 问题:没有时间段数据
|
||
|
||
### 原因分析
|
||
1. ✅ **API参数错误**:前端传 `date`,后端期望 `appointment_date` - 已修复
|
||
2. ⏳ **数据库表未创建**:需要执行SQL脚本
|
||
3. ⏳ **医生没有排班数据**:需要创建测试数据
|
||
|
||
## 修复步骤
|
||
|
||
### 步骤1:创建数据库表
|
||
|
||
```bash
|
||
# 执行预约表创建脚本
|
||
mysql -u username -p database < server/sql/doctor_appointment.sql
|
||
```
|
||
|
||
### 步骤2:创建测试排班数据
|
||
|
||
```bash
|
||
# 执行测试数据脚本
|
||
mysql -u username -p database < server/sql/test_appointment_data.sql
|
||
```
|
||
|
||
或者手动执行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:验证数据
|
||
|
||
```sql
|
||
-- 查询医生排班
|
||
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:清除缓存
|
||
|
||
```bash
|
||
cd server
|
||
php think clear
|
||
```
|
||
|
||
### 步骤5:测试API
|
||
|
||
```bash
|
||
# 测试获取可用时间段
|
||
curl "http://localhost/adminapi/doctor.appointment/availableSlots?doctor_id=1&appointment_date=2026-03-03&period=morning"
|
||
```
|
||
|
||
预期返回:
|
||
```json
|
||
{
|
||
"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`
|
||
|
||
**修改前**:
|
||
```typescript
|
||
const morningRes = await getAvailableSlots({
|
||
doctor_id: selectedDoctorId.value,
|
||
date: form.date, // ❌ 错误
|
||
period: 'morning'
|
||
})
|
||
```
|
||
|
||
**修改后**:
|
||
```typescript
|
||
const morningRes = await getAvailableSlots({
|
||
doctor_id: selectedDoctorId.value,
|
||
appointment_date: form.date, // ✅ 正确
|
||
period: 'morning'
|
||
})
|
||
```
|
||
|
||
### 修复2:添加调试日志
|
||
添加了 `console.log` 输出,方便调试:
|
||
```typescript
|
||
console.log('上午时段:', morningRes)
|
||
console.log('下午时段:', afternoonRes)
|
||
console.log('合并后的时间段:', timeSlots.value)
|
||
```
|
||
|
||
## 调试检查清单
|
||
|
||
### 前端检查
|
||
- [ ] 打开浏览器开发者工具(F12)
|
||
- [ ] 打开预约弹窗
|
||
- [ ] 选择医生
|
||
- [ ] 查看Network标签,找到 `availableSlots` 请求
|
||
- [ ] 检查请求参数是否包含 `appointment_date`
|
||
- [ ] 检查响应数据中是否有 `slots` 数组
|
||
|
||
### 后端检查
|
||
- [ ] 数据库表 `la_doctor_appointment` 已创建
|
||
- [ ] 数据库表 `la_doctor_roster` 有数据
|
||
- [ ] 医生排班状态为 1(出诊)
|
||
- [ ] 日期是今天或未来日期
|
||
- [ ] 后端日志没有错误
|
||
|
||
### 数据库检查
|
||
```sql
|
||
-- 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: 控制器不存在
|
||
**原因**: 缓存未清除
|
||
|
||
**解决**:
|
||
```bash
|
||
cd server
|
||
php think clear
|
||
```
|
||
|
||
### Q4: 数据库表不存在
|
||
**原因**: 未执行SQL脚本
|
||
|
||
**解决**:
|
||
```bash
|
||
mysql -u username -p database < server/sql/doctor_appointment.sql
|
||
```
|
||
|
||
## 完整测试流程
|
||
|
||
1. **创建数据库表**
|
||
```bash
|
||
mysql -u username -p database < server/sql/doctor_appointment.sql
|
||
```
|
||
|
||
2. **创建测试数据**
|
||
```bash
|
||
mysql -u username -p database < server/sql/test_appointment_data.sql
|
||
```
|
||
|
||
3. **清除缓存**
|
||
```bash
|
||
cd server && php think clear
|
||
```
|
||
|
||
4. **刷新前端页面**
|
||
- 按 Ctrl+F5 强制刷新
|
||
- 清除浏览器缓存
|
||
|
||
5. **测试预约流程**
|
||
- 打开预约弹窗
|
||
- 选择医生(医生2或医生1)
|
||
- 查看是否显示时间段
|
||
- 选择时间段
|
||
- 点击确定
|
||
|
||
6. **查看控制台日志**
|
||
- 应该看到"上午时段"、"下午时段"、"合并后的时间段"的日志
|
||
- 应该看到时间段数组有数据
|
||
|
||
## 成功标志
|
||
|
||
当你看到以下情况时,说明修复成功:
|
||
|
||
1. ✅ 选择医生后,显示时间段网格
|
||
2. ✅ 时间段显示可用号源数量
|
||
3. ✅ 可以点击选择时间段
|
||
4. ✅ 点击确定后提示"预约成功"
|
||
5. ✅ 控制台没有错误信息
|
||
|
||
---
|
||
|
||
**最后更新**: 2024-02-26
|