diff --git a/src/main/java/com/campus/water/service/AdminService.java b/src/main/java/com/campus/water/service/AdminService.java index e21d723..bfe1837 100644 --- a/src/main/java/com/campus/water/service/AdminService.java +++ b/src/main/java/com/campus/water/service/AdminService.java @@ -69,42 +69,43 @@ public class AdminService { } /** - * 新增/修改管理员(支持指定角色) - * 重写保存方法,增加区域校验(区域管理员必须关联区域) - */ - public Admin saveAdmin(Admin admin) { - admin.setUpdatedTime(LocalDateTime.now()); - if (admin.getCreatedTime() == null) { - admin.setCreatedTime(LocalDateTime.now()); - } + * 新增/修改管理员(支持指定角色) + * 重写保存方法,增加区域校验(区域管理员必须关联区域) + */ +public Admin saveAdmin(Admin admin) { + admin.setUpdatedTime(LocalDateTime.now()); + if (admin.getCreatedTime() == null) { + admin.setCreatedTime(LocalDateTime.now()); + } - // 区域管理员(ROLE_AREA_ADMIN)的专属校验逻辑 - if (admin.getRole() == Admin.AdminRole.ROLE_AREA_ADMIN) { - // 1. 若未填写区域ID(null/空字符串),直接放行(支持先创建管理员,后续补填) - if (admin.getAreaId() == null || admin.getAreaId().trim().isEmpty()) { - admin.setAreaId(null); // 统一置为null,避免空字符串冗余数据 - // 无需校验,直接允许保存 - } else { - // 2. 若填写了区域ID,进行严格校验:区域存在 + 类型为校区(禁止市区) - String areaId = admin.getAreaId().trim(); - // 校验区域是否存在 - Area targetArea = areaRepository.findById(areaId) - .orElseThrow(() -> new RuntimeException("关联的区域不存在:" + areaId)); - // 核心校验:仅允许关联校区,禁止关联市区 - if (Area.AreaType.zone.equals(targetArea.getAreaType())) { - throw new RuntimeException("区域管理员仅允许关联校区,不能关联市区,请重新选择"); - } - // 校验通过,保留填写的合法校区ID - admin.setAreaId(areaId); - } + // 区域管理员(ROLE_AREA_ADMIN)的专属校验逻辑 + if (admin.getRole() == Admin.AdminRole.ROLE_AREA_ADMIN) { + // 1. 若未填写区域ID(null或空字符串),直接放行(支持先创建管理员,后续补填) + if (admin.getAreaId() == null || admin.getAreaId().trim().isEmpty()) { + admin.setAreaId(null); // 统一置为null,避免空字符串冗余数据 + // 无需校验,直接允许保存 } else { - // 非区域管理员,清空区域ID,避免冗余数据 - admin.setAreaId(null); + // 2. 若填写了区域ID,进行严格校验:区域存在 + 类型为校区(禁止市区) + String areaId = admin.getAreaId().trim(); + // 校验区域是否存在 + Area targetArea = areaRepository.findById(areaId) + .orElseThrow(() -> new RuntimeException("关联的区域不存在:" + areaId)); + // 核心校验:仅允许关联校区,禁止关联市区 + if (Area.AreaType.zone.equals(targetArea.getAreaType())) { + throw new RuntimeException("区域管理员仅允许关联校区,不能关联市区,请重新选择"); + } + // 校验通过,保留填写的合法校区ID + admin.setAreaId(areaId); } - - return adminRepository.save(admin); + } else { + // 非区域管理员,清空区域ID,避免冗余数据 + admin.setAreaId(null); } + return adminRepository.save(admin); +} + + /** * 删除管理员 */ diff --git a/src/main/resources/web/src/views/area/Campus.vue b/src/main/resources/web/src/views/area/Campus.vue index bf196da..82fa3f1 100644 --- a/src/main/resources/web/src/views/area/Campus.vue +++ b/src/main/resources/web/src/views/area/Campus.vue @@ -50,6 +50,12 @@