Przeglądaj źródła

test(mrc): add mobile apply visual contract

anubis 1 miesiąc temu
rodzic
commit
3c21c8f1b6

+ 2 - 0
01-项目文档_docs/00-项目管理/03-交付验收/Demo MVP验收执行清单.md

@@ -5,6 +5,8 @@
 ## 共同门禁
 
 - 每个新增页面可见“Demo 数据”;HIS 端还须显示固定 `pc.mrc` 演示身份。
+- Demo 仅可 Mock 数据、接口与本地状态;用户可见的页面布局、信息层级、按钮反馈、弹层/抽屉、返回路径与路由体验必须逐项对齐对应 HTML 原型。不得以研发场景切换、revision、重置等控制信息替代患者/业务首屏;受限能力必须保留原型位置并明确显示本地 Demo 不可用或不渲染。
+- 每个整改页面须在 375×812 微信开发者工具视口留存默认、关键交互态与异常/空态截图,并按对应视觉基线逐节点核对;静态测试通过不能替代截图视觉走查。
 - 两端各自使用本地内存 Adapter,语义遵循 `mrc-demo-state/v1` V1.1;不得共享内存、文件、服务、HTTP 请求或跨端同步。
 - 核对五个场景:`SCN-NEW-APPLICATION`、`SCN-PENDING-AUDIT`、`SCN-PROCESSING`、`SCN-EXPRESS-DELIVERY`、`SCN-PICKUP-DELIVERY`。
 - 状态只可为 `pending_audit`、`accounting`、`processing`、`shipping`、`pickup`、`completed`;每次允许成功动作递增 `revision` 并追加演示时间轴;未知场景、非法动作、未知订单或 Adapter 不可用均失败关闭。

+ 26 - 0
04-新项目源码_source/项目源码/pri-smart-hospital-miniprogram/tests/mrc-apply-entry-visual-contract.test.js

@@ -0,0 +1,26 @@
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+
+// This is a source-level contract: visual inspection at 375×812 remains a release gate.
+const pagePath = path.join(__dirname, '..', 'packageMRC', 'pages', 'apply-entry', 'index.wxml');
+const page = fs.readFileSync(pagePath, 'utf8');
+
+function mustContain(pattern, intent) {
+  assert(pattern.test(page), `申请入口必须${intent}`);
+}
+
+mustContain(/class="[^"]*hospital-header[^"]*"/, '展示医院顶部信息');
+mustContain(/class="[^"]*service-card[^"]*"/, '展示原型服务 Hero');
+mustContain(/我要申请复印/, '提供“我要申请复印”主操作');
+mustContain(/class="[^"]*my-application-card[^"]*"/, '展示“我的申请”卡片');
+mustContain(/就诊人/, '展示就诊人选择语义');
+mustContain(/class="[^"]*patient-selector[^"]*"/, '提供就诊人选择器');
+mustContain(/class="[^"]*notice-card[^"]*"/, '展示温馨提示卡');
+mustContain(/class="[^"]*demo-mode-entry[^"]*"/, '将本地场景切换收纳为轻量演示模式入口');
+mustContain(/class="[^"]*bottom-nav[^"]*"/, '保留原型底部导航语义');
+mustContain(/>首页<|首页<\/text>/, '标明底部“首页”导航项');
+
+assert(!/class="[^"]*chip-row[^"]*"/.test(page), '内部场景芯片不得作为申请入口首屏主卡内容');
+
+process.stdout.write('mrc-apply-entry visual contract: PASS\n');

+ 45 - 0
docs/visual-baselines/mrc-mobile-apply-entry.md

