2.4 KiB
2.4 KiB
【前端 BUG·后端已实测正常】司机自助录入·续签 tab「选择要续签的司机」列表不渲染(无工单)
端:前端(mmg)| 涉及后端:hl-fleet-service
/admin/fleet/drivers/page(无需改动,已实测正常)| 2026-06-16
现象
后台「车务管理 → 司机自助录入 → 2026 赛季续签」tab:顶部「选择要续签的司机 · 往年在册但 2026 未续签 3 人」计数正常,但下方候选司机列表区空白,无法选人 → 「续签专属链接」一直提示「请先从上方选择要续签的司机」。
排查结论:后端正常,前端未渲染列表
后端 /admin/fleet/drivers/page?season=archived 真 token 实测:
total=3, records=3, seasonCounts={"active":20,"pending":0,"archived":3,"blacklist":1}
records 三条 archived 存活司机数据齐全(id / name / phone / season / driverStatus …)
- 「3 人」计数 =
seasonCounts.archived(后端返回,正确)。 - 候选列表 =
season=archived的 records(后端也正确返回了 3 条)。 - 两者同源同数,后端无任何漏返。列表空白是前端没把 records 渲染出来。
⚠️ 高度可疑根因:字段名 id 不是 driverId
/page 返回的列表项司机主键字段是 id(雪花值序列化为字符串,如 "2066363927016472577"),不是 driverId。
- 若续签候选面板按
item.driverId取值 → 全 undefined → 列表项渲染失败 / key 缺失 / 选中后targetDriverId为空。 - 请改用
item.id:渲染列表用id,选中某司机后生成续签链接调POST /admin/fleet/h5/tokens(或 batch-season-renew)时targetDriverId = item.id。
完整列表项字段:id / name / phone(脱敏) / idCard(脱敏) / gender / years / driverStatus / season / primaryVehiclePlate / residentVehiclePlate / licenseType / licenseExpire / totalOrders / avgRating / insuranceType / tags / activeYears / pendingInvitedAt / blacklistReason / createTime。
建议前端核对项
- 候选列表请求是否真发出(season=archived)、响应 records 是否被正确读取渲染。
- 列表项主键统一用
id(不是driverId)。 - 顺带:另一项「已发送未回复 N 人」=
season=pending计数(当前环境为 0)。
后端
/page无需改动,本条纯前端渲染/字段映射问题。