文件
hyb-oa/issues/2026-05-10_22-44-06-r5-mobile-viewport-pdf-invoice.csv
T

6.9 KiB

1IDTitleDescriptionAcceptanceTest_MethodToolsDev_StatusReview1_StatusRegression_StatusFilesDependenciesNotes
2V1R5 真机反馈记录记录 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|rgDONEDONEDONEdocs/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 发票上传待部署复测。
3V2移动 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|npmDONEDONEDONEclient/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。
4V3报销深层页固定吸底操作修复 /mobile/reimbursements/:id 深层页操作栏;隐藏底部 Tab 并固定顶部返回与底部主操作。1) 详情页无底部 Tab;2) 顶部返回可见;3) 添加发票与提交审批在 iPhone 11 上同行等宽双按钮;4) 操作栏不遮挡内容且按钮高度不低于 44px。流程级验证:Playwright 企业微信 UA 下打开 /mobile/reimbursements/:id;断言 mobile-nav-* 不存在;断言 mobile-reimbursement-sticky-actions 可见且两个主按钮同一行;检查无横向滚动和无遮挡。playwright|npmDONEDONEDONEclient/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。
5V4发票上传 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|npmDONEDONEDONEserver/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;附件材料图片上传保持不受影响。
6V5规约与真机清单同步同步产品设计、报销发票规则和真机清单;删除发票拍照上传口径并记录本轮阻断结论。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|manualDONEDONEDONEdocs/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 发票口径;不提交截图、样票、密码或敏感路径。
7V6本地回归与提交执行本地后端、前端、视觉和 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|gitDONEDONEDONEserver/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 与企业微信真机复测后才能完成。