4.8 KiB
4.8 KiB
采购与资产详情独立路由化
Goal
把采购、资产两个结构同构的业务台账从“列表页用 ?id= 填充已有详情态”迁移为“纯列表查找、独立详情处理”,让详情可深链、浏览器返回可预测,并在切换对象时保留未保存保护。
Confirmed Facts
- 报销、项目和审批任务已有独立详情路由,可作为仓库内成熟模式。
- 采购、资产都已经具有完整详情/编辑状态,并以列表页
?id=、本地 selected ID 和 searchParams 双向同步驱动。 - 采购、资产未发现首屏自动选中第一条记录;本任务是搬迁既有详情态,不新增业务信息结构。
- 两页都已使用
useUnsavedChangesGuard,路由迁移必须保留 dirty-form 取消与确认语义。 - 现有采购/资产 E2E 和人工 witness 多处直接访问
?id=,需要兼容重定向并同步结构化路由证据。 - 合同没有 selected ID 或详情态,属于从零建设详情页;已拆到
08-05-contract-detail-workspace。 - 完整差旅已冻结,
/travel-requests与差旅报销指南无关;其自动选中缺陷归入低风险子任务,不做路由化。 - 付款批次和请假继续保持既有页面边界,不纳入本任务。
Scope
- 仅迁移采购、资产两个已有
?id=详情态台账到独立实体详情路由。 - 包含列表纯化、详情页拆分、旧链接兼容、关联入口更新、权限 guard、返回/深链和 dirty-form 保护。
- 不新建合同详情信息结构,不恢复差旅,不改付款批次或请假页面。
Requirements
- R1:
/purchase-requests与/assets只负责标题、创建入口、常用筛选、列表/卡片和进入详情,不渲染记录详情工作区。 - R2:采购与资产分别使用稳定的实体 ID 详情路由,支持直接打开、刷新、复制链接和浏览器返回;页面元数据识别详情层级。
- R3:只搬迁现有详情、编辑、附件、审计、状态动作和权限显隐,不新增合同式信息结构或改变业务能力。
- R4:从列表进入详情、从项目/通知/搜索等关联入口进入详情和返回列表时保留必要来源;浏览器后退不得直接跳出业务模块。
- R5:路由离开、返回或切换对象存在未保存修改时,必须沿用现有 dirty-form 保护;取消后保留原记录和输入。
- R6:旧
/purchase-requests?id=<id>、/assets?id=<id>深链在过渡期重定向到新详情路由,并保留无关筛选参数;无效/无权限 ID 使用自然中文错误与安全返回入口。 - R7:权限 guard 与服务端数据范围保持不变;不得因拆分路由扩大可访问范围。
- R8:更新列表行、项目关联、全局搜索、审批/通知跳转和现有测试中的采购/资产详情链接,不继续产生新的
?id=链接。 - R9:合同、差旅、付款、请假明确排除,不做顺手重构。
Acceptance Criteria
- 采购和资产台账首屏均为纯列表,未选择记录时不渲染详情工作区。
- 两个模块都有可刷新、可复制、可直接访问的详情 URL,并具有正确标题、权限 guard 和安全错误态。
- 列表筛选来源可在详情返回后合理恢复,浏览器前进/后退行为可预测。
- 旧
?id=链接兼容重定向到对应新路由,不出现静默空白、错误对象或丢失无关筛选条件。 - 编辑、附件、状态动作、审计和确认能力与迁移前等价,未保存保护覆盖返回和路由离开。
- 项目关联、搜索、通知/审批等仓库内入口不再生成新的采购/资产
?id=详情链接。 - 合同、差旅、付款和请假代码不因本任务发生功能性修改。
- 聚焦 Playwright 覆盖两个模块的列表进入、深链刷新、返回恢复、旧链兼容、无权限/不存在、dirty-form 取消与确认。
cd client && npm run typecheck && npm run build、相关现有 E2E 与 Trellis 门禁通过。
Out of Scope
- 合同详情页或合同文件能力。
- 差旅、付款批次、请假详情路由。
- 后端状态机、权限模型、数据库 schema 或真实数据迁移。
- 全站所有配置页和移动端路由重写。
- 模块冻结、一级导航调整、功能下线或视觉换肤。
Test Plan
cd client && npm run typecheck && npm run build- 聚焦 Playwright 覆盖采购/资产列表进入、详情深链刷新、旧
?id=重定向、筛选返回、无权限/不存在和 dirty-form 取消/确认。 - 更新并运行
procurement-flow.spec.ts、assets-flow.spec.ts、r103-cross-page-ui-consistency.spec.ts及受影响的关联入口用例。 - 运行
python3 ./.trellis/scripts/task.py validate 08-05-business-detail-routing、process contract、docs registry、Trellis governance 和git diff --check。