fix: 修复H5添加学生数据权限和学校树节点ID冲突问题
1. H5添加/编辑学生时同步设置 dept_id 2. 学校树节点ID添加类型前缀防止冲突 3. 前端使用正确的ID字段进行查询
This commit is contained in:
parent
998d9aee35
commit
1d30e82a2d
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 节点名称
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -198,21 +198,22 @@ const getList = async () => {
|
|||
// 树节点点击
|
||||
const handleNodeClick = (data) => {
|
||||
// 根据节点层级设置筛选条件,子节点需要带上父级条件
|
||||
// 注意:使用专门的 ID 字段,不是 id(id 是带前缀的唯一标识)
|
||||
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 // 使用 classId(pg_school_class 表的 ID)
|
||||
}
|
||||
queryParams.value.pageNum = 1
|
||||
getList()
|
||||
|
|
|
|||
Loading…
Reference in New Issue