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

281 lines
7.1 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. `admin/src/views/tcm/appointment/list.vue` - 挂号列表页面
2. `admin/src/api/doctor.ts` - API接口(已包含 completeAppointment
### 后端文件
1. `server/app/adminapi/controller/doctor/AppointmentController.php` - 控制器
2. `server/app/adminapi/logic/doctor/AppointmentLogic.php` - 业务逻辑
3. `server/app/adminapi/lists/doctor/AppointmentLists.php` - 列表查询
4. `server/app/adminapi/validate/doctor/AppointmentValidate.php` - 验证器
5. `server/app/common/model/doctor/Appointment.php` - 数据模型
## 核心功能
### 1. 挂号列表
- 支持按患者姓名模糊搜索
- 支持按医生姓名模糊搜索
- 支持按状态筛选(已预约/已取消/已完成)
- 支持按日期范围筛选
- 分页显示
- 显示患者信息、医生信息、预约时间等
### 2. 挂号详情
- 查看完整的挂号信息
- 包含患者姓名、电话、医生姓名等
### 3. 取消挂号
- 只能取消"已预约"状态的挂号
- 需要二次确认
- 取消后状态变为"已取消"
### 4. 完成挂号
- 只能完成"已预约"状态的挂号
- 需要二次确认
- 完成后状态变为"已完成"
## 后端更新说明
### 数据库查询优化
使用联表查询获取患者和医生信息:
```php
// AppointmentLists.php
Appointment::alias('a')
->leftJoin('user u', 'a.patient_id = u.id')
->leftJoin('admin ad', 'a.doctor_id = ad.id')
->field('a.*, u.nickname as patient_name, u.mobile as patient_phone, ad.name as doctor_name')
```
### 搜索功能
- 患者姓名:模糊匹配 `u.nickname`
- 医生姓名:模糊匹配 `ad.name`
- 日期范围:between 查询
- 状态:精确匹配
### 数据格式化
- 时间戳自动转换为日期时间格式
- 状态自动添加描述文本
- 预约类型自动添加描述文本
## 配置步骤
### 1. 在后台添加菜单
登录后台管理系统,进入"权限管理" -> "菜单管理",添加新菜单:
**菜单配置:**
- 菜单名称:挂号管理
- 菜单类型:菜单
- 上级菜单:中医诊断(或其他合适的父菜单)
- 菜单路径:tcm/appointment/list
- 组件路径:tcm/appointment/list
- 权限标识:doctor.appointment/lists
- 菜单图标:Calendar(或 el-icon-calendar
- 排序:根据需要设置
- 是否显示:是
- 是否缓存:是
### 2. 配置权限节点
在"权限管理"中为该菜单添加操作权限:
| 权限名称 | 权限标识 | 说明 |
|---------|---------|------|
| 挂号列表 | doctor.appointment/lists | 查看挂号列表 |
| 挂号详情 | doctor.appointment/detail | 查看挂号详情 |
| 取消挂号 | doctor.appointment/cancel | 取消挂号 |
| 完成挂号 | doctor.appointment/complete | 完成挂号 |
### 3. 分配权限
在"角色管理"中,为相应的角色分配上述权限。
## API接口文档
### 1. 获取挂号列表
```
GET /doctor.appointment/lists
请求参数:
{
page_no: number, // 页码
page_size: number, // 每页数量
patient_name?: string, // 患者姓名(模糊搜索)
doctor_name?: string, // 医生姓名(模糊搜索)
status?: number, // 状态:1=已预约,2=已取消,3=已完成
start_date?: string, // 开始日期 YYYY-MM-DD
end_date?: string // 结束日期 YYYY-MM-DD
}
返回数据:
{
code: 1,
msg: "success",
data: {
lists: [
{
id: number,
patient_id: number,
patient_name: string,
patient_phone: string,
doctor_id: number,
doctor_name: string,
appointment_date: string,
appointment_time: string,
period: string,
appointment_type: string,
appointment_type_desc: string,
status: number,
status_desc: string,
remark: string,
create_time: string,
update_time: string
}
],
count: number,
page_no: number,
page_size: number
}
}
```
### 2. 获取挂号详情
```
GET /doctor.appointment/detail
请求参数:
{
id: number // 挂号ID
}
返回数据:同列表项结构
```
### 3. 取消挂号
```
POST /doctor.appointment/cancel
请求参数:
{
id: number // 挂号ID
}
返回数据:
{
code: 1,
msg: "取消成功"
}
```
### 4. 完成挂号
```
POST /doctor.appointment/complete
请求参数:
{
id: number // 挂号ID
}
返回数据:
{
code: 1,
msg: "操作成功"
}
```
## 测试步骤
1. **配置菜单和权限**
- 在后台添加"挂号管理"菜单
- 配置相应的权限节点
- 为角色分配权限
2. **测试列表功能**
- 访问挂号管理页面
- 验证列表数据正常显示
- 测试分页功能
3. **测试搜索功能**
- 按患者姓名搜索
- 按医生姓名搜索
- 按状态筛选
- 按日期范围筛选
4. **测试详情功能**
- 点击"详情"按钮
- 验证详情信息完整
5. **测试取消功能**
- 选择"已预约"状态的挂号
- 点击"取消"按钮
- 确认操作
- 验证状态变为"已取消"
6. **测试完成功能**
- 选择"已预约"状态的挂号
- 点击"完成"按钮
- 确认操作
- 验证状态变为"已完成"
## 数据库表
确保数据库表 `la_doctor_appointment` 已创建:
```sql
CREATE TABLE `la_doctor_appointment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`patient_id` int(11) NOT NULL COMMENT '患者ID',
`doctor_id` int(11) NOT NULL COMMENT '医生ID',
`roster_id` int(11) NOT NULL COMMENT '排班ID',
`appointment_date` date NOT NULL COMMENT '预约日期',
`period` varchar(20) NOT NULL COMMENT '时段',
`appointment_time` time NOT NULL COMMENT '预约时间',
`appointment_type` varchar(20) DEFAULT 'video' COMMENT '预约类型',
`status` tinyint(1) DEFAULT '1' COMMENT '状态:1=已预约,2=已取消,3=已完成',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_time` int(10) unsigned DEFAULT NULL,
`update_time` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_patient` (`patient_id`),
KEY `idx_doctor_date` (`doctor_id`,`appointment_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='医生挂号表';
```
## 注意事项
1. **表前缀**:确保使用正确的表前缀 `la_`
2. **关联表**
- `la_user` - 患者表
- `la_admin` - 医生表(管理员表)
3. **权限控制**:确保用户有相应的权限才能访问
4. **状态流转**
- 已预约 → 已取消
- 已预约 → 已完成
- 已取消和已完成状态不可逆
## 扩展功能建议
1. **导出功能**:导出挂号列表为Excel
2. **统计报表**:每日挂号统计、医生挂号统计
3. **消息通知**:挂号成功、就诊提醒
4. **批量操作**:批量取消、批量完成
5. **挂号改期**:支持修改预约时间
## 相关文档
- `APPOINTMENT_SYSTEM.md` - 挂号系统总体设计
- `APPOINTMENT_COMPLETE.md` - 挂号功能实现说明
- `APPOINTMENT_PERIOD_FIX.md` - 时间段修复说明