# 【后端修复·管理后台】产品详情回显补 serviceStandardTemplateId（Step5 服务标准 tab 刷新后绑定不显）

> **PR**: #3484 | **关联工单**: 无（小 bug 修复）
> **服务**: hl-product-service-v2（产品详情回显）| **更新时间**: 2026-06-05
>
> **存放目录**: `changelogs-v2/2026-06/`
> **影响范围**: 管理后台「产品编辑 → 补充信息(Step5) → 服务标准」tab 的模板绑定回显
> **前端动作**: **无需改代码**，重新测试即可（前端读取逻辑本就正确）

---

## ⚠️ 关键说明

现象是「选了服务标准模板，保存后刷新页面，下拉变空、预览显示『未绑定模板』，像是没保存上」。

**实测真相**：绑定**早就保存成功**了（`product.service_standard_template_id` 在库里有值，预览接口也能返回完整模板内容）。问题在**详情回显接口漏返该字段**——保存写进去了，但编辑页重新加载时读不到，所以下拉回显不出来。

本次为纯后端修复，**接口路径/结构未变，仅在 `supplement` 段新增一个字段**，前端无破坏性变更。

---

## 1. 根因

工单 #3147 引入 `serviceStandardTemplateId`（服务标准模板绑定）时，漏改了详情回显 VO：

- 保存接口 `PUT /admin/product/item/{id}/supplement` 已把它写入 **product 主表** ✅
- 但详情接口 `GET /admin/product/item/{id}` 的响应 VO `ProductDetailRespVO.SupplementVO` **缺这个字段**（兄弟字段 `guaranteeTemplateId`/`faqTemplateId`/`safetyTemplateId` 都在，唯独漏了它）
- 前端从 `data.supplement.serviceStandardTemplateId` 读取（读取位置正确），后端不返 → 永远 `undefined` → 下拉空、预览「未绑定」

## 2. 修复

| 文件 | 改动 |
|---|---|
| `ProductDetailRespVO.SupplementVO` | 新增字段 `Long serviceStandardTemplateId` |
| `ProductQueryService.getProductDetail` | 从 product 主表显式回填进 `supplement` 段（缺 supplement 段时跳过，不回归） |

## 3. 接口响应变化（前端关注）

`GET /admin/product/item/{id}` 的 `data.supplement` 段**新增一个字段**：

| 字段 | 类型 | 含义 |
|---|---|---|
| `serviceStandardTemplateId` | Long（雪花，JSON 透传字符串） | 当前绑定的服务标准模板 ID；未绑定为 `null` |

请求/响应示例（测试服已验证）：

```bash
curl -k "https://api.test.1814.love:9443/admin/product/item/2045345825172639746" \
  -H "Authorization: Bearer {admin_token}"
```

```json
{
  "code": 200,
  "data": {
    "supplement": {
      "serviceStandardTemplateId": "2061281473171775490",
      "guaranteeTemplateId": "2044407984976486401",
      "...": "其余字段不变"
    }
  }
}
```

## 4. 前端动作

- **无需改代码**：前端 `productEdit.js` 已正确读取 `sp.serviceStandardTemplateId` 并回填到下拉，本次后端补返该字段后即自动生效。
- **请重新测试**：产品编辑页 → 补充信息 → 服务标准 → 选模板 → 保存 → **刷新页面**，下拉应保持选中、模板内容预览应正常渲染。

## 5. 关联 / 联系人

- **本次 PR**：#3484（已合并 dev-v3，已部署测试服并 API 验证回显成功）
- **后端负责人**：@wx
- **前端对接（管理后台）**：mmg

---

## 备注（后端内部，前端无需关注）

另发现一个潜在 bug：「取消绑定」（下拉清空 → null）因 MyBatis-Plus `updateById` 默认忽略 null 字段，清不掉旧值。改全局 `FieldStrategy` 对 partial-update 有风险，**未纳入本 PR**，后续以定向 `LambdaUpdateWrapper` 单独修。
