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

18 KiB
Raw Permalink Blame History

诊疗工作台第三次、最终只读视觉同型审计

审计日期:2026-08-10
审计性质:最终只读终验;除更新本报告外,未修改任何业务代码、测试、renderer 或 PNG。
事实源:当前 Python 源码、D:/web/zyt/admin/src/views/tcm/diagnosis/ 下 Vue 基准、三份既有视觉规格,以及 artifacts/diagnosis_visual/ 当前 43 张 PNG。
判定方法:43 张 PNG 均按原始尺寸逐张目检;源码只用于解释可见结果与确认真实能力。测试通过数不作为任何视觉结论的依据,本轮也未以测试替代目检。

最终结论

PARTIAL,不是 PASS。

  • P00 OPEN。语义表单、1024 栅格、右固定列、双尺寸 60% 抽屉、固定 footer、核心 loading/empty/error/focus/permission 状态均未回退。
  • 上一版 12 项 P18 项 CLOSED / EXACT4 项仍 OPEN / PARTIAL
  • 43 张当前 PNG36 张 EXACT(其中两张 edit 仅指入镜区域)、7 张 PARTIAL、0 张乱码或不可读
  • 列表、详情、预约与 Shell 的所有 loading 图均为真实圆弧 spinner;没有字符型 spinner、方框箭头、中文乱码或缺字。
  • 当前不能判 PASS 的原因是:1024 Daily 动作行裁切及按钮语义态被压平;完整菜单仍缺 Vue 图标、danger 删除色和精确文案;备注附件视觉仍未命中预期样式;处方/订单/视频/聊天仍有可见简化或缺少关键截图证据。
  • “既有笔记整条正文覆盖 / 删除整条笔记”另列为服务端合同限制,不计作伪造桌面能力,也不用于掩盖上述视觉 P1。

上一版 12 项 OPEN 逐项终验

