前端-API参数-page_size超限导致下拉选项为空
问题现象
- "新增物业据点"对话框中的"关联公司"和"关联地区"下拉选择框显示为空,无任何选项
- 后端数据库实际存在公司和地区数据
- 页面无报错提示,静默失败
核心问题
- 前端调用
/api/v1/insurance/companies?page=1&page_size=999和/api/v1/insurance/regions?page=1&page_size=999加载下拉选项 - 后端 FastAPI 路由对
page_size参数有Query(20, ge=1, le=100)限制 - 传入
999超出le=100上限,FastAPI 参数校验返回 422 Validation Error - 前端
catch (_) {}空块静默吞掉错误,companyOptions/regionOptions始终为空数组
涉及文件:
- 前端:web/admin/src/views/modules/insurance/location-manage.vue — loadCompanyOptions() / loadRegionOptions()
- 后端:src/extensions/insurance/routes.py:35,103 — page_size: int = Query(20, ge=1, le=100)
解决方法
将 page_size=999 改为 page_size=100(后端允许的最大值):
// location-manage.vue loadCompanyOptions / loadRegionOptions
const res = await get<any>('/api/v1/insurance/companies?page=1&page_size=100')
const res = await get<any>('/api/v1/insurance/regions?page=1&page_size=100')
下次防错措施
- 快速定位:打开浏览器 DevTools Network 面板,查看对应请求的 HTTP 状态码。422 状态码即表示参数校验失败,对比后端 Query 声明即可确认
- 开发规范:后端新增分页端点时,统一
page_size上限(如 100);前端调用下拉选项时传到上限值而非随意写大数 - 静默 catch 反模式:
catch (_) {}空块会吞掉所有错误。至少在开发环境加console.error以便排查:} catch (e) { console.error('loadCompanyOptions failed:', e) } - 巡检脚本:如需确认所有下拉类请求的 page_size 未超限,可 grep:
rg 'page_size=([2-9]\d{2}|1[1-9]\d{2}|\d{4,})' web/