文件
hyb-oa/issues/2026-05-05_21-08-47-r92-mobile-invoice-usability.csv
T

4.9 KiB

1IDTitleDescriptionAcceptanceTest_MethodToolsDev_StatusReview1_StatusRegression_StatusFilesDependenciesNotes
2A1R92 执行合同冻结把移动端不可操作和发票上传/OCR 卡住问题收敛为本轮修复范围,不扩展到新业务模块。Issue CSV 字段完整并通过校验。命令:`python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-05_21-08-47-r92-mobile-invoice-usability.csv`。业务:确认本轮只处理手机可用性、发票上传/OCR 闭环和自动化回归。manualDONEDONEDONEissues/2026-05-05_21-08-47-r92-mobile-invoice-usability.csv[]2026-05-05:CSV 已创建并通过校验;回滚路径:删除本轮 CSV;不影响业务代码。
3A2修复 OCR provider 与二进制写库问题OCR 作业使用当前配置 provider,mock OCR 不把 PDF 二进制原文写入 JSON,避免上传后长期 pending 或失败。PDF/图片上传后 OCR job 可把 mock 结果稳定写库;ocr_provider 与运行配置一致;失败能进入明确 ocr_failed。命令:`cd server && npm run prisma:validate && npm test -- tests/unit/jobs/ocrJob.test.js tests/unit/routes/invoicePool.upload.test.js`。业务:上传现有发票 PDF 后状态从 pending_ocr 进入 available 或明确失败。official-sdk|nodeDONEDONEDONEserver/prisma/schema.prisma|server/prisma/migrations/20260505211000_r92_ocr_provider_mock/migration.sql|server/src/jobs/ocrJob.js|server/src/services/ocr/mock.js|server/src/routes/invoicePool.js|server/tests/unit/jobs/ocrJob.test.js|server/tests/unit/routes/invoicePool.upload.test.js["A1"]2026-05-05:`prisma validate` 通过,OCR/upload 单测 5 passed;涉及 OCR 任务状态和 Prisma enum 增量迁移;回滚路径:代码恢复后不再写 mock,PostgreSQL enum 新增值保留但不影响旧逻辑;必要时从发布前备份恢复数据库。
4A3发票上传状态闭环与失败反馈上传后列表/详情主动刷新 pending_ocr 状态,ocr_failed 明确提示原因并提供重试或人工修正入口。用户不会长期只看到上传中或 OCR 处理中;失败原因可见;重试入口可达。命令:`cd client && npm run typecheck && npm run build`;Playwright 手机视口验证上传后 pending/available/ocr_failed 文案与按钮可见。playwright|typescriptDONEDONEDONEclient/src/pages/InvoicePoolPage.tsx|client/src/pages/invoice-pool/InvoiceDetailPanel.tsx|client/src/pages/invoice-pool/InvoiceListCard.tsx|client/src/lib/invoiceOcr.ts["A2"]2026-05-05:typecheck/build 通过,R92 Playwright 手机回归 3 passed;回滚路径:恢复前端轮询和提示改动。
5A4支持批量上传发票手机上传、票据池上传、报销详情上传支持一次选择多张,按文件展示逐项进度和失败项。用户可一次选择多张图片/PDF;成功/失败逐项反馈;失败不阻塞其他文件。命令:`cd client && npm run typecheck && npm run build`;Playwright 验证多文件选择后逐项上传状态。playwright|typescriptDONEDONEDONEclient/src/api/invoicePool.ts|client/src/pages/MobileCapturePage.tsx|client/src/pages/invoice-pool/InvoiceUploadCard.tsx|client/src/pages/InvoicePoolPage.tsx|client/src/pages/ReimbursementDetailPage.tsx["A3"]2026-05-05:票据中心和手机上传页批量上传 Playwright 通过;优先顺序上传,避免并发压垮 OCR;回滚路径:恢复单文件上传逻辑。
6A5手机报销列表改为卡片式可操作小屏下报销列表不再使用横向表格,草稿/驳回单直接显示继续编辑按钮。390px 手机视口下无横向不可达操作;草稿可直接进入详情继续编辑;列表文字不截断关键操作。命令:`cd client && npm run typecheck && npm run build`;Playwright 打开 `/reimbursements?status=draft&scope=own` 验证 continue/edit 控件在 viewport 内。playwright|typescriptDONEDONEDONEclient/src/pages/ReimbursementsPage.tsx|client/src/components/patterns/ListWorkspace.tsx["A1"]2026-05-05:R92 Playwright 验证 390px 手机视口下继续编辑入口在 viewport 内;回滚路径:恢复桌面表格渲染。
7A6移动端 Playwright 回归与中文提交用手机视口覆盖报销草稿、票据上传、OCR 状态、票据池详情等路径,修复通过后分批中文提交。Playwright 产物保存在 output/playwright;本地构建和后端相关测试通过;commit message 中文并引用 R92 Issue ID。命令:`cd client && npm run test:e2e -- tests/e2e/r92-mobile-invoice-usability.spec.ts --workers=1 --reporter=list`;补充 CLI 截图审查;`git status --short`。playwright|git|manualDONEDONEDONEclient/tests/e2e|output/playwright|N/A["A2","A3","A4","A5"]2026-05-05:R92 Playwright 手机回归 3 passed;typecheck/build 和后端窄回归通过;输出产物未纳入 git。