# 上一版问题 状态 同型分类 最新精确证据与目检结论
1 统计端就诊卡仍非 switch CLOSED EXACT(组件) 当前已使用自绘二态 DiagnosisSwitch44×24 轨道、圆形滑块、0/1 文本合同:src/doctor_workstation/ui/diagnosis_drawer.py:643-675;表单 show_card 分支:src/doctor_workstation/ui/dialogs/diagnosis.py:924-925Vue 基准:D:/web/zyt/admin/src/views/tcm/diagnosis/edit.vue:341-348。现有 edit PNG 没有滚到该字段,因此本项是源码级确定结论,不引用测试,也不声称有单独的 switch 截图。
2 Daily 编辑动作不完整 OPEN PARTIAL + 血糖 / + 饮食 / + 运动 / + 备注、刷新、新增待办和精确可取消动作均已接入:src/doctor_workstation/ui/diagnosis_drawer.py:1431-1450、:1486-1512、:1764-1784;真实处理:src/doctor_workstation/ui/dialogs/diagnosis.py:2175-2356。可是 diagnosis_state_daily_1024x640.png 中最右“刷新”被抽屉右缘裁掉;原因是单个 QHBoxLayout 不换行(diagnosis_drawer.py:1398-1451),而 Vue 明确 flex-wrapD:/web/zyt/admin/src/views/tcm/diagnosis/components/DailyMatrix.vue:1094-1109)。同时“最近7天”的 checked 态、+血糖 与新增待办的 primary 态均被 scoped 基础按钮规则压平;Vue 的主动作在 DailyMatrix.vue:25-35、DiagnosisTodoList.vue:3-19。
3 “更多”菜单动作被关闭 OPEN PARTIAL 能力缺口已补齐:权限/真实方法策略在 src/doctor_workstation/ui/pages/consultations.py:1002-1031handler 在 :1672-1692diagnosis_full_menu_1280x800.png 已出现指派、取消指派、视频二维码、确认二维码、取消挂号、挂号日志、创建订单、删除。仍不同型:Python 只创建纯文字 QActionsrc/doctor_workstation/ui/diagnosis_index_widgets.py:1381-1431),Vue 每项有图标,删除为 divided + danger 红,并使用“二维码”而不是“确认二维码”(D:/web/zyt/admin/src/views/tcm/diagnosis/index.vue:379-400)。QMenu 白底、边框、hover 与分隔线样式已生效(diagnosis_index_widgets.py:1371-1380),但未覆盖这些剩余语义。
4 Tab 溢出仍用左右箭头 CLOSED EXACT 原生左右工具按钮宽度归零,额外 4 px 横向滚动条可见并驱动选中 Tabsrc/doctor_workstation/ui/diagnosis_drawer.py:194-242、:749-792Vue 基准:D:/web/zyt/admin/src/views/tcm/diagnosis/edit.vue:1798-1828。所有 1024 详情状态图均无盒状左右箭头,蓝色细滚动条连续可见。
5 footer 缺上投影 CLOSED EXACT footer 使用 blur 18、offset 0/-4、半透明深色 QGraphicsDropShadowEffectsrc/doctor_workstation/ui/dialogs/diagnosis.py:784-803Vue 为 0 -4px 24px / 7%D:/web/zyt/admin/src/views/tcm/diagnosis/edit.vue:1792-1796。edit/viewOnly/daily/save 状态图均可见 footer 上缘阴影,且 footer 始终在滚动体外。
6 保存中无按钮 spinner / 结果态 CLOSED EXACT SaveStateButton 以 QTimer + QPainter 画 loading 圆弧、成功勾和失败叉:src/doctor_workstation/ui/diagnosis_drawer.py:678-746;只在 editable/basic 显示:src/doctor_workstation/ui/dialogs/diagnosis.py:1652-1661;真实保存状态切换::3044-3163。diagnosis_state_save_loading/success/failure_1024x640.png 分别完整显示“正在保存 / 保存成功 / 保存失败”,无缺字。
7 readonly 摘要拆“客服” CLOSED EXACT 摘要值禁止换行并使用 MinimumExpandingsrc/doctor_workstation/ui/dialogs/diagnosis.py:681-712;“客服:…”赋值::1767-1770。diagnosis_readonly_1024x640.png 与 diagnosis_readonly_1440x900.png 均完整显示“客服:赵医助”,不再拆字。
8 Notes 缺新增、上传、删除动作 OPEN PARTIAL 动作和真实端点已存在:NotesTimeline 信号/工具栏/单附件删除在 src/doctor_workstation/ui/diagnosis_drawer.py:1804-1962;处理在 src/doctor_workstation/ui/dialogs/diagnosis.py:2376-2478;远端合同在 src/doctor_workstation/services/repository.py:935-985。diagnosis_state_notes_actions_1024x640.png 已显示新增/追加、上传舌象、上传报告、打开与单附件删除。但视觉仍不同型:QSS 写的是 QLabel#DiagnosisTongueThumb 与 QLabel#DiagnosisAttachmentChipdiagnosis_drawer.py:486-500),运行时却创建 QPushButton:1897-1900、:1932-1937),所以截图中的“舌象/查看”和报告附件退化为普通白按钮,而非 Vue 的真实缩略图、文件 chip 与叠加 CircleCloseD:/web/zyt/admin/src/views/patient/reception/components/NoteTimeline.vue:42-100)。
9 处方、订单、视频、聊天仍为简化实现 OPEN PARTIAL / MISSING 处方已接完整 PrescriptionEditorDialog 和真实 create_prescriptionsrc/doctor_workstation/ui/dialogs/diagnosis.py:2489-2539),订单偏移及详情入口已接真实方法(:2613-2650、:2883-2941),视频上传/回放和聊天归档同步也已接真实方法(:2541-2611、:2844-2881)。但视觉仍未闭合:处方按钮在 diagnosis_state_empty_1024x640.png 中为普通白色“开具处方”,而 Vue 是 primary 小号“开方”(D:/web/zyt/admin/src/views/tcm/diagnosis/components/CaseRecordList.vue:1-5);当前证据集没有处方编辑器或订单详情抽屉 PNG。diagnosis_state_video_replay_1024x640.png 只有外链“播放回放”,代码通过 QDesktopServices 打开 HTTP(S)diagnosis.py:2652-2658、:2874-2881),而 Vue 是表格内 RecordingPlaybackBlockD:/web/zyt/admin/src/views/tcm/diagnosis/components/CallRecordPanel.vue:17-34)。diagnosis_state_chat_archive_1024x640.png 有气泡、文件和同步/重载,但省略 Vue 的完整 info alert 和详细归档说明(D:/web/zyt/admin/src/views/tcm/diagnosis/components/ImChatRecordPanel.vue:1-20)。订单偏移可见部分本身为 EXACT。
10 表格状态仍整格着色而非 pill CLOSED EXACT set_status_tag 以 QLabel pill 放入 cell widget,不再染整格:src/doctor_workstation/ui/diagnosis_drawer.py:2366-2384;所有状态列经 semanticize 转换:src/doctor_workstation/ui/dialogs/diagnosis.py:1900-1921、:2752-2754、:2822-2825、:2870-2874、:2898-2902。diagnosis_state_daily_lower_1024x640.png 的“待执行”蓝色 pill 是直接视觉证据。
11 Shell 仍为 216/68 且无 40 px tabs CLOSED EXACT 侧栏 183src/doctor_workstation/ui/shell.py:537-540topbar 50:599-603multiple-tabs 40:683-687。diagnosis_shell_1024x640.png 与 diagnosis_shell_1440x900.png 均可直接量出 183/50/40 三段,比例一致。
12 Shell 颜色偏离且箭头缺字 CLOSED EXACT(本项范围) 侧栏为 #1D2124src/doctor_workstation/ui/shell.py:541-569;方向、刷新、全屏、下拉、关闭图形均由 QPainter 自绘,不依赖字体 glyph:257-395topbar/tab QMenu 样式::599-628、:683-723。两张最新 Shell PNG 中“更多筛选”、行“更多”、用户菜单和 tabs 菜单箭头均正常,没有方框或乱码。

