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

View File

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

View File

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