32 lines
2.6 KiB
Markdown
32 lines
2.6 KiB
Markdown
# Diagnosis 详情二次终验报告
|
||
|
||
日期:2026-08-10
|
||
|
||
## CLOSED
|
||
|
||
- 统计端就诊卡:使用原生自绘二态 `DiagnosisSwitch`,保存值严格为 `0/1`。
|
||
- 日常记录:提供 `+ 血糖 / + 饮食 / + 运动 / + 备注`,以及待办新增、仅待执行且 `can_cancel` 的精确取消;Remote/Demo/Protocol 均接真实方法,包含权限、DTO 校验和 generation 失效保护。
|
||
- 诊疗笔记:接入新增/当日追加、舌象与报告上传、单附件删除;所有动作均调用现有真实 endpoint。
|
||
- 处方与订单:处方按钮进入完整 `PrescriptionEditorDialog` 并调用 `tcm.prescription/add`;诊次偏移写入 `setRevisitSlotStartOffset`;订单详情调用真实详情方法。
|
||
- 视频回放:列表、视频上传、手工通话记录创建、附件绑定均接真实 endpoint;播放仅允许合法 `HTTP(S)` 外链。
|
||
- IM:固定 `only_archived=1`,支持异步同步与重新加载,并显示文本、图片、文件消息。
|
||
- 视觉:tab 使用 4px 横向滚动条并隐藏原生左右箭头框;footer 有向上阴影;保存按钮自绘 loading spinner、成功勾、失败叉;readonly 摘要禁止拆字;表格状态改为 pill/tag。
|
||
- Shell owner:每次 `open_for` / `showEvent` 从 `parentWidget().window()` 重新绑定,按 Shell 宽度 60% 计算抽屉,move/resize 立即同步,关闭后全部请求 generation 失效。
|
||
- 列表补充合同:QR、挂号日志、通用订单与 exact `doctor.appointment/cancel` 均有 Protocol/Remote/Demo 方法。
|
||
|
||
## OPEN(服务端合同不存在,fail-closed)
|
||
|
||
- 诊疗笔记“任意改写既有正文”与“删除整条笔记”没有后端 endpoint,因此桌面端没有伪造动作。现有合同只允许“当天追加”和“删除单个附件”:
|
||
- `server/app/adminapi/controller/doctor/AppointmentController.php:168-192` 仅公开 `addDoctorNote`、`doctorNotes`、`deleteDoctorNoteImage`。
|
||
- `server/app/adminapi/logic/doctor/DoctorNoteLogic.php:14-67` 的 `addOrAppend` 按 `diagnosis_id + 当天` 追加正文/附件,不是任意正文覆盖。
|
||
- `server/app/adminapi/logic/doctor/DoctorNoteLogic.php:114-141` 仅实现单个附件删除。
|
||
- `admin/src/api/patient.ts:20-40` 同样只有上述三个客户端 API。
|
||
|
||
## 验证
|
||
|
||
- 定向详情与合同:`28 passed`。
|
||
- 相关 repository/reception/video:`57 passed`。
|
||
- 全量:`226 passed`。
|
||
- `ruff check .`:exit 0(仅工作区不可访问缓存目录的扫描 warning)。
|
||
- 视觉产物:`artifacts/diagnosis_visual/` 中 6 张模式图与 14 张详情状态图,共 20 张本轮详情 PNG。
|