From 4fbd380a0767164e21631eaed3b83efd4e89995e Mon Sep 17 00:00:00 2001 From: weizhong Date: Thu, 6 Nov 2025 14:34:40 +0800 Subject: [PATCH] =?UTF-8?q?=E2=80=9C=E5=9F=B9=E8=AE=AD=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dv1.3=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/rs/domain/vo/SysUserBasicVo.java | 55 ++++ .../system/mapper/SysTeacherMapper.java | 236 ++++++++++-------- .../components/TeacherMultiSelector/index.vue | 63 ++++- 3 files changed, 239 insertions(+), 115 deletions(-) create mode 100644 backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/vo/SysUserBasicVo.java diff --git a/backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/vo/SysUserBasicVo.java b/backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/vo/SysUserBasicVo.java new file mode 100644 index 00000000..9cc252ca --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/vo/SysUserBasicVo.java @@ -0,0 +1,55 @@ +package org.dromara.rs.domain.vo; + +import lombok.Data; +import java.io.Serial; +import java.io.Serializable; + +/** + * 用户基本信息VO + * 用于培训申请/记录中的同行人信息展示 + * 不限制账号类型,只返回必要的基础信息 + * + * @author weizzzz + * @date 2025-11-06 + */ +@Data +public class SysUserBasicVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户昵称(真实姓名) + */ + private String nickName; + + /** + * 账号类型(0-学生 1-教师 2-其他) + */ + private String accountType; + + /** + * 账号状态(0-正常 1-停用) + */ + private String status; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 部门名称 + */ + private String deptName; +} diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTeacherMapper.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTeacherMapper.java index f3b80968..c11d375c 100644 --- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTeacherMapper.java +++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTeacherMapper.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import org.dromara.common.mybatis.annotation.DataColumn; +import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.vo.SysTeacherVo; @@ -28,25 +30,26 @@ public interface SysTeacherMapper extends BaseMapperPlus * @return 教师信息分页列表 */ @Select(""" - SELECT - u.user_id, - u.user_name, - u.nick_name, - u.phonenumber, - u.email, - u.dept_id, - d.dept_name, - u.sex, - u.status, - u.create_time - FROM sys_user u - LEFT JOIN sys_dept d ON u.dept_id = d.dept_id - WHERE u.del_flag = '0' - AND u.account_type = '1' - ${ew.customSqlSegment} - ORDER BY u.create_time DESC - """) - Page selectPageTeacherList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper wrapper); + SELECT + u.user_id, + u.user_name, + u.nick_name, + u.phonenumber, + u.email, + u.dept_id, + d.dept_name, + u.sex, + u.status, + u.create_time + FROM sys_user u + LEFT JOIN sys_dept d ON u.dept_id = d.dept_id + WHERE u.del_flag = '0' + AND u.account_type = '1' + ${ew.customSqlSegment} + ORDER BY u.create_time DESC + """) + Page selectPageTeacherList(@Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper wrapper); /** * 查询教师信息列表 @@ -55,24 +58,24 @@ public interface SysTeacherMapper extends BaseMapperPlus * @return 教师信息列表 */ @Select(""" - SELECT - u.user_id, - u.user_name, - u.nick_name, - u.phonenumber, - u.email, - u.dept_id, - d.dept_name, - u.sex, - u.status, - u.create_time - FROM sys_user u - LEFT JOIN sys_dept d ON u.dept_id = d.dept_id - WHERE u.del_flag = '0' - AND u.account_type = '1' - ${ew.customSqlSegment} - ORDER BY u.create_time DESC - """) + SELECT + u.user_id, + u.user_name, + u.nick_name, + u.phonenumber, + u.email, + u.dept_id, + d.dept_name, + u.sex, + u.status, + u.create_time + FROM sys_user u + LEFT JOIN sys_dept d ON u.dept_id = d.dept_id + WHERE u.del_flag = '0' + AND u.account_type = '1' + ${ew.customSqlSegment} + ORDER BY u.create_time DESC + """) List selectTeacherList(@Param(Constants.WRAPPER) Wrapper wrapper); /** @@ -83,78 +86,89 @@ public interface SysTeacherMapper extends BaseMapperPlus * @return 教师信息列表 */ @Select(""" - SELECT - u.user_id, - u.user_name, - u.nick_name, - u.phonenumber, - u.email, - u.dept_id, - d.dept_name, - u.sex, - u.status, - u.create_time - FROM sys_user u - LEFT JOIN sys_dept d ON u.dept_id = d.dept_id - WHERE u.del_flag = '0' - AND u.account_type = '1' - AND (u.nick_name LIKE CONCAT('%', #{name}, '%') - OR u.user_name LIKE CONCAT('%', #{name}, '%') - OR u.phonenumber LIKE CONCAT('%', #{name}, '%')) - AND u.status = '0' - ORDER BY u.create_time DESC - LIMIT #{limit} - """) + SELECT + u.user_id, + u.user_name, + u.nick_name, + u.phonenumber, + u.email, + u.dept_id, + d.dept_name, + u.sex, + u.status, + u.create_time + FROM sys_user u + LEFT JOIN sys_dept d ON u.dept_id = d.dept_id + WHERE u.del_flag = '0' + AND u.account_type = '1' + AND (u.nick_name LIKE CONCAT('%', #{name}, '%') + OR u.user_name LIKE CONCAT('%', #{name}, '%') + OR u.phonenumber LIKE CONCAT('%', #{name}, '%')) + AND u.status = '0' + ORDER BY u.create_time DESC + LIMIT #{limit} + """) List searchTeachersByName(@Param("name") String name, @Param("limit") Integer limit); /** - * 根据部门ID获取教师列表 + * 根据部门ID获取教师列表(带数据权限控制) + * + * 说明:添加数据权限注解后,只会返回用户有权限访问的部门的教师 * * @param deptId 部门ID * @return 教师信息列表 */ + @DataPermission({ + @DataColumn(key = "deptName", value = "u.dept_id") + }) @Select(""" - SELECT - u.user_id, - u.user_name, - u.nick_name, - u.phonenumber, - u.email, - u.dept_id, - d.dept_name, - u.sex, - u.status, - u.create_time - FROM sys_user u - LEFT JOIN sys_dept d ON u.dept_id = d.dept_id - WHERE u.del_flag = '0' - AND u.account_type = '1' - AND u.dept_id = #{deptId} - AND u.status = '0' - ORDER BY u.create_time DESC - """) + SELECT + u.user_id, + u.user_name, + u.nick_name, + u.phonenumber, + u.email, + u.dept_id, + d.dept_name, + u.sex, + u.status, + u.create_time + FROM sys_user u + LEFT JOIN sys_dept d ON u.dept_id = d.dept_id + WHERE u.del_flag = '0' + AND u.account_type = '1' + AND u.dept_id = #{deptId} + AND u.status = '0' + ORDER BY u.create_time DESC + """) List selectTeachersByDeptId(@Param("deptId") Long deptId); /** - * 获取部门树形结构(只包含有教师的部门) + * 获取部门树形结构(只包含有教师且用户有权限访问的部门) + * + * 说明:添加数据权限注解后,只会返回用户有权限访问的部门 + * 这样可以避免在同行人选择器中显示用户无权访问的部门 * * @return 部门树信息集合 */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id") + }) @Select(""" - SELECT DISTINCT - d.dept_id as id, - d.parent_id, - d.dept_name as label, - d.order_num - FROM sys_dept d - INNER JOIN sys_user u ON d.dept_id = u.dept_id - WHERE d.del_flag = '0' - AND d.status = '0' - AND u.del_flag = '0' - AND u.account_type = '1' - AND u.status = '0' - ORDER BY d.order_num - """) + SELECT DISTINCT + d.dept_id as id, + d.parent_id, + d.dept_name as label, + d.order_num + FROM sys_dept d + INNER JOIN sys_user u ON d.dept_id = u.dept_id + WHERE d.del_flag = '0' + AND d.status = '0' + AND u.del_flag = '0' + AND u.account_type = '1' + AND u.status = '0' + ORDER BY d.order_num + """) List selectDeptTreeWithTeachers(); /** @@ -164,21 +178,21 @@ public interface SysTeacherMapper extends BaseMapperPlus * @return 父级部门信息集合 */ @Select(""" - - """) + + """) List selectDeptsByIds(@Param("deptIds") List deptIds); -} \ No newline at end of file +} \ No newline at end of file diff --git a/web/src/components/TeacherMultiSelector/index.vue b/web/src/components/TeacherMultiSelector/index.vue index dc91d94a..243ab08a 100644 --- a/web/src/components/TeacherMultiSelector/index.vue +++ b/web/src/components/TeacherMultiSelector/index.vue @@ -64,6 +64,15 @@
请选择左侧部门查看教师列表
+
+ + 加载中... +
+
+ +

您没有权限查看该部门的教师信息

+

请联系管理员配置数据权限或选择其他部门

+
{{ selectedDeptName }} - 教师列表 @@ -100,7 +109,7 @@ 性别:{{ teacher.sex === '0' ? '男' : teacher.sex === '1' ? '女' : '未知' }} | 电话:{{ teacher.phonenumber || '暂无' }} | 邮箱:{{ teacher.email || '暂无' }}
-
暂无教师数据
+
该部门暂无教师数据
@@ -118,7 +127,7 @@