跳转至

前端-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.vueloadCompanyOptions() / loadRegionOptions() - 后端:src/extensions/insurance/routes.py:35,103page_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')

下次防错措施

  1. 快速定位:打开浏览器 DevTools Network 面板,查看对应请求的 HTTP 状态码。422 状态码即表示参数校验失败,对比后端 Query 声明即可确认
  2. 开发规范:后端新增分页端点时,统一 page_size 上限(如 100);前端调用下拉选项时传到上限值而非随意写大数
  3. 静默 catch 反模式catch (_) {} 空块会吞掉所有错误。至少在开发环境加 console.error 以便排查:
    } catch (e) {
      console.error('loadCompanyOptions failed:', e)
    }
    
  4. 巡检脚本:如需确认所有下拉类请求的 page_size 未超限,可 grep:
    rg 'page_size=([2-9]\d{2}|1[1-9]\d{2}|\d{4,})' web/