# 线路概览展示所需字段汇总

- **日期**: 2026-04-16
- **服务**: hl-product-service-v2
- **类型**: 前端适配说明

## 原型展示

```
线 路 概 览
草原环线体验                        ← routeName
海拉尔起止·全程约1200公里·日均不超300公里  ← 前端拼接
```

## 数据来源

| 展示内容 | 数据来源 | 接口字段 |
|---------|---------|---------|
| "草原环线体验" | 路线名称 | `routeName` (产品级) |
| "海拉尔起止" | 首天集合地 + 末天解散地 | `itinerary[0].gatherPlace.name` + `itinerary[last].dismissalPlace.name` |
| "全程约1200公里" | 总里程 | `totalMileage` (产品级) |
| "日均不超300公里" | 每日里程最大值 | `max(itinerary[].dailyMileage)` |

### 每日行程展示

```
DAY 2
海拉尔 → 呼籁营地 → 莫日格勒河 → 额尔古纳
290km · 约3.5小时
```

| 展示内容 | 数据来源 | 接口字段 |
|---------|---------|---------|
| 途经路线 | 自动生成 | `itinerary[].routePoints[].name` 用 " → " 连接 |
| "290km" | 当日里程 | `itinerary[].dailyMileage` |
| "约3.5小时" | 当日驾车时长 | `itinerary[].dailyDuration`（分钟，前端格式化） |
| 集合地 | 当日 | `itinerary[].gatherPlace` (JSON: {name,adcode,center,level}) |
| 解散地 | 当日 | `itinerary[].dismissalPlace` (JSON: {name,adcode,center,level}) |

### 时长格式化建议

`dailyDuration` 是分钟数，前端格式化示例：
- 151分钟 → "约2.5小时"
- 276分钟 → "约4.5小时"  
- 30分钟以下 → "约30分钟"

---

## 行程保障展示

原型中「行程保障」区块（无忧退改、5人专属团队、24小时客服等）的数据来源：

| 接口 | 字段 | 说明 |
|------|------|------|
| `GET /mp/product/{id}` | `guaranteeItems` | 行程保障项数组，自动解析模板 |

`guaranteeItems` 结构：
```json
[
  {"icon": "shield", "title": "无忧退改", "description": "出发前7天无条件全额退款..."},
  {"icon": "users", "title": "5人专属服务团队", "description": "定制师、房务管家..."},
  {"icon": "clock", "title": "24小时客服响应", "description": "行前、行中、行后..."},
  {"icon": "badge", "title": "旅行社责任险100万", "description": "正规旅行社资质..."},
  {"icon": "car", "title": "全程纯玩无购物", "description": "无强制消费..."}
]
```

### 前端操作流程

1. **管理端 Step5 补充信息**：选择行程保障模板（`guaranteeTemplateId`）
2. **小程序端**：从 `guaranteeItems` 直接渲染列表

### 模板管理

- 菜单：产品管理 → 行程保障
- CRUD接口：`/admin/travel-guarantee-template/**`（详见Knife4j「产品服务-模板管理」分组）

⚠️ 如果 `guaranteeItems` 为null，说明产品还没关联模板，需要在Step5中设置。

## 注意

- `gatherPlace`/`dismissalPlace` 需要重新保存行程(Step2)才有值
- `dailyMileage`/`dailyDuration` 保存行程时自动计算
- 所有数据在管理端详情和小程序端详情中均返回
