101 lines
3.3 KiB
Markdown
101 lines
3.3 KiB
Markdown
|
|
# 学校端家长管理"选择孩子"列表字段完善计划
|
|||
|
|
|
|||
|
|
## 问题背景
|
|||
|
|
|
|||
|
|
学校端家长管理页面中的"选择孩子"弹窗列表(用于将学生关联到家长)缺少两个关键字段的显示:
|
|||
|
|
1. **性别** (gender) - 学生性别
|
|||
|
|
2. **所属班级** (className) - 学生所在班级名称
|
|||
|
|
|
|||
|
|
## 问题分析
|
|||
|
|
|
|||
|
|
通过代码审查发现:
|
|||
|
|
|
|||
|
|
### 1. 前端代码 (`ParentListView.vue`)
|
|||
|
|
- 第 597-601 行定义了表格列,期望显示 `gender` 和 `className`:
|
|||
|
|
```typescript
|
|||
|
|
const studentTableColumns = [
|
|||
|
|
{ title: '姓名', dataIndex: 'name', key: 'name', width: 120 },
|
|||
|
|
{ title: '性别', dataIndex: 'gender', key: 'gender', width: 80 },
|
|||
|
|
{ title: '班级', dataIndex: 'className', key: 'className', width: 120 },
|
|||
|
|
];
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 后端代码 (`SchoolStudentController.java`)
|
|||
|
|
- 第 89-119 行的 `getStudentPage` 方法返回学生列表
|
|||
|
|
- 目前只设置了 `classId`,未设置 `className`
|
|||
|
|
|
|||
|
|
### 3. DTO (`StudentResponse.java`)
|
|||
|
|
- 有 `gender` 字段(第 29 行)✅
|
|||
|
|
- 有 `classId` 字段(第 56 行)✅
|
|||
|
|
- **缺少 `className` 字段** ❌
|
|||
|
|
|
|||
|
|
### 4. 实体类 (`Student.java`)
|
|||
|
|
- 有 `gender` 字段(第 26 行)✅
|
|||
|
|
|
|||
|
|
## 根本原因
|
|||
|
|
|
|||
|
|
1. `StudentResponse` DTO 缺少 `className` 字段
|
|||
|
|
2. Controller 中只查询和设置了 `classId`,没有查询班级名称并设置 `className`
|
|||
|
|
|
|||
|
|
## 修改方案
|
|||
|
|
|
|||
|
|
### 1. 添加 `className` 字段到 `StudentResponse`
|
|||
|
|
|
|||
|
|
**文件**: `reading-platform-java/src/main/java/com/reading/platform/dto/response/StudentResponse.java`
|
|||
|
|
|
|||
|
|
在 `classId` 字段后添加 `className` 字段:
|
|||
|
|
```java
|
|||
|
|
@Schema(description = "所在班级 ID")
|
|||
|
|
private Long classId;
|
|||
|
|
|
|||
|
|
@Schema(description = "所在班级名称")
|
|||
|
|
private String className;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 在 Controller 中设置 `className`
|
|||
|
|
|
|||
|
|
**文件**: `reading-platform-java/src/main/java/com/reading/platform/controller/school/SchoolStudentController.java`
|
|||
|
|
|
|||
|
|
修改 `getStudentPage` 方法(第 100-118 行):
|
|||
|
|
```java
|
|||
|
|
for (StudentResponse vo : voList) {
|
|||
|
|
// 设置班级
|
|||
|
|
var clazz = classService.getPrimaryClassByStudentId(vo.getId());
|
|||
|
|
vo.setClassId(clazz != null ? clazz.getId() : null);
|
|||
|
|
vo.setClassName(clazz != null ? clazz.getName() : null); // 新增
|
|||
|
|
|
|||
|
|
// ... 其余代码不变
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
同样修改 `getStudent` 方法(第 66-86 行),添加 `className` 的设置。
|
|||
|
|
|
|||
|
|
### 3. 验证 `gender` 字段
|
|||
|
|
|
|||
|
|
`gender` 字段应该已通过 MapStruct 自动映射。如果前端仍不显示,需要检查:
|
|||
|
|
- 数据库中 `gender` 字段是否有值
|
|||
|
|
- Mapper 是否正确映射了该字段
|
|||
|
|
|
|||
|
|
## 关键文件列表
|
|||
|
|
|
|||
|
|
| 文件路径 | 修改类型 | 说明 |
|
|||
|
|
|---------|---------|------|
|
|||
|
|
| `reading-platform-java/src/main/java/com/reading/platform/dto/response/StudentResponse.java` | 修改 | 添加 `className` 字段 |
|
|||
|
|
| `reading-platform-java/src/main/java/com/reading/platform/controller/school/SchoolStudentController.java` | 修改 | 设置 `className` 字段值 |
|
|||
|
|
|
|||
|
|
## 验证步骤
|
|||
|
|
|
|||
|
|
1. 启动后端服务
|
|||
|
|
2. 进入学校端家长管理页面
|
|||
|
|
3. 点击任意家长的"孩子"按钮打开管理弹窗
|
|||
|
|
4. 点击"添加孩子"打开选择学生弹窗
|
|||
|
|
5. 验证表格中是否正确显示:
|
|||
|
|
- 性别列(男/女)
|
|||
|
|
- 班级列(班级名称)
|
|||
|
|
|
|||
|
|
## 风险评估
|
|||
|
|
|
|||
|
|
- **低风险**:只是添加一个返回字段,不影响现有功能
|
|||
|
|
- **向后兼容**:前端已准备好接收这些字段,不会破坏现有功能
|
|||
|
|
|