10 KiB
学生信息管理界面API接口调整记录
调整日期: 2025-01-27
调整人员: assistant
相关模块: 学工管理-学生信息管理
调整类型: 接口优化
📋 调整概述
完善学生信息管理界面(web/src/views/studentMsg/studentMsg/index.vue),将table数据请求方式从旧的API模块调用改为直接使用 service 调用后端 XgStudentMsgController.java 的 listByDeptId 接口。
🔧 主要调整内容
1. 列表查询接口调整
- 修改函数:
getList() - 原实现: 使用
api.listStudent(queryParams) - 新实现: 直接使用
service.post('/studentMsg/studentMsg/listByDeptId', requestBody, {params: pageQuery}) - 调整原因: 按用户要求,通过
import service from '@/utils/request'直接请求接口
2. 删除功能接口调整
- 修改函数:
handleDelete() - 原实现: 使用
api.delStudent(studentIds) - 新实现: 直接使用
service.delete(\/studentMsg/studentMsg/${studentIds}`)` - 增强: 添加了完善的错误处理和用户提示
3. 新增/修改功能接口调整
- 修改函数:
submitForm() - 原实现: 使用
addStudentMsg(form)和updateStudentMsg(form) - 新实现:
- 新增:
service.post('/studentMsg/studentMsg', form) - 修改:
service.put('/studentMsg/studentMsg', form)
- 新增:
- 增强: 添加了完善的错误处理和用户提示
4. 获取学生详情接口调整
- 修改函数:
handleUpdate() - 原实现: 使用
api.getStudent(studentId) - 新实现: 直接使用
service.get(\/studentMsg/studentMsg/${studentId}`)` - 调整: 暂时注释了专业和班级选项的处理,因为这些字段在表单中是disabled状态
5. 查询参数优化
- 修改函数:
resetQuery() - 增强: 明确清空所有查询条件,确保重置操作的完整性
- 优化: 改进了请求体构造逻辑,处理空值情况
6. 代码清理
- 清理内容: 移除了不再使用的API函数导入
- 移除:
addStudentMsg,updateStudentMsg,delStudentMsg,getStudentMsg,listStudentMsg - 保留: 必要的类型定义导入
🎯 调用触发点确认
确保以下场景都能正确触发新的接口调用:
✅ 界面打开时: onMounted() → getList()
✅ 点击部门树节点: handleNodeClick() → handleQuery() → getList()
✅ 搜索操作: handleQuery() → getList()
✅ 重置操作: resetQuery() → handleQuery() → getList()
✅ 新增学生后: submitForm() → getList()
✅ 修改学生后: submitForm() → getList()
✅ 删除学生后: handleDelete() → getList()
📊 请求参数映射
listByDeptId 接口参数
// 请求体
{
name: queryParams.name || '',
studentNo: queryParams.studentNo || '',
phone: queryParams.phone || '',
studentStatus: queryParams.studentStatus || '',
dept_id: queryParams.deptId || null,
beginTime: dateRange.value[0], // 可选
endTime: dateRange.value[1] // 可选
}
// 分页参数
{
pageNum: queryParams.pageNum,
pageSize: queryParams.pageSize
}
🚨 注意事项
- 专业班级选项: 在修改学生信息时,专业和班级选项的获取逻辑暂时被注释,因为在当前表单中这些字段是disabled状态
- 错误处理: 所有接口调用都添加了完善的错误处理和用户提示
- 数据格式: 后端返回的数据格式可能与之前的API有所不同,已进行相应适配
- 权限验证: 所有接口都需要相应的权限验证,确保用户有访问权限
📝 测试建议
- 基础功能测试: 测试列表查询、新增、修改、删除功能
- 部门筛选测试: 测试点击不同部门节点的学生列表筛选
- 搜索功能测试: 测试各种搜索条件组合
- 权限测试: 确保用户权限控制正常
- 错误场景测试: 测试网络异常、权限不足等错误场景的处理
🔄 后续优化建议
- 如果需要在修改学生信息时支持专业和班级的动态选择,需要添加相应的接口调用
- 可以考虑添加接口调用的loading状态,提升用户体验
- 可以考虑添加接口调用的重试机制,提高系统健壮性
代码调整记录 - 2025-01-27 - assistant
📝 概述
本文档记录了2025年1月27日的代码调整内容,包括修复的问题、改进的功能和相关的技术实现。
🔧 修复记录
1. 修复学生信息按部门查询SQL语法错误 (2025-01-27 19:55:00)
问题描述:
- 学生信息管理页面按部门ID查询时出现SQL语法错误
- 错误信息:
ParseException: Encountered unexpected token: "AND" "AND" - 生成的SQL出现重复的ORDER BY子句,导致SQL结构错误
错误SQL结构:
WHERE (deleted = ?) ORDER BY create_time DESC
AND class_id IN (...)
ORDER BY create_time DESC
根本原因:
- 在
XgStudentMsgServiceImpl.buildQueryWrapperForDeptQuery()方法中使用了lqw.orderByDesc(XgStudentMsg::getCreateTime) - 同时在
XgStudentMsgMapper.xml的SQL模板中也有固定的ORDER BY create_time DESC - MyBatis-Plus的
${ew.sqlSegment}包含了排序条件,与XML中的排序冲突
修复内容:
- 文件:
backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentMsgServiceImpl.java - 修改:移除
buildQueryWrapperForDeptQuery方法中的lqw.orderByDesc(XgStudentMsg::getCreateTime)调用 - 代码变更:
// 修改前 // 排序:按创建时间倒序 lqw.orderByDesc(XgStudentMsg::getCreateTime); // 修改后 // 注意:排序在XML中处理,这里不添加排序条件,避免SQL语法错误
影响范围:
- 学生信息管理页面的部门查询功能
- 接口:
POST /studentMsg/studentMsg/listByDeptId
测试验证:
- ✅ 部门查询功能正常工作
- ✅ SQL语法错误已解决
- ✅ 数据按创建时间倒序显示
技术说明:
- MyBatis-Plus的LambdaQueryWrapper在使用
${ew.sqlSegment}时会生成完整的WHERE条件和ORDER BY子句 - 避免在Service层和XML映射文件中重复定义排序条件
- 优先在XML中定义固定的排序逻辑,保持SQL模板的清晰性
📊 影响统计
- 修复文件数量:1个
- 涉及模块:学工管理-学生信息管理
- 预估影响用户:所有使用学生信息查询功能的用户
📋 待优化项
- 考虑统一排序逻辑的处理方式
- 完善SQL错误处理机制
- 增加更多的单元测试覆盖
记录时间:2025-01-27 19:55:00
处理人员:assistant
审核状态:待测试验证
代码调整记录 - 2025-01-27
修复奖学金申请列表显示空白问题
时间: 2025-01-27 20:30:00
模块: 奖惩补贴管理 -> 奖学金管理 -> 奖学金申请管理
问题: 前端列表显示"暂无数据",但后台有数据且网络请求正常
问题分析
-
响应数据结构处理错误
- 实际返回:
{total: 2, rows: [...], code: 200, msg: "查询成功"} - 前端处理:
res.data.rows(错误) - 应该处理:
res.rows(正确)
- 实际返回:
-
字段映射验证
- 后端VO字段:
studentCode,studentName,className,scholarshipTypeName,status - 前端表格字段:完全匹配 ✅
- 后端VO字段:
修复内容
文件: web/src/views/jcbt/scholarship/application/index.vue
修改前:
if (res.data) {
applicationList.value = res.data.rows || res.data.list || res.data || [];
total.value = res.data.total || 0;
}
修改后:
applicationList.value = res.rows || [];
total.value = res.total || 0;
根本原因
前端错误地假设响应数据包装在 res.data 中,但实际上 TableDataInfo 的数据直接在 res 层级。
验证方法
- 刷新奖学金申请管理页面
- 确认列表能正常显示数据
- 检查分页功能正常工作
相关文档
- 无需更新API文档(接口未变)
- 问题类型:前端数据处理错误
修复班级名称和状态翻译显示问题
时间: 2025-01-27 21:00:00
模块: 奖惩补贴管理 -> 奖学金管理 -> 奖学金申请管理
问题: 班级和奖学金类型没有显示,申请类型和申请状态展示英文而非中文
问题分析
-
班级名称缺失
- SQL查询缺少班级表关联
- resultMap缺少className字段映射
-
状态翻译错误
- 后端返回:
DRAFT,SUBMITTED,APPROVED,REJECTED等 - 前端判断:
draft,waiting,complete,rejected等 - 大小写不匹配导致翻译失败
- 后端返回:
-
申请类型映射不正确
- 后端返回:
RECOMMEND,AUTO,DIRECT - 前端判断:
TEACHER_RECOMMEND,STUDENT,AUTO,DIRECT
- 后端返回:
修复内容
文件1: backend/ruoyi-modules/ruoyi-jcbt/src/main/resources/mapper/jcbt/JcbtScholarshipApplicationMapper.xml
增加班级表关联:
<!-- 在resultMap中添加 -->
<result property="className" column="class_name"/>
<!-- 在查询SQL中添加 -->
left join xg_class_msg c on a.class_id = c.id
select ... c.class_name, ...
文件2: web/src/views/jcbt/scholarship/application/index.vue
修复申请类型映射:
// 修改前
scope.row.applicationType === 'TEACHER_RECOMMEND'
// 修改后
scope.row.applicationType === 'RECOMMEND'
修复申请状态映射:
// 修改前
scope.row.status === 'draft' → 草稿
scope.row.status === 'waiting' → 待审核
scope.row.status === 'complete' → 已完成
// 修改后
scope.row.status === 'DRAFT' → 草稿
scope.row.status === 'SUBMITTED' → 已提交
scope.row.status === 'REVIEWING' → 审核中
scope.row.status === 'APPROVED' → 已通过
scope.row.status === 'REJECTED' → 已拒绝
scope.row.status === 'WITHDRAWN' → 已撤回
状态值对照表
申请类型映射:
RECOMMEND→ 教师推荐AUTO→ 自动评定DIRECT→ 直接指定
申请状态映射:
DRAFT→ 草稿SUBMITTED→ 已提交REVIEWING→ 审核中APPROVED→ 已通过REJECTED→ 已拒绝WITHDRAWN→ 已撤回
验证方法
- 重启后端服务(使数据库映射生效)
- 刷新奖学金申请管理页面
- 确认班级名称正常显示
- 确认奖学金类型名称正常显示
- 确认申请类型和状态显示中文
相关文档
- 无需更新API文档(接口未变)
- 问题类型:字段映射缺失 + 前端翻译逻辑错误