# TripDetailVO 扩出发准备清单字段 — 2026-04-20

> **服务** hl-order-service-v2（端口 8094）· **类型** feat · **关联** Issue #1024 / PR #1025
> **前端调用路径**: 网关(8080) → hl-mp-service(8085) → hl-order-service-v2(8094)
> **前端实际请求前缀**: `GET /mp/trip/{orderId}`（**无新接口**，扩字段）

---

## 一、能力概述

补齐原型 **ew2Kk 出发准备页的 prepSec 清单区块**。其余数据（倒计时 / 带队团队 / 行程概览 / 合同保险状态）已经在 `TripDetailVO` 中。

**⚠️ 无新接口**：扩现有 `GET /mp/trip/{orderId}` 的返回体，在 `TripDetailVO` 加一个字段 `preTripChecklist`。

| 触发条件 | 行为 |
| --- | --- |
| `tripPhase == "BEFORE_START"` | `preTripChecklist` 填充 6 项清单 |
| `tripPhase == "IN_PROGRESS"` | `preTripChecklist` 为 `null` |
| `tripPhase == "ENDED"` | `preTripChecklist` 为 `null` |

---

## 二、接口清单

**无新接口**。使用现有：

| 方法 | 路径 | 变化 |
| --- | --- | --- |
| GET | `/mp/trip/{orderId}` | 返回体新增 `preTripChecklist` 字段 |

---

## 三、新增字段结构（`PreTripChecklistVO`）

```jsonc
{
  "preTripChecklist": {
    "completedCount": 3,     // 已完成项数
    "totalCount": 6,         // 总项数
    "items": [
      {
        "key": "CONTRACT_SIGN",        // 项 key
        "title": "签署旅行合同",        // 标题
        "subtitle": "合同已准备,请尽快签署",  // 副标题
        "status": "WARNING",            // DONE / PENDING / WARNING
        "statusLabel": "紧急",
        "actionType": "NAVIGATE",       // NAVIGATE / CONFIRM / CONTACT_CS / null
        "actionPayload": {              // 前端按 actionType 解析
          "pageKey": "contract_sign",
          "orderId": "1000",
          "contractId": "9001"
        }
      },
      {
        "key": "DEPOSIT_PAID",
        "title": "订金已支付",
        "subtitle": "¥2000 已支付",
        "status": "DONE",
        "statusLabel": "已完成",
        "actionType": null,
        "actionPayload": null
      }
      // ...共 6 项
    ]
  }
}
```

---

## 四、清单 6 项 + 状态规则

| Key | 标题 | DONE 条件 | WARNING 条件 | 其他→PENDING |
| --- | --- | --- | --- | --- |
| `DEPOSIT_PAID` | 订金/全款支付 | `paidAmount >= 应付`（FULL→totalPrice / DEPOSIT→depositAmount） | — | 金额不足 |
| `TRAVELER_INFO` | 出行人完整度 | `validateTravelers.isComplete=true` | 有出行人信息缺失 | 人数不够 |
| `ARRIVAL_INFO` | 接送机信息 | arrivals 和 departures 都有 | — | 缺任一方向 |
| `CONTRACT_SIGN` | 合同签署 | contract.status=`SIGNED` | `PREPARING` / `UNSIGNED` | 无合同 |
| `INSURANCE` | 保险承保 | insurance.status=`INSURED` | `FAILED` | `PENDING` / 无保险 |
| `CHECKLIST_CONFIRMED` | 出行清单确认 | `OrderInfo.checklistConfirmed=true` | — | 未确认 |

### actionType 语义

| 值 | 前端应做 |
| --- | --- |
| `NAVIGATE` | 跳转小程序页面（按 `actionPayload.pageKey` 映射） |
| `CONFIRM` | 弹确认对话框（如"确认出行清单"） |
| `CONTACT_CS` | 打开客服会话 |
| `null` | 不可操作（DONE 状态） |

### pageKey 映射建议（前端维护）

| pageKey | 小程序路径 |
| --- | --- |
| `order_pay` | 支付页 |
| `traveler_list` | 出行人列表 |
| `arrival_form` | 到达信息表单 |
| `contract_sign` | 合同签署 |
| `checklist_confirm` | 清单确认 |

### 排序规则

后端已按 **WARNING > PENDING > DONE** 排序（紧急项靠前），前端直接渲染即可。

---

## 五、示例

### BEFORE_START 阶段完整响应（节选）

```jsonc
{
  "code": 200,
  "data": {
    "orderId": "1000",
    "tripPhase": "BEFORE_START",
    "countdownDays": 12,
    "departureDate": "2026-07-01",
    "productName": "草原环线体验",
    "guideName": "巴图",              // 带队团队
    "guidePhone": "138****5678",
    "itinerarySummary": [...],         // 行程概览
    "contracts": [...],
    "insurances": [...],
    "preTripChecklist": {              // ← 新增字段
      "completedCount": 3,
      "totalCount": 6,
      "items": [...]
    }
  }
}
```

### IN_PROGRESS 阶段响应

```jsonc
{
  "code": 200,
  "data": {
    "orderId": "1000",
    "tripPhase": "IN_PROGRESS",
    "todayDayNumber": 3,
    "todayTitle": "莫日格勒河 → 额尔古纳",
    "preTripChecklist": null          // ← 非 BEFORE_START 阶段为 null
  }
}
```

---

## 六、关联

- Issue: [wx/HL#1024](https://git.1814.love:8443/wx/HL/issues/1024)
- PR: [wx/HL#1025](https://git.1814.love:8443/wx/HL/pulls/1025)（已合并到 dev）
