From 53a7779a7076f2df4eed3a173e2583d48064230f Mon Sep 17 00:00:00 2001 From: shunli Date: Tue, 12 May 2026 00:07:24 +0800 Subject: [PATCH] =?UTF-8?q?MUD6=20=E6=8E=A8=E5=B9=BF=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agents/skills/hyb-oa-delivery/SKILL.md | 8 +- .../components/mobile/BarcodeScannerPanel.tsx | 2 +- client/src/pages/MobileApprovalsPage.tsx | 22 +- client/src/pages/MobileAssetScanPage.tsx | 41 +- client/src/pages/MobileCapturePage.tsx | 14 +- client/src/pages/MobileLeavePage.tsx | 6 +- client/src/pages/MobileMePage.tsx | 16 +- client/src/pages/MobileNotificationsPage.tsx | 8 +- client/src/pages/MobileProfilePage.tsx | 18 +- .../pages/MobileReimbursementDetailPage.tsx | 6 +- client/src/pages/MobileReimbursementsPage.tsx | 4 +- client/src/styles/mobile-touch.css | 59 +- .../r6-mobile-unified-design-rollout.spec.ts | 529 ++++++++++++++++++ docs/agent-development-practices.md | 1 + docs/product-design-rules.md | 3 + docs/trialrun/manual-trialrun-report.md | 6 +- docs/trialrun/real-device-public-checklist.md | 7 +- ...r6-iphone11-wecom-mobile-layout-hotfix.csv | 2 +- ...-07-r6-mobile-responsive-system-hotfix.csv | 2 +- ...33-r6-wecom-mobile-rendering-hardening.csv | 2 +- ...11-r6-mobile-me-adaptive-visual-polish.csv | 2 +- ...26-00-r6-mobile-unified-design-rollout.csv | 8 + 22 files changed, 677 insertions(+), 89 deletions(-) create mode 100644 client/tests/e2e/r6-mobile-unified-design-rollout.spec.ts create mode 100644 issues/2026-05-11_23-26-00-r6-mobile-unified-design-rollout.csv diff --git a/.agents/skills/hyb-oa-delivery/SKILL.md b/.agents/skills/hyb-oa-delivery/SKILL.md index 43022533..fca1cc88 100644 --- a/.agents/skills/hyb-oa-delivery/SKILL.md +++ b/.agents/skills/hyb-oa-delivery/SKILL.md @@ -40,9 +40,10 @@ Default behavior: 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. 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. 面向用户可测试的改动,最终必须明确“是否已部署”。只有部署与公网检查通过后,才能告知用户可以去企业微信或公网试运行环境测试。 +8. Dedicated `/mobile` pages must use the shared mobile slot/card/list/sticky-action system from `docs/product-design-rules.md`: fixed icon/avatar/status slots, `minmax(0, 1fr)` copy slots, `mobile-card`/mobile list cards, mobile tokens, and no desktop `card-std p-4` as a mobile main container. +9. Update Issue CSV statuses only after the stated `Test_Method` passes. +10. Commit in Chinese batches with Issue IDs. +11. 面向用户可测试的改动,最终必须明确“是否已部署”。只有部署与公网检查通过后,才能告知用户可以去企业微信或公网试运行环境测试。 ## Default Verification Matrix @@ -104,3 +105,4 @@ Final responses should include: - 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. +- After MUD6, `R6-ISSUE-001` is treated as resolved based on representative real-device confirmation; future mobile regressions should be recorded as new Issues rather than reopening the old WCM6/MME6 gate unless the same production behavior returns. diff --git a/client/src/components/mobile/BarcodeScannerPanel.tsx b/client/src/components/mobile/BarcodeScannerPanel.tsx index 40549bbb..6be666cb 100644 --- a/client/src/components/mobile/BarcodeScannerPanel.tsx +++ b/client/src/components/mobile/BarcodeScannerPanel.tsx @@ -183,7 +183,7 @@ export function BarcodeScannerPanel({ disabled = false, onDetected }: BarcodeSca }, [startWithBarcodeDetector, startWithZxing, stopScanner]); return ( -
+

相机扫码

diff --git a/client/src/pages/MobileApprovalsPage.tsx b/client/src/pages/MobileApprovalsPage.tsx index 5f26308a..418131ba 100644 --- a/client/src/pages/MobileApprovalsPage.tsx +++ b/client/src/pages/MobileApprovalsPage.tsx @@ -811,7 +811,7 @@ export function MobileApprovalsPage() {

{message}

) : null} -
+

{listTitle}

@@ -835,7 +835,7 @@ export function MobileApprovalsPage() { placeholder="搜索待办" /> -
+
筛选与批量 @@ -891,7 +891,7 @@ export function MobileApprovalsPage() {
{batchMode ? ( -
+
已选 {selectedBatchTaskIds.length} 条
@@ -964,7 +964,7 @@ export function MobileApprovalsPage() { return (
@@ -999,7 +999,7 @@ export function MobileApprovalsPage() { return (
-
+

处理

{!selectedTaskId ?

请先选择任务。

: null} @@ -1045,7 +1045,7 @@ export function MobileApprovalsPage() { {selectedTask ? ( <> -
+
任务状态:{workflowStatusLabel(selectedTask.task.status)}
步骤:{selectedTask.task.stepName}
对象类型:{entityLabel(selectedTask.workflowInstance?.entityType)}
@@ -1105,7 +1105,7 @@ export function MobileApprovalsPage() {

离线仅保存通过 / 驳回草稿,联网同步成功后才会正式提交。

) : null} -
+
-
-
状态:{statusLabel(selectedAsset.status)}
-
法体:{selectedAsset.legalEntity?.name ?? "-"}
-
成本中心:{selectedAsset.costCenter?.name ?? "-"}
-
位置:{selectedAsset.location ?? "-"}
-
归属人:{selectedAsset.assignee?.name ?? "未分配"}
-
序列号:{selectedAsset.serialNo ?? "-"}
+
+
状态:{statusLabel(selectedAsset.status)}
+
法体:{selectedAsset.legalEntity?.name ?? "-"}
+
成本中心:{selectedAsset.costCenter?.name ?? "-"}
+
位置:{selectedAsset.location ?? "-"}
+
归属人:{selectedAsset.assignee?.name ?? "未分配"}
+
序列号:{selectedAsset.serialNo ?? "-"}
{isInventoryMode && canRecordInventory && selectedInventoryCheck ? ( -
+

盘点录入

仅在盘点中的任务可提交或离线缓存结果。

-
+
-
+
接入状态
{wecomStatus.label}
{wecomStatus.description}
-
+
当前绑定
@@ -181,7 +181,7 @@ export function MobileProfilePage() { ) : null}
-
+