# 宿舍楼管理API树形结构开发记录 **时间**: 2025-07-20 15:30:00 **开发人员**: zlwu **变更模块**: 宿舍管理 - 宿舍楼树形结构API ## 变更内容 ### 1. 新增类文件 1. 新增 `BuildingTreeSelectVo.java` 类用于宿舍楼树形结构展示 - 支持校区-宿舍区-宿舍楼三级结构 - 标识节点类型和可选状态 ### 2. API接口开发 1. 在 `XgDormBuildingController` 中新增 `/buildingTree` 接口: - 获取完整的宿舍楼树形结构 - 校区和宿舍区节点设置为不可选(disabled=true) - 宿舍楼节点设置为可选(disabled=false) 2. 在 `IXgDormBuildingService` 接口中添加 `getBuildingTreeData()` 方法 3. 在 `XgDormBuildingServiceImpl` 中实现树形数据构建逻辑: - 查询所有校区、宿舍区和宿舍楼数据 - 构建三级层次结构 - 确保树中校区和宿舍区节点被标记为不可选 - 只有宿舍楼节点可以被选择 ### 3. 数据表关联关系 - `xg_dorm_building` 通过 `campus_id` 关联 `xg_dorm_campus` - `xg_dorm_building` 通过 `area_id` 关联 `xg_dorm_area` - `xg_dorm_area` 通过 `campus_id` 关联 `xg_dorm_campus` ### 4. 前端实现 1. 在`web/src/api/sslxx/dormBuilding/types.ts`中添加`BuildingTreeSelectVo`接口定义: - 定义了树形节点的属性类型 - 包含id、label、nodeType、disabled等核心字段 - 支持children属性用于嵌套结构 2. 在`web/src/api/sslxx/dormBuilding/index.ts`中添加`getBuildingTree`方法: - 调用后端API获取树形结构数据 - 方法返回类型为`AxiosPromise` 3. 修改`ScopeDialog.vue`组件: - 为宿舍楼类型(type="building")添加独立的树形选择器 - 移除原有的模拟数据,改用API获取真实数据 - 添加宿舍楼数据回显和解析逻辑 - 保留对校区和宿舍区的原有支持 ## 技术实现 树形结构数据构建采用三步查询 + 组装的方式: 1. 首先查询所有校区数据 2. 查询所有宿舍区数据 3. 查询所有宿舍楼数据 4. 通过Stream API过滤和关联数据,构建多层嵌套结构 ## 使用说明 1. 校区管理员授权时,使用普通多选下拉框 2. 宿舍区管理员授权时,使用以校区为父节点的两级树形结构 3. 宿舍楼管理员授权时,使用新开发的三级树形结构(校区-宿舍区-宿舍楼) - 校区和宿舍区节点自动禁用,不可选择 - 只有宿舍楼节点可以选择 - 支持多选和折叠标签