# 【后端已修 + 前端待办·管理后台】自定义推送「选择用户」下拉：客人名字 undefined(后端已修) + 企业微信通道搜错数据源(前端待接)

> **关联**: 工单 #3414（内部员工站内信）| **服务**: hl-user-service（后端已改）+ 前端 hl-ui
> **提报时间**: 2026-06-05 | **后端**: @wx | **前端待接**: mmg
> **位置**: 管理后台 → 通知中心 → 自定义推送 → 推送目标「指定用户」→ 选择用户下拉

---

## ⚠️ 总览：两个独立问题

「自定义推送」选「指定用户」时，**选择用户**下拉有两处问题，一处后端已修、一处需前端接：

| # | 问题 | 归属 | 状态 |
|---|------|------|------|
| 1 | 选「站内信」/「短信」通道，客人下拉显示「**undefined 手机号**」 | 后端 | ✅ **已修 + 部署测试服实测** |
| 2 | 选「企业微信」/「站内信(内部员工)」通道，下拉搜出来的是**客人(带手机号)**而非内部员工 | 前端 | ⏳ 待 mmg 接 |

---

## 1. 客人名字 undefined（后端已修，PR #3511）

**现象**：选「站内信」或「短信」通道 + 指定用户，客人下拉显示「undefined 13700009999」。

**根因**：后端 `/custom-push/users` 只回填了 `realName`，而 C 端客人绝大多数没填真实姓名（realName 为空）→ 前端取 realName 即 undefined。

**已修**：realName 为空时回退昵称，并新增 `nickname` 字段。测试服实测：

```
GET /admin/notification/custom-push/users?keyword=1
→ [{ "id": "2059154700023836674", "realName": "游客9999", "nickname": "游客9999", "phone": "13700009999", "avatarUrl": "..." }, ...]
```

**前端**：无需改动，继续展示 `realName` 即可（现已永不为空，客人显示昵称如「游客9999」）。如需更明确可改展示 `realName`（真名优先）。

---

## 2. 企业微信 / 站内信(内部员工) 通道要按通道切数据源（前端待接）

**现象**：选「企业微信」通道（页面提示「企业微信仅支持推送给内部员工」）或「站内信(内部员工)」通道，「选择用户」下拉里却列出**客人**（带手机号、名字 undefined）。

**根因**（测试服 nginx 访问日志实证）：这两个通道下，前端**仍调 `/custom-push/users`（C 端客人搜索）**，没有按通道切到员工搜索。

**前端改法**：按「推送通道」决定调哪个搜索接口 + 字段映射：

| 推送通道 | 选人调用接口 | 返回字段（label / value） |
|---------|-------------|--------------------------|
| 站内信（C端）/ 短信 | `GET /admin/notification/custom-push/users?keyword=` | label=`realName`（已回退昵称），value=`id`，副文本 `phone` |
| **企业微信 / 站内信(内部员工)** | `GET /admin/notification/custom-push/admins?keyword=` | label=`name`（企微真名回退 username），value=`adminId`，副文本 `roleName`，**无手机号** |

⚠️ 字段名不同，克隆组件务必改映射：客人是 `id`/`realName`/`phone`；员工是 `adminId`/`name`/`username`/`roleName`。

提交推送时：
- 企业微信：`{channel:"WECHAT_WORK"... 或现有企微 channel, targetType:"ADMIN_SPECIFIC", adminIds:[...]}`（内部员工 adminId）
- 站内信(内部员工)：`{channel:"ADMIN_INAPP", targetType:"ADMIN_SPECIFIC", adminIds:[...]}` 或 `ADMIN_BY_ROLE + roleKeys`

---

## 3. 后端状态

- `/custom-push/users`（客人搜索）：✅ 已修 name 回退 + 部署测试服实测返昵称
- `/custom-push/admins`（员工搜索）：✅ 一直正常（返 adminId/name/username/roleKey/roleName，无手机号）
- 后端两个接口都就绪，问题 2 纯前端按通道切接口。

---

## 4. 企业微信推送给员工——后端补完，现已可用（PR #3515 / #3520）

之前选「企业微信 + 指定员工」点发送会报 **「不支持的目标类型: ADMIN_SPECIFIC」**（后端没接住企微+员工目标），且企微消息**丢标题、没链接**。已修复并部署测试服：

- ✅ **企业微信 + 指定员工(`ADMIN_SPECIFIC`) / 按角色(`ADMIN_BY_ROLE`)** 现已支持，提交 `{channel:"WECHAT_WORK", targetType:"ADMIN_SPECIFIC", adminIds:[...]}` 或 `{... targetType:"ADMIN_BY_ROLE", roleKeys:[...]}`。
- ✅ 企微消息现在 = **标题 + 正文 + 跳转链接**（之前只有正文）。
- 返回 `{totalCount, successCount, failCount}`：未绑企微的员工无法收企微，计入 `failCount`（属正常，前端可据此提示「N 人未绑企微未送达」）。

**前端无需改逻辑**（请求体已对，按 §2 切到 `/admins` 选人即可），这里是告知该通道已可正常用。

## 5. ⚠️ 「跳转链接」输入框文案待改（前端）

当前「跳转链接」输入框提示语 **「站内信时生效，如 /pages/product/list」已过时**：

1. 现在**企业微信推送也会带上这个链接**了，不只是站内信 → 提示语建议改成「站内信 / 企业微信生效」。
2. ⚠️ 企微是**纯文本**消息，里面 `/pages/...` 这种**相对路径点不动**（那是小程序路径）。要在企微里能点，必须填**完整 `https://` 网址**。建议提示语引导填完整 URL，或对企业微信通道单独提示。

## 6. 关联

- 主功能：`04_3414_内部员工站内信收件箱-SSE实时推送-管理后台.md`
- 选员工下拉历史 bug：`05_3414_选择员工下拉无数据-前端未接searchAdmins接口-管理后台.md`
- 后端：@wx | 前端：**mmg**
