From bf26823a854623d6f030b1450db86714e123f099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Sat, 22 Jan 2022 20:47:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/SysDeptController.cs | 19 ++ .../Controllers/System/SysRoleController.cs | 3 - ZR.Admin.WebApi/Extensions/DbExtension.cs | 12 +- ZR.Model/System/SysRole.cs | 17 +- ZR.Repository/System/SysDeptRepository.cs | 17 ++ ZR.Repository/System/SysRoleRepository.cs | 30 +-- ZR.Service/System/IService/ISysDeptService.cs | 5 + ZR.Service/System/SysDeptService.cs | 60 +++++- ZR.Service/System/SysRoleService.cs | 38 ++-- ZR.Vue/src/views/system/role/index.vue | 192 +++++++++++------- 10 files changed, 275 insertions(+), 118 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysDeptController.cs b/ZR.Admin.WebApi/Controllers/System/SysDeptController.cs index c9efa2e..85df69b 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysDeptController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysDeptController.cs @@ -3,6 +3,7 @@ using Infrastructure.Attribute; using Infrastructure.Enums; using Microsoft.AspNetCore.Mvc; using System.Collections; +using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; using ZR.Common; using ZR.Model.System; @@ -73,6 +74,24 @@ namespace ZR.Admin.WebApi.Controllers.System return SUCCESS(DeptService.BuildDeptTreeSelect(depts), TIME_FORMAT_FULL); } + /// + /// 获取角色部门信息 + /// 加载对应角色部门列表树 + /// + /// + /// + [HttpGet("roleDeptTreeselect/{roleId}")] + public IActionResult RoleMenuTreeselect(int roleId) + { + var depts = DeptService.GetSysDepts(new SysDept()); + var checkedKeys = DeptService.SelectRoleDepts(roleId); + return SUCCESS(new + { + checkedKeys, + depts = DeptService.BuildDeptTreeSelect(depts), + }); + } + /// /// 根据部门编号获取详细信息 /// diff --git a/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs b/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs index 896e7b6..c125abe 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs @@ -103,13 +103,10 @@ namespace ZR.Admin.WebApi.Controllers.System return ToResponse(ApiResult.Error($"编辑角色'{sysRoleDto.RoleName}'失败,角色权限已存在")); } } - sysRoleDto.Update_by = User.Identity.Name; int upResult = sysRoleService.UpdateRole(sysRoleDto); if (upResult > 0) { - //TODO 更新缓存用户权限信息 - return SUCCESS(upResult); } return ToResponse(ApiResult.Error($"修改角色'{sysRoleDto.RoleName}'失败,请联系管理员")); diff --git a/ZR.Admin.WebApi/Extensions/DbExtension.cs b/ZR.Admin.WebApi/Extensions/DbExtension.cs index 78e344f..392e045 100644 --- a/ZR.Admin.WebApi/Extensions/DbExtension.cs +++ b/ZR.Admin.WebApi/Extensions/DbExtension.cs @@ -45,13 +45,12 @@ namespace ZR.Admin.WebApi.Extensions IsAutoCloseConnection = true//自动释放 } }); - //每次Sql执行前事件 - + //每次Sql执行前事件 DbScoped.SugarScope.GetConnection(0).Aop.OnLogExecuting = (sql, pars) => { var param = DbScoped.SugarScope.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)); - FilterData(DbScoped.SugarScope.GetConnection(0)); + FilterData(); logger.Info($"{sql},{param}"); }; @@ -79,7 +78,10 @@ namespace ZR.Admin.WebApi.Extensions }; } - private static void FilterData(SqlSugarProvider db0) + /// + /// 分页获取count 不会追加sql + /// + private static void FilterData() { var u = App.User; if (u == null) return; @@ -98,9 +100,11 @@ namespace ZR.Admin.WebApi.Extensions } else if (DATA_SCOPE_CUSTOM.Equals(dataScope))//自定数据权限 { + //有问题 //var roleDepts = db0.Queryable() //.Where(f => f.RoleId == role.RoleId).Select(f => f.DeptId).ToList(); //var filter1 = new TableFilterItem(it => roleDepts.Contains(it.DeptId)); + //DbScoped.SugarScope.GetConnection(0).QueryFilter.Add(filter1); } else if (DATA_SCOPE_DEPT.Equals(dataScope))//本部门数据 { diff --git a/ZR.Model/System/SysRole.cs b/ZR.Model/System/SysRole.cs index 4dc7ba8..76d588d 100644 --- a/ZR.Model/System/SysRole.cs +++ b/ZR.Model/System/SysRole.cs @@ -45,10 +45,20 @@ namespace ZR.Model.System [SugarColumn(IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)] public string DelFlag { get; set; } /// - /// 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 ) + /// 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)) /// public string DataScope { get; set; } /// + /// 菜单树选择项是否关联显示 + /// + [SugarColumn(ColumnName = "menu_check_strictly")] + public bool MenuCheckStrictly { get; set; } + /// + /// 部门树选择项是否关联显示 + /// + [SugarColumn(ColumnName = "dept_check_strictly")] + public bool DeptCheckStrictly { get; set; } + /// /// 菜单组 /// [SugarColumn(IsIgnore = true)] @@ -58,6 +68,11 @@ namespace ZR.Model.System /// [SugarColumn(IsIgnore = true)] public long[] DeptIds { get; set; } + /// + /// 用户个数 + /// + [SugarColumn(IsIgnore = true)] + public int UserNum { get; set; } public SysRole() { } diff --git a/ZR.Repository/System/SysDeptRepository.cs b/ZR.Repository/System/SysDeptRepository.cs index af18347..59b1cce 100644 --- a/ZR.Repository/System/SysDeptRepository.cs +++ b/ZR.Repository/System/SysDeptRepository.cs @@ -28,4 +28,21 @@ namespace ZR.Repository.System .UpdateColumns(it => new { it.Ancestors }).ExecuteCommand(); } } + + /// + /// 角色部门 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class SysRoleDeptRepository : BaseRepository + { + /// + /// 根据角色获取菜单id + /// + /// + /// + public List SelectRoleDeptByRoleId(long roleId) + { + return Context.Queryable().Where(it => it.RoleId == roleId).ToList(); + } + } } diff --git a/ZR.Repository/System/SysRoleRepository.cs b/ZR.Repository/System/SysRoleRepository.cs index 861d340..3925cb1 100644 --- a/ZR.Repository/System/SysRoleRepository.cs +++ b/ZR.Repository/System/SysRoleRepository.cs @@ -15,9 +15,8 @@ namespace ZR.Repository.System public class SysRoleRepository : BaseRepository { /// - /// 根据条件分页查询角色数据 + /// 查询所有角色数据 /// - /// /// public List SelectRoleList() { @@ -40,7 +39,16 @@ namespace ZR.Repository.System exp.AndIF(!string.IsNullOrEmpty(sysRole.Status), role => role.Status == sysRole.Status); exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleKey), role => role.RoleKey == sysRole.RoleKey); - return GetPages(exp.ToExpression(), pager, x => x.RoleSort); + var query = Context.Queryable() + .Where(exp.ToExpression()) + .OrderBy(x => x.RoleSort) + .Select((role) => new SysRole + { + RoleId = role.RoleId.SelectAll(), + UserNum = SqlFunc.Subqueryable().Where(f => f.RoleId == role.RoleId).Count() + }); + + return query.ToPage(pager); } /// @@ -57,15 +65,6 @@ namespace ZR.Repository.System .ToList(); } - /// - /// 查询所有角色 - /// - /// - public List SelectRoleAll() - { - return Context.Queryable().OrderBy(it => it.RoleSort).ToList(); - } - /// /// 通过角色ID查询角色 /// @@ -93,8 +92,8 @@ namespace ZR.Repository.System /// public List SelectUserRoleListByUserId(long userId) { - return Context.Queryable((ur, r) => new SqlSugar.JoinQueryInfos( - SqlSugar.JoinType.Left, ur.RoleId == r.RoleId + return Context.Queryable((ur, r) => new JoinQueryInfos( + JoinType.Left, ur.RoleId == r.RoleId )).Where((ur, r) => ur.UserId == userId) .Select((ur, r) => r).ToList(); } @@ -166,8 +165,11 @@ namespace ZR.Repository.System return db.Updateable() .SetColumns(it => it.Update_time == sysRole.Update_time) + .SetColumns(it => it.DataScope == sysRole.DataScope) .SetColumns(it => it.Remark == sysRole.Remark) .SetColumns(it => it.Update_by == sysRole.Update_by) + //.SetColumns(it => it.MenuCheckStrictly == sysRole.MenuCheckStrictly) + .SetColumns(it => it.DeptCheckStrictly == sysRole.DeptCheckStrictly) .SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleName), it => it.RoleName == sysRole.RoleName) .SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleKey), it => it.RoleKey == sysRole.RoleKey) .SetColumnsIF(sysRole.RoleSort >= 0, it => it.RoleSort == sysRole.RoleSort) diff --git a/ZR.Service/System/IService/ISysDeptService.cs b/ZR.Service/System/IService/ISysDeptService.cs index 7a381f6..8484031 100644 --- a/ZR.Service/System/IService/ISysDeptService.cs +++ b/ZR.Service/System/IService/ISysDeptService.cs @@ -16,5 +16,10 @@ namespace ZR.Service.System.IService List GetChildrenDepts(List depts, long deptId); List BuildDeptTree(List depts); List BuildDeptTreeSelect(List depts); + List SelectRoleDeptByRoleId(long roleId); + + List SelectRoleDepts(long roleId); + int DeleteRoleDeptByRoleId(long roleId); + int InsertRoleDepts(SysRole role); } } diff --git a/ZR.Service/System/SysDeptService.cs b/ZR.Service/System/SysDeptService.cs index 9a996e9..ff6e20f 100644 --- a/ZR.Service/System/SysDeptService.cs +++ b/ZR.Service/System/SysDeptService.cs @@ -21,10 +21,11 @@ namespace ZR.Service.System public class SysDeptService : BaseService, ISysDeptService { public SysDeptRepository DeptRepository; - - public SysDeptService(SysDeptRepository deptRepository) : base(deptRepository) + public SysRoleDeptRepository RoleDeptRepository; + public SysDeptService(SysDeptRepository deptRepository, SysRoleDeptRepository roleDeptRepository) : base(deptRepository) { DeptRepository = deptRepository; + RoleDeptRepository = roleDeptRepository; } /// @@ -225,5 +226,60 @@ namespace ZR.Service.System { return list.Where(p => p.ParentId == dept.DeptId).ToList(); } + + #region 角色部门 + + /// + /// 根据角色获取菜单id + /// + /// + /// + public List SelectRoleDeptByRoleId(long roleId) + { + return RoleDeptRepository.SelectRoleDeptByRoleId(roleId); + } + + /// + /// 获取角色部门id集合 + /// + /// + /// + public List SelectRoleDepts(long roleId) + { + var list = SelectRoleDeptByRoleId(roleId); + + return list.Select(x => x.DeptId).Distinct().ToList(); + } + + /// + /// 删除角色部门数据 + /// + /// + /// + public int DeleteRoleDeptByRoleId(long roleId) + { + return RoleDeptRepository.Delete(f => f.RoleId == roleId); + } + + /// + /// 批量插入角色部门 + /// + /// + /// + public int InsertRoleDepts(SysRole role) + { + int rows = 1; + List list = new(); + foreach (var item in role.DeptIds) + { + list.Add(new SysRoleDept() { DeptId = item, RoleId = role.RoleId }); + } + if (list.Count > 0) + { + rows = RoleDeptRepository.Insert(list); + } + return rows; + } + #endregion } } diff --git a/ZR.Service/System/SysRoleService.cs b/ZR.Service/System/SysRoleService.cs index cabc102..d387db1 100644 --- a/ZR.Service/System/SysRoleService.cs +++ b/ZR.Service/System/SysRoleService.cs @@ -21,19 +21,23 @@ namespace ZR.Service { private SysRoleRepository SysRoleRepository; private ISysUserRoleService SysUserRoleService; + private ISysDeptService DeptService; public SysRoleService( SysRoleRepository sysRoleRepository, - ISysUserRoleService sysUserRoleService) : base(sysRoleRepository) + ISysUserRoleService sysUserRoleService, + ISysDeptService deptService) : base(sysRoleRepository) { SysRoleRepository = sysRoleRepository; SysUserRoleService = sysUserRoleService; + DeptService = deptService; } /// /// 根据条件分页查询角色数据 /// /// 角色信息 + /// 分页信息 /// 角色数据集合信息 public PagedInfo SelectRoleList(SysRole role, PagerInfo pager) { @@ -157,17 +161,9 @@ namespace ZR.Service { return UseTran2(() => { - int result = Update(sysRoleDto, it => new - { - it.DataScope - }, f => f.RoleId == sysRoleDto.RoleId); - - //if (result > 0 && sysRoleDto.DataScope == "2") - //{ //删除角色菜单 DeleteRoleMenuByRoleId(sysRoleDto.RoleId); InsertRoleMenu(sysRoleDto); - //} }); } #region Service @@ -185,11 +181,13 @@ namespace ZR.Service List sysRoleMenus = new List(); foreach (var item in sysRoleDto.MenuIds) { - SysRoleMenu rm = new SysRoleMenu(); - rm.Menu_id = item; - rm.Role_id = sysRoleDto.RoleId; - rm.Create_by = sysRoleDto.Create_by; - rm.Create_time = DateTime.Now; + SysRoleMenu rm = new SysRoleMenu + { + Menu_id = item, + Role_id = sysRoleDto.RoleId, + Create_by = sysRoleDto.Create_by, + Create_time = DateTime.Now + }; sysRoleMenus.Add(rm); } //添加角色菜单 @@ -301,7 +299,17 @@ namespace ZR.Service /// public int UpdateRole(SysRole sysRole) { - return SysRoleRepository.UpdateSysRole(sysRole); + var result = UseTran(() => + { + //修改角色信息 + SysRoleRepository.UpdateSysRole(sysRole); + //删除角色与部门管理 + DeptService.DeleteRoleDeptByRoleId(sysRole.RoleId); + //插入角色部门数据 + DeptService.InsertRoleDepts(sysRole); + }); + + return result.IsSuccess ? 1 : 0; } } } diff --git a/ZR.Vue/src/views/system/role/index.vue b/ZR.Vue/src/views/system/role/index.vue index 9e8ba5e..6d3f553 100644 --- a/ZR.Vue/src/views/system/role/index.vue +++ b/ZR.Vue/src/views/system/role/index.vue @@ -26,15 +26,19 @@ - + + - + + + @@ -49,7 +53,7 @@ 更多 - 数据权限 + 菜单权限 分配用户 @@ -58,17 +62,13 @@ - + + {{form.roleKey}} - - - - - - + 展开/折叠 全选/全不选 父子联动 @@ -83,25 +83,53 @@ - + - - - - - - - - - - - - {{ dict.dictLabel }} - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ dict.dictLabel }} + + + + + + 展开/折叠 + 全选/全不选 + 父子联动 + + + + + + + + +