From 1d30e82a2d36c7bf3065b8cc4cd1eb73ff8df59e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E7=A0=81-=E6=96=B9=E6=99=93=E8=BE=89?= Date: Tue, 3 Feb 2026 22:23:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DH5=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=AD=A6=E7=94=9F=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E5=92=8C?= =?UTF-8?q?=E5=AD=A6=E6=A0=A1=E6=A0=91=E8=8A=82=E7=82=B9ID=E5=86=B2?= =?UTF-8?q?=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. H5添加/编辑学生时同步设置 dept_id 2. 学校树节点ID添加类型前缀防止冲突 3. 前端使用正确的ID字段进行查询 --- .../pangu/h5/service/impl/H5MemberServiceImpl.java | 13 ++++++++++--- .../pangu/school/domain/vo/SchoolTreeNode.java | 4 ++-- .../school/service/impl/PgSchoolServiceImpl.java | 8 ++++---- frontend/src/views/business/student/index.vue | 7 ++++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/h5/service/impl/H5MemberServiceImpl.java b/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/h5/service/impl/H5MemberServiceImpl.java index 2e5d88d..0887bed 100644 --- a/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/h5/service/impl/H5MemberServiceImpl.java +++ b/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/h5/service/impl/H5MemberServiceImpl.java @@ -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; } /** diff --git a/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/school/domain/vo/SchoolTreeNode.java b/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/school/domain/vo/SchoolTreeNode.java index 1127c2e..74e4952 100644 --- a/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/school/domain/vo/SchoolTreeNode.java +++ b/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/school/domain/vo/SchoolTreeNode.java @@ -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; /** * 节点名称 diff --git a/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/school/service/impl/PgSchoolServiceImpl.java b/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/school/service/impl/PgSchoolServiceImpl.java index c5b13ec..95ea275 100644 --- a/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/school/service/impl/PgSchoolServiceImpl.java +++ b/backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/school/service/impl/PgSchoolServiceImpl.java @@ -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(); diff --git a/frontend/src/views/business/student/index.vue b/frontend/src/views/business/student/index.vue index db44e4d..91f3866 100644 --- a/frontend/src/views/business/student/index.vue +++ b/frontend/src/views/business/student/index.vue @@ -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()