From 3aee351ccac13d314cecd9a361ac277cda3b8357 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 19 Mar 2026 16:53:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BA=A7=E5=93=81=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BC=81=E5=BE=AE=E7=BE=A4=E8=81=8A=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=AD=97=E6=AE=B5=20groupRoomId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 --- .../2026-03-19_product_group_room_id.md | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 changelogs/2026-03/2026-03-19_product_group_room_id.md diff --git a/changelogs/2026-03/2026-03-19_product_group_room_id.md b/changelogs/2026-03/2026-03-19_product_group_room_id.md new file mode 100644 index 0000000..6b8c091 --- /dev/null +++ b/changelogs/2026-03/2026-03-19_product_group_room_id.md @@ -0,0 +1,127 @@ +# 产品设计新增「企微群聊」选择字段 + +> 日期: 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` 互相独立,不冲突