Files
hzdyjs/docs/开发文档/宿舍卫生检查编辑时学生评分ID修复报告.md
2025-08-16 22:44:56 +08:00

148 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 宿舍卫生检查编辑时学生评分ID修复报告
## 问题描述
### 错误现象
在宿舍卫生检查编辑模式下,提交表单时 `studentScores` 数据中缺少学生评分记录的 `id` 字段,导致后端无法正确识别和更新现有的学生评分记录。
### 问题分析
1. **数据获取阶段**:从历史数据获取学生评分信息时,没有保存学生评分记录的 `id` 字段
2. **数据提交阶段**:构建提交数据时,没有包含学生评分记录的 `id` 字段
3. **类型不匹配**:存在 `form.totalScore !== ''` 的类型比较错误
## 修复方案
### 1. 修复数据获取逻辑
**文件:** `web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckDialog.vue`
**修改内容:**
```typescript
// 修复前
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. 修复数据提交逻辑
**修改内容:**
```typescript
// 修复前
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. 修复类型比较错误
**修改内容:**
```typescript
// 修复前
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. 添加调试日志
**新增内容:**
```typescript
// 调试日志:输出提交的数据结构
console.log('提交的完整数据:', submitData);
console.log('学生评分数据:', studentScores);
console.log('是否为编辑模式:', !!form.id);
```
## 修复要点
### 1. 数据完整性
- **编辑模式**:包含学生评分记录的 `id` 字段
- **新增模式**:不包含 `id` 字段(为 `undefined`)
### 2. 类型安全
- 移除不必要的字符串比较
- 确保数字类型字段的正确处理
### 3. 调试支持
- 添加详细的调试日志
- 便于问题排查和数据验证
## 后端处理逻辑
### 当前实现
后端采用"删除后重新插入"的策略:
1. 逻辑删除原有学生评分记录
2. 插入新的学生评分记录
### 优势
- 简化了数据一致性处理
- 避免了复杂的更新逻辑
- 确保数据的完整性
### 注意事项
- 即使前端传递了学生评分记录的ID,后端也不会使用它来更新现有记录
- 但传递ID有助于数据追踪和调试
## 测试验证
### 1. 编辑模式测试
- ✅ 正确获取历史学生评分数据
- ✅ 包含学生评分记录的ID
- ✅ 提交数据格式正确
### 2. 新增模式测试
- ✅ 不包含学生评分记录的ID
- ✅ 数据格式符合新增要求
### 3. 类型安全测试
- ✅ 移除类型不匹配的比较
- ✅ 确保数字字段的正确处理
## 总结
通过本次修复,解决了宿舍卫生检查编辑时学生评分ID缺失的问题,确保了:
1. **数据完整性**:编辑时正确传递学生评分记录的ID
2. **类型安全**:修复了类型比较错误
3. **调试支持**:添加了详细的调试日志
4. **向后兼容**:新增模式不受影响
修复后的代码能够正确处理编辑和新增两种模式,确保数据的准确性和一致性。