# 挂号管理系统开发完成文档 ## 完成状态 ✅ 挂号管理系统已完成开发,包括: - 挂号列表查询(支持搜索和筛选) - 挂号详情查看 - 挂号取消功能 - 挂号完成功能 ## 已完成的文件 ### 前端文件 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` - 时间段修复说明