docs(changelog): heads-up 主题列表卡片新增 createdByName 字段(企微优先 fallback username)
Issue #1943,后端开发中。
GET /admin/product/line/list + GET /admin/product/line/{id} 仅追加字段,无 break。
前端可同步开始,展示「创建人:xxx」即可,null 时显示「-」。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
这个提交包含在:
父节点
2daa58f49a
当前提交
fd6e7b104f
@ -0,0 +1,160 @@
|
||||
# 管理端主题列表: 卡片新增「创建人姓名」字段(企微昵称优先 fallback 用户名)
|
||||
|
||||
> **服务**: hl-product-service-v2 (端口 8083)
|
||||
> **PR**: 待开(后端开发中)
|
||||
> **Issue**: [#1943](https://git.1814.love:8443/wx/HL/issues/1943)
|
||||
> **日期**: 2026-05-11
|
||||
> **影响范围**: 管理后台「产品管理 → 主题列表」(/product/line) 卡片
|
||||
> **状态**: ⚠️ **预告 (Heads-up)** — 后端尚未合并,前端可同步开始;字段名/格式以本文为准,PR 合并后会再补一条"已上线"changelog
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 关键变化
|
||||
|
||||
主题列表卡片每张多一个字段 `createdByName`(String,可能为 null),用于显示是谁创建了这个主题。
|
||||
|
||||
**显示规则(后端已实现)**:
|
||||
- 创建人 admin_user 绑定了企业微信 → 返回**企业微信昵称**
|
||||
- 未绑企微 → 返回 **admin_user.username**(用户名兜底)
|
||||
- 极端情况(user-service 降级 / admin 已删)→ 返回 null,前端可显示「-」或隐藏该行
|
||||
|
||||
前端**无需自己 fallback**,后端已聚合好,前端直接展示 `createdByName` 即可。
|
||||
|
||||
---
|
||||
|
||||
## 一、背景
|
||||
|
||||
超级管理员/运营组长视角下,主题列表 27 张卡片看不出谁建的,特别是私人定制类主题(不同销售各自开),需要快速识别 owner。
|
||||
|
||||
---
|
||||
|
||||
## 二、变更接口清单
|
||||
|
||||
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|
||||
|---|------|------|------|----------|------|
|
||||
| 1 | 主题列表 | GET | `/admin/product/line/list` | 响应体新增字段 | 每条多 `createdByName` |
|
||||
| 2 | 主题详情 | GET | `/admin/product/line/{lineId}` | 响应体新增字段 | 多 `createdByName` |
|
||||
|
||||
后端 0 个 break、0 个删除、0 个语义变化。仅追加字段,前端不接也不会报错。
|
||||
|
||||
---
|
||||
|
||||
## 三、接口详情
|
||||
|
||||
### 1. 主题列表 `GET /admin/product/line/list`
|
||||
|
||||
**VO**: `ProductLineRespVO`
|
||||
|
||||
#### 出参(仅列出新增/相关字段)
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `lineId` | Long | 主题 ID(已有) |
|
||||
| `name` | String | 主题名(已有) |
|
||||
| `createdBy` | Long | 创建人 admin_id(已有,前端无需用) |
|
||||
| **`createdByName`** | **String** | **🆕 创建人显示名(企微昵称优先 fallback username,可能 null)** |
|
||||
| `createTime` | DateTime | 创建时间(已有) |
|
||||
| ... | ... | 其他字段不变 |
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "成功",
|
||||
"success": true,
|
||||
"data": [
|
||||
{
|
||||
"lineId": 2045311111111111111,
|
||||
"name": "游牧的森林",
|
||||
"createdBy": 1002,
|
||||
"createdByName": "王宇",
|
||||
"createTime": "2026-04-17 12:59:24",
|
||||
"...其他字段": "..."
|
||||
},
|
||||
{
|
||||
"lineId": 2045322222222222222,
|
||||
"name": "嗨冰雪",
|
||||
"createdBy": 1003,
|
||||
"createdByName": "test_admin",
|
||||
"createTime": "..."
|
||||
},
|
||||
{
|
||||
"lineId": 2045333333333333333,
|
||||
"name": "私人定制",
|
||||
"createdBy": 1099,
|
||||
"createdByName": null,
|
||||
"...": "..."
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 主题详情 `GET /admin/product/line/{lineId}`
|
||||
|
||||
同样追加 `createdByName` 字段,结构与列表一致。
|
||||
|
||||
---
|
||||
|
||||
## 四、前端实现要点
|
||||
|
||||
### UI 位置(建议)
|
||||
|
||||
主题卡片当前布局(图示):
|
||||
```
|
||||
[封面图]
|
||||
[主题名] [核心产品/私人定制 标签]
|
||||
[简介]
|
||||
[季节/标签 chips]
|
||||
[版本数] [排序]
|
||||
[启用] [创建时间]
|
||||
[👁 编辑 删除按钮]
|
||||
```
|
||||
|
||||
建议在「创建时间」一行旁边或上面加一行「创建人: xxx」,排版方式由前端拍板。
|
||||
|
||||
### Null 处理
|
||||
|
||||
- `createdByName === null` → 显示「-」或不显示该行(不要显示「null」字样)
|
||||
- 不要尝试自己用 createdBy ID 调 user-service 兜底 —— 后端已经处理过,再调也是相同结果
|
||||
|
||||
### 主题详情页
|
||||
|
||||
如果详情页也想展示创建人,同样读 `createdByName` 字段。
|
||||
|
||||
---
|
||||
|
||||
## 五、不影响范围
|
||||
|
||||
- ✅ MP 端任何接口:0 改动(C 端不需要看创建人)
|
||||
- ✅ 主题创建/编辑/删除接口:0 改动(写入侧不受影响)
|
||||
- ✅ 现有筛选条件(关键字/状态/主题类型):0 改动
|
||||
- ✅ 历史 27 条主题数据:无需迁移(createdBy 已写入,靠 enrich 实时取,老数据如 createdBy 已删则返 null)
|
||||
- ✅ 装备模板下拉、产品列表、其他列表:本次不涉及
|
||||
|
||||
---
|
||||
|
||||
## 六、降级/边界
|
||||
|
||||
- user-service 降级(Feign 失败)→ 后端 catch 异常,所有 createdByName 返 null,列表照常返回,**不阻断页面**
|
||||
- batchGetAdminInfo 返空(admin 已删)→ 该条 createdByName = null
|
||||
- admin_user 未绑企微 → wechatName 为 null,自动 fallback username
|
||||
|
||||
---
|
||||
|
||||
## 七、相关历史
|
||||
|
||||
| PR | Issue | 说明 | 是否仍有效 |
|
||||
|----|-------|------|------------|
|
||||
| 待开 PR | #1943 | 主题列表/详情新增 createdByName | 🚧 开发中 |
|
||||
|
||||
参考类似实现:产品列表 `ProductQueryService.enrichCreatedByName():243-267`(已上线,前端已使用 `createdByName` 字段)。
|
||||
|
||||
---
|
||||
|
||||
## 八、相关文档
|
||||
|
||||
- 关联 Issue: [wx/HL#1943](https://git.1814.love:8443/wx/HL/issues/1943)
|
||||
- Feign 接口: `hl-common/hl-common-feign/.../UserFeignClient.java:36-37`
|
||||
- AdminBasicDTO: `hl-common/hl-common-core/.../AdminBasicDTO.java:17,25-26`
|
||||
- 仿写模板: `hl-product-service-v2/.../ProductQueryService.java:243-267`
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户