更新
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# 预约问诊类型:Web 管理端交付记录
|
||||
|
||||
日期:2026-09-09
|
||||
|
||||
## 完成行为
|
||||
|
||||
- 复用 `doctor_appointment.appointment_type`。`video` 为视频问诊,`text` 为图文问诊;没有改动诊单的 `diagnosis_type`(诊断/初复诊相关字段),也没有新增冗余诊单字段。
|
||||
- 预约问诊抽屉新增图文问诊选项;初次打开及每次重开默认视频问诊,提交所选值。
|
||||
- 消费者处方的挂号编辑仅允许选择视频问诊、图文问诊。
|
||||
- 医生面诊 PC 列表、H5 列表(包括详情的操作入口)、接诊台均把**当前挂号行**的问诊类型传入共享聊天窗口。窗口标题展示类型标签,缩小后仍在标题显示。切换患者或新开会话时重新设置,不沿用上次类型。
|
||||
- 类型仅用作展示,不改变聊天、视频通话、处方、排班、权限及挂号状态的现有业务行为。
|
||||
|
||||
## 服务端数据与兼容性
|
||||
|
||||
- 新增 `server/app/common/enum/AppointmentTypeEnum.php`,统一严格写入枚举、缺省请求处理及读取标签。
|
||||
- `AppointmentValidate` 创建场景允许旧客户端省略类型,按视频校验;显式 null、空串、空白、电话、大小写变体、数组、布尔及数值均拒绝。
|
||||
- `AppointmentLogic::create` 同样补省略字段的默认视频值,并在任何数据库操作前严格校验,避免其他内部调用绕过控制器。
|
||||
- 编辑场景要求显式提供合法类型。不能因为旧客户端省略类型而把已有图文记录悄悄重置为视频;内部 `adminEdit` 同样校验。
|
||||
- 保存兼容逻辑发现预约表没有 `appointment_type` 列时,会明确报错,避免成功提示但丢弃图文选择。
|
||||
- 预约模型、预约详情、预约列表及接诊聚合详情统一把旧 null/空白类型按视频返回。
|
||||
- 诊单列表返回的当前挂号、逐条 `appointments[]` 和最近挂号摘要均携带类型与描述。
|
||||
- 已明确记录为 `phone` 的历史记录继续显示“电话问诊”,不把真实历史问诊方式改写为视频;新建/编辑不能再写入 phone。未知历史值保持未知,避免伪造已知类型。
|
||||
|
||||
## 覆盖文件
|
||||
|
||||
前端:
|
||||
|
||||
- `admin/src/views/tcm/diagnosis/appointment.vue`
|
||||
- `admin/src/views/consumer/prescription/guahao.vue`
|
||||
- `admin/src/components/chat-dialog/index.vue`
|
||||
- `admin/src/views/tcm/appointment/list.vue`
|
||||
- `admin/src/views/tcm/appointment/list_h5.vue`
|
||||
- `admin/src/views/patient/reception/index.vue`
|
||||
- `admin/src/utils/appointment-type.ts`
|
||||
|
||||
后端:
|
||||
|
||||
- `server/app/common/enum/AppointmentTypeEnum.php`
|
||||
- `server/app/common/model/doctor/Appointment.php`
|
||||
- `server/app/adminapi/validate/doctor/AppointmentValidate.php`
|
||||
- `server/app/adminapi/logic/doctor/AppointmentLogic.php`
|
||||
- `server/app/adminapi/lists/doctor/AppointmentLists.php`
|
||||
- `server/app/adminapi/lists/tcm/DiagnosisLists.php`
|
||||
|
||||
## 验证结果
|
||||
|
||||
全部通过,未连接业务数据库:
|
||||
|
||||
1. `php server/tests/AppointmentTypeTest.php`:video/text 双向校验、13 种非法入参、内部逻辑 DB 前拒绝、创建默认值、编辑显式选值、模型历史标签、保存字段保留/缺列报错、最近挂号摘要切换。
|
||||
2. `node admin/scripts/verify-appointment-type.cjs`:类型标签默认/兼容行为、3 个聊天入口使用当前挂号行、预约控件与提交映射、6 个 Vue 组件的 script/template/style 编译。
|
||||
3. `php server/tests/DiagnosisValidateAddSceneTest.php`。
|
||||
4. `php server/tests/DiagnosisWorkspaceRowAuthorizationTest.php`。
|
||||
5. `php server/tests/PrescriptionAppointmentScopeContractTest.php`。
|
||||
6. 所有修改 PHP 文件与新增测试文件 `php -l`。
|
||||
7. 本子任务所属文件 `git diff --check`。
|
||||
|
||||
没有进行真实挂号写入、腾讯云聊天登录/视频通话或线上数据库迁移;本次前端验证为真实组件编译和数据传递约束检查,不冒充浏览器完整联调。
|
||||
|
||||
## 部署
|
||||
|
||||
- 新安装建表脚本 `server/sql/doctor_appointment.sql` 已将字段设为 `NOT NULL DEFAULT 'video'`。
|
||||
- 现有环境部署时运行 `server/sql/1.9.20260909/appointment_type_video_default.sql`:只回填 null/空白历史值为 video,然后设置非空及默认值,不改 text 或 phone。
|
||||
- SQL 尚未执行。表前缀按仓库现有脚本使用 `zyt_`,若目标环境前缀不同,需要对应调整。
|
||||
- 将 server 源码随前端构建一起部署;这项改动复用现有预约/挂号接口和权限,无新增权限菜单。
|
||||
- 本次覆盖用户指定的 Web 管理端。桌面 `app/` 保持现有进行中的用户改动,未扩展桌面预约入口。
|
||||
Reference in New Issue
Block a user