菜单管理加载优化

This commit is contained in:
不做码农 2022-05-24 21:42:45 +08:00
parent c7f6d5ebc5
commit ae3cd6899e
7 changed files with 105 additions and 75 deletions

View File

@ -54,18 +54,30 @@ namespace ZR.Admin.WebApi.Controllers.System
return SUCCESS(sysMenuService.GetMenuByMenuId(menuId), "yyyy-MM-dd HH:mm:ss");
}
/// <summary>
/// 获取菜单下拉树列表(分配角色所需菜单)
/// </summary>
/// <returns></returns>
[HttpGet("treeSelect")]
public IActionResult TreeSelect()
{
long userId = HttpContext.GetUId();
var list = sysMenuService.SelectMenuList(new MenuQueryDto(), userId).FindAll(f => f.visible == "0");
var treeMenus = sysMenuService.BuildMenuTreeSelect(list);
///// <summary>
///// 获取菜单下拉树列表(分配角色所需菜单)
///// </summary>
///// <returns></returns>
//[HttpGet("treeSelect")]
//public IActionResult TreeSelect()
//{
// long userId = HttpContext.GetUId();
// var list = sysMenuService.SelectMenuList(new MenuQueryDto(), userId).FindAll(f => f.visible == "0");
// var treeMenus = sysMenuService.BuildMenuTreeSelect(list);
return SUCCESS(treeMenus);
// return SUCCESS(treeMenus);
//}
/// <summary>
/// 根据菜单编号获取菜单列表,菜单管理首次进入
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
[HttpGet("list/{menuId}")]
[ActionPermissionFilter(Permission = "system:menu:query")]
public IActionResult GetMenuList(int menuId = 0)
{
return SUCCESS(sysMenuService.GetMenusByMenuId(menuId), "yyyy-MM-dd HH:mm:ss");
}
/// <summary>

View File

@ -18,7 +18,7 @@ namespace ZR.Model
public DateTime LoginTime { get; set; }
public string UserIP { get; set; }
public OnlineUsers(string clientid, string name, long? userid, string? userip)
public OnlineUsers(string clientid, string name, long? userid, string userip)
{
ConnnectionId = clientid;
Name = name;

View File

@ -80,6 +80,7 @@ namespace ZR.Model.System.Dto
public string Visible { get; set; }
public string Status { get; set; }
public string MenuTypeIds { get; set; } = string.Empty;
public int? ParentId { get; set; }
public string[] MenuTypeIdArr
{
get

View File

@ -21,12 +21,6 @@ namespace ZR.Model.System
/// </summary>
public string MenuName { get; set; }
/// <summary>
/// 父菜单名称
/// </summary>
[SqlSugar.SugarColumn(IsIgnore = true)]
public string parentName { get; set; }
/// <summary>
/// 父菜单ID
/// </summary>
@ -90,5 +84,21 @@ namespace ZR.Model.System
/// </summary>
[SugarColumn(IsIgnore = true)]
public List<SysMenu> children { get; set; } = new List<SysMenu>();
/// <summary>
/// 子菜单个数
/// </summary>
[SugarColumn(IsIgnore = true)]
public int SubNum { get; set; }
/// <summary>
/// 是否包含子节点,前端用
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool HasChildren
{
get
{
return SubNum > 0 || children.Count > 0;
}
}
}
}

View File

@ -24,7 +24,7 @@ namespace ZR.Repository.System
.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)
.WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.menuType))
.OrderBy(it => new { it.parentId, it.orderNum })
.ToTree(it => it.children, it => it.parentId, 0);
}
@ -32,19 +32,20 @@ namespace ZR.Repository.System
/// <summary>
/// 根据用户查询系统菜单列表(菜单管理)
/// </summary>
/// <param name="sysMenu"></param>
/// <param name="menu"></param>
/// <param name="roles">用户角色集合</param>
/// <returns></returns>
public List<SysMenu> SelectTreeMenuListByUserId(MenuQueryDto sysMenu, List<long> roles)
public List<SysMenu> SelectTreeMenuListByRoles(MenuQueryDto menu, List<long> roles)
{
var roleMenus = Context.Queryable<SysRoleMenu>()
.Where(r => roles.Contains(r.Role_id));
return Context.Queryable<SysMenu>()
.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)
.WhereIF(!string.IsNullOrEmpty(menu.MenuName), (c, j) => c.MenuName.Contains(menu.MenuName))
.WhereIF(!string.IsNullOrEmpty(menu.Visible), (c, j) => c.visible == menu.Visible)
.WhereIF(!string.IsNullOrEmpty(menu.Status), (c, j) => c.status == menu.Status)
.WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), c => menu.MenuTypeIdArr.Contains(c.menuType))
.OrderBy((c, j) => new { c.parentId, c.orderNum })
.Select(c => c)
.ToTree(it => it.children, it => it.parentId, 0);
@ -60,6 +61,7 @@ namespace ZR.Repository.System
.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)
.WhereIF(menu.ParentId != null, it => it.parentId == menu.ParentId)
.OrderBy(it => new { it.parentId, it.orderNum })
.ToList();
}
@ -87,35 +89,22 @@ namespace ZR.Repository.System
#region
/// <summary>
/// 管理员获取左侧菜单树
/// </summary>
/// <returns></returns>
public List<SysMenu> SelectMenuTreeAll()
{
var menuTypes = new string[] { "M", "C" };
return Context.Queryable<SysMenu>()
.Where(f => f.status == "0" && menuTypes.Contains(f.menuType))
.OrderBy(it => new { it.parentId, it.orderNum }).ToList();
}
/// <summary>
/// 根据用户角色获取左侧菜单树
/// </summary>
/// <param name="roleIds"></param>
/// <returns></returns>
public List<SysMenu> SelectMenuTreeByRoleIds(List<long> roleIds)
{
var menuTypes = new string[] { "M", "C" };
return Context.Queryable<SysMenu>()
.Where((menu) =>
menuTypes.Contains(menu.menuType)
&& menu.status == "0"
&& SqlFunc.Subqueryable<SysRoleMenu>().Where(s => roleIds.Contains(s.Role_id) && s.Menu_id == menu.MenuId).Any())
.OrderBy((menu) => new { menu.parentId, menu.orderNum })
.Select((menu) => menu).ToList();
}
///// <summary>
///// 根据用户角色获取左侧菜单树
///// </summary>
///// <param name="roleIds"></param>
///// <returns></returns>
//public List<SysMenu> SelectMenuTreeByRoleIds(List<long> roleIds)
//{
// var menuTypes = new string[] { "M", "C" };
// return Context.Queryable<SysMenu>()
// .Where((menu) =>
// menuTypes.Contains(menu.menuType)
// && menu.status == "0"
// && SqlFunc.Subqueryable<SysRoleMenu>().Where(s => roleIds.Contains(s.Role_id) && s.Menu_id == menu.MenuId).Any())
// .OrderBy((menu) => new { menu.parentId, menu.orderNum })
// .Select((menu) => menu).ToList();
//}
#endregion

