MD6 同步移动体验规约与角色视图治理

这个提交包含在:
2026-05-11 13:35:21 +08:00
父节点 e399376e25
当前提交 cee04d52e4
共修改 10 个文件,包含 73 行新增和 13 行删除
+4 -2
查看文件
@@ -13,7 +13,7 @@ Read only what is relevant:
- Always read `AGENTS.md` and the newest relevant `issues/*.csv`.
- After R5, first check the main R5/R6 contract status before planning trial-run or follow-up work; R5 must remain the completed gate and R6 must have its own Issue CSV before expanding scope.
- For UI/page work, PC/mobile/WeCom experience, approval UX, or domestic OA benchmarking, read `docs/product-design-rules.md` and `references/visual-qa.md`.
- For UI/page work, PC/mobile/WeCom experience, approval UX, or domestic OA benchmarking, read `docs/product-design-rules.md` and `references/visual-qa.md`. Mobile page work must treat `docs/product-design-rules.md` as the source of truth for the unified mobile shell, icon grid, card lists, deep Push pages, sticky actions, safe-area, and cross-viewport matrix. 移动页必须先对齐该设计事实源,再进入实现或验证。
- For approval workflow, roles, self-approval, notification, deeplink, reminder, or escalation work, read `docs/需求-统一审批中心规约.md`.
- For reimbursement, invoice, OCR, duplicate invoice, or attachment work, read `docs/reimbursement-invoice-rules.md` and `references/reimbursement.md`.
- For local/WeCom/public trial-run, OCR runtime, Caddy, or DB drift work, read `docs/trialrun-runbook.md` and `references/trialrun.md`.
@@ -39,7 +39,7 @@ Default behavior:
4. Keep changes scoped to the current Issue.
5. Prefer existing project patterns, official SDKs, and principles from documented domestic OA/approval/mobile references; do not copy competitor flows or text directly.
6. Verify with the narrowest relevant automated tests, then expand by risk.
7. Use Playwright screenshots or visual metrics for PC/mobile/WeCom UI changes.
7. Use Playwright screenshots or visual metrics for PC/mobile/WeCom UI changes. New or changed mobile pages must join the unified responsive system and the 320/360/375/390/393/414/430px 统一视觉矩阵 rather than adding page-specific layout fixes.
8. Update Issue CSV statuses only after the stated `Test_Method` passes.
9. Commit in Chinese batches with Issue IDs.
10. 面向用户可测试的改动,最终必须明确“是否已部署”。只有部署与公网检查通过后,才能告知用户可以去企业微信或公网试运行环境测试。
@@ -102,3 +102,5 @@ Final responses should include:
- Do not expand to budget, ERP, AI, full travel, or complex BPM during R6; record those as follow-up Issues.
- Enterprise WeChat personal app message is the formal approval notification channel after R5; mock and group bots are not acceptance evidence for R6 business notification.
- Approval-chain correctness can be proven by PC or automation, while Enterprise WeChat validates entry, binding,免登录, notification, deeplink, and mobile layout.
- If real-device mobile validation is paused after automation passes, record the gate as `PAUSED`; do not close RS6/UI6/R6 mobile blockers until representative real-device confirmation is recorded.
- Role-specific pages should use one shared OA/mobile framework and tailor summaries, entries, actions, and sensitive fields by role. Do not create unrelated UI systems for employee, approver, finance, admin, or CEO views.
+7
查看文件
@@ -82,6 +82,13 @@ AGENTS.md 只放硬约束和入口,不复制长规则。
可自动化的体验检查先自动化,例如 Playwright PC、移动、企业微信 UA 和 DOM 指标;真实企业微信登录、手机应用消息到达、真实通知权限和财务制度决策必须保留人工确认记录。
移动页治理必须收敛到同一套事实源和组件体系:
- 改移动页面前先读 `docs/product-design-rules.md`,确认是否属于底部一级 Tab、首页图标宫格、卡片列表、深层 Push 页、顶部返回、吸底主操作或安全区问题。
- 新移动页默认纳入统一响应式 token 和跨视口视觉矩阵,覆盖 320、360、375、390、393、414、430px;不得只按某一台手机打补丁。
- 角色差异采用“同框架、按角色裁剪内容和动作”:员工、审批人、财务、管理员、负责人看到不同入口和动作,但不创建互不一致的角色专属移动 UI。
- 真机验证暂停时记录为 `PAUSED`;自动化通过不能替代代表性真机确认,也不能关闭仍待人工确认的移动阻断。
### 7. 提交要小批次、中文、可回滚
一次需求可以有多个 commit,但每个 commit 应该能说明一个清晰主题:
+13 -4
查看文件
@@ -29,8 +29,10 @@ R6 之后的 PC、移动和审批体验参考国内主流协同/OA 产品的共
- PC 是高密度工作台,服务筛选、批量查看、审批、财务复核、导出和管理配置。
- 移动端是消息驱动的轻入口,服务提交、补材料、查状态、处理待办和从企业微信消息回流。
- PC 高密度、移动轻任务是双端分工底线;不得把桌面表格和批量管理能力原样搬到手机端。
- 企业微信只做入口、绑定、免登录、个人应用消息和 deeplink,不替代 OA 正式审批页。
- 审批体验以“待办聚合、清晰状态、明确下一步、可催办和可追溯”为目标;催办、超时提醒和效率统计属于 R6 后续优化,不混入 R6 首轮试运行门禁。
- 竞品资料只用于抽象原则;不得复制钉钉、飞书、企业微信、WeUI 或 Ant Design 的页面文案、视觉细节和专有交互。
参考资料:
@@ -41,7 +43,9 @@ R6 之后的 PC、移动和审批体验参考国内主流协同/OA 产品的共
- Ant Design 表单页:https://4x.ant.design/docs/spec/research-form-cn
- Ant Design 表格:https://012x.ant.design/docs/pattern/table
- Ant Design 导航:https://ant.design/docs/spec/navigation/
- WeUI:https://www.npmjs.com/package/weui
- Ant Design Mobile/Mini TabBar:https://0x-mini.ant.design/components/tab-bar
- Ant Design Mobile/Mini SafeArea:https://0x-mini.ant.design/components/safe-area
- WeUI:https://github.com/Tencent/weui
## 文案规则
@@ -93,22 +97,27 @@ R6 之后的 PC、移动和审批体验参考国内主流协同/OA 产品的共
- 发票、附件上传使用自定义中文控件,不暴露浏览器原生 `Choose File` 文案。
- 弹窗只承担单一任务,不在弹窗里解释整个业务流程。
## 手机和企业微信页面模式
## 移动统一页面范式
- 所有 `/mobile` 页面默认复用同一套移动 Shell、响应式 token、底部导航、安全区和视觉矩阵;不允许单页自造布局体系解决局部拥挤。
- 手机端默认隐藏 PC 侧边栏和顶栏,使用移动首页、底部导航和轻量卡片。
- 菜单不应占用大量空间;常用入口放底部导航,更多入口放“我的”。
- 移动底部导航固定为“首页、审批、报销、我的”;票据上传作为首页快捷入口和报销页内操作,不作为底部一级 Tab。
- 移动端必须按响应式规则自动适配,不按单个机型写补丁;验收至少覆盖 320、360、375、390、393、414、430px 宽度。
- 移动首页一级快捷入口使用图标宫格:图标在上、短标题在下,4 项等宽,辅助说明不在小屏常驻展示,避免图标和文字挤压。
- 移动首页一级快捷入口使用图标宫格:图标在上、短标题在下,4 项等宽,辅助说明不在小屏常驻展示,避免图标和文字挤压;标题单行省略,不允许逐字换行。
- 移动端页面边距、卡片间距、底部导航高度和吸底操作高度使用统一 token;不通过 viewport 缩放字体解决拥挤问题。
- 次级入口和信息字段可按最小宽度自动从两列变一列;核心操作按钮必须保持明确可点,不得被内容、安全区或底部栏遮挡。
- 报销详情、审批详情等深层 Push 页隐藏底部导航,使用顶部返回和上下文吸底操作,避免底部 Tab 在深层页面假选中。
- 企业微信个人应用消息 deeplink 应直达移动待办或业务详情;首次进入如需点击进入工作台,应保持后续可直接回到目标页。
- 移动列表使用卡片和状态标签,首屏优先展示“谁提交、什么事项、金额/天数、当前状态和下一步”。
- 列表使用卡片,不直接显示桌面表格。
- 表单字段纵向排列,按钮宽度稳定,首屏优先完成“新建/继续编辑/提交”。
- 详情页按摘要、业务字段、发票/附件、审批流、日志分区展示;普通员工移动端不默认展示后台审计细节。
- 表单单列优先,字段纵向排列,按钮宽度稳定,首屏优先完成“新建/继续编辑/提交”。
- toast、dialog、actionsheet、tabbar、cell、button 等语义参考微信生态习惯;样式必须回到 hyb-oa 自身品牌和组件规则。
- 企业微信入口应尽量免登录;绑定失败或权限不足时显示明确下一步,而不是让用户反复登录。
- 头像 fallback 遵循国内中文习惯:中文/CJK 姓名默认取首个可见字符,英文或拼音姓名保留两段首字母。
- 移动角色差异采用“同框架、按角色裁剪内容和动作”:员工、审批人、财务、管理员、负责人看到不同入口、摘要、动作和敏感信息,但不做多套角色专属移动 UI。
- 移动验收必须包含跨视口自动化和代表性真机确认;若真机验证暂缓,只能记为 `PAUSED`,不能把相关移动阻断标为完成。
## 报销专项规则
+12 -2
查看文件
@@ -54,7 +54,7 @@ cd client && npm run build
页面或交互改动优先用 Playwright 验证:
- PC viewport: 1440x960。
- mobile viewport: 390x844。
- mobile viewport: 基础 390x844;涉及移动布局、企业微信或 R6 移动反馈时必须扩展到 320x568、360x740、375x667、390x844、393x873、414x896、430x932。
- 企业微信 UA 使用 iPhone + `wxwork` 标识。
- 截图放在 `output/playwright/<issue-id>/`。
@@ -62,10 +62,13 @@ cd client && npm run build
- 没有桌面表格。
- `scrollWidth <= viewportWidth + 2`。
- 底部导航高度合理。
- 底部导航高度合理,四个 Tab 中心点 `elementFromPoint` 命中自身或子元素。
- 当前选中项不是黑色空心样式。
- 弹窗不会默认聚焦搜索框导致键盘弹出。
- 无明显文字截断、遮挡、按钮样式不一致。
- 首页一级入口使用图标宫格时,图标、标题和容器不重叠,标题不逐字换行。
- 深层 Push 页隐藏底部 Tab,使用顶部返回;吸底主操作不遮挡内容。
- 移动验收采用“跨视口自动化 + 代表性真机确认”:自动化证明响应式基线,iPhone 11、Redmi K60 或同类代表设备确认真实企业微信 WebView 行为。
## 企业微信验证
@@ -83,6 +86,13 @@ cd client && npm run build
node scripts/qa/create-real-device-report.mjs
```
真机验证状态允许使用:
- `PASS`:代表性真机和必要人工确认均通过。
- `FAIL`:真机复现阻断或严重问题,必须登记设备、账号、URL、步骤和证据位置。
- `BLOCKED`:缺少测试账号、企业微信后台配置、样票或网络等前置条件。
- `PAUSED`:用户或现场条件暂停验证;自动化通过也不能据此关闭真机门禁或把相关 Issue 标为完成。
公网 live smoke 和真实 OCR 准备按 [`docs/trialrun/live-smoke-readiness.md`](trialrun/live-smoke-readiness.md) 执行:
```bash
+1 -1
查看文件
@@ -46,7 +46,7 @@
| ID | 级别 | 角色 | 入口/设备 | 流程 | 复现步骤 | 当前处理 | 负责人 | 状态 | 关联 Issue |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| R6-ISSUE-001 | 阻断 | 审批人 / 员工 | iPhone 11 / 企业微信 WebView | 移动底部导航、审批入口、首页快捷卡 | iPhone 11 使用企业微信打开 OA,底部菜单第二项“审批”点不了,首页快捷卡图标和文字挤在一起;用户反馈单点适配不足,需要像主流移动网页/App 一样自动适配不同分辨率 | 已从单机型热修升级为移动响应式体系修复并部署;首页快捷入口改为图标宫格,公网 320/360/375/390/393/414/430 视觉矩阵通过;待 iPhone 11 / Redmi K60 真机确认后关闭或降级 | Codex / 待指派 | open | `issues/2026-05-11_12-17-07-r6-mobile-responsive-system-hotfix.csv` |
| R6-ISSUE-001 | 阻断 | 审批人 / 员工 | iPhone 11 / 企业微信 WebView | 移动底部导航、审批入口、首页快捷卡 | iPhone 11 使用企业微信打开 OA,底部菜单第二项“审批”点不了,首页快捷卡图标和文字挤在一起;用户反馈单点适配不足,需要像主流移动网页/App 一样自动适配不同分辨率 | `PAUSED`:已从单机型热修升级为移动响应式体系修复并部署;首页快捷入口改为图标宫格,公网 320/360/375/390/393/414/430 视觉矩阵通过;用户暂时暂停真机验证,待 iPhone 11 / Redmi K60 真机确认后关闭或降级 | Codex / 待指派 | open | `issues/2026-05-11_12-17-07-r6-mobile-responsive-system-hotfix.csv` |
级别定义:
+12 -1
查看文件
@@ -9,6 +9,7 @@
- 测试日期:
- 测试人:
- 公网地址:`https://oa.hyinda.com`
- 验收状态:`TODO` / `PASS` / `FAIL` / `BLOCKED` / `PAUSED`
- 账号角色:专用测试员工 / 测试主管 / 测试负责人 / 测试财务 / 测试财务主管 / 测试管理员
- 设备:iPhone / Android
- 系统版本:
@@ -33,6 +34,15 @@
- 登录后默认进入适合手机的入口或可明确进入移动工作台。
- 页面无横向滚动、文字遮挡、按钮溢出。
## 移动统一体验验收
- 移动验收不再只按 iPhone 11 和 Redmi K60 两个固定机型判断;先通过 320、360、375、390、393、414、430px 跨视口自动化证明响应式基线,再用代表性真机确认企业微信 WebView 行为。
- 所有移动页面使用同一套响应式体系:底部一级 Tab、首页图标宫格、卡片列表、深层 Push 页、顶部返回、吸底主操作和安全区预留。
- 深层页如报销详情、审批详情隐藏底部 Tab;一级页才显示“首页、审批、报销、我的”底部导航。
- 底部四项 Tab 必须等宽、可见、可点;不能被滚动层、卡片、安全区或遮罩覆盖。
- 首页图标宫格必须保持图标在上、短标题在下;小屏不显示长辅助说明,标题不得逐字换行或压住图标。
- 若现场暂时看不到真机效果或用户暂停验证,记录为 `PAUSED`;不得把 `RS6-7`、`UI6-6`、`R6-ISSUE-001` 误标完成。
## 报销流程
- 新建报销草稿。
@@ -86,7 +96,7 @@
| 工作台入口与免登录 | `oa_smoke_01` | `SMOKE002` | 从企业微信工作台进入 OA,已绑定后免登录 | 通过 | 用户确认;截图/录屏不提交仓库 |
| 提交人移动报销体验 | `oa_smoke_01` | `SMOKE002` | 移动首页、报销页、详情页、PDF 发票入口可用 | 公网自动视觉通过;真机核心链路通过 | `output/playwright/r5-live-mobile-wecom-visual/` |
| 审批人移动待办体验 | `oa_smoke_02` | `SMOKE101` | 移动审批待办、审批详情、结果反馈可用 | 公网自动视觉通过;真机审批与消息回流通过 | `output/playwright/r5-live-mobile-wecom-visual/` |
| 移动底部导航与深层页 | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 首页、审批、报销、我的固定可见;报销详情隐藏底部 Tab,吸底双按钮不遮挡 | 公网自动视觉通过;R6 继续真机观察不同设备体验 | `output/playwright/r5-live-mobile-wecom-visual/` |
| 移动底部导航与深层页 | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 首页、审批、报销、我的固定可见;报销详情隐藏底部 Tab,吸底双按钮不遮挡 | `PAUSED`:公网自动视觉通过;用户反馈仍需系统性规约治理,真机验收暂缓 | `output/playwright/r6-mobile-responsive-system-hotfix/` |
| 通知与 deeplink | `oa_smoke_01` / `oa_smoke_02` | `SMOKE002` / `SMOKE101` | 通知能回到移动待办或详情页 | 真机通过:收到个人应用消息,点击后首次需点进入工作台,后续可直达移动审批 | `output/playwright/r5-wecom-app-message-live/` |
自动化补充证据(用于审批链业务验收):
@@ -101,6 +111,7 @@
- `2026-05-11` 公网自动视觉补充:部署 `795e976` 后,Playwright 企业微信 UA 覆盖 iPhone 11/iOS14 与 Redmi K60 视口;`SMOKE002` 移动首页、报销列表、报销详情、PDF-only 上传入口通过,`SMOKE101` 移动审批列表通过;截图目录 `output/playwright/r5-live-mobile-wecom-visual/`。用户已确认真实企业微信工作台入口和免登录通过。
- `2026-05-11` 通知与 deeplink 自动视觉补充:`SMOKE101` 现有两条未读报销待办站内通知,iPhone 11 与 Redmi K60 近似视口、企业微信 UA 下通知页无横向溢出,通知卡片和“查看”按钮可见;点击后进入 `/mobile/approvals?taskId=177b3a9e-67fe-447d-92f4-96a652a06841` 移动审批详情,无 PC 壳混入,截图目录 `output/playwright/r5-notification-deeplink-live/`。该历史待办已处理,因此本证据只证明站内通知和移动 deeplink,不证明新待办审批按钮;通知投递审计显示渠道 `R50-MOCK-007334` 为 `mock_sent`,真实企业微信外发应用消息仍待通道确认或真机记录。
- `2026-05-11` 个人企微应用消息补充:部署 `b1ae41f` 后启用 `R5-WECOM-APP-PERSONAL / wecom_app_message`,停用旧 mock 渠道;`SMOKE002` 创建请假测试单据并生成 `SMOKE101` 待办 `936362d8-c4e0-454f-a589-9c9653bcbfda`,通知 `9ee0602e-66a5-4a6e-81e5-04d41908c782` 投递审计为 `wecom_app_sent`、`errcode=0`、无 `invaliduser`。iPhone 11 与 Redmi K60 企业微信 UA 自动视觉验证通知列表和审批详情均无横向溢出,截图目录 `output/playwright/r5-wecom-app-message-live/`。用户确认手机企业微信 `oa_smoke_02` 收到“海音达工作台”应用消息,标题正确;点击后首次进入会提示进入工作台,进入后可看到移动审批,后续再次进入可直接看到移动审批;存在消息通知但未观察到系统弹窗。
- `2026-05-11` R6 移动体验补充:RS6 响应式体系修复已完成公网自动化,320/360/375/390/393/414/430px 视觉矩阵通过;用户现场暂时看不到真机效果,验证暂停。当前记录为 `PAUSED`,不得将 `RS6-7`、`UI6-6` 或 `R6-ISSUE-001` 置为完成;R6-3 继续等待代表性真机确认。
- 经理账号可在移动端看到审批待办。
- 审批详情可查看申请摘要、附件、发票、审批记录。
+15 -1
查看文件
@@ -67,7 +67,21 @@
数据范围以服务端权限和审计日志为准。任何导出、附件下载、例外处理都必须记录操作者、时间、对象和原因。
### 2.2 正式审批组织与角色映射
### 2.2 角色视图与动作裁剪
统一审批中心使用同一套 OA 审批数据、任务和历史记录,但 PC、移动和企业微信入口应按角色裁剪入口、摘要、动作和敏感信息。角色视图只影响展示和操作便利性,不改变服务端权限模型。
| 角色视图 | 重点入口与摘要 | 允许突出动作 | 不应展示或必须隐藏 |
| --- | --- | --- | --- |
| 员工视图 | 新建、草稿、审批中、退回修改、通知、我的申请 | 保存草稿、提交审批、撤回、按退回意见重提、查看本人状态 | 管理配置、全量人员、财务付款、他人待办审批动作 |
| 审批人视图 | 待处理、已处理、审批详情、附件/发票摘要、审批历史 | 通过、驳回、退回、转审、查看审批记录 | 无关员工列表、财务后处理、未分配给自己的审批按钮 |
| 财务视图 | PC 端财务复核、付款状态、导出、重复票据例外;移动端只保留必要复核和查看 | 财务复核、付款标记、财务导出、重复发票例外处理 | 系统管理能力、非财务业务审批权、无审计的敏感附件下载 |
| 管理员视图 | 系统配置、账号、角色、组织、通知渠道、审计日志 | 配置修复、账号启停、角色分配、通知渠道测试、审计查询 | 业务审批按钮;除非同时具备正式业务角色且不是自审,不得处理业务待办 |
| 负责人视图 / CEO 视图 | 高额、高风险、例外待办,公司级摘要,审批效率和风险概览 | 处理分配给自己的最终审批或例外审批,查看高风险摘要 | 本人单据自审、仅凭 `admin` 权限处理业务、无配置依据的全量业务操作 |
移动端也遵循上述角色视图,但不为每个角色做完全不同的页面体系:同一移动 Shell、列表卡片、详情分区、顶部返回和吸底主操作框架下,按权限显示不同内容和动作。前端隐藏无权动作只是体验优化;服务端仍必须拒绝越权、自审和状态非法操作。
### 2.3 正式审批组织与角色映射
正式运行和 R5 真机验收按以下组织口径执行;实现不得把个人姓名硬编码到业务逻辑中,应通过员工、直属上级和角色配置落地。
@@ -4,4 +4,4 @@ UI6-2,补 iPhone 11 企业微信命中测试,补强 Playwright 视觉和命中
UI6-3,修复底部 Tab 固定与点击命中,修复移动 Shell 在 iPhone 11 企业微信 WebView 下底部导航不在真实可点区域或被内容层遮挡的问题。,"1) 底部 Tab 固定在可见视口底部并预留 safe-area;2) 四个 Tab 等宽且触控高度不低于 44px;3) 第二项审批 Tab 可点击进入审批列表;4) 不影响 Redmi K60 和普通手机浏览器。","流程级验证:在 iPhone 11 企业微信 UA 下从 /mobile 点击底部审批,进入 /mobile/approvals 并显示 mobile-approvals-list;重复点击首页、报销、我的均可命中;无横向滚动。",playwright|manual,DONE,DONE,DONE,client/src/*,"[""UI6-2""]",移动审批一级 Tab 已取消前端权限禁用和路由 403;底部导航提升层级、触控区域和 safe-area 预留;iPhone 11 / Redmi K60 E2E 通过。
UI6-4,修复 iPhone 11 页面拥挤和控件挤压,调整移动首页、审批、报销和我的页面的小屏密度,避免文字和控件在 iPhone 11 企业微信 WebView 内相互挤压。,"1) iPhone 11 下核心卡片和按钮不重叠;2) 文字不挤出容器且不遮挡相邻控件;3) 保留报销详情吸底双按钮同行,不降级为单列;4) 移动端不出现 PC 表格或 PC 壳。","流程级验证:Playwright 截图检查 /mobile、/mobile/approvals、/mobile/reimbursements、/mobile/me、/mobile/reimbursements/:id;断言 scrollWidth <= viewportWidth + 2;人工视觉确认控件间距可读可点。",playwright|manual,DONE,DONE,DONE,client/src/*,"[""UI6-2""]",移动 Shell 改为可视视口高度、紧凑小屏 padding 和 overscroll 约束;E2E 断言无横向滚动、无 PC 表格、报销详情吸底双按钮仍同行。
UI6-5,本地构建与移动视觉回归,完成前端类型检查、构建和移动专项 E2E,覆盖 iPhone 11、Redmi K60、企业微信 UA、底部导航、审批入口、报销详情和 PDF 上传入口。,"1) cd client && npm run typecheck 通过;2) cd client && npm run build 通过;3) 移动视觉专项通过;4) 截图证据保存在 output/playwright/r6-iphone11-wecom-mobile-layout-hotfix。","流程级验证:cd client && npm run typecheck;cd client && npm run build;cd client && npm run test:e2e -- r5-real-device-feedback-mobile-ux.spec.ts r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list。",npm|playwright,DONE,DONE,DONE,client/tests/e2e/*|output/playwright/r6-iphone11-wecom-mobile-layout-hotfix,"[""UI6-3"",""UI6-4""]",已通过 npm run typecheck、npm run build、r5-real-device-feedback-mobile-ux.spec.ts、r124-mobile-entry-matrix.spec.ts;UI6-6 部署与真机复测仍待执行。
UI6-6,部署复测并恢复 R6 Gate,部署修复后做 R4 复检和企业微信真机复测,只有 iPhone 11 底部导航与拥挤问题关闭后才允许继续 R6-3。,"1) 部署后 /ready 正常;2) 公网 bundle findings=0;3) iPhone 11 企业微信底部第二项可点;4) Redmi K60 不回归;5) R6-ISSUE-001 状态关闭或降级为非阻断。","流程级验证:bash deploy/trialrun/deploy.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;人工真机复测 iPhone 11 企业微信打开 OA 并点击底部审批;回填 docs/trialrun/manual-trialrun-report.md。",bash|playwright|manual,DONE,DONE,TODO,deploy/trialrun/*|docs/trialrun/manual-trialrun-report.md,"[""UI6-5""]",已升级到 RS6 响应式体系修复并部署到 https://oa.hyinda.com;/ready 正常;公网 bundle findings=0;live smoke readiness PASS,报告 artifacts/qa-flow/live-smoke-readiness-20260511-124651;公网移动视觉矩阵 320/360/375/390/393/414/430 全部通过。仍待用户真机确认 iPhone 11 企业微信底部审批可点、首页宫格不拥挤和 Redmi K60 不回归,确认后再置 Regression DONE。
UI6-6,部署复测并恢复 R6 Gate,部署修复后做 R4 复检和企业微信真机复测,只有 iPhone 11 底部导航与拥挤问题关闭后才允许继续 R6-3。,"1) 部署后 /ready 正常;2) 公网 bundle findings=0;3) iPhone 11 企业微信底部第二项可点;4) Redmi K60 不回归;5) R6-ISSUE-001 状态关闭或降级为非阻断。","流程级验证:bash deploy/trialrun/deploy.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;人工真机复测 iPhone 11 企业微信打开 OA 并点击底部审批;回填 docs/trialrun/manual-trialrun-report.md。",bash|playwright|manual,DONE,DONE,TODO,deploy/trialrun/*|docs/trialrun/manual-trialrun-report.md,"[""UI6-5""]",PAUSED:已升级到 RS6 响应式体系修复并部署到 https://oa.hyinda.com;/ready 正常;公网 bundle findings=0;live smoke readiness PASS,报告 artifacts/qa-flow/live-smoke-readiness-20260511-124651;公网移动视觉矩阵 320/360/375/390/393/414/430 全部通过。用户暂时暂停真机验证;仍待 iPhone 11 企业微信底部审批可点、首页宫格不拥挤和 Redmi K60 不回归,确认后再置 Regression DONE。
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
4 UI6-3 修复底部 Tab 固定与点击命中 修复移动 Shell 在 iPhone 11 企业微信 WebView 下底部导航不在真实可点区域或被内容层遮挡的问题。 1) 底部 Tab 固定在可见视口底部并预留 safe-area;2) 四个 Tab 等宽且触控高度不低于 44px;3) 第二项审批 Tab 可点击进入审批列表;4) 不影响 Redmi K60 和普通手机浏览器。 流程级验证:在 iPhone 11 企业微信 UA 下从 /mobile 点击底部审批,进入 /mobile/approvals 并显示 mobile-approvals-list;重复点击首页、报销、我的均可命中;无横向滚动。 playwright|manual DONE DONE DONE client/src/* ["UI6-2"] 移动审批一级 Tab 已取消前端权限禁用和路由 403;底部导航提升层级、触控区域和 safe-area 预留;iPhone 11 / Redmi K60 E2E 通过。
5 UI6-4 修复 iPhone 11 页面拥挤和控件挤压 调整移动首页、审批、报销和我的页面的小屏密度,避免文字和控件在 iPhone 11 企业微信 WebView 内相互挤压。 1) iPhone 11 下核心卡片和按钮不重叠;2) 文字不挤出容器且不遮挡相邻控件;3) 保留报销详情吸底双按钮同行,不降级为单列;4) 移动端不出现 PC 表格或 PC 壳。 流程级验证:Playwright 截图检查 /mobile、/mobile/approvals、/mobile/reimbursements、/mobile/me、/mobile/reimbursements/:id;断言 scrollWidth <= viewportWidth + 2;人工视觉确认控件间距可读可点。 playwright|manual DONE DONE DONE client/src/* ["UI6-2"] 移动 Shell 改为可视视口高度、紧凑小屏 padding 和 overscroll 约束;E2E 断言无横向滚动、无 PC 表格、报销详情吸底双按钮仍同行。
6 UI6-5 本地构建与移动视觉回归 完成前端类型检查、构建和移动专项 E2E,覆盖 iPhone 11、Redmi K60、企业微信 UA、底部导航、审批入口、报销详情和 PDF 上传入口。 1) cd client && npm run typecheck 通过;2) cd client && npm run build 通过;3) 移动视觉专项通过;4) 截图证据保存在 output/playwright/r6-iphone11-wecom-mobile-layout-hotfix。 流程级验证:cd client && npm run typecheck;cd client && npm run build;cd client && npm run test:e2e -- r5-real-device-feedback-mobile-ux.spec.ts r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list。 npm|playwright DONE DONE DONE client/tests/e2e/*|output/playwright/r6-iphone11-wecom-mobile-layout-hotfix ["UI6-3","UI6-4"] 已通过 npm run typecheck、npm run build、r5-real-device-feedback-mobile-ux.spec.ts、r124-mobile-entry-matrix.spec.ts;UI6-6 部署与真机复测仍待执行。
7 UI6-6 部署复测并恢复 R6 Gate 部署修复后做 R4 复检和企业微信真机复测,只有 iPhone 11 底部导航与拥挤问题关闭后才允许继续 R6-3。 1) 部署后 /ready 正常;2) 公网 bundle findings=0;3) iPhone 11 企业微信底部第二项可点;4) Redmi K60 不回归;5) R6-ISSUE-001 状态关闭或降级为非阻断。 流程级验证:bash deploy/trialrun/deploy.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;人工真机复测 iPhone 11 企业微信打开 OA 并点击底部审批;回填 docs/trialrun/manual-trialrun-report.md。 bash|playwright|manual DONE DONE TODO deploy/trialrun/*|docs/trialrun/manual-trialrun-report.md ["UI6-5"] 已升级到 RS6 响应式体系修复并部署到 https://oa.hyinda.com;/ready 正常;公网 bundle findings=0;live smoke readiness PASS,报告 artifacts/qa-flow/live-smoke-readiness-20260511-124651;公网移动视觉矩阵 320/360/375/390/393/414/430 全部通过。仍待用户真机确认 iPhone 11 企业微信底部审批可点、首页宫格不拥挤和 Redmi K60 不回归,确认后再置 Regression DONE。 PAUSED:已升级到 RS6 响应式体系修复并部署到 https://oa.hyinda.com;/ready 正常;公网 bundle findings=0;live smoke readiness PASS,报告 artifacts/qa-flow/live-smoke-readiness-20260511-124651;公网移动视觉矩阵 320/360/375/390/393/414/430 全部通过。用户暂时暂停真机验证;仍待 iPhone 11 企业微信底部审批可点、首页宫格不拥挤和 Redmi K60 不回归,确认后再置 Regression DONE。
@@ -5,4 +5,4 @@ RS6-3,重构移动首页快捷入口为图标宫格,将移动首页审批、传
RS6-4,统一底部导航滚动容器和吸底操作,统一移动 Shell、底部 Tab、内容滚动区和报销详情吸底操作的 safe-area 与高度预留策略。,"1) 底部导航固定为首页/审批/报销/我的;2) 四个 Tab 等宽且中心点 elementFromPoint 命中自身;3) 深层报销详情隐藏底部 Tab;4) 报销详情吸底双按钮保持同行且内容不被遮挡。","流程级验证:Playwright 访问 /mobile、/mobile/approvals、/mobile/reimbursements、/mobile/reimbursements/:id;断言 scrollWidth <= viewportWidth + 2;断言底部 Tab 中心点可点;断言吸底双按钮同行且高度 >=44px。",playwright,DONE,DONE,DONE,client/src/layouts/AppShellLayout.tsx|client/src/components/mobile/MobileBottomNav.tsx|client/src/pages/MobileReimbursementDetailPage.tsx,["RS6-2"],已统一移动 Shell、底部导航和报销详情吸底操作 safe-area;报销详情主按钮仍保持双按钮同行。
RS6-5,巡检 R6 相关移动页刚性布局,巡检移动审批、报销、通知、票据上传、请假、我的等页面,清理小屏刚性两列和文字挤压风险。,"1) R6 相关移动页在窄屏无 PC 壳、无桌面表格、无横向溢出;2) 信息字段可根据最小宽度从两列变一列;3) 核心操作按钮保持可点且无遮挡;4) 不扩大业务功能范围。","流程级验证:Playwright 覆盖 /mobile/approvals、/mobile/reimbursements、/mobile/reimbursements/:id、/mobile/me、/mobile/notifications、/mobile/capture、/mobile/leave;人工检查截图中无挤压和遮挡。",playwright|manual,DONE,DONE,DONE,client/src/pages/Mobile*.tsx,"[""RS6-3"",""RS6-4""]",已巡检并清理 R6 关键移动页刚性布局;只修布局体系,不改审批链、组织关系、通知通道或上传业务规则。
RS6-6,补跨视口视觉自动化矩阵,新增或补强移动视觉 E2E,覆盖 320x568、360x740、375x667、390x844、393x873、414x896、430x932 和企业微信/普通移动 UA。,"1) 新视觉矩阵截图输出到 output/playwright/r6-mobile-responsive-system-hotfix;2) 断言无横向滚动;3) 断言底部 Tab 命中;4) 断言首页图标宫格不重叠;5) 断言报销详情吸底双按钮同行。","流程级验证:cd client && npm run test:e2e -- r6-mobile-responsive-system-hotfix.spec.ts r5-real-device-feedback-mobile-ux.spec.ts r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list。",playwright,DONE,DONE,DONE,client/tests/e2e/r6-mobile-responsive-system-hotfix.spec.ts|client/tests/e2e/r5-real-device-feedback-mobile-ux.spec.ts,"[""RS6-3"",""RS6-4"",""RS6-5""]",本地 typecheck/build 通过;移动回归组合 10 passed,截图输出到 output/playwright/r6-mobile-responsive-system-hotfix。
RS6-7,部署公网复检并回填 R6 移动阻断,本地验证通过后部署公网,复检 /ready、bundle、live smoke、PDF OCR 和企微个人应用消息,等待真机确认后关闭或降级 R6-ISSUE-001。,"1) 部署后 /ready 正常;2) 公网 bundle findings=0;3) live smoke readiness PASS;4) 公网移动视觉专项通过;5) 用户真机确认 iPhone 11 企业微信不拥挤、审批可点、Redmi K60 不回归后回填 UI6-6 和 R6 问题状态。","流程级验证:bash deploy/trialrun/deploy.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;E2E_MODE=live 或 BASE_URL=https://oa.hyinda.com 运行移动视觉专项;人工真机复测并回填 docs/trialrun/manual-trialrun-report.md。",bash|playwright|manual,DONE,DONE,TODO,deploy/trialrun/*|docs/trialrun/manual-trialrun-report.md,["RS6-6"],已部署到 https://oa.hyinda.com;/ready 正常;公网 bundle findings=0;live smoke readiness PASS,报告 artifacts/qa-flow/live-smoke-readiness-20260511-124651;公网移动视觉专项 7 passed。仍待用户真机确认 iPhone 11 企业微信不拥挤、审批可点、Redmi K60 不回归后再置 Regression DONE。
RS6-7,部署公网复检并回填 R6 移动阻断,本地验证通过后部署公网,复检 /ready、bundle、live smoke、PDF OCR 和企微个人应用消息,等待真机确认后关闭或降级 R6-ISSUE-001。,"1) 部署后 /ready 正常;2) 公网 bundle findings=0;3) live smoke readiness PASS;4) 公网移动视觉专项通过;5) 用户真机确认 iPhone 11 企业微信不拥挤、审批可点、Redmi K60 不回归后回填 UI6-6 和 R6 问题状态。","流程级验证:bash deploy/trialrun/deploy.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh;E2E_MODE=live 或 BASE_URL=https://oa.hyinda.com 运行移动视觉专项;人工真机复测并回填 docs/trialrun/manual-trialrun-report.md。",bash|playwright|manual,DONE,DONE,TODO,deploy/trialrun/*|docs/trialrun/manual-trialrun-report.md,["RS6-6"],PAUSED:已部署到 https://oa.hyinda.com;/ready 正常;公网 bundle findings=0;live smoke readiness PASS,报告 artifacts/qa-flow/live-smoke-readiness-20260511-124651;公网移动视觉专项 7 passed。用户暂时暂停真机验证;仍待 iPhone 11 企业微信不拥挤、审批可点、Redmi K60 不回归后再置 Regression DONE。
无法渲染此文件,因为它包含了意外字符,其位于第 3 行和第 756 列。
@@ -0,0 +1,7 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
MD6-1,暂停 RS6 真机验证并记录状态,记录当前 iPhone 11 和 Redmi K60 真机验证暂缓;RS6-7、UI6-6 和 R6-ISSUE-001 不置为完成。,"1) RS6-7 保持 DONE/DONE/TODO;2) UI6-6 保持 DONE/DONE/TODO;3) 真机清单和试运行报告记录 PAUSED;4) 不改业务代码、不部署、不改远端数据。","流程级验证:人工核对 issues/2026-05-11_12-17-07-r6-mobile-responsive-system-hotfix.csv、issues/2026-05-11_10-46-10-r6-iphone11-wecom-mobile-layout-hotfix.csv 和 docs/trialrun/manual-trialrun-report.md 中状态未误标完成。",manual|rg,DONE,DONE,DONE,issues/*.csv|docs/trialrun/*.md,[],本轮只做文档治理;后续真机通过后另行回填 RS6/UI6。
MD6-2,沉淀国内同类系统最佳实践摘要,将钉钉、飞书、企业微信、WeUI、Ant Design 和 Ant Design Mobile/Mini 的公开资料抽象为 hyb-oa 自有设计原则。,"1) docs/product-design-rules.md 有最佳实践摘要;2) 明确只借鉴原则不复制竞品文案和交互;3) 资料覆盖审批、移动 Web、PC 表格/导航、企业微信消息。","流程级验证:rg -n ""钉钉|飞书|WeUI|Ant Design|企业微信应用消息|只借鉴原则"" docs/product-design-rules.md docs/agent-development-practices.md。",web|rg,DONE,DONE,DONE,docs/product-design-rules.md|docs/agent-development-practices.md,["MD6-1"],参考资料只作为原则来源,正式实现仍以 hyb-oa 规约为准。
MD6-3,更新移动统一页面范式,在产品设计规则中固定全移动页统一响应式体系:底部一级 Tab、图标宫格、卡片列表、深层 Push 页、顶部返回、吸底主操作、安全区和视觉矩阵。,"1) docs/product-design-rules.md 明确所有移动页复用同一响应式 token 和视觉矩阵;2) 明确 PC 高密度、移动轻任务分工;3) 明确不允许单页自造布局体系。","流程级验证:rg -n ""移动统一页面范式|图标宫格|深层 Push|吸底主操作|跨视口|PC 高密度|移动轻任务"" docs/product-design-rules.md。",manual|rg,DONE,DONE,DONE,docs/product-design-rules.md,["MD6-2"],不改 client 代码;后续统一组件改造另拆 Issue。
MD6-4,更新审批角色视图规则,在统一审批中心规约中增加员工、审批人、财务、管理员、负责人/CEO 的视图与动作裁剪规则。,"1) docs/需求-统一审批中心规约.md 明确同一页面框架按角色裁剪内容和动作;2) admin 不显示业务审批动作;3) 财务、审批人、员工、负责人视图边界清楚;4) 自审禁止不变。","流程级验证:rg -n ""角色视图|员工视图|审批人视图|财务视图|管理员视图|负责人视图|admin.*业务审批"" docs/需求-统一审批中心规约.md。",manual|rg,DONE,DONE,DONE,docs/需求-统一审批中心规约.md,["MD6-2"],不改权限模型和后端接口。
MD6-5,更新试运行手册与 Skill 交付实践,补充 PAUSED 状态、跨视口自动化加代表性真机确认、移动页必须读设计规则和统一视觉矩阵的交付要求。,"1) docs/trialrun-runbook.md 说明 PAUSED;2) docs/trialrun/real-device-public-checklist.md 说明跨视口自动化加代表性真机;3) .agents/skills/hyb-oa-delivery/SKILL.md 和 docs/agent-development-practices.md 补充移动页治理要求。","流程级验证:python3 /home/shunli/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hyb-oa-delivery;rg -n ""PAUSED|代表性真机|跨视口|移动页必须|统一视觉矩阵"" docs .agents/skills/hyb-oa-delivery。",python3|rg,DONE,DONE,DONE,docs/trialrun-runbook.md|docs/trialrun/real-device-public-checklist.md|.agents/skills/hyb-oa-delivery/SKILL.md|docs/agent-development-practices.md,"[""MD6-3"",""MD6-4""]",不更新 AGENTS.md。
MD6-6,校验文档治理并提交,完成 CSV、Skill、文档一致性和空白检查,提交本轮规约治理。,"1) 新 CSV 校验通过;2) Skill quick_validate 通过;3) 文档一致性搜索通过;4) git diff --check 通过;5) 提交中文 commit 并引用 MD6。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-11_13-20-40-r6-mobile-design-governance-roadmap.csv;python3 /home/shunli/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hyb-oa-delivery;rg -n ""移动统一|图标宫格|角色视图|员工视图|审批人视图|财务视图|管理员视图|真机验证暂缓|PAUSED|WeUI|Ant Design|钉钉|飞书"" docs .agents/skills/hyb-oa-delivery issues;git diff --check。",python3|rg|git,DONE,DONE,DONE,issues/2026-05-11_13-20-40-r6-mobile-design-governance-roadmap.csv,"[""MD6-1"",""MD6-2"",""MD6-3"",""MD6-4"",""MD6-5""]",提交后 R6 仍不自动恢复,等待 RS6/UI6 真机确认。
无法渲染此文件,因为它包含了意外字符,其位于第 3 行和第 635 列。