classQuota.hasQuota = true 时才进行名额检查queryAvailableQuota 返回 null 时直接报错采用方案一:修复前端验证逻辑,在提交前严格检查班级名额情况
web/src/views/jcbt/scholarship/application/index.vue修改位置: submitBatchApplication 方法中的名额验证逻辑(约第1195-1238行)
修改前:
// 优先检查班级名额
if (scholarshipType.classQuota && scholarshipType.classQuota.hasQuota) {
if (count > scholarshipType.classQuota.availableQuota) {
ElMessage.error(`申请人数超过班级可用名额`);
return;
}
}
修改后:
// 检查班级名额情况
if (scholarshipType.classQuota) {
// 如果班级没有分配名额,直接报错
if (!scholarshipType.classQuota.hasQuota) {
ElMessage.error(`${scholarshipType.name} 在当前班级没有分配名额,无法申请`);
return;
}
// 如果有名额但不足,报错
if (count > scholarshipType.classQuota.availableQuota) {
ElMessage.error(`${scholarshipType.name} 申请人数(${count})超过班级可用名额(${scholarshipType.classQuota.availableQuota})`);
return;
}
}
用户反馈: "还是有这个报错,没有任何改变"
通过深入分析后端代码发现:
// 后端 getScholarshipTypesWithQuota 实际返回结构
{
id: 123,
name: "国家奖学金",
hasQuota: true, // true=有班级名额分配, false=无班级名额分配
totalQuota: 5, // 总名额
usedQuota: 2, // 已用名额
availableQuota: 3, // 可用名额
quotaStatus: "available" // available/full/unlimited
}
// 前端错误期望的嵌套结构
{
classQuota: {
hasQuota: true,
availableQuota: 3
},
schoolQuota: {
hasQuota: false,
quotaStatus: 'unlimited'
}
}
submitBatchApplication 验证逻辑文件: web/src/views/jcbt/scholarship/application/index.vue
位置: 第1195-1268行
修复后逻辑:
// 根据后端实际返回的数据结构进行验证
// 如果hasQuota为true,表示有班级名额分配
if (scholarshipType.hasQuota === true) {
const availableQuota = scholarshipType.availableQuota || 0;
if (availableQuota <= 0) {
ElMessage.error(`${scholarshipType.name} 在当前班级没有可用名额,无法申请`);
return;
}
if (count > availableQuota) {
ElMessage.error(`${scholarshipType.name} 申请人数(${count})超过班级可用名额(${availableQuota})`);
return;
}
}
// 如果hasQuota为false,表示没有班级名额分配,使用全校名额
else if (scholarshipType.hasQuota === false) {
const quotaStatus = scholarshipType.quotaStatus;
const availableQuota = scholarshipType.availableQuota || 0;
if (quotaStatus === 'unlimited') {
// 无限制名额,允许申请
} else if (quotaStatus === 'available') {
if (count > availableQuota) {
ElMessage.error(`${scholarshipType.name} 申请人数(${count})超过全校可用名额(${availableQuota})`);
return;
}
} else if (quotaStatus === 'full') {
ElMessage.error(`${scholarshipType.name} 全校名额已满,无法申请`);
return;
}
}
isScholarshipTypeSelectable 函数位置: 第895-933行
修复要点:
hasQuota 字段判断是否有班级名额分配quotaStatus 字段判断名额状态isQuotaExceeded 和 getRemainingQuota 函数位置: 第935-1010行
修复要点:
unlimited 状态的名额classQuota 和 schoolQuota 嵌套对象的引用npm run dev)docs/开发文档/API/奖学金申请管理API.md.cursor/cursorrules-frontend.md第一次修复时间: 2025-01-07 21:25:00
第二次修复时间: 2025-01-07 22:00:00
修复人员: Cursor AI Assistant
验证状态: 待用户测试验证
优先级: 高(影响核心业务功能)
修复总结: 通过深入分析后端实际数据结构,发现前端验证逻辑与后端返回数据不匹配的根本问题,进行了全面的数据结构适配修复。