3.9 KiB
3.9 KiB
宿舍卫生检查编辑时学生评分ID修复报告
问题描述
错误现象
在宿舍卫生检查编辑模式下,提交表单时 studentScores 数据中缺少学生评分记录的 id 字段,导致后端无法正确识别和更新现有的学生评分记录。
问题分析
- 数据获取阶段:从历史数据获取学生评分信息时,没有保存学生评分记录的
id字段 - 数据提交阶段:构建提交数据时,没有包含学生评分记录的
id字段 - 类型不匹配:存在
form.totalScore !== ''的类型比较错误
修复方案
1. 修复数据获取逻辑
文件: web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckDialog.vue
修改内容:
// 修复前
roomStudents.value = studentScoresRes.data.map((studentScore: any) => ({
studentId: studentScore.studentId,
// ... 其他字段
}));
// 修复后
roomStudents.value = studentScoresRes.data.map((studentScore: any) => ({
// 保存学生评分记录的ID,用于编辑时提交
id: studentScore.id,
studentId: studentScore.studentId,
// ... 其他字段
}));
2. 修复数据提交逻辑
修改内容:
// 修复前
const studentScores = roomStudents.value.map((student: any) => ({
studentId: Number(student.studentId),
// ... 其他字段
}));
// 修复后
const studentScores = roomStudents.value.map((student: any) => {
const studentScore: any = {
studentId: Number(student.studentId),
// ... 其他字段
};
// 编辑时包含学生评分记录的ID,新增时不包含
if (form.id && student.id) {
studentScore.id = student.id;
}
return studentScore;
});
3. 修复类型比较错误
修改内容:
// 修复前
if (
form.totalScore !== null &&
form.totalScore !== undefined &&
form.totalScore !== '' && // ❌ 类型不匹配:number !== string
form.totalScore !== 0 &&
String(form.totalScore) !== '0'
) {
// 修复后
if (
form.totalScore !== null &&
form.totalScore !== undefined &&
form.totalScore !== 0 &&
String(form.totalScore) !== '0'
) {
4. 添加调试日志
新增内容:
// 调试日志:输出提交的数据结构
console.log('提交的完整数据:', submitData);
console.log('学生评分数据:', studentScores);
console.log('是否为编辑模式:', !!form.id);
修复要点
1. 数据完整性
- 编辑模式:包含学生评分记录的
id字段 - 新增模式:不包含
id字段(为undefined)
2. 类型安全
- 移除不必要的字符串比较
- 确保数字类型字段的正确处理
3. 调试支持
- 添加详细的调试日志
- 便于问题排查和数据验证
后端处理逻辑
当前实现
后端采用"删除后重新插入"的策略:
- 逻辑删除原有学生评分记录
- 插入新的学生评分记录
优势
- 简化了数据一致性处理
- 避免了复杂的更新逻辑
- 确保数据的完整性
注意事项
- 即使前端传递了学生评分记录的ID,后端也不会使用它来更新现有记录
- 但传递ID有助于数据追踪和调试
测试验证
1. 编辑模式测试
- ✅ 正确获取历史学生评分数据
- ✅ 包含学生评分记录的ID
- ✅ 提交数据格式正确
2. 新增模式测试
- ✅ 不包含学生评分记录的ID
- ✅ 数据格式符合新增要求
3. 类型安全测试
- ✅ 移除类型不匹配的比较
- ✅ 确保数字字段的正确处理
总结
通过本次修复,解决了宿舍卫生检查编辑时学生评分ID缺失的问题,确保了:
- 数据完整性:编辑时正确传递学生评分记录的ID
- 类型安全:修复了类型比较错误
- 调试支持:添加了详细的调试日志
- 向后兼容:新增模式不受影响
修复后的代码能够正确处理编辑和新增两种模式,确保数据的准确性和一致性。