最后增加的三个专项检查

专项 状态 结论
scoped panel 按钮 OPEN / PARTIAL src/doctor_workstation/ui/diagnosis_drawer.py:112-136 的 QDialog#DiagnosisDialogRoot QPushButton 规则确实把详情按钮从全局暖灰绿主题隔离出来;但它的 ID 选择器优先级高于全局 QPushButton[variant="primary/ghost"]src/doctor_workstation/ui/theme.py:87-118),而局部 QSS 没有补 primary、ghost、dangerGhost、diagnosisRange:checked 规则。结果在 daily/处方/视频/待办 PNG 中所有动作都被压成同一白色按钮,选中态也不清楚。这是实图结果,不是测试推断。
QMenu OPEN / PARTIAL diagnosis_full_menu_1280x800.png 证明局部白底、细边框、32 px 左右行高、分隔线和菜单宽度已生效;但与 Vue 相比仍缺每项图标、danger 删除色,且“确认二维码”文案不精确。证据:src/doctor_workstation/ui/diagnosis_index_widgets.py:1371-1431 对照 D:/web/zyt/admin/src/views/tcm/diagnosis/index.vue:379-400、:2706-2708。
紧凑 close CLOSED / EXACT Header close 被限定 32×32、透明常态、蓝色 hover/focussrc/doctor_workstation/ui/diagnosis_drawer.py:137-154;创建位置:src/doctor_workstation/ui/dialogs/diagnosis.py:754-782。diagnosis_state_focus_1024x640.png 显示紧凑透明常态,默认 edit/viewOnly 图显示蓝色 focus/hover 外观,没有被全局 40 px footer 按钮规则放大。

43 张 PNG 原尺寸目检矩阵

下表的 EXACT 只针对该张 PNG 实际入镜内容;不以不可见的滚动下方内容作证明。

