4.5 KiB
4.5 KiB
预约问诊类型: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.vueadmin/src/views/consumer/prescription/guahao.vueadmin/src/components/chat-dialog/index.vueadmin/src/views/tcm/appointment/list.vueadmin/src/views/tcm/appointment/list_h5.vueadmin/src/views/patient/reception/index.vueadmin/src/utils/appointment-type.ts
后端:
server/app/common/enum/AppointmentTypeEnum.phpserver/app/common/model/doctor/Appointment.phpserver/app/adminapi/validate/doctor/AppointmentValidate.phpserver/app/adminapi/logic/doctor/AppointmentLogic.phpserver/app/adminapi/lists/doctor/AppointmentLists.phpserver/app/adminapi/lists/tcm/DiagnosisLists.php
验证结果
全部通过,未连接业务数据库:
php server/tests/AppointmentTypeTest.php:video/text 双向校验、13 种非法入参、内部逻辑 DB 前拒绝、创建默认值、编辑显式选值、模型历史标签、保存字段保留/缺列报错、最近挂号摘要切换。node admin/scripts/verify-appointment-type.cjs:类型标签默认/兼容行为、3 个聊天入口使用当前挂号行、预约控件与提交映射、6 个 Vue 组件的 script/template/style 编译。php server/tests/DiagnosisValidateAddSceneTest.php。php server/tests/DiagnosisWorkspaceRowAuthorizationTest.php。php server/tests/PrescriptionAppointmentScopeContractTest.php。- 所有修改 PHP 文件与新增测试文件
php -l。 - 本子任务所属文件
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/保持现有进行中的用户改动,未扩展桌面预约入口。