From 97e16081c52af9999852dd5d63724140270e2729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=9F=B3=E5=A4=B4?= Date: Wed, 4 Sep 2024 15:05:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E9=A1=B5=E9=99=90=E5=88=B6?= =?UTF-8?q?=E4=BB=85=E6=98=BE=E7=A4=BA2=E5=B1=82=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E8=8F=9C=E5=8D=95=E5=A4=AA=E5=A4=9A=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=A4=AA=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NewLife.Cube/Common/EntityTreeController.cs | 2 +- .../Areas/Admin/Controllers/MenuController.cs | 27 ++++ .../Areas/Admin/Index/IndexController.cs | 6 +- .../Admin/Views/Menu/_ListTree_Data.cshtml | 2 +- NewLife.CubeNC/Common/EntityTreeController.cs | 2 +- NewLife.CubeNC/ViewModels/MenuTree.cs | 131 ++++++++---------- 6 files changed, 86 insertions(+), 84 deletions(-) diff --git a/NewLife.Cube/Common/EntityTreeController.cs b/NewLife.Cube/Common/EntityTreeController.cs index 66127cbe..81fda536 100644 --- a/NewLife.Cube/Common/EntityTreeController.cs +++ b/NewLife.Cube/Common/EntityTreeController.cs @@ -80,7 +80,7 @@ public class EntityTreeController : EntityController= 0) - return EntityTree.FindAllChildsNoParent(pkey); + return EntityTree.FindAllChildsByParent(pkey); } return EntityTree.Root.AllChilds; diff --git a/NewLife.CubeNC/Areas/Admin/Controllers/MenuController.cs b/NewLife.CubeNC/Areas/Admin/Controllers/MenuController.cs index 71898ae5..2eb6dfbe 100644 --- a/NewLife.CubeNC/Areas/Admin/Controllers/MenuController.cs +++ b/NewLife.CubeNC/Areas/Admin/Controllers/MenuController.cs @@ -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 // 过滤要显示的字段 ListFields.RemoveField("Remark"); } + + /// 实体树的数据来自缓存 + /// + /// + protected override IEnumerable Search(Pager p) + { + // 一页显示全部菜单,取自缓存 + p.PageSize = 10000; + + var menus = EntityTree.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.FindAllChildsByParent(pkey).Where(e => e.Deepth <= deepth).ToList(); + } + } + + return menus; + } } \ No newline at end of file diff --git a/NewLife.CubeNC/Areas/Admin/Index/IndexController.cs b/NewLife.CubeNC/Areas/Admin/Index/IndexController.cs index 21485a61..d274457f 100644 --- a/NewLife.CubeNC/Areas/Admin/Index/IndexController.cs +++ b/NewLife.CubeNC/Areas/Admin/Index/IndexController.cs @@ -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 diff --git a/NewLife.CubeNC/Areas/Admin/Views/Menu/_ListTree_Data.cshtml b/NewLife.CubeNC/Areas/Admin/Views/Menu/_ListTree_Data.cshtml index 668f396f..c8dc7216 100644 --- a/NewLife.CubeNC/Areas/Admin/Views/Menu/_ListTree_Data.cshtml +++ b/NewLife.CubeNC/Areas/Admin/Views/Menu/_ListTree_Data.cshtml @@ -49,7 +49,7 @@ } @entity.ID - @entity.TreeNodeName + @entity.TreeNodeName @if (entity.Icon.StartsWithIgnoreCase("fa-")) { diff --git a/NewLife.CubeNC/Common/EntityTreeController.cs b/NewLife.CubeNC/Common/EntityTreeController.cs index 4a1bfc00..0337afa2 100644 --- a/NewLife.CubeNC/Common/EntityTreeController.cs +++ b/NewLife.CubeNC/Common/EntityTreeController.cs @@ -118,7 +118,7 @@ public class EntityTreeController : EntityController= 0) - return EntityTree.FindAllChildsNoParent(pkey); + return EntityTree.FindAllChildsByParent(pkey); } return EntityTree.Root.AllChilds; diff --git a/NewLife.CubeNC/ViewModels/MenuTree.cs b/NewLife.CubeNC/ViewModels/MenuTree.cs index 507aa566..ad03ceb3 100644 --- a/NewLife.CubeNC/ViewModels/MenuTree.cs +++ b/NewLife.CubeNC/ViewModels/MenuTree.cs @@ -1,84 +1,63 @@ -using System; -using System.Collections.Generic; +namespace NewLife.Cube.ViewModels; -namespace NewLife.Cube.ViewModels +/// 菜单树 +public class MenuTree { + /// 编号 + public Int32 ID { get; set; } + + /// 名称 + public String Name { get; set; } + + /// 显示名 + public String DisplayName { get; set; } + + /// 全名 + public String FullName { get; set; } + + /// 父级编号 + public Int32? ParentID { get; set; } + + /// 链接 + public String Url { get; set; } + + /// 图标 + public String Icon { get; set; } + + /// 是否可见 + public Boolean Visible { get; set; } + + /// 是否新窗口打开 + public Boolean NewWindow { get; set; } + + /// 可选权限子项 + public Dictionary Permissions { get; set; } + + /// 子菜单 + public IList Children { get => GetChildren?.Invoke(this) ?? null; set { } } + /// - /// 菜单树 + /// 获取子菜单的方法 /// - public class MenuTree + private static Func> GetChildren; + + /// + /// 获取菜单树 + /// + /// 自定义的获取子菜单需要数据的方法 + /// 获取菜单列表的方法 + /// 获取菜单列表的初始数据来源 + /// + public static IList GetMenuTree(Func getChildrenSrc, Func> getMenuList, T src) where T : class { - /// - /// - /// - /// - public Int32 ID { get; set; } - /// - /// 名称 - /// - /// - public String Name { get; set; } - /// - /// 显示名 - /// - public String DisplayName { get; set; } - /// 全名 - public String FullName { get; set; } - /// - /// 父级id - /// - public Int32? ParentID { get; set; } - /// - /// 链接 - /// - /// - public String Url { get; set; } - /// - /// 图标 - /// - /// - public String Icon { get; set; } - /// - /// 是否可见 - /// - /// - public Boolean Visible { get; set; } + GetChildren = m => getMenuList?.Invoke(getChildrenSrc(m)); - /// 是否新窗口打开 - public Boolean NewWindow { get; set; } - - /// 可选权限子项 - public Dictionary Permissions { get; set; } - /// - /// 子菜单 - /// - /// - public IList Children { get => GetChildren?.Invoke(this) ?? null; set { } } - - /// - /// 获取子菜单的方法 - /// - private static Func> GetChildren; - - /// - /// 获取菜单树 - /// - /// 自定义的获取子菜单需要数据的方法 - /// 获取菜单列表的方法 - /// 获取菜单列表的初始数据来源 - /// - public static IList GetMenuTree(Func getChildrenSrc, - Func> getMenuList, T src) where T : class - { - GetChildren = m => getMenuList?.Invoke(getChildrenSrc(m)); - - return getMenuList?.Invoke(src); - } - - /// - /// 已重载。 - /// - /// - public override String ToString() => Name; + return getMenuList?.Invoke(src); } + + /// + /// 已重载。 + /// + /// + public override String ToString() => Name; } \ No newline at end of file