385 lines
7.8 KiB
Markdown
385 lines
7.8 KiB
Markdown
# 医生预约系统 - 完整实现总结
|
|
|
|
## 🎉 实现完成
|
|
|
|
已成功实现完整的医生预约挂号系统,包括前端界面和后端API。
|
|
|
|
## 📁 创建的文件清单
|
|
|
|
### 后端文件 (PHP/ThinkPHP)
|
|
|
|
1. **数据模型**
|
|
- `server/app/common/model/doctor/Appointment.php`
|
|
|
|
2. **控制器**
|
|
- `server/app/adminapi/controller/doctor/AppointmentController.php`
|
|
|
|
3. **业务逻辑**
|
|
- `server/app/adminapi/logic/doctor/AppointmentLogic.php`
|
|
|
|
4. **验证器**
|
|
- `server/app/adminapi/validate/doctor/AppointmentValidate.php`
|
|
|
|
5. **数据列表**
|
|
- `server/app/adminapi/lists/doctor/AppointmentLists.php`
|
|
|
|
6. **数据库脚本**
|
|
- `server/sql/doctor_appointment.sql`
|
|
|
|
7. **文档**
|
|
- `server/APPOINTMENT_BACKEND_SETUP.md`
|
|
- `server/test_appointment_api.php`
|
|
|
|
### 前端文件 (Vue3/TypeScript)
|
|
|
|
1. **API接口**
|
|
- `admin/src/api/doctor.ts` (已更新)
|
|
|
|
2. **组件**
|
|
- `admin/src/views/tcm/diagnosis/appointment.vue` (新建)
|
|
- `admin/src/views/tcm/diagnosis/index.vue` (已更新)
|
|
|
|
3. **文档**
|
|
- `admin/APPOINTMENT_SYSTEM.md`
|
|
- `admin/APPOINTMENT_UI_UPDATE.md`
|
|
- `admin/APPOINTMENT_IMPLEMENTATION_SUMMARY.md`
|
|
|
|
### 安装脚本
|
|
|
|
1. **Windows**
|
|
- `install_appointment_system.bat`
|
|
|
|
2. **Linux/Mac**
|
|
- `install_appointment_system.sh`
|
|
|
|
### 文档
|
|
|
|
1. **快速开始**
|
|
- `APPOINTMENT_QUICK_START.md`
|
|
|
|
2. **完整总结**
|
|
- `APPOINTMENT_COMPLETE.md` (本文件)
|
|
|
|
## 🚀 快速安装
|
|
|
|
### 方法1: 使用安装脚本
|
|
|
|
**Windows:**
|
|
```bash
|
|
install_appointment_system.bat
|
|
```
|
|
|
|
**Linux/Mac:**
|
|
```bash
|
|
chmod +x install_appointment_system.sh
|
|
./install_appointment_system.sh
|
|
```
|
|
|
|
### 方法2: 手动安装
|
|
|
|
1. **创建数据库表**
|
|
```bash
|
|
mysql -u username -p database < server/sql/doctor_appointment.sql
|
|
```
|
|
|
|
2. **清除缓存**
|
|
```bash
|
|
cd server
|
|
php think clear
|
|
```
|
|
|
|
3. **验证安装**
|
|
```bash
|
|
# 访问API测试
|
|
curl "http://your-domain/adminapi/doctor.appointment/availableSlots?doctor_id=1&appointment_date=2026-03-04&period=morning"
|
|
```
|
|
|
|
## 📊 功能特性
|
|
|
|
### 前端功能
|
|
|
|
✅ 预约方式选择
|
|
- 选择时段预约有专医生
|
|
- 选择医生预约有专时段
|
|
|
|
✅ 患者信息显示
|
|
- 显示患者姓名、性别、年龄
|
|
- 显示上次就诊记录
|
|
|
|
✅ 医生选择
|
|
- 单选按钮形式
|
|
- 显示可用号源数量标签
|
|
- 绿色数字(有号源) / 灰色"无"(无号源)
|
|
|
|
✅ 日期选择
|
|
- 横向按钮布局
|
|
- 显示未来7天
|
|
- 格式: 02月26日 (四)
|
|
|
|
✅ 时间段选择
|
|
- 4列网格布局
|
|
- 30分钟间隔
|
|
- 显示可用号源数量
|
|
- 可用/不可用/已选择三种状态
|
|
|
|
✅ 表单验证
|
|
- 必填项验证
|
|
- 实时错误提示
|
|
|
|
### 后端功能
|
|
|
|
✅ 时间段管理
|
|
- 自动生成30分钟间隔时间段
|
|
- 上午: 09:00-11:30
|
|
- 下午: 13:00-20:30
|
|
|
|
✅ 排班检查
|
|
- 验证医生排班存在
|
|
- 检查排班状态(出诊/停诊/休息)
|
|
- 号源数量控制
|
|
|
|
✅ 预约管理
|
|
- 创建预约
|
|
- 取消预约
|
|
- 预约列表
|
|
- 预约详情
|
|
|
|
✅ 冲突检查
|
|
- 时间段重复检查
|
|
- 号源数量限制
|
|
- 数据库唯一索引防并发
|
|
|
|
✅ 数据统计
|
|
- 医生可用号源统计
|
|
- 预约数量统计
|
|
|
|
## 🔌 API接口
|
|
|
|
### 1. 获取可用时间段
|
|
```
|
|
GET /adminapi/doctor.appointment/availableSlots
|
|
参数: doctor_id, appointment_date, period
|
|
返回: { slots: [{ time, available, quota }] }
|
|
```
|
|
|
|
### 2. 创建预约
|
|
```
|
|
POST /adminapi/doctor.appointment/create
|
|
参数: patient_id, doctor_id, appointment_date, period, appointment_time
|
|
返回: { id }
|
|
```
|
|
|
|
### 3. 取消预约
|
|
```
|
|
POST /adminapi/doctor.appointment/cancel
|
|
参数: id
|
|
返回: success
|
|
```
|
|
|
|
### 4. 预约列表
|
|
```
|
|
GET /adminapi/doctor.appointment/lists
|
|
参数: page_no, page_size, patient_id, doctor_id, status
|
|
返回: { lists, count }
|
|
```
|
|
|
|
### 5. 预约详情
|
|
```
|
|
GET /adminapi/doctor.appointment/detail
|
|
参数: id
|
|
返回: appointment object
|
|
```
|
|
|
|
### 6. 医生可用号源
|
|
```
|
|
GET /adminapi/doctor.appointment/doctorAvailability
|
|
参数: doctor_id, date
|
|
返回: { available_count }
|
|
```
|
|
|
|
## 💾 数据库设计
|
|
|
|
### la_doctor_appointment 表
|
|
|
|
| 字段 | 类型 | 说明 |
|
|
|------|------|------|
|
|
| id | int(11) | 主键 |
|
|
| patient_id | int(11) | 患者ID |
|
|
| doctor_id | int(11) | 医生ID |
|
|
| roster_id | int(11) | 排班ID |
|
|
| appointment_date | date | 预约日期 |
|
|
| period | enum | 时段(morning/afternoon) |
|
|
| appointment_time | time | 预约时间 |
|
|
| appointment_type | varchar(20) | 预约类型(video/text/phone) |
|
|
| status | tinyint(1) | 状态(1=已预约,2=已取消,3=已完成) |
|
|
| remark | varchar(500) | 备注 |
|
|
| create_time | int(10) | 创建时间 |
|
|
| update_time | int(10) | 更新时间 |
|
|
|
|
**索引:**
|
|
- PRIMARY KEY (id)
|
|
- UNIQUE KEY (doctor_id, appointment_date, appointment_time, status)
|
|
- KEY (patient_id)
|
|
- KEY (doctor_id, appointment_date)
|
|
- KEY (roster_id)
|
|
|
|
## 🔒 业务规则
|
|
|
|
1. **预约条件**
|
|
- 医生必须有排班
|
|
- 排班状态必须为"出诊"(status=1)
|
|
- 时间段不能重复预约
|
|
- 预约数量不能超过号源数
|
|
|
|
2. **时间规则**
|
|
- 时间段间隔: 30分钟
|
|
- 上午时段: 09:00-11:30
|
|
- 下午时段: 13:00-20:30
|
|
|
|
3. **并发控制**
|
|
- 数据库唯一索引防止重复预约
|
|
- 事务处理确保数据一致性
|
|
|
|
4. **状态管理**
|
|
- 1: 已预约 (有效预约)
|
|
- 2: 已取消 (不占用号源)
|
|
- 3: 已完成 (历史记录)
|
|
|
|
## 🧪 测试
|
|
|
|
### 准备测试数据
|
|
|
|
```sql
|
|
-- 创建医生排班
|
|
INSERT INTO `la_doctor_roster`
|
|
(`doctor_id`, `date`, `period`, `status`, `quota`, `max_patients`, `create_time`, `update_time`)
|
|
VALUES
|
|
(1, '2026-03-04', 'morning', 1, 10, 15, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
|
(1, '2026-03-04', 'afternoon', 1, 10, 15, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
|
|
```
|
|
|
|
### 测试API
|
|
|
|
```bash
|
|
# 使用测试脚本
|
|
cd server
|
|
php test_appointment_api.php
|
|
```
|
|
|
|
### 测试前端
|
|
|
|
1. 登录后台管理系统
|
|
2. 进入"中医诊断"页面
|
|
3. 点击患者的"挂号"按钮
|
|
4. 完成预约流程
|
|
|
|
## 📝 权限配置
|
|
|
|
在后台权限管理中添加:
|
|
|
|
```
|
|
doctor.appointment/availableSlots - 查看可用时间段
|
|
doctor.appointment/create - 创建预约
|
|
doctor.appointment/cancel - 取消预约
|
|
doctor.appointment/lists - 预约列表
|
|
doctor.appointment/detail - 预约详情
|
|
doctor.appointment/doctorAvailability - 医生可用号源
|
|
```
|
|
|
|
## 🐛 故障排查
|
|
|
|
### 控制器不存在
|
|
```bash
|
|
cd server
|
|
php think clear
|
|
```
|
|
|
|
### 数据库表不存在
|
|
```bash
|
|
mysql -u username -p database < server/sql/doctor_appointment.sql
|
|
```
|
|
|
|
### 没有可用时间段
|
|
检查:
|
|
1. 医生排班是否存在
|
|
2. 排班状态是否为"出诊"(status=1)
|
|
3. 号源是否已满
|
|
|
|
### TypeScript错误
|
|
```bash
|
|
cd admin
|
|
npm run build
|
|
```
|
|
|
|
## 📚 文档索引
|
|
|
|
| 文档 | 说明 |
|
|
|------|------|
|
|
| APPOINTMENT_QUICK_START.md | 快速开始指南 |
|
|
| server/APPOINTMENT_BACKEND_SETUP.md | 后端详细安装说明 |
|
|
| admin/APPOINTMENT_SYSTEM.md | 系统设计文档 |
|
|
| admin/APPOINTMENT_UI_UPDATE.md | UI更新说明 |
|
|
| admin/APPOINTMENT_IMPLEMENTATION_SUMMARY.md | 前端实现总结 |
|
|
|
|
## ✅ 完成清单
|
|
|
|
- [x] 数据库表设计
|
|
- [x] 后端模型创建
|
|
- [x] 后端控制器实现
|
|
- [x] 后端业务逻辑
|
|
- [x] 后端数据验证
|
|
- [x] 前端API接口
|
|
- [x] 前端预约组件
|
|
- [x] 前端集成
|
|
- [x] 安装脚本
|
|
- [x] 测试脚本
|
|
- [x] 完整文档
|
|
- [ ] 数据库表创建 (需手动执行)
|
|
- [ ] 权限配置 (需手动配置)
|
|
- [ ] 功能测试 (需手动测试)
|
|
|
|
## 🎯 下一步
|
|
|
|
1. **立即执行**
|
|
- 运行安装脚本创建数据库表
|
|
- 清除后端缓存
|
|
- 配置权限节点
|
|
|
|
2. **测试验证**
|
|
- 创建测试排班数据
|
|
- 测试API接口
|
|
- 测试前端功能
|
|
|
|
3. **上线准备**
|
|
- 备份数据库
|
|
- 配置生产环境
|
|
- 培训用户
|
|
|
|
## 🔧 技术栈
|
|
|
|
**后端:**
|
|
- PHP 7.2+
|
|
- ThinkPHP 6.0
|
|
- MySQL 5.7+
|
|
|
|
**前端:**
|
|
- Vue 3
|
|
- TypeScript
|
|
- Element Plus
|
|
- Vite
|
|
|
|
## 📞 支持
|
|
|
|
如遇问题:
|
|
1. 查看相关文档
|
|
2. 检查错误日志
|
|
3. 验证环境配置
|
|
4. 查看测试脚本输出
|
|
|
|
---
|
|
|
|
**版本**: 1.0.0
|
|
**状态**: ✅ 开发完成,等待部署
|
|
**创建时间**: 2024-02-26
|
|
**最后更新**: 2024-02-26
|