@@ -0,0 +1,45 @@
+# 病案复印小程序申请入口:视觉与交互基线
+
+## 基线与适用范围
+
+- 唯一视觉基线:`03-项目输入_project-inputs/02-新版设计_design/移动端原型/01-申请入口页.html`。
+- 目标页面:`04-新项目源码_source/项目源码/pri-smart-hospital-miniprogram/packageMRC/pages/apply-entry/index.wxml`,及同目录 JS/WXSS/JSON。
+- 适用模块:`MRC-MP-APPLY-001`;首页入口仅负责进入该页,不在本契约中重做首页。
+- 交付原则:Demo 仅替换数据源为本地脱敏 Mock;页面结构、视觉层级、可操作交互和路由体验按原型实现。不得以“Demo”删除用户可见页面节点或把研发控制台作为患者首屏。
+
+## 原型节点到实现的强制映射
+
+| 原型节点 | 目标 WXML 组件/语义 | 脱敏 Mock | 用户交互与目标 | 受限能力 | 375×812 截图检查点 |
+| --- | --- | --- | --- | --- | --- |
+| 顶部渐变院区栏(院区名称、服务胶囊) | `.hospital-header`、`.hospital-location`、`.service-cap` | `演示医院`、`病案复印` | 点击院区仅给出“本地演示不支持切换”提示;服务胶囊不可触发真实服务 | 无真实医院切换、定位或登录 | 首屏顶部为蓝绿渐变、白字院区与右侧胶囊,不得回退为普通白色标题栏 |
+| 轻量 Demo 标识/模式入口 | `.demo-mode-entry`,非主卡、非 Hero 内容 | `Demo 数据` | 点击打开/关闭本地演示模式面板;选择场景后刷新本页状态 | 不写本地持久化、不联网、不跨端同步 | 标识位于顶部辅助区域或悬浮轻入口;默认首屏不得出现一组场景芯片 |
+| 病历复印服务 Hero | `.service-card`、图标、标题、说明、`.service-btn` | 服务说明为静态脱敏文案 | 点击“我要申请复印”校验本地演示就诊人后进入 `/packageMRC/pages/identity/index`;无就诊人时进入本地引导弹层 | 无真实身份、材料、上传或接口 | 22px 圆角蓝绿渐变卡;白色图标、标题、说明和白色圆角 CTA 均在首屏 |
+| 我的申请摘要 | `.my-application-card`、数量徽标、待办标签、箭头 | `MRC-DEMO-*`、匿名状态计数 | 点击进入 `/packageMRC/pages/my-applications/index`;列表、数量、待办随本端场景/申请变化 | 无真实订单、支付、物流、取消或网络 | Hero 下方白卡,图标、标题、徽标/待办、说明与右箭头层级完整;空态保留卡片与引导语 |
+| 就诊人区块标题 | `.section-title` | `就诊人` | 仅为信息层级,不单独触发动作 | 无 | 左侧青绿色短条与“就诊人”必须位于选择卡前 |
+| 当前就诊人选择卡 | `.patient-selector`、姓名/标签、下箭头 | `演示就诊人 A`、`默认`;不得使用真实姓名、证件、手机号 | 点击打开 `.patient-sheet`;选择一名脱敏演示就诊人后更新当前卡并关闭面板 | 无真实就诊人、实名认证或资料编辑 | 白色圆角卡,含“当前就诊人”、姓名/默认标签、下箭头;位置在申请摘要之后 |
+| 无就诊人引导与弹层 | `.patient-add-card`、`.patient-guide-modal` | 无患者场景 | 点击“添加就诊人”显示“本地 Demo 不支持实名新增”;确认后停留当前页 | 无实名、账号、OCR、资料写入 | 空态以虚线卡替代选择器;弹层遮罩、取消/确认按钮符合原型层级 |
+| 就诊人底部选择面板 | `.patient-sheet`、`.sheet-item`、选中态、取消 | 两个匿名演示就诊人,性别年龄仅可为演示占位 | 点击遮罩/取消关闭;点击列表项选中并回填主卡 | 无编辑、删除、真实人员查询 | 底部圆角抽屉、标题“选择就诊人”、单选标记与安全区完整;不以页面跳转替代抽屉 |
+| 温馨提示卡 | `.notice-card`、提示列表 | 静态合规提示;不得含真实收费/个人信息 | 无主操作;长文可随页面滚动 | 不承诺真实时效、支付、快递或院内数据 | 暖色浅底、橙色描边/图标、标题及三条提示可读,位于就诊人区块之后 |
+| 原型底部导航语义 | `.bottom-nav`、首页/账单/消息/我的 | 本地静态宿主导航状态 | “首页”返回宿主首页;其余项使用既有宿主可达路由,缺失时提示不可用且不伪造跳转 | 不新增宿主业务页、不改已有 TabBar 配置 | 固定底部白色导航、四项图标/文案、首页高亮,内容不被安全区遮挡 |
+
+## 交互与路由验收规则
+
+1. 首屏的唯一主 CTA 是“我要申请复印”,不得把 `SCN-*` 场景芯片、revision、重置动作或研发术语放入首屏主卡。
+2. 场景切换是验收辅助能力,必须从 `.demo-mode-entry` 打开;场景切换、重置和错误提示只作用于小程序本地内存 `mrc-demo-state/v1` Adapter。
+3. 申请、我的申请、就诊人抽屉、无就诊人引导和底部导航均须有真实可点击反馈与确定的关闭/返回路径;无权限/未实现能力必须保留原型布局并给出明确本地 Demo 不可用说明。
+4. 所有展示值使用脱敏 Mock;不得展示真实姓名、手机号、证件、病案号、地址、支付凭据、物流单号,且不得发起 HTTP 请求。
+5. 本契约的静态最低门槛由 `tests/mrc-apply-entry-visual-contract.test.js` 守护;该测试通过不等同于视觉验收通过。
+
+## 375×812 视觉走查证据
+
+每次页面整改至少留存以下截图,设备为微信开发者工具 375×812,100% 缩放,无浏览器外壳:
+
+| 编号 | 场景 | 必须核对 |
+| --- | --- | --- |
+| VC-APPLY-01 | 默认有就诊人首屏 | 顶部渐变、Hero、CTA、我的申请、就诊人卡、提示卡、底部导航的顺序、留白、圆角、阴影与色阶对齐原型 |
+| VC-APPLY-02 | 打开演示模式 | 演示模式是辅助面板;关闭后首屏恢复为患者视图,场景芯片不留在主卡 |
+| VC-APPLY-03 | 打开并选择就诊人 | 抽屉动画/遮罩、选中态、取消、回填均可用且主页面不闪烁 |
+| VC-APPLY-04 | 无就诊人状态 | 虚线引导卡、提示弹层、取消/确认和不可用文案完整;不跳转到真实认证 |
+| VC-APPLY-05 | 点击申请与我的申请 | 申请进入身份页;我的申请进入列表;返回可回到入口且保留本端演示状态 |
+
+未提供上述页面截图、操作录屏或等价的开发者工具证据前,模块维持“开发中(Demo)”,不得转为视觉验收通过。