From 26885a2e278518707b6c7bc18af25dea08382a69 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Sat, 9 May 2026 19:59:42 +0800 Subject: [PATCH] =?UTF-8?q?frontend=20notice:=20=E8=A1=A5=20/admin/user/cu?= =?UTF-8?q?stomizers=20QA=20=E5=AE=9E=E6=B5=8B=E7=BB=93=E6=9E=9C=20+=20adm?= =?UTF-8?q?inId=20JS=20=E7=B2=BE=E5=BA=A6=E5=9D=91=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 测试服 round-trip 验证通过(20 条数据,字段全对,反例 401) - adminId 同时返 Number(老 ID 1001/1002)和 String(雪花 ID),前端必须统一 String 处理防精度丢失 --- ..._product-share-use-customizers-endpoint.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/changelogs/2026-05/09_frontend_notice_admin_product-share-use-customizers-endpoint.md b/changelogs/2026-05/09_frontend_notice_admin_product-share-use-customizers-endpoint.md index 78fdc90..e8bd989 100644 --- a/changelogs/2026-05/09_frontend_notice_admin_product-share-use-customizers-endpoint.md +++ b/changelogs/2026-05/09_frontend_notice_admin_product-share-use-customizers-endpoint.md @@ -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`