PNG 分类 原尺寸目检结论
diagnosis_1024x640.png EXACT 窄屏筛选换行、表格内部横向溢出、右固定列和阴影稳定,无硬裁切。
diagnosis_1440x900.png EXACT 宽屏列密度、复合挂号卡、斑马/业务语义色和固定操作区成立。
diagnosis_advanced_filters_1280x800.png EXACT 高级筛选即时展开,日期范围、控件顺序和重置入口完整。
diagnosis_double_appointment_cancel_1280x800.png EXACT 同一诊单两条预约均有各自取消入口,虚线层级和固定列正常。
diagnosis_empty_1280x800.png EXACT 表头、内部空态、横向滚动和 0 条分页均保留。
diagnosis_error_1280x800.png EXACT 错误文本居中可读,无旧数据穿透。
diagnosis_focus_1280x800.png EXACT 搜索框蓝色 focus ring 清楚且不挤压布局。
diagnosis_full_menu_1280x800.png PARTIAL 8 项动作与分隔线齐全;缺 Vue 图标、danger 删除色,二维码文案不同。
diagnosis_horizontal_scroll_1024x640.png EXACT 主表横移、右 460 px 固定区不动,左缘阴影连续。
diagnosis_hover_warning_1280x800.png EXACT warning 行 hover 渐变、3 px 左条和固定区同步。
diagnosis_loading_1280x800.png EXACT 表内真实圆弧 spinner,内容淡化,无字符缺字。
diagnosis_pending_assign_1280x800.png EXACT 待分配 chip、月份与宽搜索保持同一流式区。
diagnosis_permissions_cropped_1280x800.png EXACT 权限裁掉 toolbar 与敏感动作,仅保留查看。
diagnosis_edit_1024x640.png EXACT(可见区) 60% 抽屉、2/3 列语义表单、细 tab 条、固定 footer 无裁切;switch 未入镜。
diagnosis_edit_1440x900.png EXACT(可见区) 宽屏密度、字段比例和 footer 稳定;switch 未入镜。
diagnosis_readonly_1024x640.png EXACT 独立只读页、hero、病例卡完整,“客服”不拆字。
diagnosis_readonly_1440x900.png EXACT 4 列病例密度和异常指标层级完整,无不必要换行。
diagnosis_viewonly_1024x640.png EXACT 60% 只读抽屉、权限提示、禁用表单与仅关闭 footer 成立。
diagnosis_viewonly_1440x900.png EXACT 宽屏只读栅格、全 Tab 条和固定 footer 成立。
diagnosis_state_daily_1024x640.png PARTIAL DailyMatrix、异常/自录内容和新增动作出现;最右“刷新”被裁,range/primary 语义态被压平。
diagnosis_state_daily_lower_1024x640.png PARTIAL 趋势、待办筛选、表格与 pill 出现;“新增待办”不是 Vue primarytoolbar 语义层级不足。
diagnosis_state_empty_1024x640.png PARTIAL 处方空态和仅取消 footer 正确;“开具处方”按钮文案/primary 样式不同,且未覆盖真实处方编辑器。
diagnosis_state_error_1024x640.png EXACT danger banner、重试、空表单、禁用保存完整。
diagnosis_state_focus_1024x640.png EXACT 姓名 focus ring、紧凑 close 常态和固定 footer 清晰。
diagnosis_state_loading_1024x640.png EXACT 圆弧 spinner 与“正在加载诊单...”完整,无旧 seed 或缺字。
diagnosis_state_permission_1024x640.png EXACT 只保留病历/医生备注,手机号与身份证掩码,footer 仅关闭。
diagnosis_state_notes_actions_1024x640.png PARTIAL 增加/上传/打开/单附件删除均出现;舌象与报告未呈现为 Vue 缩略图/chip。
diagnosis_state_order_offset_1024x640.png EXACT(可见区) 偏移数值框、保存、订单表、分页与横向滚动完整;订单详情未入镜。
diagnosis_state_save_failure_1024x640.png EXACT 红色叉与“保存失败”完整。
diagnosis_state_save_loading_1024x640.png EXACT 白色圆弧 spinner 与“正在保存”完整。
diagnosis_state_save_success_1024x640.png EXACT 绿色勾与“保存成功”完整。
diagnosis_state_video_replay_1024x640.png PARTIAL 回放动作可见且文案完整;仍是外链按钮,不是 Vue 表内播放器。
diagnosis_state_chat_archive_1024x640.png PARTIAL 左右气泡、图片/文件入口、同步/重载可见;完整 info alert 与原文案缺失。
diagnosis_shell_1024x640.png EXACT(本项范围) 183/50/40,深色侧栏、分页、三角箭头和中文均无缺字。
diagnosis_shell_1440x900.png EXACT(本项范围) 同一 Shell 比例在宽屏保持,固定列阴影和 horizontal scroll 清楚。
appointment_drawer_1024x640.png EXACT 60% 右抽屉、日期/时段、body 滚动与固定 footer 无裁切。
appointment_drawer_1440x900.png EXACT 医生 radio、四个 130×40 日期按钮、时段网格、备注与 footer 对齐。
appointment_drawer_empty_doctors_1440x900.png EXACT warning、80 px 空态插图、“暂无可预约医生”和禁用确认完整。
appointment_drawer_empty_roster_1440x900.png EXACT 无排班 warning、空态插图和“该医生暂无排班”可读。
appointment_drawer_error_1440x900.png EXACT “号源加载失败:号源服务暂时不可用”、刷新入口与空态并存。
appointment_drawer_keyboard_focus_1440x900.png EXACT 130×40 日期按钮的蓝色键盘 focus 边界清楚。
appointment_drawer_loading_1440x900.png EXACT “正在加载医生、渠道与挂号状态...”与真实圆弧 spinner 完整,无缺字。
appointment_drawer_refreshing_1440x900.png EXACT “正在刷新可用号源...”与 overlay spinner 完整,确认禁用。

