菜单页限制仅显示2层,避免菜单太多页面太长
This commit is contained in:
parent
e2662097f6
commit
97e16081c5
|
@ -80,7 +80,7 @@ public class EntityTreeController<TEntity, TModel> : EntityController<TEntity, T
|
||||||
{
|
{
|
||||||
var pkey = p[set.Parent].ToInt(-1);
|
var pkey = p[set.Parent].ToInt(-1);
|
||||||
if (pkey >= 0)
|
if (pkey >= 0)
|
||||||
return EntityTree<TEntity>.FindAllChildsNoParent(pkey);
|
return EntityTree<TEntity>.FindAllChildsByParent(pkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
return EntityTree<TEntity>.Root.AllChilds;
|
return EntityTree<TEntity>.Root.AllChilds;
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using NewLife.Web;
|
||||||
|
using XCode;
|
||||||
using XCode.Membership;
|
using XCode.Membership;
|
||||||
|
|
||||||
namespace NewLife.Cube.Areas.Admin.Controllers;
|
namespace NewLife.Cube.Areas.Admin.Controllers;
|
||||||
|
@ -15,4 +17,29 @@ public class MenuController : EntityTreeController<Menu, MenuModel>
|
||||||
// 过滤要显示的字段
|
// 过滤要显示的字段
|
||||||
ListFields.RemoveField("Remark");
|
ListFields.RemoveField("Remark");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>实体树的数据来自缓存</summary>
|
||||||
|
/// <param name="p"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected override IEnumerable<Menu> Search(Pager p)
|
||||||
|
{
|
||||||
|
// 一页显示全部菜单,取自缓存
|
||||||
|
p.PageSize = 10000;
|
||||||
|
|
||||||
|
var menus = EntityTree<Menu>.Root.AllChilds.Where(e => e.Deepth <= 2).ToList();
|
||||||
|
|
||||||
|
var set = GetSetting();
|
||||||
|
if (set != null && !set.Parent.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
var pkey = p[set.Parent].ToInt(-1);
|
||||||
|
if (pkey >= 0)
|
||||||
|
{
|
||||||
|
var m = XCode.Membership.Menu.FindByID(pkey);
|
||||||
|
var deepth = ((m?.Deepth - 1) ?? 0) + 2;
|
||||||
|
menus = EntityTree<Menu>.FindAllChildsByParent(pkey).Where(e => e.Deepth <= deepth).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return menus;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -269,11 +269,7 @@ public class IndexController : ControllerBaseX
|
||||||
// 如果顶级只有一层,并且至少有三级目录,则提升一级
|
// 如果顶级只有一层,并且至少有三级目录,则提升一级
|
||||||
if (menus.Count == 1 && menus[0].Childs.All(m => m.Childs.Count > 0)) { menus = menus[0].Childs; }
|
if (menus.Count == 1 && menus[0].Childs.All(m => m.Childs.Count > 0)) { menus = menus[0].Childs; }
|
||||||
|
|
||||||
var menuTree = MenuTree.GetMenuTree(pMenuTree =>
|
var menuTree = MenuTree.GetMenuTree(m => fact.GetMySubMenus(m.ID, user, true), list =>
|
||||||
{
|
|
||||||
var subMenus = fact.GetMySubMenus(pMenuTree.ID, user, true);
|
|
||||||
return subMenus;
|
|
||||||
}, list =>
|
|
||||||
{
|
{
|
||||||
|
|
||||||
var menuList = (from menu in list
|
var menuList = (from menu in list
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
<td class="text-center"><input type="checkbox" name="keys" value="@entity.ID" /></td>
|
<td class="text-center"><input type="checkbox" name="keys" value="@entity.ID" /></td>
|
||||||
}
|
}
|
||||||
<td class="text-center">@entity.ID</td>
|
<td class="text-center">@entity.ID</td>
|
||||||
<td>@entity.TreeNodeName</td>
|
<td><a href="?parentId=@entity.ID">@entity.TreeNodeName</a></td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
@if (entity.Icon.StartsWithIgnoreCase("fa-"))
|
@if (entity.Icon.StartsWithIgnoreCase("fa-"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -118,7 +118,7 @@ public class EntityTreeController<TEntity, TModel> : EntityController<TEntity, T
|
||||||
{
|
{
|
||||||
var pkey = p[set.Parent].ToInt(-1);
|
var pkey = p[set.Parent].ToInt(-1);
|
||||||
if (pkey >= 0)
|
if (pkey >= 0)
|
||||||
return EntityTree<TEntity>.FindAllChildsNoParent(pkey);
|
return EntityTree<TEntity>.FindAllChildsByParent(pkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
return EntityTree<TEntity>.Root.AllChilds;
|
return EntityTree<TEntity>.Root.AllChilds;
|
||||||
|
|
|
@ -1,84 +1,63 @@
|
||||||
using System;
|
namespace NewLife.Cube.ViewModels;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace NewLife.Cube.ViewModels
|
/// <summary>菜单树</summary>
|
||||||
|
public class MenuTree
|
||||||
{
|
{
|
||||||
|
/// <summary>编号</summary>
|
||||||
|
public Int32 ID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>名称</summary>
|
||||||
|
public String Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>显示名</summary>
|
||||||
|
public String DisplayName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>全名</summary>
|
||||||
|
public String FullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>父级编号</summary>
|
||||||
|
public Int32? ParentID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>链接</summary>
|
||||||
|
public String Url { get; set; }
|
||||||
|
|
||||||
|
/// <summary>图标</summary>
|
||||||
|
public String Icon { get; set; }
|
||||||
|
|
||||||
|
/// <summary>是否可见</summary>
|
||||||
|
public Boolean Visible { get; set; }
|
||||||
|
|
||||||
|
/// <summary>是否新窗口打开</summary>
|
||||||
|
public Boolean NewWindow { get; set; }
|
||||||
|
|
||||||
|
/// <summary>可选权限子项</summary>
|
||||||
|
public Dictionary<Int32, String> Permissions { get; set; }
|
||||||
|
|
||||||
|
/// <summary>子菜单</summary>
|
||||||
|
public IList<MenuTree> Children { get => GetChildren?.Invoke(this) ?? null; set { } }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 菜单树
|
/// 获取子菜单的方法
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class MenuTree
|
private static Func<MenuTree, IList<MenuTree>> GetChildren;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取菜单树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="getChildrenSrc">自定义的获取子菜单需要数据的方法</param>
|
||||||
|
/// <param name="getMenuList">获取菜单列表的方法</param>
|
||||||
|
/// <param name="src">获取菜单列表的初始数据来源</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IList<MenuTree> GetMenuTree<T>(Func<MenuTree, T> getChildrenSrc, Func<T, IList<MenuTree>> getMenuList, T src) where T : class
|
||||||
{
|
{
|
||||||
/// <summary>
|
GetChildren = m => getMenuList?.Invoke(getChildrenSrc(m));
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <value></value>
|
|
||||||
public Int32 ID { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 名称
|
|
||||||
/// </summary>
|
|
||||||
/// <value></value>
|
|
||||||
public String Name { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 显示名
|
|
||||||
/// </summary>
|
|
||||||
public String DisplayName { get; set; }
|
|
||||||
/// <summary>全名</summary>
|
|
||||||
public String FullName { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 父级id
|
|
||||||
/// </summary>
|
|
||||||
public Int32? ParentID { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 链接
|
|
||||||
/// </summary>
|
|
||||||
/// <value></value>
|
|
||||||
public String Url { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 图标
|
|
||||||
/// </summary>
|
|
||||||
/// <value></value>
|
|
||||||
public String Icon { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 是否可见
|
|
||||||
/// </summary>
|
|
||||||
/// <value></value>
|
|
||||||
public Boolean Visible { get; set; }
|
|
||||||
|
|
||||||
/// <summary>是否新窗口打开</summary>
|
return getMenuList?.Invoke(src);
|
||||||
public Boolean NewWindow { get; set; }
|
|
||||||
|
|
||||||
/// <summary>可选权限子项</summary>
|
|
||||||
public Dictionary<Int32, String> Permissions { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 子菜单
|
|
||||||
/// </summary>
|
|
||||||
/// <value></value>
|
|
||||||
public IList<MenuTree> Children { get => GetChildren?.Invoke(this) ?? null; set { } }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取子菜单的方法
|
|
||||||
/// </summary>
|
|
||||||
private static Func<MenuTree, IList<MenuTree>> GetChildren;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取菜单树
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="getChildrenSrc">自定义的获取子菜单需要数据的方法</param>
|
|
||||||
/// <param name="getMenuList">获取菜单列表的方法</param>
|
|
||||||
/// <param name="src">获取菜单列表的初始数据来源</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static IList<MenuTree> GetMenuTree<T>(Func<MenuTree, T> getChildrenSrc,
|
|
||||||
Func<T, IList<MenuTree>> getMenuList, T src) where T : class
|
|
||||||
{
|
|
||||||
GetChildren = m => getMenuList?.Invoke(getChildrenSrc(m));
|
|
||||||
|
|
||||||
return getMenuList?.Invoke(src);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 已重载。
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public override String ToString() => Name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 已重载。
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override String ToString() => Name;
|
||||||
}
|
}
|
Loading…
Reference in New Issue