diff --git a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs index 60666c6..10e2f16 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs @@ -8,6 +8,7 @@ using ZR.Admin.WebApi.Filters; using ZR.Model.System.Dto; using ZR.Model.System; using ZR.Service.System.IService; +using ZR.Model; namespace ZR.Admin.WebApi.Controllers.System { @@ -32,10 +33,10 @@ namespace ZR.Admin.WebApi.Controllers.System /// [ActionPermissionFilter(Permission = "system:menu:list")] [HttpGet("list")] - public IActionResult MenuList([FromQuery] SysMenu menu) + public IActionResult TreeMenuList([FromQuery] SysMenu menu) { long userId = HttpContext.GetUId(); - return SUCCESS(sysMenuService.SelectMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss"); + return SUCCESS(sysMenuService.SelectTreeMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss"); } /// @@ -74,7 +75,7 @@ namespace ZR.Admin.WebApi.Controllers.System public IActionResult RoleMenuTreeselect(int roleId) { long userId = HttpContext.GetUId(); - var menus = sysMenuService.SelectMenuList(userId); + var menus = sysMenuService.SelectMenuList(new SysMenu(), userId); var checkedKeys = sysRoleService.SelectUserRoleMenus(roleId); return SUCCESS(new { diff --git a/ZR.Model/System/SysMenu.cs b/ZR.Model/System/SysMenu.cs index ca0c3f9..d82e380 100644 --- a/ZR.Model/System/SysMenu.cs +++ b/ZR.Model/System/SysMenu.cs @@ -8,7 +8,7 @@ namespace ZR.Model.System /// [SugarTable("sys_menu")] [Tenant("0")] - public class SysMenu: SysBase + public class SysMenu : SysBase { /// /// 菜单ID @@ -84,6 +84,7 @@ namespace ZR.Model.System /// /// 子菜单 /// - public List children = new List(); + [SugarColumn(IsIgnore = true)] + public List children { get; set; } = new List(); } } diff --git a/ZR.Repository/System/SysMenuRepository.cs b/ZR.Repository/System/SysMenuRepository.cs index 8086698..cb03a0f 100644 --- a/ZR.Repository/System/SysMenuRepository.cs +++ b/ZR.Repository/System/SysMenuRepository.cs @@ -18,6 +18,41 @@ namespace ZR.Repository.System /// 获取所有菜单(菜单管理) /// /// + public List SelectTreeMenuList(SysMenu menu) + { + return Context.Queryable() + .WhereIF(!string.IsNullOrEmpty(menu.menuName), it => it.menuName.Contains(menu.menuName)) + .WhereIF(!string.IsNullOrEmpty(menu.visible), it => it.visible == menu.visible) + .WhereIF(!string.IsNullOrEmpty(menu.status), it => it.status == menu.status) + .OrderBy(it => new { it.parentId, it.orderNum }) + .ToTree(it => it.children, it => it.parentId, 0); + } + + /// + /// 根据用户查询系统菜单列表(菜单管理) + /// + /// + /// 用户角色集合 + /// + public List SelectTreeMenuListByUserId(SysMenu sysMenu, List roles) + { + var roleMenus = Context.Queryable() + .Where(r => roles.Contains(r.Role_id)); + + return Context.Queryable() + .InnerJoin(roleMenus, (c, j) => c.menuId == j.Menu_id) + .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (c, j) => c.menuName.Contains(sysMenu.menuName)) + .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (c, j) => c.visible == sysMenu.visible) + .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (c, j) => c.status == sysMenu.status) + .OrderBy((c, j) => new { c.parentId, c.orderNum }) + .Select(c => c) + .ToTree(it => it.children, it => it.parentId, 0); + } + + /// + /// 获取所有菜单 + /// + /// public List SelectMenuList(SysMenu menu) { return Context.Queryable() @@ -32,22 +67,21 @@ namespace ZR.Repository.System /// 根据用户查询系统菜单列表 /// /// - /// 用户id + /// 用户角色集合 /// - public List SelectMenuListByUserId(SysMenu sysMenu, long userId) + public List SelectMenuListByRoles(SysMenu sysMenu, List roles) { - return Context.Queryable((menu, roleMenu, userRole, role) => new JoinQueryInfos( - JoinType.Left, menu.menuId == roleMenu.Menu_id, - JoinType.Left, roleMenu.Role_id == userRole.RoleId, - JoinType.Left, userRole.RoleId == role.RoleId - )) - .Where((menu, roleMenu, userRole, role) => userRole.UserId == userId) - .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (menu, roleMenu, userRole, role) => menu.menuName.Contains(sysMenu.menuName)) - .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (menu, roleMenu, userRole, role) => menu.visible == sysMenu.visible) - .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (menu, roleMenu, userRole, role) => menu.status == sysMenu.status) - .OrderBy((menu, roleMenu, userRole, role) => new { menu.parentId, menu.orderNum }) - //.Distinct() - .Select((menu, roleMenu, userRole, role) => menu).ToList(); + var roleMenus = Context.Queryable() + .Where(r => roles.Contains(r.Role_id)); + + return Context.Queryable() + .InnerJoin(roleMenus, (c, j) => c.menuId == j.Menu_id) + .Where((c, j) => c.status == "0") + .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (c, j) => c.menuName.Contains(sysMenu.menuName)) + .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (c, j) => c.visible == sysMenu.visible) + .OrderBy((c, j) => new { c.parentId, c.orderNum }) + .Select(c => c) + .ToList(); } #region 左侧菜单树 @@ -68,11 +102,11 @@ namespace ZR.Repository.System /// /// 根据用户角色获取左侧菜单树 /// - /// + /// /// public List SelectMenuTreeByRoleIds(List roleIds) { - var menuTypes = new string[] { "M", "C"}; + var menuTypes = new string[] { "M", "C" }; return Context.Queryable((menu, roleMenu) => new JoinQueryInfos( JoinType.Left, menu.menuId == roleMenu.Menu_id )) diff --git a/ZR.Repository/System/SysRoleRepository.cs b/ZR.Repository/System/SysRoleRepository.cs index 7afb00c..861d340 100644 --- a/ZR.Repository/System/SysRoleRepository.cs +++ b/ZR.Repository/System/SysRoleRepository.cs @@ -2,6 +2,7 @@ using Infrastructure.Model; using SqlSugar; using System.Collections.Generic; +using System.Linq; using ZR.Model; using ZR.Model.System; @@ -110,6 +111,16 @@ namespace ZR.Repository.System return Context.Queryable().Where(it => it.Role_id == roleId).ToList(); } + /// + /// 根据用户所有角色获取菜单 + /// + /// + /// + public List SelectRoleMenuByRoleIds(long[] roleIds) + { + return Context.Queryable().Where(it => roleIds.Contains(it.Role_id)).ToList(); + } + /// /// 批量插入用户菜单 /// diff --git a/ZR.Service/System/IService/ISysMenuService.cs b/ZR.Service/System/IService/ISysMenuService.cs index 90aea34..a8bd620 100644 --- a/ZR.Service/System/IService/ISysMenuService.cs +++ b/ZR.Service/System/IService/ISysMenuService.cs @@ -8,34 +8,34 @@ namespace ZR.Service.System.IService { public interface ISysMenuService { - public List SelectMenuList(long userId); + //List SelectMenuList(long userId); - public List SelectMenuList(SysMenu menu, long userId); + List SelectMenuList(SysMenu menu, long userId); + List SelectTreeMenuList(SysMenu menu, long userId); - public SysMenu GetMenuByMenuId(int menuId); + SysMenu GetMenuByMenuId(int menuId); + int AddMenu(SysMenu menu); - public int AddMenu(SysMenu menu); + int EditMenu(SysMenu menu); - public int EditMenu(SysMenu menu); + int DeleteMenuById(int menuId); - public int DeleteMenuById(int menuId); + string CheckMenuNameUnique(SysMenu menu); - public string CheckMenuNameUnique(SysMenu menu); + int ChangeSortMenu(MenuDto menuDto); - public int ChangeSortMenu(MenuDto menuDto); + bool HasChildByMenuId(long menuId); - public bool HasChildByMenuId(long menuId); + List SelectMenuTreeByUserId(long userId); - public List SelectMenuTreeByUserId(long userId); + List SelectMenuPermsListByUserId(long userId); - public List SelectMenuPermsListByUserId(long userId); + List SelectMenuPermsByUserId(long userId); - public List SelectMenuPermsByUserId(long userId); + bool CheckMenuExistRole(long menuId); - public bool CheckMenuExistRole(long menuId); + List BuildMenus(List menus); - public List BuildMenus(List menus); - - public List BuildMenuTreeSelect(List menus); + List BuildMenuTreeSelect(List menus); } } diff --git a/ZR.Service/System/IService/ISysRoleService.cs b/ZR.Service/System/IService/ISysRoleService.cs index e2517b8..a0dd959 100644 --- a/ZR.Service/System/IService/ISysRoleService.cs +++ b/ZR.Service/System/IService/ISysRoleService.cs @@ -105,7 +105,7 @@ namespace ZR.Service.System.IService /// /// public List SelectUserRoleMenus(long roleId); - + List SelectRoleMenuByRoleIds(long[] roleIds); /// /// 获取用户角色列表 /// diff --git a/ZR.Service/System/SysMenuService.cs b/ZR.Service/System/SysMenuService.cs index e2ec077..5225e66 100644 --- a/ZR.Service/System/SysMenuService.cs +++ b/ZR.Service/System/SysMenuService.cs @@ -4,7 +4,6 @@ using System.Linq; using ZR.Model.System.Dto; using ZR.Model.System; using ZR.Model.System.Vo; -using ZR.Model.Vo; using ZR.Model.Vo.System; using ZR.Repository.System; using ZR.Service.System.IService; @@ -30,31 +29,39 @@ namespace ZR.Service } /// - /// 根据用户查询系统菜单列表 + /// 获取所有菜单数(菜单管理) /// - /// - /// /// - public List SelectMenuList(long userId) + public List SelectTreeMenuList(SysMenu menu, long userId) { - return SelectMenuList(new SysMenu(), userId); + List menuList; + if (SysRoleService.IsAdmin(userId)) + { + menuList = MenuRepository.SelectTreeMenuList(menu); + } + else + { + var userRoles = SysRoleService.SelectUserRoles(userId); + menuList = MenuRepository.SelectTreeMenuListByUserId(menu, userRoles); + } + return menuList; } /// - /// 获取所有菜单(菜单管理) + /// 获取所有菜单列表 /// /// public List SelectMenuList(SysMenu menu, long userId) { List menuList; - //if (SysUser.IsAdmin(userId)) if (SysRoleService.IsAdmin(userId)) { menuList = MenuRepository.SelectMenuList(menu); } else { - menuList = MenuRepository.SelectMenuListByUserId(menu, userId); + var userRoles = SysRoleService.SelectUserRoles(userId); + menuList = MenuRepository.SelectMenuListByRoles(menu, userRoles); } return menuList; } diff --git a/ZR.Service/System/SysRoleService.cs b/ZR.Service/System/SysRoleService.cs index 02ce07c..cabc102 100644 --- a/ZR.Service/System/SysRoleService.cs +++ b/ZR.Service/System/SysRoleService.cs @@ -216,7 +216,7 @@ namespace ZR.Service /// /// 判断是否是管理员 /// - /// + /// /// public bool IsRoleAdmin(long roleid) { @@ -228,13 +228,25 @@ namespace ZR.Service /// /// 获取角色菜单id集合 /// - /// + /// /// public List SelectUserRoleMenus(long roleId) { var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId); - return list.Select(x => x.Menu_id).ToList(); + return list.Select(x => x.Menu_id).Distinct().ToList(); + } + + /// + /// 根据用户所有角色获取菜单 + /// + /// + /// + public List SelectRoleMenuByRoleIds(long[] roleIds) + { + return SysRoleRepository.SelectRoleMenuByRoleIds(roleIds) + .Select(x => x.Menu_id) + .Distinct().ToList(); } /// @@ -270,6 +282,11 @@ namespace ZR.Service return list.Select(x => x.RoleKey).ToList(); } + /// + /// 获取用户所有角色名 + /// + /// + /// public List SelectUserRoleNames(long userId) { var list = SelectUserRoleListByUserId(userId); diff --git a/ZR.Vue/src/views/system/menu/index.vue b/ZR.Vue/src/views/system/menu/index.vue index a097dce..45fd1b2 100644 --- a/ZR.Vue/src/views/system/menu/index.vue +++ b/ZR.Vue/src/views/system/menu/index.vue @@ -52,10 +52,10 @@ -