frontend notice: 补 /admin/user/customizers QA 实测结果 + adminId JS 精度坑提示
- 测试服 round-trip 验证通过(20 条数据,字段全对,反例 401) - adminId 同时返 Number(老 ID 1001/1002)和 String(雪花 ID),前端必须统一 String 处理防精度丢失
这个提交包含在:
父节点
49d18a8f9f
当前提交
26885a2e27
@ -115,6 +115,43 @@ export function listShareCustomizers() {
|
||||
|
||||
---
|
||||
|
||||
## ✅ 已经过测试服 round-trip 验证(2026-05-09 19:30)
|
||||
|
||||
经网关 `https://api.test.1814.love:9443/admin/user/customizers` + SUPER_ADMIN token 实测:
|
||||
- HTTP 200 + `code=200` + `success=true`
|
||||
- `data` 是非空 `List`,共 **20 条**(测试服 admin_user 中所有持 CUSTOMIZER 角色且非 DELETED 的 admin)
|
||||
- 字段命名与契约一致:`adminId` / `username` / `avatar`
|
||||
- 无 token 反例 → 网关 401 `Missing or invalid Authorization header`
|
||||
- 与 `/admin/user/designers` 对比:designers 只返 18 条(过滤 active+企微),customizers 返 20 条全集(含 admin/qulili 等无企微的轻量 admin) — 符合"分享下拉不过滤"语义
|
||||
|
||||
→ 后端接口工作正常,前端切到本接口即可,**无需后端再改任何东西**。
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 前端 JS 精度坑(必看)
|
||||
|
||||
实测响应里 `adminId` **同时有 Number 和 String 两种类型**:
|
||||
- 旧 admin (`adminId=1001 / 1002`) → JSON Number
|
||||
- 新 admin (雪花 ID 如 `"2021059720172838914"`) → JSON String
|
||||
|
||||
→ 前端 v-model 绑 `value: u.adminId` 时必须**统一用 String 处理**,否则 19 位雪花 ID 转 Number 会精度丢失末几位,选完用户提交时 `targetUserId` 错位,后端按错的 ID 复制产品。
|
||||
|
||||
正确做法:
|
||||
|
||||
```js
|
||||
.map((u) => ({
|
||||
label: u.username,
|
||||
value: String(u.adminId), // ← 统一 String,防雪花 ID 精度丢失
|
||||
}))
|
||||
|
||||
// 排除自己时也用 String 比较
|
||||
.filter((u) => String(u.adminId) !== String(currentUserId.value))
|
||||
```
|
||||
|
||||
提交分享时如果后端 VO 字段是 `Long targetAdminId`,Spring 反序列化会自动把 String "20210597..." 转 Long,**前端只管全程当 String 用即可**。
|
||||
|
||||
---
|
||||
|
||||
## 后端接口契约
|
||||
|
||||
### `GET /admin/user/customizers`
|
||||
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户