菜单页限制仅显示2层,避免菜单太多页面太长

This commit is contained in:
大石头 2024-09-04 15:05:19 +08:00
parent e2662097f6
commit 97e16081c5
6 changed files with 86 additions and 84 deletions

View File

@ -80,7 +80,7 @@ public class EntityTreeController<TEntity, TModel> : EntityController<TEntity, T
{
var pkey = p[set.Parent].ToInt(-1);
if (pkey >= 0)
return EntityTree<TEntity>.FindAllChildsNoParent(pkey);
return EntityTree<TEntity>.FindAllChildsByParent(pkey);
}
return EntityTree<TEntity>.Root.AllChilds;

View File

@ -1,4 +1,6 @@
using System.ComponentModel;
using NewLife.Web;
using XCode;
using XCode.Membership;
namespace NewLife.Cube.Areas.Admin.Controllers;
@ -15,4 +17,29 @@ public class MenuController : EntityTreeController<Menu, MenuModel>
// 过滤要显示的字段
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;
}
}

View File

@ -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; }
var menuTree = MenuTree.GetMenuTree(pMenuTree =>
{
var subMenus = fact.GetMySubMenus(pMenuTree.ID, user, true);
return subMenus;
}, list =>
var menuTree = MenuTree.GetMenuTree(m => fact.GetMySubMenus(m.ID, user, true), list =>
{
var menuList = (from menu in list

View File

@ -49,7 +49,7 @@
<td class="text-center"><input type="checkbox" name="keys" value="@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">
@if (entity.Icon.StartsWithIgnoreCase("fa-"))
{

View File

@ -118,7 +118,7 @@ public class EntityTreeController<TEntity, TModel> : EntityController<TEntity, T
{
var pkey = p[set.Parent].ToInt(-1);
if (pkey >= 0)
return EntityTree<TEntity>.FindAllChildsNoParent(pkey);
return EntityTree<TEntity>.FindAllChildsByParent(pkey);
}
return EntityTree<TEntity>.Root.AllChilds;

View File

@ -1,47 +1,30 @@
using System;
using System.Collections.Generic;
namespace NewLife.Cube.ViewModels;
namespace NewLife.Cube.ViewModels
/// <summary>菜单树</summary>
public class MenuTree
{
/// <summary>
/// 菜单树
/// </summary>
public class MenuTree
{
/// <summary>
///
/// </summary>
/// <value></value>
/// <summary>编号</summary>
public Int32 ID { get; set; }
/// <summary>
/// 名称
/// </summary>
/// <value></value>
/// <summary>名称</summary>
public String Name { get; set; }
/// <summary>
/// 显示名
/// </summary>
/// <summary>显示名</summary>
public String DisplayName { get; set; }
/// <summary>全名</summary>
public String FullName { get; set; }
/// <summary>
/// 父级id
/// </summary>
/// <summary>父级编号</summary>
public Int32? ParentID { get; set; }
/// <summary>
/// 链接
/// </summary>
/// <value></value>
/// <summary>链接</summary>
public String Url { get; set; }
/// <summary>
/// 图标
/// </summary>
/// <value></value>
/// <summary>图标</summary>
public String Icon { get; set; }
/// <summary>
/// 是否可见
/// </summary>
/// <value></value>
/// <summary>是否可见</summary>
public Boolean Visible { get; set; }
/// <summary>是否新窗口打开</summary>
@ -49,10 +32,8 @@ namespace NewLife.Cube.ViewModels
/// <summary>可选权限子项</summary>
public Dictionary<Int32, String> Permissions { get; set; }
/// <summary>
/// 子菜单
/// </summary>
/// <value></value>
/// <summary>子菜单</summary>
public IList<MenuTree> Children { get => GetChildren?.Invoke(this) ?? null; set { } }
/// <summary>
@ -67,8 +48,7 @@ namespace NewLife.Cube.ViewModels
/// <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
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));
@ -80,5 +60,4 @@ namespace NewLife.Cube.ViewModels
/// </summary>
/// <returns></returns>
public override String ToString() => Name;
}
}