3.0 KiB
3.0 KiB
进一步修复班级管理页面学院和专业下拉菜单参数类型不匹配问题
变更时间: 2025-07-22 17:30:00
变更人: Cursor AI
变更摘要
进一步修复班级管理页面学院和专业下拉菜单参数类型不匹配的问题。之前的修复没有完全解决问题,错误提示仍为:请求参数类型不匹配,参数[deptId]要求类型为:'java.lang.Long',但输入值为:'treeselect'。
问题原因
深入分析发现,问题的根源在于我们虽然在自定义的getDeptMajorOptions函数中进行了参数验证和类型转换,但依然使用自定义的API调用方式。而实际请求出现问题的原因是,系统本身有专门处理部门数据的API函数,我们没有直接使用这些函数,导致了不兼容问题。
变更内容
1. 导入系统部门API函数
import { treeselect as deptTreeselect, listDeptExcludeChild } from '@/api/system/dept'
2. 修改获取学院选项的函数,使用系统函数
/**
* 从系统部门获取学院选项(二级学院)
*/
export const getDeptCollegeOptions = (): AxiosPromise<DeptTreeVO[]> => {
return deptTreeselect()
}
3. 修改获取专业选项的函数,使用系统函数
/**
* 从系统部门获取专业选项(学院的下级部门)
*/
export const getDeptMajorOptions = (deptId: string | number): AxiosPromise<DeptVO[]> => {
// 确保deptId是有效的数字ID
if (!deptId || isNaN(Number(deptId))) {
console.error('Invalid deptId:', deptId);
return Promise.reject(new Error('无效的部门ID'));
}
return listDeptExcludeChild(Number(deptId));
}
修改原因
- 系统已有完善的部门API函数,它们内部做了合适的参数处理和类型转换,不会出现参数类型不匹配的问题
- 使用系统原有的API函数,可以确保请求方式、参数格式和路径与系统预期一致
- 通过这种方式,我们避免了自行构建请求时可能出现的参数处理错误
技术说明
treeselect函数:获取部门树结构,不需要参数,返回完整的部门层次结构listDeptExcludeChild函数:获取部门的子部门列表,需要部门ID作为参数- 通过导入并使用系统的这些函数,我们可以确保参数类型和请求路径与系统预期保持一致
注意事项
- 在前端调用API时,优先使用系统提供的API函数,而不是自行构建请求
- 导入函数时注意使用别名,避免与页面中的其他函数名冲突
- 即使使用系统函数,仍然要进行参数验证,确保传入的是有效值
相关文件
web/src/api/xg-xx/classInfo.tsweb/src/api/system/dept/index.ts(引用)web/src/views/xg-xx/classInfo/index.vue
后续改进
- 重构代码,尽量减少自定义的API请求,优先使用系统提供的函数
- 考虑创建统一的选项数据处理服务,减少重复代码
- 完善错误处理机制,提供更友好的错误提示