# 小程序主题卡片返回 linkUrl(从字典 remark 解析) **日期**:2026-04-21(同日晚) **PR**:#1097 **后端服务**:hl-user-service(写/读)+ hl-mp-service(BFF 透传,**必须同步重启**,common-core DTO 改动) **影响**:小程序首页第二屏 `GET /mp/home-config/screen2` 响应体 --- ## 变更点 `BrandCard` DTO(小程序 `data.cards[]` 每一项)**新增字段 `linkUrl`**: | 字段 | 类型 | 何时有值 | 说明 | |------|------|---------|------| | `linkUrl` | String | `linkType` ∈ {SEASON, CORE_LIST, MENGMA} | 由后端从字典 `theme_card_link_type.remark` 解析得到的页面路径 | | `linkUrl` | null | `linkType = PRODUCT` 或字典未配 | PRODUCT 前端自行按 `linkTargetType + linkTargetId` 拼 | --- ## 响应示例 ```json { "code": 200, "data": { "brandStory": { ... }, "cards": [ { "title": "季节之旅", "coverUrl": "https://...", "linkType": "SEASON", "linkTargetType": null, "linkTargetId": null, "linkUrl": "packages/product/season/list/list" }, { "title": "亲子游学", "coverUrl": "https://...", "linkType": "MENGMA", "linkTargetType": null, "linkTargetId": null, "linkUrl": "packages/product/mengma/list/list" } ] } } ``` --- ## 小程序端对接(可以大幅简化) 之前版本需要前端维护 code → 路径 switch: ```js // ❌ 旧做法,可以不再维护 const ROUTE = { SEASON: 'packages/product/season/list/list', ... }; wx.navigateTo({ url: '/' + ROUTE[card.linkType] }); ``` 新做法: ```js // ✅ 新做法,直接读 linkUrl if (card.linkType === 'PRODUCT') { // PRODUCT 按 linkTargetType + linkTargetId 拼产品详情 wx.navigateTo({ url: `/packages/product/${card.linkTargetType.toLowerCase()}/detail?id=${card.linkTargetId}` }); } else { wx.navigateTo({ url: '/' + card.linkUrl }); } ``` **路径配置完全由后台字典 `theme_card_link_type.remark` 控制**,未来换路径不用发版小程序,只改字典即可。 --- ## 字典 remark 约定 ``` dict_value=SEASON remark="跳转: packages/product/season/list/list" dict_value=CORE_LIST remark="跳转: packages/product/core/list/list" dict_value=MENGMA remark="跳转: packages/product/mengma/list/list" dict_value=PRODUCT remark="指定产品详情..."(非路径,linkUrl=null) ``` 后端只认 `"跳转: "` 开头的 remark 作为 URL。其它 remark 被当成描述文本,linkUrl=null。 --- ## 降级行为 - 字典 `theme_card_link_type` 未配或查询异常 → `linkUrl=null`,前端可回退自维护映射或不跳转 - 老数据 `linkType=null` 被后端兜底为 `SEASON`,继续有 linkUrl(保持旧行为) --- ## 测试 - `MpHomeConfigServiceTest` 新增 3 个 case(SEASON/MENGMA 有 URL / PRODUCT null / 字典降级) - 本地 API curl 已通过:`/mp/home-config/screen2` → cards[].linkUrl 正确填充 - 测试服已部署 user + mp --- ## 重启 **两个服务都要重启**: - hl-user-service(生成 BrandCard.linkUrl 的源头) - hl-mp-service(透传 BrandCard,如果 fat jar 里带旧版 common-core class 不重启会丢字段) 参考经验:`experience/test-server-admin/shared-common-core-dto-all-consumers-redeploy.md`