refactor: 删除学生管理中的学科字段

前端:
- 列表页删除学科列
- 编辑弹窗删除学科下拉框

后端:
- PgStudent 实体删除 subjectId 字段
- StudentVo 删除 subjectId 和 subjectName 字段
- Service 层删除学科关联查询

需求文档:
- 删除学生数据项中的学科字段
- 删除表格列定义中的学科列

数据库需执行:ALTER TABLE pg_student DROP COLUMN subject_id;
This commit is contained in:
神码-方晓辉 2026-02-02 21:11:37 +08:00
parent b5c2692aab
commit 43ee2dbf87
6 changed files with 2 additions and 51 deletions

View File

@ -44,8 +44,6 @@ public class PgStudent extends BaseEntity {
private Long schoolClassId;
private Long subjectId;
private Long memberId;
private String status;

View File

@ -50,13 +50,6 @@ public class StudentVo {
*/
private String className;
private Long subjectId;
/**
* 学科名称
*/
private String subjectName;
private Long memberId;
/**

View File

@ -22,8 +22,6 @@ import org.dromara.pangu.school.domain.PgSchoolGrade;
import org.dromara.pangu.school.mapper.PgSchoolClassMapper;
import org.dromara.pangu.school.mapper.PgSchoolGradeMapper;
import org.dromara.pangu.school.mapper.PgSchoolMapper;
import org.dromara.pangu.base.domain.PgSubject;
import org.dromara.pangu.base.mapper.PgSubjectMapper;
import org.dromara.pangu.student.domain.PgStudent;
import org.dromara.pangu.student.domain.dto.StudentImportDto;
import org.dromara.pangu.student.domain.vo.StudentVo;
@ -53,7 +51,6 @@ public class PgStudentServiceImpl implements IPgStudentService {
private final PgSchoolClassMapper schoolClassMapper;
private final PgGradeMapper gradeMapper;
private final PgClassMapper classMapper;
private final PgSubjectMapper subjectMapper;
private final PgMemberMapper memberMapper;
@Override
@ -123,14 +120,12 @@ public class PgStudentServiceImpl implements IPgStudentService {
Set<Long> schoolIds = new HashSet<>();
Set<Long> schoolGradeIds = new HashSet<>();
Set<Long> schoolClassIds = new HashSet<>();
Set<Long> subjectIds = new HashSet<>();
Set<Long> memberIds = new HashSet<>();
for (PgStudent s : students) {
if (s.getSchoolId() != null) schoolIds.add(s.getSchoolId());
if (s.getSchoolGradeId() != null) schoolGradeIds.add(s.getSchoolGradeId());
if (s.getSchoolClassId() != null) schoolClassIds.add(s.getSchoolClassId());
if (s.getSubjectId() != null) subjectIds.add(s.getSubjectId());
if (s.getMemberId() != null) memberIds.add(s.getMemberId());
}
@ -147,10 +142,6 @@ public class PgStudentServiceImpl implements IPgStudentService {
schoolClassMapper.selectByIds(schoolClassIds).stream()
.collect(Collectors.toMap(PgSchoolClass::getId, Function.identity()));
Map<Long, PgSubject> subjectMap = subjectIds.isEmpty() ? Collections.emptyMap() :
subjectMapper.selectByIds(subjectIds).stream()
.collect(Collectors.toMap(PgSubject::getSubjectId, Function.identity()));
Map<Long, PgMember> memberMap = memberIds.isEmpty() ? Collections.emptyMap() :
memberMapper.selectByIds(memberIds).stream()
.collect(Collectors.toMap(PgMember::getMemberId, Function.identity()));
@ -198,12 +189,6 @@ public class PgStudentServiceImpl implements IPgStudentService {
vo.setClassName(classNameMap.get(schoolClass.getClassId()));
}
// 填充学科名称
PgSubject subject = subjectMap.get(s.getSubjectId());
if (subject != null) {
vo.setSubjectName(subject.getSubjectName());
}
// 填充会员信息
PgMember member = memberMap.get(s.getMemberId());
if (member != null) {

View File

@ -322,7 +322,7 @@
| 功能编号 | 功能名称 | 功能描述 | 优先级 |
| ------- | ------ | ------------------- |:---:|
| STU-001 | 学生列表查询 | 按姓名、学号、性别、手机号、学科等筛选 | P0 |
| STU-001 | 学生列表查询 | 按姓名、学号、性别、手机号等筛选 | P0 |
| STU-002 | 学校树筛选 | 通过左侧学校树快速定位学生,点击节点时带上完整层级条件(学校+年级+班级) | P0 |
| STU-003 | 新增学生 | 手动创建学生信息 | P0 |
| STU-004 | 编辑学生 | 修改学生基本信息 | P0 |
@ -372,7 +372,6 @@
| 所属学校 | 下拉选择 | ✓ | 依赖区域 |
| 所属年级 | 下拉选择 | ✓ | 依赖学校 |
| 所属班级 | 下拉选择 | ✓ | 依赖年级 |
| 学科 | 下拉选择 | - | 学科信息 |
| 归属用户 | 关联 | ✓ | 关联会员ID |
| 创建时间 | 日期时间 | - | 系统自动记录 |
@ -844,7 +843,6 @@
| 学校 | 学校名称 |
| 年级 | 年级名称 |
| 班级 | 班级名称 |
| 学科 | 学科名称 |
| 用户身份 | 家长/教师 |
| 用户昵称 | 归属会员昵称 |
| 用户手机号 | 归属会员手机号 |

View File

@ -53,11 +53,6 @@
@change="handleSchoolChange"
/>
</el-form-item>
<el-form-item label="学科" prop="subjectId">
<el-select v-model="form.subjectId" placeholder="请选择学科(选填)" clearable style="width: 100%">
<el-option v-for="item in subjectList" :key="item.subjectId" :label="item.subjectName" :value="item.subjectId" />
</el-select>
</el-form-item>
<el-form-item label="归属用户" prop="memberId">
<div style="display: flex; gap: 8px; width: 100%">
<el-input
@ -102,8 +97,6 @@ const memberSelectRef = ref()
//
const schoolTreeData = ref([])
//
const subjectList = ref([])
const initialForm = {
studentId: null,
@ -115,7 +108,6 @@ const initialForm = {
schoolId: null,
schoolGradeId: null,
schoolClassId: null,
subjectId: null,
memberId: null,
memberDisplay: ''
}
@ -143,18 +135,6 @@ const getSchoolTree = async () => {
}
}
//
const getSubjectList = async () => {
try {
const res = await request.get('/business/subject/list', { params: { status: '0' } })
if (res.code === 200) {
subjectList.value = res.rows || []
}
} catch (e) {
console.error('获取学科列表失败:', e)
}
}
//
const formatBirthday = (date) => {
if (!date) return ''
@ -190,7 +170,7 @@ const open = async (row = null) => {
formRef.value?.clearValidate()
//
await Promise.all([getSchoolTree(), getSubjectList()])
await getSchoolTree()
//
if (row) {
@ -203,7 +183,6 @@ const open = async (row = null) => {
form.studentNo = data.studentNo
form.gender = data.gender || '0'
form.birthday = data.birthday ? formatBirthday(data.birthday) : ''
form.subjectId = data.subjectId
form.memberId = data.memberId
form.memberDisplay = data.memberNickname ? `${data.memberNickname}${data.memberPhone || ''}` : ''
@ -265,7 +244,6 @@ const handleSubmit = async () => {
schoolId: form.schoolId,
schoolGradeId: form.schoolGradeId,
schoolClassId: form.schoolClassId,
subjectId: form.subjectId,
memberId: form.memberId
}

View File

@ -73,7 +73,6 @@
<el-table-column prop="schoolName" label="学校" min-width="150" show-overflow-tooltip />
<el-table-column prop="gradeName" label="年级" width="80" />
<el-table-column prop="className" label="班级" width="80" />
<el-table-column prop="subjectName" label="学科" width="80" />
<el-table-column prop="memberNickname" label="归属用户" width="120" show-overflow-tooltip>
<template #default="{ row }">
<span v-if="row.memberNickname">{{ row.memberNickname }}</span>