服务端合同限制:不归入视觉 P1

当前服务端只提供“当日追加 / 查询 / 删除单个附件”,没有“任意覆盖既有正文”或“删除整条笔记”端点:

  • D:/web/zyt/server/app/adminapi/controller/doctor/AppointmentController.php:168-196 只公开 addDoctorNote、doctorNotes、deleteDoctorNoteImage。
  • D:/web/zyt/server/app/adminapi/logic/doctor/DoctorNoteLogic.php:14-69 按 diagnosis_id + 当天 find-or-create,并把新正文追加为新行,不是任意覆盖。
  • D:/web/zyt/server/app/adminapi/logic/doctor/DoctorNoteLogic.php:114-136 只删除 tongue_images / report_files 中的单个路径。
  • D:/web/zyt/admin/src/api/patient.ts:19-40 同样只有上述三个客户端 API。
  • Python 远端仓库与该合同一致:src/doctor_workstation/services/repository.py:935-985。

因此桌面端没有伪造“覆盖旧正文 / 删除整条笔记”按钮是正确的 fail-closed 行为。该限制不能被当作视觉 PASS 的理由,也不应混入上面 4 个仍可修的 UI P1。

最终判定

  • P00 OPEN。
  • P14 OPEN / PARTIALDaily 动作行与 scoped 按钮语义;完整菜单图标/删除色/文案;Notes 附件视觉;处方/订单/视频/聊天视觉与证据覆盖。
  • MISSING 视觉证据:当前 diagnosis_visual 没有滚动到 switch 的截图,也没有完整处方编辑器和订单详情抽屉截图;源码能力存在,但不能用测试代替这些像素证据。
  • 乱码 / 缺字:0。 43 张图中的中文、圆弧 loading、箭头、保存勾叉均完整。
  • 最终:PARTIAL。 只有消除上述 4 组可见差异并补齐处方编辑器、订单详情与 switch 的当前截图后,才可给视觉同型 PASS。