fix: 修复H5添加学生数据权限和学校树节点ID冲突问题

1. H5添加/编辑学生时同步设置 dept_id
2. 学校树节点ID添加类型前缀防止冲突
3. 前端使用正确的ID字段进行查询
This commit is contained in:
神码-方晓辉 2026-02-03 22:23:38 +08:00
parent 998d9aee35
commit 1d30e82a2d
4 changed files with 20 additions and 12 deletions

View File

@ -356,7 +356,7 @@ public class H5MemberServiceImpl implements H5MemberService {
Long memberId = getCurrentMemberId();
// 校验学校年级班级是否存在
validateSchoolInfo(dto.getSchoolId(), dto.getSchoolGradeId(), dto.getSchoolClassId());
PgSchool school = validateSchoolInfo(dto.getSchoolId(), dto.getSchoolGradeId(), dto.getSchoolClassId());
// 创建学生
PgStudent student = new PgStudent();
@ -368,6 +368,7 @@ public class H5MemberServiceImpl implements H5MemberService {
student.setSchoolId(dto.getSchoolId());
student.setSchoolGradeId(dto.getSchoolGradeId());
student.setSchoolClassId(dto.getSchoolClassId());
student.setDeptId(school.getDeptId()); // 设置部门ID用于数据权限
student.setStatus("0");
studentMapper.insert(student);
@ -452,7 +453,7 @@ public class H5MemberServiceImpl implements H5MemberService {
}
// 校验学校年级班级是否存在
validateSchoolInfo(dto.getSchoolId(), dto.getSchoolGradeId(), dto.getSchoolClassId());
PgSchool school = validateSchoolInfo(dto.getSchoolId(), dto.getSchoolGradeId(), dto.getSchoolClassId());
// 更新学生信息
student.setStudentName(dto.getStudentName());
@ -463,6 +464,7 @@ public class H5MemberServiceImpl implements H5MemberService {
student.setSchoolId(dto.getSchoolId());
student.setSchoolGradeId(dto.getSchoolGradeId());
student.setSchoolClassId(dto.getSchoolClassId());
student.setDeptId(school.getDeptId()); // 同步更新部门ID
studentMapper.updateById(student);
// 更新关系
@ -610,7 +612,10 @@ public class H5MemberServiceImpl implements H5MemberService {
/**
* 校验学校信息
*/
private void validateSchoolInfo(Long schoolId, Long schoolGradeId, Long schoolClassId) {
/**
* 校验学校信息并返回学校对象
*/
private PgSchool validateSchoolInfo(Long schoolId, Long schoolGradeId, Long schoolClassId) {
PgSchool school = schoolMapper.selectById(schoolId);
if (school == null) {
throw new ServiceException("学校不存在");
@ -625,6 +630,8 @@ public class H5MemberServiceImpl implements H5MemberService {
if (schoolClass == null || !schoolClass.getSchoolGradeId().equals(schoolGradeId)) {
throw new ServiceException("班级不存在或不属于该年级");
}
return school;
}
/**

View File

@ -13,9 +13,9 @@ import java.util.List;
public class SchoolTreeNode {
/**
* 节点ID
* 节点唯一标识格式type_id school_1, grade_2, class_3
*/
private Long id;
private String id;
/**
* 节点名称

View File

@ -364,7 +364,7 @@ public class PgSchoolServiceImpl implements IPgSchoolService {
for (PgSchool s : schools) {
SchoolTreeNode schoolNode = new SchoolTreeNode();
schoolNode.setId(s.getSchoolId());
schoolNode.setId("school_" + s.getSchoolId()); // 添加类型前缀确保唯一
schoolNode.setName(s.getSchoolName());
schoolNode.setType("school");
schoolNode.setSchoolCode(s.getSchoolCode());
@ -384,7 +384,7 @@ public class PgSchoolServiceImpl implements IPgSchoolService {
.filter(sg -> sg.getSchoolId().equals(s.getSchoolId()))
.map(sg -> {
SchoolTreeNode gradeNode = new SchoolTreeNode();
gradeNode.setId(sg.getId()); // 使用学校年级关联表ID
gradeNode.setId("grade_" + sg.getId()); // 添加类型前缀确保唯一
gradeNode.setName(finalGradeNameMap.getOrDefault(sg.getGradeId(), ""));
gradeNode.setType("grade");
gradeNode.setSchoolId(sg.getSchoolId());
@ -397,13 +397,13 @@ public class PgSchoolServiceImpl implements IPgSchoolService {
.filter(sc -> sc.getSchoolGradeId().equals(sg.getId()))
.map(sc -> {
SchoolTreeNode classNode = new SchoolTreeNode();
classNode.setId(sc.getId()); // 使用学校班级关联表ID
classNode.setId("class_" + sc.getId()); // 添加类型前缀确保唯一
classNode.setName(finalClassNameMap.getOrDefault(sc.getClassId(), ""));
classNode.setType("class");
classNode.setSchoolId(sc.getSchoolId());
classNode.setSchoolGradeId(sc.getSchoolGradeId());
classNode.setParentId(sg.getId());
classNode.setClassId(sc.getClassId());
classNode.setClassId(sc.getId()); // 使用学校班级关联表的ID用于查询学生
return classNode;
})
.toList();

View File

@ -198,21 +198,22 @@ const getList = async () => {
//
const handleNodeClick = (data) => {
//
// 使 ID idid
if (data.type === 'school') {
//
queryParams.value.schoolId = data.id
queryParams.value.schoolId = data.schoolId
queryParams.value.schoolGradeId = null
queryParams.value.schoolClassId = null
} else if (data.type === 'grade') {
// +
queryParams.value.schoolId = data.schoolId
queryParams.value.schoolGradeId = data.id
queryParams.value.schoolGradeId = data.schoolGradeId
queryParams.value.schoolClassId = null
} else if (data.type === 'class') {
// + +
queryParams.value.schoolId = data.schoolId
queryParams.value.schoolGradeId = data.schoolGradeId
queryParams.value.schoolClassId = data.id
queryParams.value.schoolClassId = data.classId // 使 classIdpg_school_class ID
}
queryParams.value.pageNum = 1
getList()