6.9 KiB
6.9 KiB
| 1 | ID | Title | Description | Acceptance | Test_Method | Tools | Dev_Status | Review1_Status | Regression_Status | Files | Dependencies | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | V1 | R5 真机反馈记录 | 记录 oa_smoke_01/oa_smoke_02 企业微信真机绑定和审批链路通过结果;明确 R5 因移动底部导航与报销详情体验继续未完成。 | 1) 真机结果写入清单;2) S5/O3/R5 Notes 记录审批链通过但移动体验阻断;3) R5 不标 DONE;4) 不提交密码或截图敏感信息。 | 流程级验证:人工核对 docs/trialrun/real-device-public-checklist.md 与 S/O/R 合同 Notes;命令:rg -n 'oa_smoke_01|oa_smoke_02|iPhone 11|Redmi K60|移动体验阻断|R5 仍' docs/trialrun/real-device-public-checklist.md issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv issues/2026-05-10_18-25-33-formal-approval-org-config.csv issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv。 | manual|rg | DONE | DONE | DONE | docs/trialrun/real-device-public-checklist.md|issues/2026-05-10_20-33-04-formal-smoke-test-accounts.csv|issues/2026-05-10_18-25-33-formal-approval-org-config.csv|issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv | [] | V1 completed:已记录 2026-05-10 企业微信真机结果:iPhone 11/iOS14、Redmi K60/MIUI 最新企业微信下 oa_smoke_01->SMOKE002 绑定通过、oa_smoke_02->SMOKE101 绑定通过、工作台进入 OA、已绑定免登录、SMOKE002 提交单据、SMOKE101 审批待办与审批详情/结果均通过;主 R5 仍未完成,阻断转为移动底部导航/报销详情深层页和 PDF-only 发票上传待部署复测。 |
| 3 | V2 | 移动 Shell 与底部导航视口修复 | 修复 iOS 14 与企业微信 WebView 下移动页面高度和底部 Tab 固定问题;首页/审批/报销/我的首屏可见。 | 1) 底部导航固定在真实视口底部;2) 内容区预留导航高度;3) iPhone 11 和 Redmi K60 无横向溢出;4) 四个 Tab 文案不换行不挤压。 | 流程级验证:Playwright 企业微信 UA 下打开 /mobile 和 /mobile/reimbursements;断言 mobile bottom nav 可见且 bounding box 位于视口底部;断言 scrollWidth <= viewportWidth + 2;截图保存到 output/playwright/r5-mobile-viewport-pdf-invoice/。 | playwright|npm | DONE | DONE | DONE | client/src/layouts/AppShellLayout.tsx|client/src/components/mobile/MobileBottomNav.tsx|client/src/styles/mobile-touch.css | ["V1"] | V2 completed:AppShell 使用 visualViewport/innerHeight 维护 --mobile-viewport-height,底部 Tab fixed 到真实视口底部并预留内容区 padding;Playwright 覆盖 /mobile 与 /mobile/reimbursements 在 iPhone 11 iOS14、Redmi K60 视口下 bottom gap<=2、scrollWidth 无横向溢出、四 Tab 触控宽高>=44。 |
| 4 | V3 | 报销深层页固定吸底操作 | 修复 /mobile/reimbursements/:id 深层页操作栏;隐藏底部 Tab 并固定顶部返回与底部主操作。 | 1) 详情页无底部 Tab;2) 顶部返回可见;3) 添加发票与提交审批在 iPhone 11 上同行等宽双按钮;4) 操作栏不遮挡内容且按钮高度不低于 44px。 | 流程级验证:Playwright 企业微信 UA 下打开 /mobile/reimbursements/:id;断言 mobile-nav-* 不存在;断言 mobile-reimbursement-sticky-actions 可见且两个主按钮同一行;检查无横向滚动和无遮挡。 | playwright|npm | DONE | DONE | DONE | client/src/pages/MobileReimbursementDetailPage.tsx|client/tests/e2e/*.spec.ts | ["V2"] | V3 completed:/mobile/reimbursements/:id 隐藏底部 Tab,顶部返回保留;吸底操作栏 fixed 到真实视口底部;定位到 page-scaffold 动画 transform 会破坏 fixed 视口定位,已对带吸底操作页禁用该 transform;添加发票/提交审批在 iPhone 11 和 Redmi K60 仍保持同行等宽双按钮,高度>=44。 |
| 5 | V4 | 发票上传 PDF-only 收口 | 所有发票/OCR 上传入口只允许 PDF;移除拍照和图片上传入口;后端拒绝图片直传并返回明确错误。 | 1) PC 票据中心、PC 报销详情、移动票据上传、移动报销详情发票上传均只接受 PDF;2) 不存在 capture 和 image/* 发票入口;3) 后端拒绝 JPG/PNG/WEBP;4) 报销附件图片上传不回归。 | 流程级验证:cd server && node --check src/routes/invoicePool.js;前端静态搜索确认发票上传 accept 不含 image/*;Playwright 检查上传控件文案和 accept;后端单测或 API 测试覆盖 PDF 通过和图片拒绝。 | node|playwright|npm | DONE | DONE | DONE | server/src/routes/invoicePool.js|client/src/pages/MobileCapturePage.tsx|client/src/pages/MobileReimbursementDetailPage.tsx|client/src/pages/invoice-pool/InvoiceUploadCard.tsx|client/src/pages/ReimbursementDetailPage.tsx | ["V1"] | V4 completed:发票/OCR 上传入口统一 PDF-only,移动端去除拍照/图片/capture 文件入口,PC 票据中心和报销详情仅接受 application/pdf;后端 invoice-pool/upload 校验 MIME=application/pdf 且扩展名 .pdf,图片返回 VALID_001/pdf_invoice_required;附件材料图片上传保持不受影响。 |
| 6 | V5 | 规约与真机清单同步 | 同步产品设计、报销发票规则和真机清单;删除发票拍照上传口径并记录本轮阻断结论。 | 1) 设计规则固定移动双按钮和 safe-area 口径;2) 报销发票规则明确 PDF-only;3) 真机清单更新 iPhone 11/Redmi K60 结果;4) 主 R5/O3/S5 状态不误标完成。 | 流程级验证:rg -n 'PDF-only|PDF 发票|iPhone 11|Redmi K60|底部导航|吸底|拍照上传' docs issues;git diff --check。 | rg|manual | DONE | DONE | DONE | docs/product-design-rules.md|docs/reimbursement-invoice-rules.md|docs/trialrun/real-device-public-checklist.md|issues/*.csv | ["V1","V2","V3","V4"] | V5 completed:docs/product-design-rules.md、docs/reimbursement-invoice-rules.md、docs/trialrun/real-device-public-checklist.md 及相关索引/清单已同步移动 safe-area、深层页吸底双按钮和 PDF-only 发票口径;不提交截图、样票、密码或敏感路径。 |
| 7 | V6 | 本地回归与提交 | 执行本地后端、前端、视觉和 CSV 校验;通过后提交本轮修复但不宣称公网 R5 完成。 | 1) server prisma validate 和 node --check 通过;2) client typecheck/build 通过;3) 相关 E2E/视觉通过或记录阻断;4) CSV 校验通过;5) git diff --check 通过;6) 提交信息引用本合同。 | 流程级验证:cd server && npm run prisma:validate;cd server && node --check src/routes/invoicePool.js;cd client && npm run typecheck;cd client && npm run build;相关 Playwright;python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_22-44-06-r5-mobile-viewport-pdf-invoice.csv;git diff --check。 | npm|node|python3|playwright|git | DONE | DONE | DONE | server/src/routes/invoicePool.js|client/src|docs|issues | ["V5"] | V6 completed:已通过 CSV 校验、server prisma validate、node --check src/routes/invoicePool.js、server 单测 invoicePool.upload + reimbursements.attachments 9 passed、client typecheck/build、Playwright r5-real-device-feedback-mobile-ux + r111 + r124 共 5 passed、git diff --check。未部署;R5 仍需部署、R4 复检、公网 live smoke 与企业微信真机复测后才能完成。 |