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 }}
+
+
+
+
+
+ 展开/折叠
+ 全选/全不选
+ 父子联动
+
+
+
+
+
+
+
+
+