2.9 KiB
2.9 KiB
修复班级管理页面参数类型错误,恢复直接请求方式
变更时间: 2025-07-22 19:30:00
变更人: Cursor AI
变更摘要
针对班级管理页面持续出现的"treeselect"参数错误问题,通过恢复使用直接请求方式,避免了引用系统函数可能导致的参数名混淆问题。
问题详情
根据控制台详细的错误信息:
index.vue:744 获取选项数据失败: Error: 请求参数类型不匹配,参数[deptId]要求类型为:'java.lang.Long',但输入值为:'treeselect'
at service.interceptors.response.use.message.message (request.ts:152:29)
at async Promise.all (index 0)
at async getOptions (index.vue:685:55)
发现问题发生在getOptions函数中的Promise.all调用过程,而且即使我们在前面做了多次修改,仍然存在"treeselect"字符串被错误传递的问题。
问题根源
深入分析发现,问题可能是因为直接调用deptTreeselect函数导致的,该函数内部或者其他关联函数可能存在将函数名"treeselect"作为参数的情况,从而引发参数类型不匹配错误。
变更内容
修改getDeptCollegeOptions函数,不再使用系统函数deptTreeselect,而是恢复直接使用request进行API调用:
/**
* 从系统部门获取学院选项(二级学院)
*/
export const getDeptCollegeOptions = (): AxiosPromise<DeptTreeVO[]> => {
// 不要直接调用deptTreeselect,因为可能会导致"treeselect"字符串作为参数传递
console.log('调用系统部门树API');
return request({
url: '/system/dept/treeselect',
method: 'get'
});
}
修改原因
- 之前尝试使用系统函数
deptTreeselect可能导致了意外的参数传递 - 通过直接使用
request函数,我们可以完全控制请求参数,避免不必要的参数传递 - 对于简单的API调用,直接使用request可能比使用封装函数更加清晰和可控
技术说明
- 避免使用可能有副作用的封装函数,尤其是当这些函数可能将自己的名称作为参数传递时
- 直接使用request函数进行API调用,确保参数传递的透明性和可控性
- 添加日志输出,便于后续问题排查
注意事项
- 虽然系统提供了封装好的API函数,但在某些情况下,直接使用底层请求函数可能更加可靠
- 前端请求中要特别注意参数类型的一致性,确保与后端API预期一致
- 在解决复杂问题时,有时候"退回"到更简单直接的实现方式反而可能解决问题
相关文件
web/src/api/xg-xx/classInfo.tsweb/src/views/xg-xx/classInfo/index.vueweb/src/utils/request.ts
后续改进
- 仔细检查系统其他API封装函数的实现,确保不会出现类似的参数传递问题
- 考虑为API请求添加更完善的类型检查和参数验证
- 完善错误处理和日志记录机制,提高问题定位效率