Files
2026-09-09 12:18:17 +08:00

4.5 KiB
Raw Permalink Blame History

预约问诊类型:Web 管理端交付记录

日期:2026-09-09

完成行为

  • 复用 doctor_appointment.appointment_typevideo 为视频问诊,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.phpvideo/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/ 保持现有进行中的用户改动,未扩展桌面预约入口。