diff --git a/changelogs/2026-04/2026-04-15_product-v2_design-revamp-8items.md b/changelogs/2026-04/2026-04-15_product-v2_design-revamp-8items.md new file mode 100644 index 0000000..3eff3a0 --- /dev/null +++ b/changelogs/2026-04/2026-04-15_product-v2_design-revamp-8items.md @@ -0,0 +1,188 @@ +# 产品设计页面改版(8项改进) + +- **日期**: 2026-04-15 +- **服务**: hl-product-service-v2, hl-gateway +- **PR**: #602 +- **Issue**: #601 +- **类型**: feat (新功能) + +## 概述 + +产品设计页面(Step2行程/Step3路线/Step5补充)和小程序详情页的一组改进,涉及8项需求。 + +--- + +## 1. 行程节点名可自定义 + +保存行程时,`nodeName` 由前端自定义(用户可改),`resourceName` 由后端自动填充资源原名快照,互不影响。 + +**行为变更**: +- `PUT /admin/product/item/{id}/itinerary` 保存时自动通过Feign查资源名填充 `resourceName` +- 前端传什么 `nodeName` 就存什么,改名不影响资源库 + +**响应字段**: +| 字段 | 说明 | +|------|------| +| `nodeName` | 展示名称(可自定义) | +| `resourceName` | 资源原名快照(自动填充,不可改) | + +--- + +## 2. 每日行程距离计算接口 + +### 新增接口 + +``` +GET /admin/product/item/{productId}/daily-mileage +``` + +按天计算每日驾车距离(含酒店坐标),调用高德驾车路线规划API。 + +**响应示例**: +```json +{ + "code": 200, + "data": [ + {"dayNumber": 1, "mileage": 280.5}, + {"dayNumber": 2, "mileage": 195.3}, + {"dayNumber": 3, "mileage": 320.1} + ] +} +``` + +--- + +## 3. 行程线路名称 + +### GET /mp/product/{id} 新增字段 + +| 字段 | 类型 | 说明 | +|------|------|------| +| `routeName` | String | 路线名称(如"草原环线体验") | + +### PUT /admin/product/item/{id}/route(Step3保存)新增字段 + +| 字段 | 类型 | 说明 | +|------|------|------| +| `routeName` | String | 路线名称 | + +--- + +## 4. 集合地/出发地/解散地 + +### Step3保存 + 小程序详情 新增字段 + +| 字段 | 类型 | 说明 | +|------|------|------| +| `gatherPlace` | String | 集合地 | +| `departurePlace` | String | 出发地 | +| `dismissalPlace` | String | 解散地 | + +这3个字段在以下接口中均可读写: +- `PUT /admin/product/item/{id}/route`(Step3保存) +- `GET /admin/product/item/{id}`(管理端详情,在routeInfo中) +- `GET /mp/product/{id}`(小程序详情) + +--- + +## 5. 产品卖点改为选择节点 + +`quickUnderstand` 字段结构变更(后端仍为JSON存取,无接口变化): + +**旧结构**:`{text: "富文本", images: [...]}` + +**新结构**: +```json +[ + { + "nodeId": 12345, + "nodeName": "白桦林景区", + "nodeType": "SCENIC", + "image": "https://...", + "description": "走进白桦林..." + } +] +``` + +前端在Step5选择行程中的景区/游玩项目节点,按新结构传即可。后端原样存取。 + +--- + +## 6. 行程保障模板(全新CRUD) + +### 新增接口 + +| 方法 | URL | 说明 | +|------|-----|------| +| POST | `/admin/travel-guarantee-template` | 创建/更新模板 | +| DELETE | `/admin/travel-guarantee-template/{id}` | 删除模板 | +| GET | `/admin/travel-guarantee-template/list` | 全部模板列表(含禁用) | +| GET | `/admin/travel-guarantee-template/enabled` | 启用模板下拉(Step5选择用) | +| GET | `/admin/travel-guarantee-template/{id}` | 模板详情 | + +**创建/更新请求体**: +```json +{ + "templateId": null, + "name": "标准行程保障", + "items": [ + {"icon": "shield", "title": "无忧退改", "description": "出发前7天全额退款"}, + {"icon": "users", "title": "5人专属团队", "description": "定制+管家+摄影+领队+客服"}, + {"icon": "clock", "title": "24小时客服", "description": "200位真实客服即时响应"}, + {"icon": "badge", "title": "旅行社责任险100万", "description": "正规资质全程投保"}, + {"icon": "heart", "title": "全程纯玩无购物", "description": "无强制消费无隐形购物点"} + ], + "isDefault": false +} +``` + +**Step5补充信息保存** 新增字段: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `guaranteeTemplateId` | Long | 行程保障模板ID | + +**小程序详情** 新增字段: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `guaranteeItems` | Array | 行程保障项(自动解析模板内容) | + +--- + +## 7. 线路概览自动生成 + +保存行程(Step2)后,自动根据各天的景区/活动节点名称生成线路概览文本,写入 `routeDescription`。 + +**生成格式示例**: +``` +Day1 海拉尔/额尔古纳 | Day2 呼籁营地/牧云山顶 | Day3 白桦林/恩和 | Day4-5 满洲里/返程 +``` + +连续天节点相同时自动合并(如Day4-5)。 + +--- + +## 8. 评价取真实数据 + +### GET /mp/product/{id} 新增字段 + +| 字段 | 类型 | 说明 | +|------|------|------| +| `reviewSummary` | Object | 评价摘要(从评价服务实时获取) | + +`reviewSummary` 结构(由评价服务 `/internal/review/product-highlights` 返回): +```json +{ + "avgScore": 4.9, + "totalCount": 296, + "topReview": { + "content": "超赞的行程!呼籁营地安静私密...", + "nickname": "小明同学", + "reviewTime": "2026-03" + }, + "tags": ["安静私密", "孩子玩疯了", "管家贴心", "强烈推荐"] +} +``` + +评价服务不可用时该字段为null,不影响其他数据。