Files
zyt/app/research/diagnosis_release_visual_audit.md
2026-08-11 09:12:51 +08:00

174 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Diagnosis 发布视觉终验
审计日期:2026-08-11
审计性质:独立只读终验;除新增本报告外,未修改业务源码、测试、renderer 或 PNG。
基准:`D:/web/zyt/admin/src/views/tcm/diagnosis/` 及其当前主链直接依赖组件。
当前实现:PySide6 + scoped QSS + QPainter,主要位于 `src/doctor_workstation/ui/`
Trellis`D:/web/zyt/app/.trellis` 当前不存在(`Test-Path``False`),因此无可补读的 Trellis workflow/spec。
## 最终结论
**PARTIAL,不是 PASS。**
- 检查了 `artifacts/diagnosis_visual/` 当前全部 **49 张 PNG**,均以原始尺寸逐张目检;尺寸分布为:`1024x640` 22 张、`1280x800` 11 张、`1440x900` 12 张、`640x540` / `650x620` / `820x560` / `920x780` 各 1 张。
- PNG 判定:**40 PASS / 9 PARTIAL / 0 不可读 / 0 硬裁切**。
- **P00 OPEN。** 诊单列表、右固定 460 px 区、付款二维码、edit/viewOnly 的 60% Drawer、独立 readonly、预约 Drawer、固定 footer、loading/error/empty/focus/permission 状态及 Shell 183/50/40 均未发现发布阻断。
- 上一轮明确 OPEN 中,Daily 动作行裁切与按钮语义、完整更多菜单的图标/danger/“二维码”文案已经闭合;视频的多回放、逐条追加与应用内播放器能力也已经存在。
- 仍不能给 PASS 的原因是 4 组 P1 同型差异:Notes 不渲染真实缩略图;处方编辑器仍是另一种 tabbed modal;订单详情仍是精简 640x540 表单而非共享 80% Drawer;视频仍从表格跳到独立播放器且聊天图片仍降级为文字链接。另有 2 组 P2 文案/局部工具栏差异。
严重度口径:P0 = 核心流程不可见/不可操作或窗口级裁切;P1 = 本次明确要求的主链组件结构、信息层级或媒体形态未与基准同型;P2 = 功能成立但文案、局部按钮或说明层级未精确对齐。
## 此前 OPEN 复核
| 项目 | 当前状态 | 精确证据 |
|---|---|---|
| Daily 裁切 | **CLOSED** | `diagnosis_state_daily_1024x640.png` 中“刷新”已换到下一行且完整可见;当前用 `FlowLayout``src/doctor_workstation/ui/diagnosis_drawer.py:1607-1609`,基准允许换行:`D:/web/zyt/admin/src/views/tcm/diagnosis/components/DailyMatrix.vue:1094-1109`。 |
| Daily 按钮语义 | **CLOSED(主问题)** | `+血糖` 为 primary`+饮食/+运动/+备注` 为 secondary,范围 checked 态可见,`新增待办` 为 primary;实现:`diagnosis_drawer.py:1613-1659,1691-1702`;基准:`DailyMatrix.vue:25-35``DiagnosisTodoList.vue:3-19`。仍有下述 P2 文案/局部刷新差异。 |
| 完整更多菜单 | **CLOSED** | `diagnosis_full_menu_1280x800.png` 显示 8 项、每项图标、删除分隔线与 danger 红、精确“二维码”。QPainter 图标与 danger 绘制:`src/doctor_workstation/ui/diagnosis_index_widgets.py:74-175`;动作与文案:`:1478-1556`;基准:`D:/web/zyt/admin/src/views/tcm/diagnosis/index.vue:379-400`。 |
| Notes 动作与附件 | **PARTIAL** | 新增/追加、舌象/报告上传、打开与单附件删除均已出现;但舌象始终是 64x64 的“舌象/查看”文字按钮(`diagnosis_drawer.py:2153-2183`),没有像基准那样用真实 URL 渲染 `el-image` 缩略图(`D:/web/zyt/admin/src/views/patient/reception/components/NoteTimeline.vue:52-69,370-379`)。 |
| 处方入口 | **CLOSED** | `diagnosis_state_empty_1024x640.png` 中按钮已经是 primary “开方”;实现:`src/doctor_workstation/ui/dialogs/diagnosis.py:1012-1031`;基准:`CaseRecordList.vue:1-38`。编辑器结构仍有 P1,见下节。 |
| 订单列表/偏移/详情 | **PARTIAL** | 列表、金额色、状态 tag、分页、详情入口均存在(`diagnosis.py:1056-1099,2980-3010`),并补了详情 PNG;但详情结构仍非基准共享 Drawer,偏移文案也未精确。 |
| 视频多回放 | **CLOSED(能力)/ PARTIAL(同型)** | `diagnosis_state_video_replay_1024x640.png` 同一记录显示主回放 + 2 个备用回放;实现去重并逐条建链接:`diagnosis.py:2899-2952`。 |
| 视频逐条上传 | **CLOSED** | `diagnosis_state_video_upload_action_1024x640.png` 显示行级“追加回放”;绑定精确 `call_record_id``diagnosis.py:2953-2967`,上传调用:`:2587-2613`。 |
| 视频播放器 | **CLOSED(能力)/ PARTIAL(同型)** | `diagnosis_state_video_player_820x560.png` 显示应用内播放面、播放/进度/时间/安全外开;实现:`src/doctor_workstation/ui/diagnosis_media.py:38-172`。但基准播放器内嵌在表格单元格且最大高 180 px:`RecordingPlaybackBlock.vue:1-30``RecordingVideoPlayer.vue:1-38,320-329`。 |
| Chat info/归档 | **CLOSED(主体)/ PARTIAL(图片)** | `diagnosis_state_chat_archive_1024x640.png` 已有完整 info、only_archived、同步/重载与左右气泡;实现:`diagnosis_drawer.py:2235-2360`。图片消息仍只创建“查看图片”链接(`:2329-2348`),基准直接渲染图片缩略图(`ImChatRecordPanel.vue:39-50,272-276`)。 |
| Shell | **CLOSED** | 两张 Shell PNG 均为 183/50/40;当前源码:`src/doctor_workstation/ui/shell.py:540,602,686`;基准:`D:/web/zyt/admin/src/config/setting.ts:5``D:/web/zyt/admin/src/styles/var.css:8``D:/web/zyt/admin/src/layout/default/components/header/multiple-tabs.vue:65`。 |
## P0 / P1 / P2
### P0
**0 项。** 49 张图未发现核心信息被窗口边界硬裁、60% Drawer 尺寸失效、footer 随正文滚走、中文/图标缺字、二维码不可辨识或 1024/1440 壳层错位。
### P1-1 Notes 舌象不是实际缩略图
- 实图:`diagnosis_state_notes_actions_1024x640.png` 中舌象为蓝色文字卡“舌象 / 查看”,不是图像;报告文件 chip 和两个删除入口可见。
- 当前源码明确只创建 `QPushButton("舌象\n查看")`,没有加载 URL 到 pixmap`src/doctor_workstation/ui/diagnosis_drawer.py:2153-2183`
- 基准用 `el-image :src="getImageUrl(url)"`、64x64 cover 缩略图与叠加 CircleClose`D:/web/zyt/admin/src/views/patient/reception/components/NoteTimeline.vue:52-69,366-379`
- 建议边界:保留当前安全打开与单附件删除合同,只把可安全下载/解码的图片异步渲染为 64x64 缩略图;失败时再回退为当前文字卡。
### P1-2 处方编辑器不是基准的 1200 px 连续 Drawer
- 实图:`diagnosis_state_prescription_editor_920x780.png` 是 920x780 modal,按“患者与诊断 / 药材配方 / 剂型与用法 / 医师签名”拆为 4 个 tabs。
- 当前结构:`src/doctor_workstation/ui/dialogs/prescription.py:1017-1037`;诊单入口调用该 dialog`src/doctor_workstation/ui/dialogs/diagnosis.py:2533-2585`
- 基准入口直接打开 `tcm-prescription`,其根是 `size="1200px"` Drawer,并在同一滚动流中依次呈现患者信息、诊断信息、RP 药材工具栏/网格、用法和签名:`D:/web/zyt/admin/src/views/tcm/diagnosis/index.vue:416,744``D:/web/zyt/admin/src/components/tcm-prescription/index.vue:2-216,217-531`
- 当前 DTO/真实提交能力存在,本项是视觉结构 P1,不是功能缺失。
### P1-3 订单详情仍是精简 modal
- 实图:`diagnosis_state_order_detail_640x540.png` 只有 hero、状态 tag 和 10 行键值信息。
- 当前源码固定 `640x540`,用单个 `QFormLayout` 罗列患者、金额、医护、地址、物流、备注:`src/doctor_workstation/ui/dialogs/diagnosis.py:3060-3135`
- 基准 `PatientOrderList` 打开共享 readonly `PrescriptionOrderDetailDrawer``D:/web/zyt/admin/src/views/tcm/diagnosis/components/PatientOrderList.vue:96-124`;共享组件宽 `80%`,readonly 仍保留金额概览、处方详情、未关联/关联收款、履约收货、物流轨迹与操作日志:`D:/web/zyt/admin/src/views/consumer/prescription/components/PrescriptionOrderDetailDrawer.vue:13-16,154-197,200-545,551-824`
- 因结构和信息密度均明显不同,新增截图只能证明“有详情”,不能证明“同型”。
### P1-4 视频与聊天媒体形态仍非基准同型
- 视频:多地址、逐条追加和 QtMultimedia 播放能力均真实存在,但表格只显示文字链接,点击后打开 820x560 独立播放器(`diagnosis.py:2934-2978``diagnosis_media.py:38-116`)。基准在“录制回放”单元格内直接嵌入最大高 180 px 的播放器,并把其他地址放在其下:`CallRecordPanel.vue:17-34``RecordingPlaybackBlock.vue:1-30``RecordingVideoPlayer.vue:320-329`
- 聊天:文字/文件气泡和 info alert 已同型;图片仍为“查看图片”文字链接(`diagnosis_drawer.py:2329-2348`),基准为最大 `240x200` 的可预览图片(`ImChatRecordPanel.vue:39-50,272-276`)。
- 两者均可安全使用,但尚未达到这轮明确要求的媒体视觉同型。
### P2-1 Daily 待办局部工具栏文案仍未精确
- `diagnosis_state_daily_lower_1024x640.png` 的 primary 按钮为“新增待办”,基准为“+ 新增待办”;当前待办卡内也没有基准同一工具栏上的局部“刷新”(全 Daily 顶部已有刷新)。
- 当前:`diagnosis_drawer.py:1691-1702`;基准:`DiagnosisTodoList.vue:3-19`
- 这不再造成裁切或语义压平,故降为 P2。
### P2-2 订单偏移栏文案与解释层级未精确
- `diagnosis_state_order_offset_1024x640.png` 显示“全局就诊序号偏移 / 0 / 个序号 / 保存偏移”。
- 基准是“复诊统计起始偏移”+ tooltip +“第 1 笔实单计为…”+“保存”:`PatientOrderList.vue:7-41`
- 当前:`src/doctor_workstation/ui/dialogs/diagnosis.py:1056-1083`。数值范围与保存入口成立,本项为文案/说明层级 P2。
## 尺寸与壳层精确证据
| 核对项 | 1024x640 | 1440x900 | 源码/基准 |
|---|---|---|---|
| edit/viewOnly Drawer 60% | panel 从 x=410 开始,宽 614x=409 仍为 overlay | panel 从 x=576 开始,宽 864 | `diagnosis.py:1336-1340`;基准 `edit.vue:3-9` |
| appointment Drawer 60% | panel 从 x=410 开始,宽 614 | panel 从 x=576 开始,宽 864 | `appointment_drawer.py:1716-1719`;基准 `appointment.vue:2-6` |
| Shell sidebar | x=0..182 为侧栏,x=183 进入内容;抽样 x182=`#25292D`、x183=`#F6F6F6` | 同一 183 px 边界 | `shell.py:540-543`;基准 `setting.ts:5` |
| Shell topbar/tabs | x=200 处 y49 为 topbar 底边,y50 进入 tabsy89 为 tabs 底边,y90 进入内容,即 50 + 40 | 同一分段 | `shell.py:602,686`;基准 `var.css:8``multiple-tabs.vue:65` |
## 49 张 PNG 逐张判定
下列 PASS 只证明该张图实际入镜内容;不会拿截图外的滚动内容代替证据。
### 诊单列表与二维码(14
| PNG | 判定 | 目检结论 |
|---|---|---|
| `diagnosis_1024x640.png` | PASS | 窄屏筛选换行、内部横向溢出、右固定区与行语义完整,无硬裁切。 |
| `diagnosis_1440x900.png` | PASS | 宽屏列密度、挂号复合单元格、斑马/业务色与固定操作区成立。 |
| `diagnosis_advanced_filters_1280x800.png` | PASS | 高级筛选完整展开,日期范围、控件顺序与重置可见。 |
| `diagnosis_double_appointment_cancel_1280x800.png` | PASS | 同诊单两条挂号各有取消入口,虚线层级正常。 |
| `diagnosis_empty_1280x800.png` | PASS | 表头、内部空态、横向滚动与 0 条分页均保留。 |
| `diagnosis_error_1280x800.png` | PASS | 错误态居中可读,无旧数据穿透。 |
| `diagnosis_focus_1280x800.png` | PASS | 搜索框 focus ring 清楚且不挤压布局。 |
| `diagnosis_full_menu_1280x800.png` | PASS | 8 项、8 个图标、删除分隔/danger 与精确“二维码”全部可见。 |
| `diagnosis_horizontal_scroll_1024x640.png` | PASS | 主表横移时右 460 px 固定区不动,阴影连续。 |
| `diagnosis_hover_warning_1280x800.png` | PASS | warning 行 hover 渐变、3 px 左条和固定区同步。 |
| `diagnosis_loading_1280x800.png` | PASS | 表内真实圆弧 spinner,内容淡化,无字符 spinner。 |
| `diagnosis_pending_assign_1280x800.png` | PASS | 待分配 chip、月份和宽搜索在同一流式区。 |
| `diagnosis_permissions_cropped_1280x800.png` | PASS | 权限裁掉批量工具栏和敏感动作,仅留查看。 |
| `diagnosis_order_qrcode_1280x800.png` | PASS | 订单号、可辨识 QR、成功态、只读 URL、打开/重试/关闭均完整。 |
### edit / viewOnly / readonly6
| PNG | 判定 | 目检结论 |
|---|---|---|
| `diagnosis_edit_1024x640.png` | PASS | 60% Drawer、2/3 列语义表单、横向 tabs、独立滚动体与固定 footer 成立。 |
| `diagnosis_edit_1440x900.png` | PASS | 864 px Drawer、宽屏字段比例和 footer 稳定。 |
| `diagnosis_viewonly_1024x640.png` | PASS | 60% 只读 Drawer、待配药警告、disabled 表单与仅关闭 footer 成立。 |
| `diagnosis_viewonly_1440x900.png` | PASS | 宽屏只读栅格、全 tabs 与固定 footer 成立。 |
| `diagnosis_readonly_1024x640.png` | PASS | 独立只读页、hero、病例卡和“客服:赵医助”不拆字。 |
| `diagnosis_readonly_1440x900.png` | PASS | 4 列病例密度、异常指标层级及长页面滚动成立。 |
### 详情状态与子流程(19
| PNG | 判定 | 目检结论 |
|---|---|---|
| `diagnosis_state_loading_1024x640.png` | PASS | 圆弧 spinner 与“正在加载诊单...”完整,无旧 seed 穿透。 |
| `diagnosis_state_error_1024x640.png` | PASS | danger banner、重试、空表单和禁用保存完整。 |
| `diagnosis_state_empty_1024x640.png` | PASS | 处方空态与 primary “开方”已对齐;编辑器另见 PARTIAL。 |
| `diagnosis_state_permission_1024x640.png` | PASS | 仅保留获权 tabs,手机号/身份证掩码,footer 仅关闭。 |
| `diagnosis_state_daily_1024x640.png` | PASS | Daily 动作全部可见;刷新换行而未裁切,range/primary/secondary 层级清楚。 |
| `diagnosis_state_daily_lower_1024x640.png` | PARTIALP2 | 趋势、待办 filters、状态 pill 与 primary 新增成立;缺“+”及待办局部刷新。 |
| `diagnosis_state_daily_blood_edit_650x620.png` | PASS | 血糖/血压编辑字段、单位、必填说明、备注和固定动作完整。 |
| `diagnosis_state_focus_1024x640.png` | PASS | 姓名 focus ring、紧凑 close 和固定 footer 清楚。 |
| `diagnosis_state_save_loading_1024x640.png` | PASS | 按钮内圆弧 spinner 与“正在保存”完整。 |
| `diagnosis_state_save_success_1024x640.png` | PASS | 绿色勾与“保存成功”完整。 |
| `diagnosis_state_save_failure_1024x640.png` | PASS | 红色叉与“保存失败”完整。 |
| `diagnosis_state_notes_actions_1024x640.png` | PARTIALP1 | 动作、chip 和单附件删除存在;舌象仍为文字按钮而非真实缩略图。 |
| `diagnosis_state_prescription_editor_920x780.png` | PARTIALP1 | 完整可用的 4-tab 编辑器已入镜;但不是基准 1200 px 连续 Drawer。 |
| `diagnosis_state_order_offset_1024x640.png` | PARTIAL(P2) | 数值、保存、订单表与分页成立;偏移文案/tooltip/解释层级未精确。 |
| `diagnosis_state_order_detail_640x540.png` | PARTIALP1 | 详情 modal 可用;缺基准 80% Drawer 的金额/支付/履约/物流/日志结构。 |
| `diagnosis_state_video_replay_1024x640.png` | PARTIALP1) | 主回放 + 2 个备用回放成立;仍是链接列表,不是表内播放器。 |
| `diagnosis_state_video_upload_action_1024x640.png` | PARTIAL(P1) | 指定行“追加回放”成立;媒体单元格结构仍未同型。 |
| `diagnosis_state_video_player_820x560.png` | PARTIAL(P1) | 应用内播放器和安全外开成立;形态是独立 dialog,不是 180 px 表内播放器。 |
| `diagnosis_state_chat_archive_1024x640.png` | PARTIALP1 | 完整 info、归档、同步/重载及左右气泡成立;图片消息退化为文字链接。 |
### 预约 Drawer8
| PNG | 判定 | 目检结论 |
|---|---|---|
| `appointment_drawer_1024x640.png` | PASS | 60% Drawer、body 滚动、时段状态和固定 footer 无硬裁切。 |
| `appointment_drawer_1440x900.png` | PASS | 医生 radio、四个日期按钮、时段网格、备注和 footer 对齐。 |
| `appointment_drawer_empty_doctors_1440x900.png` | PASS | warning、空态插图、暂无医生与禁用确认完整。 |
| `appointment_drawer_empty_roster_1440x900.png` | PASS | 无排班 warning、空态和“该医生暂无排班”可读。 |
| `appointment_drawer_error_1440x900.png` | PASS | 号源错误 banner、刷新入口和空态并存。 |
| `appointment_drawer_keyboard_focus_1440x900.png` | PASS | 日期按钮蓝色键盘 focus 边界清楚。 |
| `appointment_drawer_loading_1440x900.png` | PASS | 初始加载 overlay、圆弧 spinner、文案与禁用确认完整。 |
| `appointment_drawer_refreshing_1440x900.png` | PASS | 刷新 overlay、圆弧 spinner、文案与禁用确认完整。 |
### Shell2
| PNG | 判定 | 目检结论 |
|---|---|---|
| `diagnosis_shell_1024x640.png` | PASS | 183/50/40、深色侧栏、tabs、固定列与分页均成立;无 glyph 方框。 |
| `diagnosis_shell_1440x900.png` | PASS | 同一壳层比例在宽屏保持,箭头/刷新/全屏/关闭图形和中文完整。 |
## 发布判定
- **可以确认无 P0,且此前 Daily、更多菜单、Shell 的明确 OPEN 已关闭。**
- **不能给视觉同型 PASS。** 需至少关闭 P1-1 至 P1-4,并补录对应终态 PNG;P2 可在同一轮顺手精确。
- 本轮最终:**PARTIAL40 PASS / 9 PARTIAL,共检查 49 张 PNG**。