From 6f3fcf2397925dbfb80236184079457b7048b947 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Sat, 18 Apr 2026 15:03:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E7=AC=AC=E4=BA=8C=E5=B1=8F?= =?UTF-8?q?=20v2=20-=20=E5=8E=BB=E8=92=99=E5=B1=82+=E5=86=85=E5=B5=8C?= =?UTF-8?q?=E5=8D=A1=E7=89=87+=E7=B1=BB=E5=9E=8B=E6=A0=A1=E9=AA=8C(PR=20#8?= =?UTF-8?q?23)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-04/2026-04-18_home-screen2-v2.md | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 changelogs/2026-04/2026-04-18_home-screen2-v2.md diff --git a/changelogs/2026-04/2026-04-18_home-screen2-v2.md b/changelogs/2026-04/2026-04-18_home-screen2-v2.md new file mode 100644 index 0000000..df4bfe4 --- /dev/null +++ b/changelogs/2026-04/2026-04-18_home-screen2-v2.md @@ -0,0 +1,180 @@ +# 小程序首页第二屏 v2 - 去蒙层 + 内嵌卡片 + 类型校验 + +- **日期**: 2026-04-18 +- **PR**: [#823](https://git.1814.love:8443/wx/HL/pulls/823) (Closes #822) +- **状态**: 已合并 + 测试环境 DDL/服务全就绪 + E2E 通过 + +--- + +## 变更概览 + +1. 删 `coverMaskType` 字段(全链路) +2. 品牌故事内嵌 2 张主题卡片(`cards` 数组,最多 2 张) +3. 修 PR #811 缓存失效 bug +4. 链接目标(产品/产品线)只允许 **CORE/GROUP** 类型,响应加 `linkTargetType` + +--- + +## 1. Admin `PUT /admin/home-config/brand-story` 请求体变更 + +### 删除字段 +- ~~`coverMaskType`~~ + +### 新增字段 +- `cards`: `BrandCard[]`(最多 2 张) + +```json +{ + "title": "每一条线路,我们都亲自走过。", + "subtitle": null, + "description": "整个呼伦贝尔...", + "coverUrl": "https://cdn.1814.love/home/team-photo.jpg", + "publish": true, + "cards": [ + { + "title": "季节之旅", + "subtitle": "夏·秋·冬三季体验", + "coverUrl": "https://cdn.1814.love/cards/season.jpg", + "linkType": "PRODUCT_LINE", + "linkTarget": "2045004175602868226" + }, + { + "title": "亲子研学", + "subtitle": "边玩边学·深度体验", + "coverUrl": "https://cdn.1814.love/cards/study.jpg", + "linkType": "NONE", + "linkTarget": "" + } + ] +} +``` + +**BrandCard 字段**: + +| 字段 | 类型 | 必填 | 说明 | +|-----|------|------|-----| +| title | String | ✓ | 标题(如"季节之旅") | +| subtitle | String | - | 副标题 | +| coverUrl | String | ✓ | 背景图 URL(必须 https) | +| linkType | String | ✓ | NONE/PRODUCT/PRODUCT_LINE/ARTICLE/URL/MINI_PAGE | +| linkTarget | String | - | 跳转目标(id 或 url) | + +### 业务校验 + +- `cards` 最多 2 张(`@Size(max=2)`) +- **PRODUCT/PRODUCT_LINE 时 linkTarget 对应的产品/产品线类型必须是 `CORE` 或 `GROUP`**,其他类型返回: + +```json +{"code":500, "message":"卡片只能关联核心或小蒙马类型的产品/产品线", "data":null, "success":false} +``` + +--- + +## 2. Admin/MP GET 响应新增 + +### 响应结构 +- Admin `GET /admin/home-config/brand-story` 返回的 `data` 里,`coverMaskType` 字段**已移除**,新增 `cards` +- MP `GET /mp/home-config/screen2` 返回 `data.cards`(原 `data.topics` **移除**) + +```json +{ + "code": 200, + "data": { + "brandStory": { + "title": "每一条线路,我们都亲自走过。", + "subtitle": null, + "description": "...", + "coverUrl": "..." + }, + "cards": [ + { + "title": "季节之旅", + "subtitle": "夏·秋·冬三季体验", + "coverUrl": "...", + "linkType": "PRODUCT_LINE", + "linkTarget": "2045004175602868226", + "linkTargetType": "CORE" + }, + ... + ] + }, + "success": true +} +``` + +**`linkTargetType`** 字段说明: +- `CORE` / `GROUP` / `null` +- 仅 PRODUCT/PRODUCT_LINE 类型时填充,其他返 null +- 批量回填(Feign 调 product-v2 一次性批查),避免 N+1 + +--- + +## 3. 轮播图 `/admin/banner` 变更 + +### 请求(保存) +- linkType=PRODUCT/PRODUCT_LINE 时后端校验 linkId 的 productType 必须 CORE/GROUP,否则返: +``` +{"code":500, "message":"轮播图只能关联核心或小蒙马类型的产品/产品线", ...} +``` + +### 响应 +- BannerVO 新增 `linkTargetType` 字段(CORE/GROUP/null) +- 列表查询也批量回填,前端展示"核心"/"小蒙马"标签不用二次查询 + +--- + +## 4. MP 缓存 + +- Key: `home:screen2:mp:{env}` +- TTL 30 分钟 +- **修复**: PR #811 发布后不失效的 bug 已修(`HomeBrandStoryService.publish()` 现在真正调用 `evictAfterCommit()`) + +--- + +## 5. 前端改造清单 + +### 管理端 (hl-ui) + +1. **品牌故事表单**: + - 删除"蒙层类型"下拉 + - 新增"主题卡片"section,固定 2 张子表单(每张:标题/副标题/背景图/跳转类型/跳转目标) + - 跳转类型选择器选中 PRODUCT/PRODUCT_LINE 时,目标选择器**只显示 `productType=CORE` 或 `GROUP`** 的产品/产品线 + - 展示页可读取 `linkTargetType` 显示标签("核心"/"小蒙马") + +2. **轮播图表单 (`/mp-config/home/banner`)**: + - 选择器同上:只显示 CORE/GROUP + - 列表页展示 `linkTargetType` 标签(当 linkType=PRODUCT/PRODUCT_LINE) + +### 小程序端 + +- 首页第二屏渲染: + - `data.brandStory` 是主文案块 + - `data.cards` 是 2 张卡片(如原来的 `data.topics` 结构,但字段略不同) + - 卡片点击按 `linkType` + `linkTarget` 跳转 + +--- + +## 6. 产品/产品线选择器接口 + +前端选择器可用现有接口过滤 `productType`,或调新内部接口(如果暴露到管理端): + +- 管理端已有 `GET /admin/product-line/enabled`(列表接口)— 按 `productType` filter +- 如需求进一步精确,可联系后端加 `GET /admin/product-line/enabled?productTypes=CORE,GROUP` + +--- + +## 7. 测试环境验证 + +- [x] DDL 已跑(sys_home_brand_story 无 cover_mask_type,有 cards JSON) +- [x] E2E: PUT cards → MP GET 立即可见(缓存 evict 生效) +- [x] E2E: cards linkType=PRODUCT_LINE linkTarget=假 id → 抛业务异常 "卡片只能关联核心或小蒙马类型的产品/产品线" +- [x] Admin GET 响应无 coverMaskType,MP GET 响应 `cards` 替代 `topics` + +--- + +## 8. 关联 PR + +- #811 首页第二屏 v1 +- #813 Gateway 路由补丁 +- #815 菜单 + 轮播图 PRODUCT_LINE 字典 +- **#823 本 PR (v2)**