From dfa833cb34b4813032be8c5e205bf220f0489fc5 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 28 May 2026 11:45:24 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog-v2):=20#3147=20=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E6=9C=8D=E5=8A=A1=E6=A0=87=E5=87=86=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=20=E2=80=94=20=E6=A8=A1=E6=9D=BF/=E6=AF=8F=E6=97=A5=E6=8F=90?= =?UTF-8?q?=E9=86=92/=E8=AE=A2=E5=8D=95Tab=20(PR=20#3157)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Š¡æ ‡å‡†æ¨¡å—-æ¨¡æ¿æ€»åˆ™+æ¯æ—¥æé†’+订å•Tab_PR3157.md | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 changelogs-v2/2026-05/28_3147_äº§å“æœåŠ¡æ ‡å‡†æ¨¡å—-æ¨¡æ¿æ€»åˆ™+æ¯æ—¥æé†’+订å•Tab_PR3157.md diff --git a/changelogs-v2/2026-05/28_3147_äº§å“æœåŠ¡æ ‡å‡†æ¨¡å—-æ¨¡æ¿æ€»åˆ™+æ¯æ—¥æé†’+订å•Tab_PR3157.md b/changelogs-v2/2026-05/28_3147_äº§å“æœåŠ¡æ ‡å‡†æ¨¡å—-æ¨¡æ¿æ€»åˆ™+æ¯æ—¥æé†’+订å•Tab_PR3157.md new file mode 100644 index 0000000..c44d270 --- /dev/null +++ b/changelogs-v2/2026-05/28_3147_äº§å“æœåŠ¡æ ‡å‡†æ¨¡å—-æ¨¡æ¿æ€»åˆ™+æ¯æ—¥æé†’+订å•Tab_PR3157.md @@ -0,0 +1,142 @@ +# 二期 v3:产å“「æœåŠ¡æ ‡å‡†ã€æ¨¡å— — æ¨¡æ¿æ€»åˆ™(分组+æ¡ç›®) + æ¯æ—¥ç‰¹åˆ«æé†’ + è®¢å• Tab 富展示 + +> **æœåŠ¡**: hl-product-service-v2 + hl-order-service-v3 +> **PR**: #3157(+ hotfix #3163) +> **Issue**: #3147 +> **日期**: 2026-05-28 +> **å½±å“**: 🟢 新增能力,全部å‘åŽå…¼å®¹ï¼ˆæ—§è®¢å• Tab 自动é™çº§ï¼Œä¸æŠ¥é”™ï¼‰ +> **状æ€**: ✅ æµ‹è¯•æœ 9443 å…¨é“¾è·¯å®žæµ‹é€šè¿‡ï¼ˆæ¨¡æ¿ CRUD → 产å“绑定 → 创å•冻结 → è®¢å• Tab) + +--- + +## 背景 + +「出团æœåŠ¡è¯´æ˜Žä¹¦ã€éœ€è¦æ¯”åŽŸæ¥ `notice.title + 一段富文本` 更丰富的结构:**多分组**(一ã€å‡ºå›¢æ³¨æ„事项…)+ **ç¼–å·æ¡ç›®**(标题/说明/è”系人)+ **æ¯æ—¥ç‰¹åˆ«æé†’**。本期在产å“ä¾§**新建**「æœåŠ¡æ ‡å‡†ã€æ¨¡å—,创å•冻结进订å•快照,订å•/å°ç¨‹åº/PDF 读快照展示。 + +å‰ç«¯éœ€åšï¼šâ‘  模æ¿ç¼–辑器(分组/æ¡ç›®å¢žåˆ ï¼‰â‘¡ äº§å“ Step5 绑定下拉 â‘¢ 行程 Step2 æ¯æ—¥ã€Œç‰¹åˆ«æé†’ã€å½•å…¥ â‘£ 订å•/å°ç¨‹åºæœåŠ¡æ ‡å‡† Tab 富展示 ⑤ 行程å•/ç­¾å• PDF。 + +--- + +## 一ã€äº§å“侧:æœåŠ¡æ ‡å‡†æ¨¡æ¿ç®¡ç†ï¼ˆæ–°å¢ž admin 接å£ï¼‰ + +路径å‰ç¼€ `/admin/product/service-standard-template`(已被现有 `/admin/product/**` 网关路由覆盖)。 + +### 1. 分页 +``` +GET /admin/product/service-standard-template/page?pageNo=1&pageSize=10&name=&status= +``` +返回 `PageResult`(`data.records[]` + `data.total`),按 sortOrder/id å‡åºã€‚ + +### 2. 详情 +``` +GET /admin/product/service-standard-template/{id} +``` + +### 3. ä¿å­˜ï¼ˆid 空=新增 / éžç©º=修改) +``` +POST /admin/product/service-standard-template +``` +请求体: +```jsonc +{ + "id": null, // 修改时传(字符串é€ä¼ é›ªèбID) + "name": "è‰åŽŸå‡ºå›¢æœåŠ¡è¯´æ˜Žä¹¦", // å¿…å¡« + "intro": "出团å‰è¯·ä»”细阅读…", // 顶部æç¤ºè¯­(截图绿色æç¤ºæ¡) + "applicableScope": "全部跟团客户", // 适用对象 + "sections": [ // å¿…å¡«:分组+æ¡ç›® + { + "title": "一ã€å‡ºè¡ŒæœåŠ¡", // 分组标题(å¿…å¡«) + "items": [ + { "title": "接é€ç«™æœåŠ¡", "content": "æä¾›æœºåœº/车站å…费接é€", "contact": "å®¢æœ 400-xxx" } + ] + } + ], + "isDefault": false, + "sortOrder": 0, + "status": "ENABLED" // 留空默认 ENABLEDï¼›ENABLED=å¯ç”¨/DISABLED=åœç”¨ +} +``` +返回 `data` = 模æ¿ID(**字符串é€ä¼ ï¼Œå‹¿ Number()**)。 + +### 4. 删除(软删,已绑定产å“ä¸å—å½±å“) +``` +DELETE /admin/product/service-standard-template/{id} +``` + +### 5. 下拉(Step5 绑定用,仅å¯ç”¨é¡¹ï¼Œä¸åˆ†é¡µï¼‰ +``` +GET /admin/product/service-standard-template/enabled +``` +返回 `data: [ { "id": "...", "name": "è‰åŽŸå‡ºå›¢æœåŠ¡è¯´æ˜Žä¹¦" } ]`ï¼ˆåª id+name)。 + +--- + +## 二ã€äº§å“ Step5 补充信æ¯ï¼šç»‘定模æ¿ï¼ˆçº¯å¼•用) + +`PUT /admin/product/item/{id}/supplement` 请求体**新增**字段: +```jsonc +{ "serviceStandardTemplateId": 2059839696602615809 } // 字符串é€ä¼ ï¼›è§£ç»‘ä¼  null +``` +ä¿å­˜åŽäº§å“详情回显该 ID;用上é¢çš„ `/enabled` 下拉选。 + +> **ç§äººå®šåˆ¶ä¾‹å¤–**:ç§äººå®šåˆ¶(CUSTOM)产å“「完æˆè®¾è®¡ã€æ—¶ä¼šæŠŠå½“时模æ¿å†…容**冻结快照**进产å“ï¼Œä¹‹åŽæ”¹æ¨¡æ¿ä¸å½±å“该产å“;核心/å°è’™é©¬ä¸ºçº¯å¼•用(改模æ¿åŽç»­æ–°è®¢å•实时跟éšï¼‰ã€‚å‰ç«¯æ— éœ€ç‰¹æ®Šå¤„ç†ï¼ŒçŸ¥æ‚‰å³å¯ã€‚ + +--- + +## 三ã€äº§å“ Step2 è¡Œç¨‹ï¼šæ¯æ—¥ã€Œç‰¹åˆ«æé†’〠+ +`PUT /admin/product/item/{id}/itinerary` çš„æ¯ä¸ª `DayItem` **新增**字段: +```jsonc +{ + "dayNumber": 1, + "serviceTips": [ // 本日特别æé†’(å¯ç©º) + { "title": "本日特别æé†’", "content": "今日海拔较高,备好抗高åè¯" } + ] +} +``` +ä¿å­˜åŽè¡Œç¨‹å›žæ˜¾è¯¥å¤©çš„ `serviceTips`。 + +--- + +## å››ã€è®¢å•详情「æœåŠ¡æ ‡å‡†ã€Tab å“应å‡çº§ + +``` +GET /v3/admin/order/{id}/service-standard +``` +(å°ç¨‹åºç«¯ç» hl-mp BFF èšåˆï¼Œç»“构一致) + +`data` **新增** `serviceStandard` + `dayTips` 两å—ï¼›ä¿ç•™åŽŸ `itinerary`ã€`refundPolicy`;原 `notice` 字段**废弃**ï¼ˆæ’ null,请改用 `serviceStandard`): +```jsonc +{ + "itinerary": ["Day1 …","Day2 …"], // ä¿ç•™:行程天纲 + "notice": null, // 废弃,å‹¿å†ç”¨ + "refundPolicy": { /* 原结构ä¿ç•™ */ }, + "serviceStandard": { // æ–°:æœåŠ¡æ ‡å‡†æ€»åˆ™ + "intro": "出团å‰è¯·ä»”细阅读…", + "applicableScope": "全部跟团客户", + "sections": [ + { "title": "一ã€å‡ºè¡ŒæœåŠ¡", + "items": [ { "title": "接é€ç«™æœåŠ¡", "content": "…", "contact": "å®¢æœ 400-xxx" } ] } + ] + }, + "dayTips": [ // æ–°:æ¯æ—¥ç‰¹åˆ«æé†’(按天) + { "dayNumber": 1, "dayTitle": "Day1 抵达-接机", + "tips": [ { "title": "本日特别æé†’", "content": "今日海拔较高…" } ] } + ] +} +``` + +### å‘åŽå…¼å®¹ï¼ˆé‡è¦ï¼‰ +- **本次å‡çº§å‰å·²ä¸‹å•的旧订å•**:`serviceStandard` 返回 `null`ã€`dayTips` 返回 `[]`(快照里没有新结构,已实测é™çº§ä¸æŠ¥é”™ï¼‰ã€‚å‰ç«¯æ¸²æŸ“需判空:`serviceStandard` 为 null æ—¶ä¸ç”»æ€»åˆ™åŒºï¼Œ`dayTips` 为空时ä¸ç”»æ¯æ—¥æé†’。 +- å‡çº§åŽã€ä¸”产å“已绑模æ¿/é…æ¯æ—¥æé†’çš„**新订å•**æ‰æœ‰å®Œæ•´æ•°æ®ï¼ˆå·²å®žæµ‹ï¼‰ã€‚ + +--- + +## 字段约定 +- 所有雪花 IDï¼ˆæ¨¡æ¿ idã€serviceStandardTemplateId)**按字符串é€ä¼ ï¼Œå‹¿ Number()**。 +- `sections` / `serviceTips` / `tips` 为空时分别返回 `[]` 或字段缺çœï¼Œæ¸²æŸ“需判空。 + +--- + +## éªŒè¯ +æµ‹è¯•æœ 9443 已用真 admin token å…¨é“¾è·¯å®žæµ‹ï¼šæ¨¡æ¿ CRUD/下拉 → 产å“绑定 → è¡Œç¨‹æ¯æ—¥æé†’ → 创å•冻结快照 → è®¢å• Tab 返回结构化 serviceStandard + dayTipsï¼ˆä¸­æ–‡éž null)→ 旧订å•é™çº§ä¸æŠ¥é”™ã€‚