2.6 KiB
Design:审批动作面板 KISS 收敛与层叠遗留清理
1. Scope Boundary
保持页面壳、workflow API、allowedActions、权限、mutation、确认弹窗、转审入口和移动端行为不变。产品代码只允许修改报销审批 adapter、共享动作面板的最小展示插槽和旧 CSS;通用审批页不得产生产品代码 diff。
2. Action-Adjacent Blocking Notice
BusinessDetailActionPanel 增加可选的动作前展示插槽,例如 beforeActions?: ReactNode,渲染顺序为:
title/status
beforeActions(异常锚点 + 阻断原因;空则不渲染)
primary / secondary / more actions
children(点击后展开的理由或转审输入)
summary(其他业务页现有摘要)
插槽只负责布局,不读取 mode、角色、权限或 readiness。它使用既有 hasVisibleNode 逻辑,未传插槽的消费者 DOM 顺序不变。
报销 PC adapter 删除 statusSummary,使用:
beforeActions = issueAnchors + decisionBlockNotice
summary = null
children = actionError + active action editor
正常 ready 时 decisionBlockNotice=null。模型尚未形成的早退失败卡继续维持“原因 → 禁用动作”顺序。
3. Single Blocking-Reason Projection
在报销 adapter 内从既有 readiness 事实投影唯一主因:离线、金额完整性异常、快照解析失败、详情查询失败/加载中。金额继续复用 reimbursementAmountIntegrityMessage;详情查询失败使用新批准文案。
展示和 requestAction/mutation 二次拦截复用同一原因函数或值,不改变 decisionReady 条件,避免按钮说明与实际拦截漂移。
4. Budget Snapshot Compatibility
预算快照提示仍只由 snapshot?.budgetCheckStatus === "missing" 控制,不并入新的 readiness 文案投影。测试固定 missing 正例与 available/not_applicable 负例;不修改费用政策、预算或快照数据流。
5. Dead Layering Cleanup
删除 .workflow-action-panel 和完整 .workflow-action-more CSS。两者没有产品消费者,删除不会改变当前 DOM。付款进度单测和 wave3 结构测试移除旧 class 正向断言,保留对共享动作面板 lg:sticky lg:top-24 的有效合同。
不创建 Radix 菜单,不进行菜单展开测试。四类通用审批用现有合成 fixture 验证页面/动作可见和无横向溢出即可。
6. Rollout and Rollback
报销减法、邻近阻断提示、死 CSS 和测试更新作为一个候选。部署前 UI strict;部署后用公网真实 bundle + 合成 API 复核正常/失败报销和四类通用审批。失败时整体回滚到 d63ccdf,不操作数据、migration 或 flag。