Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-17-wuzhen-batch-form-fix.md
T

6.6 KiB
Raw Blame History

代码调整记录 - 2025-01-17 - wuzhen - 信息采集批次新增功能修复

📋 变更概述

变更日期: 2025-01-17
变更人员: wuzhen
变更类型: Bug修复
影响模块: 学工管理 - 信息采集批次管理
变更时间: 2025-01-17 15:30:00

🎯 问题描述

原始问题

  • 现象: 信息采集批次管理页面新增批次后,新增的数据没有在前端展示
  • 用户反馈: 点击"新增批次"按钮,填写表单并提交后,显示"新增成功",但列表中看不到新增的数据

问题分析

通过详细分析前后端代码,发现了以下问题:

  1. 前端表单字段不完整:

    • 前端表单只有:id, batchName, batchType, startTime, endTime, description
    • 后端BO对象有多个必填字段:batchCode(批次编码)、academicYear(学年)
  2. 后端验证失败:

    • 后端BO对象中 batchCode 和 academicYear 都是必填字段(@NotBlank)
    • 前端没有提供这些字段,导致后端验证失败
    • 验证失败后,数据没有保存到数据库
  3. 前端错误处理不完善:

    • 前端没有正确处理后端验证错误信息
    • 显示了"新增成功",但实际上后端可能返回了验证错误

🔧 解决方案

1. 前端表单字段完善

修改文件:web/src/views/xg-xx/collectionBatch/index.vue

添加缺失的必填字段:

// 表单数据
const initFormData = {
  id: undefined,
  batchCode: '',        // 新增:批次编码(必填)
  batchName: '',
  batchType: '',
  academicYear: '',     // 新增:学年(必填)
  semester: '',         // 新增:学期(可选)
  startTime: '',
  endTime: '',
  description: ''
}

完善表单验证规则:

rules: {
  batchCode: [{ required: true, message: '批次编码不能为空', trigger: 'blur' }],
  batchName: [{ required: true, message: '批次名称不能为空', trigger: 'blur' }],
  batchType: [{ required: true, message: '批次类型不能为空', trigger: 'change' }],
  academicYear: [{ required: true, message: '学年不能为空', trigger: 'blur' }],
  startTime: [{ required: true, message: '开始时间不能为空', trigger: 'change' }],
  endTime: [{ required: true, message: '结束时间不能为空', trigger: 'change' }]
}

2. 表单HTML结构优化

新增的表单字段:

<!-- 批次编码字段 -->
<el-form-item label="批次编码" prop="batchCode">
  <el-input v-model="form.batchCode" placeholder="请输入批次编码" />
</el-form-item>

<!-- 学年字段 -->
<el-form-item label="学年" prop="academicYear">
  <el-input v-model="form.academicYear" placeholder="请输入学年,如:2024-2025" />
</el-form-item>

<!-- 学期字段 -->
<el-form-item label="学期" prop="semester">
  <el-select v-model="form.semester" placeholder="请选择学期">
    <el-option label="春季" value="spring" />
    <el-option label="秋季" value="autumn" />
  </el-select>
</el-form-item>

3. 批次类型选项更新

修改前:

<el-option label="学生信息" value="student_info" />
<el-option label="家庭信息" value="family_info" />
<el-option label="其他信息" value="other_info" />

修改后:

<el-option label="年度采集" value="annual" />
<el-option label="学期采集" value="semester" />
<el-option label="月度采集" value="monthly" />
<el-option label="自定义" value="custom" />

4. 错误处理机制改进

修改前:

} catch (error) {
  console.error('保存失败:', error)
  ElMessage.error('保存失败,请重试')
}

修改后:

} catch (error) {
  console.error('保存失败:', error)
  // 显示详细的错误信息
  if (error.response && error.response.data && error.response.data.msg) {
    ElMessage.error(error.response.data.msg)
  } else if (error.message) {
    ElMessage.error(error.message)
  } else {
    ElMessage.error('保存失败,请重试')
  }
}

5. 类型定义修复

修复TypeScript类型错误:

// 修改前
const formData = { ...form }
if (form.id) {

// 修改后  
const formData = { ...form.value }
if (form.value.id) {

📊 修改文件列表

前端文件

  1. web/src/views/xg-xx/collectionBatch/index.vue
    • 添加缺失的表单字段(batchCode、academicYear、semester)
    • 完善表单验证规则
    • 更新批次类型选项
    • 改进错误处理逻辑
    • 修复TypeScript类型错误

🧪 测试验证

测试步骤

  1. 启动前端开发服务器:cd web && npm run dev
  2. 访问页面:打开信息采集批次管理页面
  3. 新增测试:
    • 点击"新增批次"按钮
    • 填写所有必填字段:批次编码、批次名称、批次类型、学年、开始时间、结束时间
    • 提交表单
  4. 验证结果:
    • 检查是否显示"新增成功"消息
    • 检查列表是否刷新并显示新增的数据
    • 检查数据是否正确保存到数据库

预期结果

  • ✅ 表单提交成功
  • ✅ 数据正确保存到数据库
  • ✅ 前端列表自动刷新显示新增数据
  • ✅ 错误信息正确显示(如果有验证错误)

🔄 后续优化建议

  1. 字段自动生成:

    • 批次编码可以考虑自动生成(基于时间戳或规则)
    • 学年可以提供下拉选择或自动填充当前学年
  2. 表单布局优化:

    • 可以考虑使用分组布局,将相关字段归类
    • 添加字段说明或提示信息
  3. 数据验证增强:

    • 添加批次编码唯一性验证
    • 添加时间范围合理性验证
  4. 用户体验改进:

    • 添加表单自动保存功能
    • 提供表单重置功能
    • 添加loading状态显示

📝 知识总结

关键经验

  1. 前后端字段一致性:确保前端表单字段与后端BO对象必填字段保持一致
  2. 错误处理重要性:正确处理和显示后端验证错误,避免误导用户
  3. 类型安全:在TypeScript项目中注意类型定义的正确性
  4. 用户体验:及时反馈操作结果,提供清晰的错误信息

技术要点

  • Vue 3 Composition API的响应式数据处理
  • Element Plus表单验证机制
  • 前后端数据交互的错误处理
  • TypeScript类型定义和类型安全

✅ 变更状态

  • 前端表单字段完善: ✅ 已完成
  • 表单验证规则更新: ✅ 已完成
  • 错误处理机制改进: ✅ 已完成
  • 功能测试验证: 🔄 进行中

变更完成时间: 2025-01-17 16:00:00
测试状态: 待用户验证
文档更新: 已完成