数据回来了(2 条),但页面不渲染 —— 大概率是前端取值路径/格式对不上。去 dist 里找这段列表的渲染逻辑。前端已经重新打包过(dist 文件名变了)。看这段列表渲染代码具体怎么取值的。字段取值看着能对上,关键在拉取后的处理。看查询方法本身。找到关键了。看一下这个请求走的是哪个 axios 封装,以及字段映射。响应拦截器是 return e 直通,所以 t.data 就是那个 JSON。问题在数据路径 —— 前端只认 rows/list/data,后端给的是 Spring Page 的 content。再确认后端接口和前端传参。项目整体惯例就是返回 PageImpl。对比一下其它已正常工作的列表页前端怎么取。前端读取路径已确认:res.data.data.content(项目全局惯例),只有产险这两个 chunk 例外。再核对一下状态字典和时间格式是否也有坑。状态字典能匹配,但还有两处取值差异要确认。看下 normalizeListRow 完整字段。前端两个页面完全一致,确认是取值路径不匹配。由于你不动前端,我在后端做兼容(不动前端任何文件)。先确认可用 import。编译通过(仍是那 8 条 classpath 混入老 slf4j 导致的 logger.error 假错误,无新增)。记录一下本次排查结论。确认了:是前端取值路径写错,后端数据本身没问题。我按你的要求一个前端文件都没动,改成让后端兼容。
原因
后端 queryBatchPage 原本返回 Spring 的 PageImpl,JSON 结构是 {content, totalElements, number, size, totalPages} —— 这是本项目几十个列表页的统一契约。
但 dist 里产险这两个新 chunk(67.152afdf6*.js / 69.c08d881b*.js)是这么写的:
它只认 rows / list / data,不认 content。而你返回的正是 content → rows/list/data 全是 undefined → o = [] → 表格空,totalRecords 也算成 0。所以「有数据但什么都不展示」。
对比一下全项目其余页面,一眼就能看出这是新页面的写法跑偏了:
顺带说一下:这不是网络/拦截器问题,request.js 的响应拦截器是 function(e){return e} 直通,t.data 就是你看到的那份 JSON;也不是 transformResponse 那种老坑(那是 tabyperf)。
我改了什么(后端,前端零改动)
PropertyInsuranceImportServiceImpl.queryBatchPage:
- 分页结构同时输出两套别名 ——
content/rows/list/data都指向同一个数组,totalElements/total/totalRecords都指向总数;另外补了number/current/size/pagesize/totalPages/first/last。这样前端按哪套取都能命中,也不影响将来谁按项目惯例去接。 - 时间列:后端原本输出
1790131919000这种毫秒数(全站没配 jackson 日期格式),前端是原样渲染的,会显示一长串数字。新增formatDateTime把uploadTime/approveTime转成yyyy-MM-dd HH:mm:ss。 - 备注列:前端读
remark,库里叫approve_remark,行内补了remark别名。
编译验证过了(差分验证确认 javac 真的在做类型检查),无新增错误;只剩那 8 条 classpath 混入老版 slf4j 导致的 logger.error 假错误,与本次改动无关。改完需要重启应用。
还有两个同类的坑,先说一声(还没动)
- 查看详情大概率也是空的:
GET /import/batch/detail前端读a.batch(✓)+a.rows||a.details||a.items||a.list,而后端给的是carRows/noCarRows;而且 stg 表是select *,字段名是下划线(policy_no),前端normalizeDetailRow读的是驼峰(policyNo/underwriteDate/effectDate…)。要不要我一并按同样方式加兼容 + 做驼峰别名,你说一声。 - 页面上还有「审核历史」「删除」「任务详情导出」三个入口,对应后端
batch/auditHistory、batch/delete、导出接口都还没实现(前端自己提示"接口待后端提供")。