调整系统用户管理界面布局,从 el-col 布局改为 flex 布局,左侧部门树固定300px宽度,右侧占剩余空间。
web/src/views/system/user/index.vue: 系统用户管理主界面原先使用 el-col 布局,在不同屏幕尺寸下左右两侧宽度比例固定,用户希望左侧固定300px宽度,右侧占据剩余全部空间。
<el-row :gutter="20"> 改为 <div style="display: flex; gap: 16px"><el-col :lg="6" :xs="24"> 改为 <div style="width: 300px"><el-col :lg="18" :xs="24"> 改为 <div style="flex: 1">修复学生信息管理界面左侧部门树长文本显示问题,添加横向滚动条支持。
web/src/views/studentMsg/studentMsg/index.vue: 学生信息管理主界面左侧部门树在部门名称很长时,未出现横向滚动条,导致部门名称看不全。
.dept-treewhite-space: nowrap !importantwidth: max-content树容器样式 (.dept-tree):
width: 280pxoverflow-x: auto, overflow-y: autoheight: 600px树节点内容样式 (.dept-tree .el-tree-node__content):
white-space: nowrap !importantwidth: max-content树节点标签样式 (.dept-tree .el-tree-node__label):
max-width: none !importantoverflow: visible !important左侧面板样式调整:
overflow: visible 允许内容溢出显示滚动条web/src/views/system/user/index.vue: 用户管理主界面用户管理界面左侧部门树也存在相同问题,部门名称很长时没有横向滚动条。
采用与学生信息管理界面相同的修复方案:
.dept-tree CSS类:deep()深度选择器强制覆盖Element Plus默认样式<!-- 修改前 -->
<el-tree
class="mt-2"
style="height: 600px; overflow-y: auto"
...
/>
<!-- 修改后 -->
<el-tree
class="mt-2 dept-tree"
...
/>
.dept-tree {
height: 600px;
overflow-y: auto;
overflow-x: auto;
width: 270px;
min-width: 270px;
}
.dept-tree :deep(.el-tree-node__label) {
white-space: nowrap !important;
max-width: none !important;
text-overflow: unset !important;
width: max-content !important;
}
调整学生信息管理界面中新增按钮的弹窗内容,将原来的简单表单改为多tab页形式,支持完整的学生信息录入。
web/src/views/studentMsg/studentMsg/index.vue: 学生信息管理主界面el-tabs组件管理多个tab页el-upload组件实现照片上传activeTab状态管理当前激活的tab页Plus图标用于上传提示为学生管理员权限部门树接口增加全校学生管理员判断逻辑,实现全校管理员查看所有部门数据的功能。
backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentManagerSourceServiceImpl.javagetCurrentUserAuthDeptTree()全校学生管理员判断条件:
SELECT COUNT(1) FROM xg_student_manager
WHERE user_id = ? AND deleted = '0' AND status = '0' AND manager_type = '1'
sql
SELECT dept_id, dept_name, parent_id, dept_category, order_num FROM sys_dept
WHERE (dept_id = 101 OR ancestors LIKE '%,101,%') AND status = '0' AND del_flag = '0' ORDER BY order_num
调整学生管理员权限部门树接口的节点点击逻辑,让所有用户有权限的部门节点都可以点击。
backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentManagerSourceServiceImpl.javagetCurrentUserAuthDeptTree()// 新代码
boolean isAuthorized = allDeptIds.contains(deptId);
deptNode.setDisabled(!isAuthorized);
### 影响范围
- **接口功能**: 前端部门树组件中,用户有权限的所有部门节点都将变为可点击状态
- **用户体验**: 提升了权限范围内部门选择的灵活性
- **兼容性**: 不影响现有的权限判断逻辑,仅影响节点的可点击状态
---
## 时间: 2025-07-24 11:30:00
## 变更概述
开发学生管理员权限部门树接口,实现获取当前用户学生管理权限信息的功能。
## 具体变更内容
### 1. 新增文件
#### 1.1 XgStudentManagerDeptTreeVo.java
- **文件路径**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgStudentManagerDeptTreeVo.java`
- **变更类型**: 新增
- **功能说明**: 学生管理权限部门树视图对象,用于返回树形结构数据
- **主要字段**:
- `id`: 部门ID (前端期望字段名)
- `label`: 部门名称 (前端期望字段名)
- `parentId`: 父部门ID
- `deptCategory`: 部门类别编码
- `weight`: 显示顺序 (前端期望字段名)
- `disabled`: 是否禁用(与clickable相反,前端期望字段名)
- `children`: 子部门列表
#### 1.2 学生管理员授权关系API.md
- **文件路径**: `docs/开发文档/API/学生管理员授权关系API.md`
- **变更类型**: 新增
- **功能说明**: 学生管理员授权关系API文档,包含所有相关接口的详细说明
- **内容包含**: 8个接口的完整文档,包括新开发的获取当前用户权限部门树接口
### 2. 修改文件
#### 2.1 IXgStudentManagerSourceService.java
- **文件路径**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentManagerSourceService.java`
- **变更类型**: 修改
- **变更内容**:
- 新增import: `XgStudentManagerDeptTreeVo`
- 新增方法: `getCurrentUserAuthDeptTree()` - 获取当前用户的学生管理权限部门树
#### 2.2 XgStudentManagerSourceServiceImpl.java
- **文件路径**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentManagerSourceServiceImpl.java`
- **变更类型**: 修改
- **变更内容**:
- 新增import: `XgStudentManagerDeptTreeVo`, `LoginHelper`, `Collections`, `Collectors`
- 新增方法实现: `getCurrentUserAuthDeptTree()`
- **实现逻辑**:
1. 获取当前登录用户ID
2. 关联查询 `xg_student_manager` 和 `xg_student_manager_source` 表获取授权资源
3. 关联查询 `sys_dept` 表获取部门信息和子节点
4. 向上查找父节点直到根节点(id=101)
5. 构建树形结构并标识班级节点为可点击
- **字段映射调整**:
- `deptId` → `id` (前端期望字段名)
- `deptName` → `label` (前端期望字段名)
- `orderNum` → `weight` (前端期望字段名)
- `clickable` → `disabled` (逻辑相反,前端期望字段名)
#### 2.3 XgStudentManagerSourceController.java
- **文件路径**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStudentManagerSourceController.java`
- **变更类型**: 修改
- **变更内容**:
- 新增import: `XgStudentManagerDeptTreeVo`
- 新增接口: `getCurrentUserAuthTree()` - GET `/currentUserAuthTree`
- **接口特性**:
- 无需入参,自动获取当前用户权限
- 权限标识: `xgStudentManagerSource:studentManagerSource:query`
- 返回树形结构,只有班级节点可点击
#### 2.4 前端页面修改 - web/src/views/studentMsg/studentMsg/index.vue
- **文件路径**: `web/src/views/studentMsg/studentMsg/index.vue`
- **变更类型**: 修改
- **变更内容**:
- 修改`handleNodeClick`函数:增加disabled节点检查,只允许班级节点点击
- 修改`el-tree`组件props:添加`disabled: 'disabled'`属性映射
- **功能改进**:
- 用户点击非班级节点时显示提示:"请选择班级节点"
- 树形组件自动处理disabled节点的视觉样式
- 前端已配置调用新的API接口: `/xgStudentManagerSource/studentManagerSource/currentUserAuthTree`
#### 2.5 API文档总览.md
- **文件路径**: `docs/开发文档/API/API文档总览.md`
- **变更类型**: 修改
- **变更内容**: 在学工管理模块API部分新增 `学生管理员授权关系API` 链接
## 技术要点
### 1. 复杂SQL查询实现
- 使用JdbcTemplate执行原生SQL,支持复杂的多表关联查询
- 通过ancestors字段实现部门层级关系的向上追溯
- 动态构建IN查询条件,支持可变数量的授权资源
### 2. 树形结构构建算法
- 使用HashMap快速索引部门节点
- 通过parentId关系构建父子节点关联
- 自动识别根节点和叶子节点
### 3. 权限控制逻辑
- 基于当前登录用户自动获取权限范围
- 支持多层级权限继承(子部门权限包含在父部门权限中)
- 只有班级节点设置为可点击状态(disabled=false)
### 4. 前后端字段适配
- 后端返回前端期望的字段名:`id`、`label`、`disabled`、`weight`
- `disabled`字段逻辑:班级节点disabled=false(可点击),其他节点disabled=true(禁用)
- 班级识别逻辑:`dept_category`以"bj-"开头或部门名称包含"班"字
### 5. 数据类型处理
- 使用Number类型统一处理不同数据库的数值类型差异
- 安全的类型转换,避免ClassCastException
## 接口规范
### 请求路径
GET /xgStudentManagerSource/studentManagerSource/currentUserAuthTree
### 响应格式(更新后的字段名)
```json
{
"code": 200,
"msg": "查询成功",
"data": [
{
"id": 101,
"label": "杭州职业技术学院",
"parentId": null,
"deptCategory": "university",
"weight": 1,
"disabled": true,
"children": [
{
"id": "1947947519575281665",
"label": "园林设计231",
"parentId": "1947850579286085634",
"deptCategory": "bj-园林设计231",
"weight": 10,
"disabled": false,
"children": []
}
]
}
]
}
xgStudentManagerSource:studentManagerSource:query权限变更执行人: zlwu
变更时间: 2025-07-24 11:30:00
代码提交: 待提交
测试状态: 开发测试通过
部署状态: 待部署