文件
hyb-oa/.trellis/tasks/09-04-approval-return-reject-actions/implement.md
T

4.4 KiB

实施计划:审批退回驳回语义与动作布局

实施顺序

  1. 为 listAllowedActionsForTask 增加实体动作矩阵,报销不再宣告 reject,其他四类保持现状。
  2. 更新服务端聚焦测试,覆盖五类实体的正向与负向 allowedActions,并保留 reject/return endpoint 的兼容测试。
  3. 收敛 ReimbursementApprovalAdapter 的 PC 动作组:通过与退回修改同组,删除报销可见驳回入口,转审不动。
  4. 收敛移动报销 sticky action bar:退回修改与通过并列;退回意见、引用清单和确认仍渐进展开;删除离线时强制渲染驳回的旧分支。
  5. 更新报销 PC/移动 E2E fixtures 和断言:无驳回、动作同组、退回展开、fail-closed、离线禁用、历史 rejected 兼容。
  6. 回归通用审批页的请假、补卡、采购、差旅动作集合与确认流程,确认共享组件 DOM 未漂移。
  7. 仅在稳定合同确有变化时更新 docs/需求-统一审批中心规约.md 与 .trellis/spec/hyb-oa/approval-workflow.md,明确报销用“退回修改”、其他实体按后果保留驳回。

风险文件

  • server/src/routes/workflow.js:共享工作流动作投影,必须覆盖五类实体。
  • client/src/pages/reimbursement-workspace/ReimbursementApprovalAdapter.tsx:PC/移动和离线分支集中,不能误删 return 引用能力或 fail-closed。
  • client/src/pages/MobileApprovalsPage.tsx:通用移动审批回归面,原则上不改。
  • client/src/components/patterns/BusinessDetailTemplate.tsx:共享动作面板,原则上不改。
  • client/src/lib/workflowActionConfirm.ts:通用后果文案,原则上不改;报销仅不再进入 reject 分支。

验证命令

cd server && npm run prisma:validate
cd server && node --check src/routes/workflow.js
cd server && npm test -- tests/unit/routes/workflow.permissions.test.js tests/unit/routes/workflow.batch.test.js tests/unit/routes/workflow.travel.test.js
cd server && npm test -- tests/unit/routes/reimbursements.detail.test.js tests/unit/routes/reimbursements.invoice-item-link.test.js
cd client && npm run build
cd client && npx playwright test tests/e2e/reimbursement-content-consistency.spec.ts --workers=1 --reporter=list
cd client && npx playwright test tests/e2e/workflow-action-confirm-ui.spec.ts --workers=1 --reporter=list
cd client && npx playwright test tests/e2e/mobile-approvals-offline.spec.ts --grep '报销证据不进入 IndexedDB' --workers=1 --reporter=list
node scripts/qa/check-ui-design-rules.mjs --strict
node scripts/qa/check-ui-design-rules.mjs --self-test
node scripts/qa/check-process-contract.mjs --baseline --json
node scripts/qa/audit-docs.mjs --check-registry
node scripts/qa/check-trellis-governance.mjs
python3 ./.trellis/scripts/task.py validate 09-04-approval-return-reject-actions
git diff --check

验证结果

  • Prisma schema 与 workflow.js 语法检查通过。
  • 服务端动作矩阵、旧 reject 兼容及四类非报销回归共 24/24 通过;历史报销详情与 rejected 可维护证据回归 48/48 通过。
  • 前端 typecheck、生产构建通过;报销静态契约 9/9、审批动作浏览器回归 11/11 通过。
  • 移动报销离线专项未进入断言:本机缺 Playwright WebKit executable;保留为环境边界,不记为产品失败,也未安装新浏览器或更改测试配置。
  • UI strict 扫描 155 文件、0 findings;self-test PASS。
  • process contract、Trellis governance、task validate 与 git diff --check 通过。
  • docs registry 审计为 0 error / 1 warning;warning 为仓库既有 22 个未注册 docs 文件,本任务未新增该类文件。

人工验收

  1. PC 报销审批右栏:通过与退回修改同组、无驳回、转审位置不变;1280px 无溢出。
  2. 移动报销审批:底部直接显示退回修改与通过;点击退回后才展开意见与引用清单。
  3. 任一报销 fail-closed fixture:原因紧邻动作,所有可见动作均禁用。
  4. 历史 rejected 报销仍显示已驳回、仍可修改重提;历史 timeline/打印无丢失。
  5. 请假、补卡、采购、差旅各打开一个:动作数量、文案和确认流程无变化。

提交与部署边界

  • commit 使用中文并引用 09-04-approval-return-reject-actions。
  • 实施后先做只读 review;用户批准后才能提交。
  • push、生产部署和生产数据检查均需分别获得明确授权。
  • 无 migration/schema/seed/flag/生产数据写入;回滚到上一构建即可。