From a096b3476258924a307d53f8b917ad7c138c3416 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Fri, 15 May 2026 14:41:34 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20=E6=8E=A8=E7=BF=BB=2005-14?= =?UTF-8?q?=20=E5=AD=A3=E8=8A=82=E7=AD=9B=E9=80=89,=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=85=A8=E9=87=8F=E8=B5=84=E6=BA=90=20+=20?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E5=8F=AA=E6=98=BE=E7=A4=BA=E4=BA=A4=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 05-15 用户反转 05-14 #2229/#2234 的"按产品线季节过滤"需求: - 弹窗 4 个 tab(景区/游玩/餐厅/服务)展示全部资源,不再按 seasons 过滤 - 季节标签只渲染"产品季节 ∩ 资源季节"交集 - 后端 0 改动(seasons 参数本就可选),前端不再透传即可 - 推翻 14_*scenic-season-filter*.md 与 14_*activity-season-filter*.md --- ..._remove_season_filter_keep_matching_tag.md | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 changelogs/2026-05/15_frontend_admin_picker_remove_season_filter_keep_matching_tag.md diff --git a/changelogs/2026-05/15_frontend_admin_picker_remove_season_filter_keep_matching_tag.md b/changelogs/2026-05/15_frontend_admin_picker_remove_season_filter_keep_matching_tag.md new file mode 100644 index 0000000..269bfa3 --- /dev/null +++ b/changelogs/2026-05/15_frontend_admin_picker_remove_season_filter_keep_matching_tag.md @@ -0,0 +1,92 @@ +--- +date: 2026-05-15 +type: frontend-feature +module: admin-product-v2-itinerary-picker +priority: medium +backend_pr: null +backend_issue: null +supersedes: + - "14_frontend_feature_admin_scenic-season-filter-and-tags.md" + - "14_frontend_feature_admin_activity-season-filter-and-tags.md" +notify: ["@mmg"] +status: pending +--- + +# 产品设计「从资源库添加活动」弹窗 — 去掉季节筛选 + 标签只显示匹配项 + +## 业务变更 + +用户(产品)05-15 反转了 05-14 刚定的"按产品线季节过滤"需求。新需求: + +1. **去掉筛选** — 弹窗列表展示当前 tab 下**全部**资源(景区/游玩项目/餐厅/服务),不再按当前产品线的 `seasons` 过滤 +2. **标签只显示匹配项** — 资源行右侧的季节标签,只渲染"当前产品季节 ∩ 资源支持季节"的交集。 + - 例:产品季节 = `["summer"]`,资源支持 `["spring","summer","autumn"]` → 只显示 `summer` 一个标签 + - 例:产品季节 = `["summer"]`,资源支持 `["spring","autumn","winter"]` → **不显示任何季节标签**(没交集) +3. **范围** — 弹窗 4 个 tab(景区景点 / 游玩项目 / 餐厅 / 服务)全部按此规则。 + +## 后端 — 完全不用动 + +后端的 `seasons` query 参数本来就是**可选**(空/不传 = 不过滤),所以: + +| 接口 | 行为 | +|------|------| +| `GET /admin/scenic/spots` | 不传 `seasons` 参数即可,返全部景区 | +| `GET /admin/activity/items` | 不传 `seasons` 参数即可,返全部游玩项目 | +| `GET /admin/restaurant/items` | 本就无 seasons 参数 | +| `GET /admin/service/items` | 本就无 seasons 参数 | + +VO 中 `seasons: List` 字段保留(前端要用它做交集渲染),无变化。 + +> ⚠️ 副作用:不传 `seasons` 后,景区/活动列表的 `coverUrl` 会回落到主表的默认封面,不再按季节切图。这是用户预期的(整体去掉季节相关效果)。 + +## 前端实现要点 + +### 弹窗调用列表接口 + +```js +// 旧(05-14 版,需删掉透传 seasons 的逻辑): +// const params = new URLSearchParams() +// productLineSeasons.forEach(s => params.append('seasons', s)) +// await api.get(`/admin/scenic/spots?${params}&pageSize=20`) + +// 新: +await api.get('/admin/scenic/spots', { params: { pageSize: 20 } }) +``` + +同样适用 `/admin/activity/items`。 + +### 季节标签渲染逻辑 + +```js +// 取交集 +const productSeasons = currentProductLine.seasons || [] // 当前产品线季节 +const resourceSeasons = vo.seasons || [] // 资源支持季节 +const visibleSeasons = resourceSeasons.filter(s => productSeasons.includes(s)) + +// 4 色保持不变(与 05-14 版一致): +// spring → #67C23A / summer → #409EFF / autumn → #E6A23C / winter → #909399 + +// 不再显示春夏秋冬全部 4 个标签 — 只渲染 visibleSeasons +``` + +### 节点卡片(已选节点) + +**已添加进行程的节点卡片的季节标签**,**同样规则**:只显示与当前产品线季节匹配的部分。 +节点 VO `InternalProductDetailVO.NodeItem.seasons` 字段保留,前端做同样的交集过滤渲染。 + +### 餐厅/服务 tab + +后端这两个接口本来就没有 `seasons` 字段(VO 无 `seasons`),所以餐厅/服务 tab: +- 列表本来就不会按季节过滤(无变化) +- 资源行右侧**无季节标签**渲染(无变化) +- 但**主题标签**(如"自然风光""历史人文")若仍存在,**保持现状**(用户本次只反转季节相关行为) + +## 涉及前端文件 (仅供参考定位) + +- 弹窗组件: `D:\work2\hl-ui\src\views\product-v2\` 下行程编辑器子组件(05-14 改过的位置) +- 季节标签组件: 05-14 新建的季节 Tag 组件,渲染逻辑改成交集即可 + +## 关联 + +- 推翻 (supersedes): 05-14 的 `frontend_feature_admin_scenic-season-filter-and-tags.md`(后端 #2229)、`frontend_feature_admin_activity-season-filter-and-tags.md`(后端 #2234) +- 后端 PR #2229 / #2234 **不回滚**,新增的 `seasons` 子表 / VO 字段 / query 参数全部保留(前端不传即可,未来若再要可直接复用)