提交宿舍区去除的业务修改
This commit is contained in:
1 parent
99b771bb51
commit
2a38245ae2
24 files changed
+1139
-557
No files matched your search
@@ -333,4 +333,83 @@ public interface DormHygieneStudentScoreMapper extends BaseMapperPlus<DormHygien
|
||||
|
||||
**文档版本:** v1.0
|
||||
**创建时间:** 2025-01-28
|
||||
**维护人员:** 系统开发团队
|
||||
**维护人员:** 系统开发团队
|
||||
|
||||
---
|
||||
|
||||
## 修复记录
|
||||
|
||||
### 2025-01-29 界面问题修复
|
||||
|
||||
#### 修复问题一:新增时个人扣分默认值显示
|
||||
**问题现象:** 点击新增按钮时,弹窗中房间学生信息列表的个人扣分列显示默认0分placeholder,而不是直接填入0。
|
||||
|
||||
**解决方案:** 修改`DormHygieneCheckDialog.vue`中`loadRoomStudents`方法,将新增模式下学生的`student_score`默认值从`null`改为`0`。
|
||||
|
||||
```javascript
|
||||
// 修改前
|
||||
student_score: student.student_score || null, // 个人得分,默认为空
|
||||
|
||||
// 修改后
|
||||
student_score: 0, // 个人得分,新增时默认为0
|
||||
```
|
||||
|
||||
#### 修复问题二:宿舍扣分变为0时个人扣分不同步更新
|
||||
**问题现象:** 当宿舍扣分从1改成0时,房间学生信息列表中个人扣分还是1,没有变成0。
|
||||
|
||||
**解决方案:** 修改`handleTotalScoreChange`方法,添加对0分的特别处理逻辑。
|
||||
|
||||
```javascript
|
||||
// 修改后的逻辑
|
||||
const handleTotalScoreChange = () => {
|
||||
// 验证宿舍总分范围
|
||||
if (form.totalScore !== null && form.totalScore !== undefined && form.totalScore !== '') {
|
||||
// 处理非0分情况
|
||||
const score = parseFloat(form.totalScore.toString());
|
||||
if (isNaN(score) || score < 0 || score > 100) {
|
||||
ElMessage.warning('宿舍总分必须在0-100分之间');
|
||||
form.totalScore = 0;
|
||||
return;
|
||||
}
|
||||
// 自动为所有学生设置相同的个人得分(包括0分)
|
||||
if (roomStudents.value.length > 0) {
|
||||
roomStudents.value.forEach((student: any) => {
|
||||
student.student_score = score;
|
||||
});
|
||||
ElMessage.success(`已自动为${roomStudents.value.length}名学生设置个人得分:${score}分`);
|
||||
}
|
||||
} else if (form.totalScore === 0 || form.totalScore === '0') {
|
||||
// 特别处理0分的情况
|
||||
if (roomStudents.value.length > 0) {
|
||||
roomStudents.value.forEach((student: any) => {
|
||||
student.student_score = 0;
|
||||
});
|
||||
ElMessage.success(`已自动为${roomStudents.value.length}名学生设置个人得分:0分`);
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
#### 修复问题三:房间排序问题
|
||||
**问题现象:** 选择宿舍楼名称后,房间名称按照sort序号进行排序返回,但因为每层房间的sort都从0开始编码,导致返回数据把每个楼层的第一个房间先返回。
|
||||
|
||||
**解决方案:** 修改后端`XgDormRoomServiceImpl.java`中的`buildQueryWrapper`方法,调整排序逻辑为先按楼层再按sort排序。
|
||||
|
||||
```java
|
||||
// 修改前
|
||||
lqw.orderByAsc(XgDormRoom::getSort); // 第一优先级:按排序号升序
|
||||
lqw.orderByAsc(XgDormRoom::getFloorNum); // 第二优先级:按楼层升序
|
||||
|
||||
// 修改后
|
||||
lqw.orderByAsc(XgDormRoom::getFloorNum); // 第一优先级:按楼层升序
|
||||
lqw.orderByAsc(XgDormRoom::getSort); // 第二优先级:按排序号升序
|
||||
```
|
||||
|
||||
#### 修复效果
|
||||
1. **问题一**:新增时个人扣分直接显示0,用户体验更好
|
||||
2. **问题二**:宿舍扣分与个人扣分完全同步,包括0分的情况
|
||||
3. **问题三**:房间列表按楼层顺序显示,每层内部按sort排序,符合用户期望
|
||||
|
||||
#### 涉及文件
|
||||
- `web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckDialog.vue`
|
||||
- `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormRoomServiceImpl.java`
|
||||
+135
-41
@@ -2,11 +2,13 @@
|
||||
|
||||
## 接口说明
|
||||
|
||||
本文档描述了获取宿舍楼树形结构数据的API接口,该接口返回校区-宿舍区-宿舍楼的三级树形结构,其中校区和宿舍区节点不可选,只有宿舍楼节点可以选择。
|
||||
本文档描述了获取宿舍楼树形结构数据的API接口。**重要变更**:根据业务需求调整,主要接口已从 "校区-宿舍区-宿舍楼" 三级结构改为 "校区-宿舍楼" 二级结构,隐藏宿舍区层级,简化用户操作。
|
||||
|
||||
## 接口定义
|
||||
|
||||
### 获取宿舍楼树形结构
|
||||
### 🔄 主要接口(二级结构)
|
||||
|
||||
#### 1. 获取宿舍楼树形结构(推荐使用)
|
||||
|
||||
**请求URL**:`/sslxx/dormBuilding/buildingTree`
|
||||
|
||||
@@ -14,6 +16,8 @@
|
||||
|
||||
**权限标识**:`sslxx:dormBuilding:list`
|
||||
|
||||
**结构说明**:校区-宿舍楼二级结构,校区不可选,只有宿舍楼可以选择
|
||||
|
||||
**请求参数**:无
|
||||
|
||||
**响应示例**:
|
||||
@@ -30,24 +34,16 @@
|
||||
"disabled": true,
|
||||
"children": [
|
||||
{
|
||||
"id": 101,
|
||||
"label": "东区宿舍区",
|
||||
"nodeType": "area",
|
||||
"disabled": true,
|
||||
"children": [
|
||||
{
|
||||
"id": 1001,
|
||||
"label": "1号楼",
|
||||
"nodeType": "building",
|
||||
"disabled": false
|
||||
},
|
||||
{
|
||||
"id": 1002,
|
||||
"label": "2号楼",
|
||||
"nodeType": "building",
|
||||
"disabled": false
|
||||
}
|
||||
]
|
||||
"id": 1001,
|
||||
"label": "1号楼",
|
||||
"nodeType": "building",
|
||||
"disabled": false
|
||||
},
|
||||
{
|
||||
"id": 1002,
|
||||
"label": "2号楼",
|
||||
"nodeType": "building",
|
||||
"disabled": false
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -58,22 +54,92 @@
|
||||
"disabled": true,
|
||||
"children": [
|
||||
{
|
||||
"id": 201,
|
||||
"label": "西区宿舍区",
|
||||
"nodeType": "area",
|
||||
"id": 2001,
|
||||
"label": "3号楼",
|
||||
"nodeType": "building",
|
||||
"disabled": false
|
||||
},
|
||||
{
|
||||
"id": 2002,
|
||||
"label": "4号楼",
|
||||
"nodeType": "building",
|
||||
"disabled": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. 获取宿舍楼树形结构(基于权限)
|
||||
|
||||
**请求URL**:`/xgss/dormBuildingTree/list`
|
||||
|
||||
**请求方式**:`GET`
|
||||
|
||||
**权限标识**:`xgss:dormBuildingTree:list`
|
||||
|
||||
**结构说明**:校区-宿舍楼二级结构,根据当前用户权限过滤
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 描述 |
|
||||
|-----------|--------|------|----------------|
|
||||
| campusId | Long | 否 | 校区ID过滤条件 |
|
||||
| buildingName | String | 否 | 宿舍楼名称过滤条件 |
|
||||
|
||||
**响应格式**:与上述接口相同
|
||||
|
||||
#### 3. 获取所有宿舍楼树形结构(不考虑权限)
|
||||
|
||||
**请求URL**:`/xgss/dormBuildingTree/listAll`
|
||||
|
||||
**请求方式**:`GET`
|
||||
|
||||
**权限标识**:`xgss:dormBuildingTree:list`
|
||||
|
||||
**结构说明**:校区-宿舍楼二级结构,返回所有数据,不进行权限过滤
|
||||
|
||||
**响应格式**:与上述接口相同
|
||||
|
||||
### 📋 特殊用途接口(三级结构)
|
||||
|
||||
#### 4. 获取完整宿舍楼树形结构(包含宿舍区)
|
||||
|
||||
**请求URL**:`/xgss/dormBuildingTree/fullList`
|
||||
|
||||
**请求方式**:`GET`
|
||||
|
||||
**权限标识**:`xgss:dormBuildingTree:list`
|
||||
|
||||
**结构说明**:校区-宿舍区-宿舍楼三级结构,仅用于特殊需求
|
||||
|
||||
**响应示例**:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"label": "东校区",
|
||||
"type": "campus",
|
||||
"disabled": true,
|
||||
"children": [
|
||||
{
|
||||
"id": 101,
|
||||
"label": "东区宿舍区",
|
||||
"type": "area",
|
||||
"disabled": true,
|
||||
"children": [
|
||||
{
|
||||
"id": 2001,
|
||||
"label": "3号楼",
|
||||
"nodeType": "building",
|
||||
"disabled": false
|
||||
},
|
||||
{
|
||||
"id": 2002,
|
||||
"label": "4号楼",
|
||||
"nodeType": "building",
|
||||
"disabled": false
|
||||
"id": 1001,
|
||||
"label": "1号楼",
|
||||
"type": "building",
|
||||
"disabled": false,
|
||||
"buildingFloors": 6,
|
||||
"buildingType": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -85,7 +151,7 @@
|
||||
|
||||
## 数据结构
|
||||
|
||||
### BuildingTreeSelectVo
|
||||
### BuildingTreeSelectVo(二级结构)
|
||||
|
||||
树形结构节点对象:
|
||||
|
||||
@@ -93,7 +159,7 @@
|
||||
|------------|-------------------|----------------------------------------|
|
||||
| id | Long | 节点ID |
|
||||
| label | String | 节点名称 |
|
||||
| nodeType | String | 节点类型:campus(校区)、area(宿舍区)、building(宿舍楼) |
|
||||
| nodeType | String | 节点类型:campus(校区)、building(宿舍楼) |
|
||||
| disabled | Boolean | 是否禁用选择 |
|
||||
| children | List<BuildingTreeSelectVo> | 子节点列表 |
|
||||
| createBy | Long | 创建者 |
|
||||
@@ -101,6 +167,20 @@
|
||||
| updateBy | Long | 更新者 |
|
||||
| updateTime | Date | 更新时间 |
|
||||
|
||||
### DormBuildingTreeVo(完整结构)
|
||||
|
||||
完整三级结构节点对象:
|
||||
|
||||
| 字段名 | 类型 | 描述 |
|
||||
|-----------------|-------------------|----------------------------------------|
|
||||
| id | Long | 节点ID |
|
||||
| label | String | 节点名称 |
|
||||
| type | String | 节点类型:campus(校区)、area(宿舍区)、building(宿舍楼) |
|
||||
| disabled | Boolean | 是否禁用选择 |
|
||||
| children | List<DormBuildingTreeVo> | 子节点列表 |
|
||||
| buildingFloors | Integer | 宿舍楼层数(仅宿舍楼节点) |
|
||||
| buildingType | String | 宿舍楼类型(仅宿舍楼节点) |
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 前端使用示例
|
||||
@@ -114,7 +194,7 @@ import type { BuildingTreeSelectVo } from '@/api/sslxx/dormBuilding/types';
|
||||
// 在组件的setup函数中
|
||||
const treeData = ref<BuildingTreeSelectVo[]>([]);
|
||||
|
||||
// 加载宿舍楼树形数据
|
||||
// 加载宿舍楼树形数据(推荐使用二级结构)
|
||||
const loadBuildingTree = async () => {
|
||||
try {
|
||||
const res = await getBuildingTree();
|
||||
@@ -155,20 +235,34 @@ loadBuildingTree();
|
||||
|
||||
## 特殊说明
|
||||
|
||||
1. 接口返回的树形结构中,校区和宿舍区节点已设置 `disabled=true`,前端无需额外处理即可实现只能选择宿舍楼节点的效果
|
||||
2. 使用 `check-strictly=true` 可以确保树形选择器的选中状态不会级联影响父子节点
|
||||
3. 该接口已支持管理员分配宿舍楼管理范围的业务需求
|
||||
### ⚠️ 重要变更说明
|
||||
|
||||
1. **主要接口结构调整**:为简化用户操作,去除宿舍区概念,主要接口已改为二级结构
|
||||
2. **向后兼容**:保留了 `fullList` 接口供需要完整三级结构的特殊场景使用
|
||||
3. **业务影响**:前端界面将不再显示宿舍区层级,用户直接在校区下选择宿舍楼
|
||||
|
||||
### 📋 使用建议
|
||||
|
||||
1. **推荐使用二级结构接口**:适用于绝大多数业务场景
|
||||
2. **校区节点设置为不可选**:确保用户只能选择宿舍楼
|
||||
3. **使用权限过滤接口**:根据用户权限显示相应的宿舍楼范围
|
||||
|
||||
## 相关API接口
|
||||
|
||||
- [宿舍管理员授权API](./宿舍管理员授权API.md)
|
||||
- [宿舍床位分配管理API](./宿舍床位分配管理API.md)
|
||||
|
||||
## 数据库关系
|
||||
|
||||
- `xg_dorm_building` 表通过 `campus_id` 字段关联 `xg_dorm_campus` 表
|
||||
- `xg_dorm_building` 表通过 `area_id` 字段关联 `xg_dorm_area` 表
|
||||
- `xg_dorm_building` 表通过 `area_id` 字段关联 `xg_dorm_area` 表(数据库保留,UI隐藏)
|
||||
- `xg_dorm_area` 表通过 `campus_id` 字段关联 `xg_dorm_campus` 表
|
||||
|
||||
## 版本历史
|
||||
|
||||
- **2025-01-29**: 接口结构重大调整,主要接口从三级改为二级结构
|
||||
- **2025-07-20**: 初始版本,三级结构
|
||||
|
||||
## 最后更新时间
|
||||
|
||||
2025-07-20
|
||||
2025-01-29
|
||||
@@ -4376,7 +4376,7 @@ CREATE TABLE `xg_dorm_hygiene_check` (
|
||||
`area_name` varchar(100) DEFAULT NULL COMMENT '宿舍区名称',
|
||||
`campus_id` bigint(20) DEFAULT NULL COMMENT '校区ID,关联xg_dorm_campus.id',
|
||||
`campus_name` varchar(100) DEFAULT NULL COMMENT '校区名称',
|
||||
`total_score` decimal(5,2) DEFAULT NULL COMMENT '宿舍总分(0-100分)',
|
||||
`total_score` decimal(5,2) DEFAULT NULL COMMENT '宿舍扣分(0-100分)',
|
||||
`hygiene_grade` char(1) DEFAULT NULL COMMENT '卫生等级(A优秀 B良好 C合格 D不合格)',
|
||||
`attachment_ids` text COMMENT '附件OSS ID列表,逗号分隔',
|
||||
`check_summary` text COMMENT '检查总结',
|
||||
@@ -4422,7 +4422,7 @@ CREATE TABLE `xg_dorm_hygiene_student_score` (
|
||||
`college_name` varchar(100) DEFAULT NULL COMMENT '学院名称',
|
||||
`bed_id` bigint(20) DEFAULT NULL COMMENT '床位ID,关联xg_dorm_bed.id',
|
||||
`bed_code` varchar(50) DEFAULT NULL COMMENT '床位编号',
|
||||
`student_score` decimal(5,2) DEFAULT NULL COMMENT '学生个人得分(0-100分)',
|
||||
`student_score` decimal(5,2) DEFAULT NULL COMMENT '学生个人扣分(0-100分)',
|
||||
`attendance_status` char(1) DEFAULT '1' COMMENT '出勤状态(1在寝 2外出 3请假 4其他)',
|
||||
`student_grade` char(1) DEFAULT NULL COMMENT '学生评级(A优秀 B良好 C合格 D不合格)',
|
||||
`is_responsible_person` tinyint(1) DEFAULT '0' COMMENT '是否为寝室长(0否 1是)',
|
||||
|
||||
Reference in new issue
Block a user