Cube/NewLife.CubeNC/ViewModels/MenuTree.cs

63 lines
1.9 KiB
C#

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>
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;
}