文件
hyb-oa/issues/2026-04-07_r53-erp-integration-dashboard.csv
wangsli 7cc6dc3397 R53 A1-A6:ERP 集成运维可视化与业务同步状态接入
- ErpIntegrationPage Tab 化:主数据同步 / Outbox 队列管理 / ID 映射查看器
- Outbox 分页查询、详情、重试与统计端点
- IntegrationBinding 分页查询、routePath 推导与采购/资产深链
- 报销/采购/资产详情区接入 ERP 同步状态卡片
- 单测覆盖 Outbox 与 Binding 端点
2026-04-07 10:33:58 +08:00

9.0 KiB

1IDTitleDescriptionAcceptanceTest_MethodToolsDev_StatusReview1_StatusRegression_StatusFilesDependenciesNotes
2A1R53 执行合同建档与范围冻结创建并校验 R53 ERP 集成运维可视化与业务同步状态接入执行合同 CSV,冻结范围仅包含 ERP 集成页 Tab 化、Outbox 队列管理、IntegrationBinding 查看器、报销/采购/资产页 ERP 同步状态卡片统一;明确本轮不新增 Prisma 迁移、不修改 erp.js/dispatcher.js/outbox.js、不接真实 ERP 端点。issues/2026-04-07_r53-erp-integration-dashboard.csv 列完整、Dependencies 为 JSON 数组字符串、Test_Method 可复现;范围仅覆盖 R53 A1-A6,不混入差旅 ERP 新页面、真实 ERP Provider 接入或 ERP 核心派发逻辑改造。命令:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-04-07_r53-erp-integration-dashboard.csv。检查:1) 对照 AGENTS.md 与 issues/README.md 确认 12 列完整;2) A2-A6 依赖链符合 backend/frontend→reviewer→qa 收口;3) 方案明确采购/资产复用现有页面并采用 ?id= 深链,不新增详情页。manualDONEDONEDONEissues/2026-04-07_r53-erp-integration-dashboard.csv[]回滚路径:删除本次 CSV 不影响业务。2026-04-07:Issue CSV 已创建并通过 validate_issues_csv.py 校验,范围与依赖已冻结。
3A2Outbox 队列后端端点、前端 Tab 与单测在 integrations.js 新增 Outbox 分页、详情、统计与重试端点,并在 ERP 集成页新增 Outbox 队列 Tab,支持筛选、分页、详情弹窗和失败/死信重试。GET /api/integrations/outbox 支持 page/pageSize/status/event_type;GET /api/integrations/outbox/:id 返回完整 payload;GET /api/integrations/outbox/stats 返回五种状态计数;POST /api/integrations/outbox/:id/retry 仅允许 failed/dead_letter 重置为 pending 并写审计;前端 Tab 支持筛选、详情和重试,成功后刷新列表与统计。命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && npx prisma validate && node --check src/routes/integrations.js && npm test -- server/tests/unit/routes/integrations.outbox.test.js && cd ../client && npm run typecheck && npm run build。业务:1) ERP 页 Outbox Tab 支持分页、状态筛选、事件类型筛选;2) failed/dead_letter 行可重试;3) 非法状态重试返回 409;4) 详情弹窗仅在 integration.manage 下可见并展示完整 payload JSON。manualDONEDONEDONEserver/src/routes/integrations.js|server/tests/unit/routes/integrations.outbox.test.js|client/src/api/integrations.ts|client/src/pages/ErpIntegrationPage.tsx["A1"]回滚路径:移除 Outbox 运维端点和前端 Tab,恢复 ERP 集成页仅主数据同步视图。2026-04-07:Outbox 分页/详情/统计/重试端点与 ERP 页 Outbox Tab 已完成,prisma validate、node --check、integrations.outbox.test.js、client typecheck/build 通过。
4A3IntegrationBinding 查看器与采购/资产深链在 integrations.js 新增 Binding 分页查询端点和 routePath 推导,在 ERP 集成页新增 ID 映射 Tab,并为采购页、资产页补 ?id= 深链选中能力。GET /api/integrations/bindings 支持 page/pageSize/provider/entity_type,返回需求字段与 routePath;routePath 可将报销、采购、资产相关绑定跳转到现有业务页并选中目标记录;ERP 集成页 ID 映射 Tab 支持 provider/entity_type 筛选,local_id 在 routePath 存在时可点击。命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/routes/integrations.js && npm test -- server/tests/unit/routes/integrations.bindings.test.js && cd ../client && npm run typecheck && npm run build。业务:1) 绑定列表可分页与筛选;2) reimbursement_journal / purchase_request_* / purchase_order_* / asset_erp_card 可正确跳转;3) PurchaseRequestsPage 与 AssetRegistryPage 支持 ?id= 深链选中且不回归原有首项默认行为。manualDONEDONEDONEserver/src/routes/integrations.js|server/tests/unit/routes/integrations.bindings.test.js|client/src/api/integrations.ts|client/src/pages/ErpIntegrationPage.tsx|client/src/pages/PurchaseRequestsPage.tsx|client/src/pages/AssetRegistryPage.tsx["A1"]回滚路径:移除 Binding 查询端点和 ID 映射 Tab,撤销采购/资产 ?id= 深链选中能力。2026-04-07:Binding 查询、routePath 推导、采购/资产 ?id= 深链选中已完成,integrations.bindings.test.js、client typecheck/build 通过。
5A4报销、采购、资产详情区 ERP 同步状态卡片统一在报销详情页、采购列表详情区、资产列表详情区统一接入 SectionPanel 版 ERP 同步状态卡片,复用现有 preview/track/requeue/export API,不新增业务页面。ReimbursementDetailPage 仅 integration.manage 用户可见 ERP 同步状态卡片,未 paid 时不触发 preview 请求并显示禁用说明,paid 时可预览凭证并导出到 ERP;PurchaseRequestsPage 与 AssetRegistryPage 仅 integration.manage 用户触发 track 查询并渲染 ERP 同步状态卡片,保留现有三阶段或单阶段动作逻辑。命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd client && npm run typecheck && npm run build。业务:1) 报销详情页已付款单据可看到状态摘要、最后同步时间、错误摘要、预览和导出入口;2) 未付款单据不误发 ERP preview 请求;3) 采购页和资产页无 integration.manage 权限用户不再触发 ERP track 请求;4) 有权限用户可继续补发/重试。manualDONEDONEDONEclient/src/pages/ReimbursementDetailPage.tsx|client/src/pages/PurchaseRequestsPage.tsx|client/src/pages/AssetRegistryPage.tsx["A1"]回滚路径:恢复三处页面原 ERP 区块形态与查询启用条件。2026-04-07:三处业务页 ERP 同步状态卡片已统一为 SectionPanel 形态并完成权限收口,client typecheck/build 通过。
6A5R53 reviewer 权限与运维边界复核按 reviewer 清单复核 R53 的权限模型、状态流和敏感信息暴露边界,重点检查 Outbox retry 限制、详情 payload 暴露范围和无权限用户页面副作用。review 结论覆盖 integration.manage 权限、Outbox retry 只允许 failed/dead_letter→pending、列表摘要不回传完整 payload、业务页 ERP 卡片仅对有权限用户渲染且无额外请求、副作用回滚路径仅需代码回退;发现的问题已修复或在 Notes 留痕。检查:1) Outbox/Binding 新端点是否统一使用 integration.manage;2) retry 是否未允许 processing/succeeded 跳转;3) Outbox 列表 payloadSummary 是否只含摘要字段;4) 报销/采购/资产页无 integration.manage 时是否不触发 ERP 查询;5) 无 Prisma 迁移,回滚仅需代码回退。若发现问题,修复后重跑相关单测与前端构建。manualDONEDONEDONEissues/2026-04-07_r53-erp-integration-dashboard.csv|server/src/routes/integrations.js|client/src/pages/ErpIntegrationPage.tsx|client/src/pages/ReimbursementDetailPage.tsx|client/src/pages/PurchaseRequestsPage.tsx|client/src/pages/AssetRegistryPage.tsx["A2","A3","A4"]回滚路径:若 reviewer 发现权限或敏感信息问题,先下线对应入口,再回退相关代码。2026-04-07:已完成 reviewer 风格自检,确认 Outbox/Binding 新端点统一使用 integration.manage,retry 仅允许 failed/dead_letter,业务页无权限时不触发 ERP 查询。
7A6QA、状态回填与提交收口执行 R53 post-check 与业务回归,回填 CSV 状态并完成提交收口,确保 ERP 集成页新能力和业务页 ERP 卡片不回归。后端与前端校验全部通过;Outbox Tab、ID 映射 Tab、报销/采购/资产 ERP 卡片、采购/资产 ?id= 深链回归完成;issues/2026-04-07_r53-erp-integration-dashboard.csv 的 Dev_Status、Review1_Status、Regression_Status 按测试结果回填。命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && npx prisma validate && node --check src/routes/integrations.js && npm test -- server/tests/unit/routes/integrations.outbox.test.js server/tests/unit/routes/integrations.bindings.test.js && cd ../client && npm run typecheck && npm run build。业务:1) /system/integrations/erp 可在主数据同步、Outbox 队列、ID 映射三个 Tab 间切换;2) Outbox Tab 支持详情和重试;3) ID 映射可跳转到报销、采购、资产目标记录;4) 三个业务页的 ERP 同步状态卡片和权限收口正常。manualDONEDONEDONEissues/2026-04-07_r53-erp-integration-dashboard.csv|server/src/routes/integrations.js|client/src/api/integrations.ts|client/src/pages/ErpIntegrationPage.tsx|client/src/pages/ReimbursementDetailPage.tsx|client/src/pages/PurchaseRequestsPage.tsx|client/src/pages/AssetRegistryPage.tsx["A5"]回滚路径:若 QA 发现关键回归,暂停提交并回退对应代码变更。2026-04-07:本地 post-check、git diff --check、两组后端单测、client typecheck/build 通过,R53 状态已回填。