# 产品设计新增「企微群聊」选择字段

> 日期: 2026-03-19 | 服务: hl-product-service, hl-callback-service

---

## 一、变更说明

产品设计页面新增 `groupRoomId` 字段，用于关联企微群聊（会话存档），替代原来的静态群二维码图片。

**为什么需要这个字段**：产品关联群聊后，C端小程序可以展示该群的真实聊天消息（通过会话存档），比静态二维码图片更有吸引力。

---

## 二、新增字段

### 产品保存接口

**接口**：`POST /admin/product/item/save` 和 `PUT /admin/product/item/{productId}`

**新增请求字段**：

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| groupRoomId | String | 否 | 企微群聊ID，从群组列表接口获取 |

**新增响应字段**（产品详情、产品列表都返回）：

| 字段 | 类型 | 说明 |
|------|------|------|
| groupRoomId | String | 企微群聊ID |

> 原有的 `groupChatQrUrl`（群聊二维码图片URL）保留不变，两者可以共存。

---

## 三、群组列表接口（已有，用于获取可选群）

**接口**：`GET /admin/msg-audit/groups`

**服务**：hl-callback-service

**说明**：获取已添加的企微群组列表，产品设计页面用此接口填充「群聊」下拉选择框。

**响应示例**：
```json
{
  "code": 200,
  "message": "成功",
  "data": [
    {
      "id": "2034000000000000001",
      "roomId": "wrOJ_wCgAAxxxxxx",
      "groupName": "嗨·冰雪3.0南线客户群",
      "ownerUserId": "WangXiao",
      "ownerName": "王骁",
      "memberCount": 12,
      "remark": "冰雪南线体验团",
      "createdAt": "2026-03-15 10:00:00"
    }
  ]
}
```

**关键字段说明**：

| 字段 | 类型 | 说明 |
|------|------|------|
| id | String | 群组记录ID |
| roomId | String | **企微群聊ID，保存产品时传这个值到 `groupRoomId`** |
| groupName | String | 群名称（用于下拉框显示） |
| ownerName | String | 群主姓名 |
| memberCount | Integer | 群成员数 |
| remark | String | 备注 |

---

## 四、前端页面布局

### 产品设计 → 展示设置步骤（DisplayStep / DisplaySettings）

在现有的「群聊二维码」输入框**上方或旁边**，新增一个**下拉选择框**：

```
┌─────────────────────────────────────┐
│ 群聊关联                              │
│                                     │
│ 企微群聊   [▼ 请选择群聊            ]  │
│            选项格式: groupName (memberCount人) │
│            值: roomId                │
│                                     │
│ 群聊二维码  [上传图片]   （已有字段）   │
└─────────────────────────────────────┘
```

### 实现要点

1. **页面加载时**调用 `GET /admin/msg-audit/groups` 获取群组列表
2. 下拉选项用 `groupName` 显示，`roomId` 作为 value
3. 选中后将 `roomId` 赋值给 `productData.groupRoomId`
4. 保存时将 `groupRoomId` 放入 payload（参考 `groupChatQrUrl` 的处理方式）
5. 加载产品详情时，响应中 `groupRoomId` 会返回已关联的群聊ID
6. **store 变更**：`productEdit.js` 的 `createDefaultProductData()` 添加 `groupRoomId: null`，`_loadProductDetail` 添加 `groupRoomId: data.groupRoomId || null`，`_saveProduct` payload 添加 `groupRoomId: productData.groupRoomId || null`

### 调用示例

```javascript
// 1. 获取群组列表（页面加载时）
import { http } from '@/utils/request'
const groups = await http.get('/msg-audit/groups')
// groups = [{ roomId: 'wrOJ_wCgAAxxxxxx', groupName: '冰雪南线客户群', memberCount: 12, ... }]

// 2. 保存产品时 payload 中添加
const payload = {
  // ...其他字段
  groupRoomId: productData.groupRoomId || null,  // 新增
  groupChatQrUrl: productData.groupChatQrUrl || '',  // 已有
}
```

---

## 五、校验规则

- `groupRoomId` 非必填，可以不选
- 如果选择了群聊，必须是 `/admin/msg-audit/groups` 返回的有效 `roomId`
- `groupRoomId` 和 `groupChatQrUrl` 互相独立，不冲突
