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

240 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 预约系统问题修复指南
## 问题:没有时间段数据
### 原因分析
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
},
...
]
}
}
```
## 前端修复内容
### 修复1API参数名称
**文件**: `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