View File

@ -14,6 +14,7 @@ namespace ZR.Service.System.IService
List<SysMenu> SelectTreeMenuList(MenuQueryDto menu, long userId);
SysMenu GetMenuByMenuId(int menuId);
List<SysMenu> GetMenusByMenuId(int menuId);
int AddMenu(SysMenu menu);
int EditMenu(SysMenu menu);

View File

@ -42,7 +42,7 @@ namespace ZR.Service
else
{
var userRoles = SysRoleService.SelectUserRoles(userId);
menuList = MenuRepository.SelectTreeMenuListByUserId(menu, userRoles);
menuList = MenuRepository.SelectTreeMenuListByRoles(menu, userRoles);
}
return menuList;
}
@ -76,6 +76,21 @@ namespace ZR.Service
return MenuRepository.SelectMenuById(menuId);
}
/// <summary>
/// 根据菜单id获取菜单列表
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
public List<SysMenu> GetMenusByMenuId(int menuId)
{
var list = MenuRepository.GetList(f => f.parentId == menuId).OrderBy(f => f.orderNum).ToList();
Context.ThenMapper(list, item =>
{
item.SubNum = Context.Queryable<SysMenu>().SetContext(x => x.parentId, () => item.MenuId, item).Count();
});
return list;
}
/// <summary>
/// 添加菜单
/// </summary>
@ -155,17 +170,19 @@ namespace ZR.Service
/// <returns></returns>
public List<SysMenu> SelectMenuTreeByUserId(long userId)
{
List<SysMenu> menus;
MenuQueryDto dto = new() { Status = "0", MenuTypeIds = "M,C" };
//List<SysMenu> menus;
if (SysRoleService.IsAdmin(userId))
{
menus = MenuRepository.SelectMenuTreeAll();
return MenuRepository.SelectTreeMenuList(dto);
}
else
{
List<long> roleIds = SysRoleService.SelectUserRoles(userId);
menus = MenuRepository.SelectMenuTreeByRoleIds(roleIds);
//menus = MenuRepository.SelectMenuTreeByRoleIds(roleIds);
return MenuRepository.SelectTreeMenuListByRoles(dto, roleIds);
}
return GetChildPerms(menus, 0);
//return GetChildPerms(menus, 0);
}
/// <summary>
@ -206,25 +223,25 @@ namespace ZR.Service
#region
/// <summary>
/// 根据父节点的ID获取所有子节点
/// </summary>
/// <param name="list">分类表</param>
/// <param name="parentId">传入的父节点ID</param>
/// <returns></returns>
public List<SysMenu> GetChildPerms(List<SysMenu> list, int parentId)
{
List<SysMenu> returnList = new List<SysMenu>();
var data = list.FindAll(f => f.parentId == parentId);
///// <summary>
///// 根据父节点的ID获取所有子节点
///// </summary>
///// <param name="list">分类表</param>
///// <param name="parentId">传入的父节点ID</param>
///// <returns></returns>
//public List<SysMenu> GetChildPerms(List<SysMenu> list, int parentId)
//{
// List<SysMenu> returnList = new List<SysMenu>();
// var data = list.FindAll(f => f.parentId == parentId);
foreach (var item in data)
{
RecursionFn(list, item);
// foreach (var item in data)
// {
// RecursionFn(list, item);
returnList.Add(item);
}
return returnList;
}
// returnList.Add(item);
// }
// return returnList;
//}
/// <summary>
/// 递归列表