2026-08-30-crm-contract-plan-linkage-design.md 2.1 KB

合同详情 · 运输计划联动 Design

Date: 2026-08-30
Demo: docs/fresh-mint-crm-contract-detail-plan-tab-demo.html
Primary UI: ContractDetailDialog.vue(合同管理列表打开详情的主路径)

Goals

  1. 合同详情新增 Tab「运输计划」:列表样式对齐运输计划页(合并单元格),点击计划编号打开只读详情。
  2. 「合同信息」产品明细在「税费(元)」后新增三列(绿色字):已归档数量、未归档已安排、已安排合计。
  3. 安排运输时,若关联合同状态为 approved,自动开始执行(executing)。

Quantity rules

关联计划:pl_plan_contract.contract_id = :cid ∪ 遗留 pl_plan.contract_id;排除 follow_status=cancelled、del_flag=1。

按该合同挂接的停靠段汇总 plan_qty(按 product_id 对齐合同产品行):

字段 条件
archivedQty archive_status = archived
arrangedUnarchivedQty transport_status = arranged(或 follow 为 arranged/completed)且 archive_status ≠ archived,且非 wait_notice/pending_arrange/cancelled
arrangedTotalQty archivedQty + arrangedUnarchivedQty

无 stop_id 的旧关联:取该计划全部装/送货段产品 plan_qty(与计数 API 一致优先并入遗留合同)。

APIs

  • GET /transport/plan/by-contract/{contractId}:分页列表,响应用现有计划详情结构(含 load/deliveries),便于复用 flattenPlanListRows。
  • 合同详情 products[] 增加三数量字段,或独立 GET .../contract-product-plan-qty?contractId=;优先嵌在合同详情以免二次请求。
  • POST .../arrange/{plan_id} 成功后:对关联且 status=approved 的合同调用内部 start_execute(已 executing 跳过)。

UI

  • Tab 复用 flattenPlanListRows + span-method + PlPlanViewDialog;不复刻整页工具栏/筛选。
  • 三列样式:表头浅绿底、字色 #059669。
  • 全页 detail.vue 本期一并补齐,避免双入口不一致。

Out of scope

  • 合同侧编辑计划、从合同直接新增计划。
  • 改动运输计划列表页本身。