Date: 2026-08-30
Demo: docs/fresh-mint-crm-contract-detail-plan-tab-demo.html
Primary UI: ContractDetailDialog.vue(合同管理列表打开详情的主路径)
approved,自动开始执行(executing)。关联计划: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 一致优先并入遗留合同)。
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 跳过)。flattenPlanListRows + span-method + PlPlanViewDialog;不复刻整页工具栏/筛选。#059669。detail.vue 本期一并补齐,避免双入口不一致。