# 首页第二屏主题卡片: 跳转类型新增「产品主题」(linkTargetId=产品线id)

> **服务**: hl-user-service (8081)
> **PR**: #3185
> **Issue**: #3181
> **日期**: 2026-05-28
> **影响范围**: admin「小程序配置 → 首页配置 → 首页第二屏」主题卡片编辑 + 小程序首页第二屏卡片跳转
> **测试服验证**: 已过(api.test.1814.love:9443 + 真 admin token)

---

## ⚠️ 关键变化

主题卡片「跳转类型」(字典 `theme_card_link_type`)新增一项 **「产品主题」= `PRODUCT_LINE`**。选它时卡片 `linkTargetId` 保存为**产品线 id(lineId,产品线=主题)**,点卡片跳产品线详情。

字典现有全部取值:

| dictValue | dictLabel | linkTargetId 含义 |
|-----------|-----------|-------------------|
| SEASON | 季节之旅 | 无 |
| CORE_LIST | 核心产品 | 无 |
| MENGMA | 亲子游学 | 无 |
| PRODUCT | 指定产品 | 产品 id（需配 linkTargetType=CORE/GROUP）|
| **PRODUCT_LINE** | **产品主题** | **产品线 id（lineId）** |

---

## 一、admin 端前端改动（mmg）

1. 主题卡片「跳转类型」下拉新增「产品主题」选项(字典 `theme_card_link_type` 已加 PRODUCT_LINE,前端读字典即有)。
2. 选「产品主题」后,弹「产品线选择器」:调 **`GET /admin/product/line/simple-list`**(已存在,返回 `[{lineId, name}]`)填充,用户选产品线后把 `lineId` 写入卡片 `linkTargetId`。
3. **不要传 `linkTargetType`**(产品线无 CORE/GROUP 之分,后端会强制置 null);PRODUCT 类型才需 linkTargetType。
4. 保存接口不变:`PUT /admin/home-config/brand-story`,卡片体 `{title, subtitle, coverUrl, linkType:"PRODUCT_LINE", linkTargetId:<lineId>}`。
5. 校验:linkTargetId 必填且须为存在且 ACTIVE 的产品线,否则后端返错误码 `220810`(目标产品线不存在或已删除)/`220811`(校验失败)。

## 二、小程序端前端改动（mmg）

首页第二屏卡片点击跳转:`linkType=PRODUCT_LINE` 时,后端 `linkUrl` 恒为 null,前端按 `linkTargetId`(=lineId)跳**产品线详情页**(同 PRODUCT 类型由前端按 id 自拼路由的现有约定)。

## 三、接口（无破坏,均已上线）

| 接口 | 方法 | 路径 | 变化 |
|------|------|------|------|
| 保存品牌故事 | PUT | `/admin/home-config/brand-story` | 卡片 linkType 接受 PRODUCT_LINE;PRODUCT_LINE 时 linkTargetId=产品线id,linkTargetType 强制 null |
| 品牌故事详情 | GET | `/admin/home-config/brand-story` | 卡片回显 linkType/linkTargetId(PRODUCT_LINE 时 linkTargetId=lineId)|
| mp 首页第二屏 | GET | `/mp/home-config/screen2` | PRODUCT_LINE 卡片 linkUrl=null,前端按 linkTargetId 拼产品线详情 |
| 产品线下拉 | GET | `/admin/product/line/simple-list` | (已存在)admin 选产品线用 |

## 四、测试服验证(已过)
- 字典 `theme_card_link_type` 已含 `PRODUCT_LINE「产品主题」`。
- admin 存草稿:linkType=PRODUCT_LINE + 非法产品线 id → `220810` 拒绝(合法 ACTIVE 产品线才通过,linkTargetType 被规范化为 null)。
