326 lines
10 KiB
Markdown
326 lines
10 KiB
Markdown
# 学生信息管理界面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 接口参数
|
||
```javascript
|
||
// 请求体
|
||
{
|
||
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
|
||
}
|
||
```
|
||
|
||
## 🚨 注意事项
|
||
|
||
1. **专业班级选项**: 在修改学生信息时,专业和班级选项的获取逻辑暂时被注释,因为在当前表单中这些字段是disabled状态
|
||
2. **错误处理**: 所有接口调用都添加了完善的错误处理和用户提示
|
||
3. **数据格式**: 后端返回的数据格式可能与之前的API有所不同,已进行相应适配
|
||
4. **权限验证**: 所有接口都需要相应的权限验证,确保用户有访问权限
|
||
|
||
## 📝 测试建议
|
||
|
||
1. **基础功能测试**: 测试列表查询、新增、修改、删除功能
|
||
2. **部门筛选测试**: 测试点击不同部门节点的学生列表筛选
|
||
3. **搜索功能测试**: 测试各种搜索条件组合
|
||
4. **权限测试**: 确保用户权限控制正常
|
||
5. **错误场景测试**: 测试网络异常、权限不足等错误场景的处理
|
||
|
||
## 🔄 后续优化建议
|
||
|
||
1. 如果需要在修改学生信息时支持专业和班级的动态选择,需要添加相应的接口调用
|
||
2. 可以考虑添加接口调用的loading状态,提升用户体验
|
||
3. 可以考虑添加接口调用的重试机制,提高系统健壮性
|
||
|
||
---
|
||
|
||
# 代码调整记录 - 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结构:**
|
||
```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中的排序冲突
|
||
|
||
**修复内容:**
|
||
1. **文件**:`backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentMsgServiceImpl.java`
|
||
2. **修改**:移除`buildQueryWrapperForDeptQuery`方法中的`lqw.orderByDesc(XgStudentMsg::getCreateTime)`调用
|
||
3. **代码变更**:
|
||
```java
|
||
// 修改前
|
||
// 排序:按创建时间倒序
|
||
lqw.orderByDesc(XgStudentMsg::getCreateTime);
|
||
|
||
// 修改后
|
||
// 注意:排序在XML中处理,这里不添加排序条件,避免SQL语法错误
|
||
```
|
||
|
||
**影响范围:**
|
||
- 学生信息管理页面的部门查询功能
|
||
- 接口:`POST /studentMsg/studentMsg/listByDeptId`
|
||
|
||
**测试验证:**
|
||
- ✅ 部门查询功能正常工作
|
||
- ✅ SQL语法错误已解决
|
||
- ✅ 数据按创建时间倒序显示
|
||
|
||
**技术说明:**
|
||
- MyBatis-Plus的LambdaQueryWrapper在使用`${ew.sqlSegment}`时会生成完整的WHERE条件和ORDER BY子句
|
||
- 避免在Service层和XML映射文件中重复定义排序条件
|
||
- 优先在XML中定义固定的排序逻辑,保持SQL模板的清晰性
|
||
|
||
---
|
||
|
||
## 📊 影响统计
|
||
- 修复文件数量:1个
|
||
- 涉及模块:学工管理-学生信息管理
|
||
- 预估影响用户:所有使用学生信息查询功能的用户
|
||
|
||
---
|
||
|
||
## 📋 待优化项
|
||
1. 考虑统一排序逻辑的处理方式
|
||
2. 完善SQL错误处理机制
|
||
3. 增加更多的单元测试覆盖
|
||
|
||
---
|
||
|
||
**记录时间**:2025-01-27 19:55:00
|
||
**处理人员**:assistant
|
||
**审核状态**:待测试验证
|
||
|
||
---
|
||
|
||
# 代码调整记录 - 2025-01-27
|
||
|
||
## 修复奖学金申请列表显示空白问题
|
||
|
||
**时间**: 2025-01-27 20:30:00
|
||
**模块**: 奖惩补贴管理 -> 奖学金管理 -> 奖学金申请管理
|
||
**问题**: 前端列表显示"暂无数据",但后台有数据且网络请求正常
|
||
|
||
### 问题分析
|
||
|
||
1. **响应数据结构处理错误**
|
||
- 实际返回:`{total: 2, rows: [...], code: 200, msg: "查询成功"}`
|
||
- 前端处理:`res.data.rows`(错误)
|
||
- 应该处理:`res.rows`(正确)
|
||
|
||
2. **字段映射验证**
|
||
- 后端VO字段:`studentCode`, `studentName`, `className`, `scholarshipTypeName`, `status`
|
||
- 前端表格字段:完全匹配 ✅
|
||
|
||
### 修复内容
|
||
|
||
**文件**: `web/src/views/jcbt/scholarship/application/index.vue`
|
||
|
||
**修改前**:
|
||
```typescript
|
||
if (res.data) {
|
||
applicationList.value = res.data.rows || res.data.list || res.data || [];
|
||
total.value = res.data.total || 0;
|
||
}
|
||
```
|
||
|
||
**修改后**:
|
||
```typescript
|
||
applicationList.value = res.rows || [];
|
||
total.value = res.total || 0;
|
||
```
|
||
|
||
### 根本原因
|
||
|
||
前端错误地假设响应数据包装在 `res.data` 中,但实际上 `TableDataInfo` 的数据直接在 `res` 层级。
|
||
|
||
### 验证方法
|
||
|
||
1. 刷新奖学金申请管理页面
|
||
2. 确认列表能正常显示数据
|
||
3. 检查分页功能正常工作
|
||
|
||
### 相关文档
|
||
|
||
- 无需更新API文档(接口未变)
|
||
- 问题类型:前端数据处理错误
|
||
|
||
---
|
||
|
||
## 修复班级名称和状态翻译显示问题
|
||
|
||
**时间**: 2025-01-27 21:00:00
|
||
**模块**: 奖惩补贴管理 -> 奖学金管理 -> 奖学金申请管理
|
||
**问题**: 班级和奖学金类型没有显示,申请类型和申请状态展示英文而非中文
|
||
|
||
### 问题分析
|
||
|
||
1. **班级名称缺失**
|
||
- SQL查询缺少班级表关联
|
||
- resultMap缺少className字段映射
|
||
|
||
2. **状态翻译错误**
|
||
- 后端返回:`DRAFT`, `SUBMITTED`, `APPROVED`, `REJECTED` 等
|
||
- 前端判断:`draft`, `waiting`, `complete`, `rejected` 等
|
||
- 大小写不匹配导致翻译失败
|
||
|
||
3. **申请类型映射不正确**
|
||
- 后端返回:`RECOMMEND`, `AUTO`, `DIRECT`
|
||
- 前端判断:`TEACHER_RECOMMEND`, `STUDENT`, `AUTO`, `DIRECT`
|
||
|
||
### 修复内容
|
||
|
||
**文件1**: `backend/ruoyi-modules/ruoyi-jcbt/src/main/resources/mapper/jcbt/JcbtScholarshipApplicationMapper.xml`
|
||
|
||
**增加班级表关联**:
|
||
```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`
|
||
|
||
**修复申请类型映射**:
|
||
```typescript
|
||
// 修改前
|
||
scope.row.applicationType === 'TEACHER_RECOMMEND'
|
||
// 修改后
|
||
scope.row.applicationType === 'RECOMMEND'
|
||
```
|
||
|
||
**修复申请状态映射**:
|
||
```typescript
|
||
// 修改前
|
||
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` → 已撤回
|
||
|
||
### 验证方法
|
||
|
||
1. 重启后端服务(使数据库映射生效)
|
||
2. 刷新奖学金申请管理页面
|
||
3. 确认班级名称正常显示
|
||
4. 确认奖学金类型名称正常显示
|
||
5. 确认申请类型和状态显示中文
|
||
|
||
### 相关文档
|
||
|
||
- 无需更新API文档(接口未变)
|
||
- 问题类型:字段映射缺失 + 前端翻译逻辑错误 |