174 lines
17 KiB
Markdown
174 lines
17 KiB
Markdown
# 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 硬裁切**。
|
||
- **P0:0 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 开始,宽 614;x=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 进入 tabs;y89 为 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 / readonly(6)
|
||
|
||
| 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` | PARTIAL(P2) | 趋势、待办 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` | PARTIAL(P1) | 动作、chip 和单附件删除存在;舌象仍为文字按钮而非真实缩略图。 |
|
||
| `diagnosis_state_prescription_editor_920x780.png` | PARTIAL(P1) | 完整可用的 4-tab 编辑器已入镜;但不是基准 1200 px 连续 Drawer。 |
|
||
| `diagnosis_state_order_offset_1024x640.png` | PARTIAL(P2) | 数值、保存、订单表与分页成立;偏移文案/tooltip/解释层级未精确。 |
|
||
| `diagnosis_state_order_detail_640x540.png` | PARTIAL(P1) | 详情 modal 可用;缺基准 80% Drawer 的金额/支付/履约/物流/日志结构。 |
|
||
| `diagnosis_state_video_replay_1024x640.png` | PARTIAL(P1) | 主回放 + 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` | PARTIAL(P1) | 完整 info、归档、同步/重载及左右气泡成立;图片消息退化为文字链接。 |
|
||
|
||
### 预约 Drawer(8)
|
||
|
||
| 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、文案与禁用确认完整。 |
|
||
|
||
### Shell(2)
|
||
|
||
| 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 可在同一轮顺手精确。
|
||
- 本轮最终:**PARTIAL(40 PASS / 9 PARTIAL,共检查 49 张 PNG)**。
|