# 小程序首页第二屏 - 主题卡片去掉"链接类型"字段 - **日期**: 2026-04-18 - **PR**: [#829](https://git.1814.love:8443/wx/HL/pulls/829) (Closes #828) - **类型**: 契约变更(减字段) - **状态**: 已合并到 dev + 测试环境部署中 > 本次改动紧随同日的 [#823 首页第二屏 v2](./2026-04-18_home-screen2-v2.md)。v2 设计的"卡片链接跳转"能力产品决定取消,卡片回归纯展示。 --- ## 受影响接口 ### 管理端 - `PUT /admin/home-config/brand-story`(保存品牌故事) - `GET /admin/home-config/brand-story`(查询品牌故事) ### 小程序端 - `GET /mp/home-config/screen2`(首页第二屏聚合) ## 删除字段(每张卡片 `cards[i]`) | 字段 | 类型 | 原含义 | |---|---|---| | ~~`linkType`~~ | String | 链接类型(NONE/PRODUCT/PRODUCT_LINE/ARTICLE/URL/MINI_PAGE) | | ~~`linkTarget`~~ | String | 链接目标(产品/产品线 ID / URL / 小程序页面路径) | | ~~`linkTargetType`~~ | String | 响应回填的产品类型(CORE/GROUP) | ## 保留字段(每张卡片 `cards[i]`) | 字段 | 类型 | 说明 | |---|---|---| | `title` | String | 卡片标题(必填,≤100 字符) | | `subtitle` | String | 卡片副标题(可选,≤200 字符) | | `coverUrl` | String | 封面图 URL(必填,https CDN 直链,≤500 字符) | ## 请求示例(PUT /admin/home-config/brand-story) ```json { "title": "每一条线路,我们都亲自走过。", "subtitle": null, "description": "整个呼伦贝尔...", "coverUrl": "https://cdn.hulalv.com/home/brand.jpg", "cards": [ { "title": "季节之旅", "subtitle": "夏·秋·冬三季体验", "coverUrl": "https://cdn.hulalv.com/cards/1.jpg" }, { "title": "亲子研学", "subtitle": "边玩边学·深度体验", "coverUrl": "https://cdn.hulalv.com/cards/2.jpg" } ], "publish": true } ``` ## 响应示例(GET /mp/home-config/screen2) ```json { "code": 200, "data": { "brandStory": { "title": "每一条线路,我们都亲自走过。", "description": "...", "coverUrl": "https://cdn.hulalv.com/home/brand.jpg" }, "cards": [ { "title": "季节之旅", "subtitle": "夏·秋·冬三季体验", "coverUrl": "https://cdn.hulalv.com/cards/1.jpg" } ] } } ``` ## 前端 Action ### 管理端(必改) 1. 移除卡片编辑区底部"链接类型 *"下拉框组件 2. 移除卡片编辑区"链接目标"相关组件(如产品选择器 / URL 输入框 / 小程序页面选择) 3. 请求体中 `cards[i]` 不再传 `linkType` / `linkTarget` ### 小程序端(必改) 1. 主题卡片点击事件去除(卡片不再支持跳转) 2. 如果之前读了 `cards[i].linkType` / `.linkTarget` / `.linkTargetType` 的逻辑,一并删除 ## 向后兼容说明 - DB 存量数据中的 JSON 字段 `linkType/linkTarget/linkTargetType` 不删,反序列化时被后端 `@JsonIgnoreProperties(ignoreUnknown=true)` 安全忽略 - 前端如果旧请求仍传了这三个字段,后端也会被 `@JsonIgnoreProperties(ignoreUnknown=true)` 忽略(不会 400) - 但**不推荐继续传**,清理前端代码更彻底 ## 校验规则变化 | 字段 | 变化 | |---|---| | `cards[i].linkType` | 原 `@NotBlank + @Pattern(NONE/PRODUCT/PRODUCT_LINE/ARTICLE/URL/MINI_PAGE)` → **字段删除** | | `cards[i].linkTarget` | 原 `@Length(max=500)` → **字段删除** | | `cards` 数组 | 保留 `@Size(max=2)` | ## 回归验证 部署后调 `GET /mp/home-config/screen2`,确认 `data.cards[i]` 只包含 title / subtitle / coverUrl 即可。