private IEnumerable <SysMenuTreeItemDto> getSysMenuTreesMainRecursive(IEnumerable <SysMenuDto> sysMenuTreeItems) { bool hideModuleManager = FullSystemConfig.HideModuleManager == true; List <SysMenuTreeItemDto> sysMenuTrees = new List <SysMenuTreeItemDto>(); List <SysMenuDto> dest = new List <SysMenuDto>(); int index = 60000; foreach (var item in sysMenuTreeItems) { Ncf.XncfBase.IXncfRegister xncfRegister = XncfRegisterList.FirstOrDefault(z => !string.IsNullOrEmpty(item.Url) && item.Url.Contains($"uid={z.Uid}", StringComparison.OrdinalIgnoreCase)); if (xncfRegister != null && xncfRegister is Senparc.Ncf.Core.Areas.IAreaRegister xncfAreapage && xncfAreapage.AareaPageMenuItems.Count() > 0) { if (hideModuleManager) { item.ParentId = null; item.Id = (index++).ToString(); } dest.Add(new SysMenuDto() { MenuName = "设置/执行", Url = item.Url, Id = (index++).ToString(), ParentId = item.Id, Icon = "fa fa-play" }); dest.AddRange(xncfAreapage.AareaPageMenuItems.Select(_ => new SysMenuDto() { MenuName = _.Name, Url = _.Url, Icon = _.Icon, Id = (index++).ToString(), ParentId = item.Id })); item.Url = string.Empty; }
/// <summary> /// 获取 Admin 后台左侧菜单结构 /// </summary> /// <param name="sysMenuTreeItems"></param> /// <returns></returns> private async Task <IEnumerable <SysMenuTreeItemDto> > GetSysMenuTreesMainRecursiveAsync(IEnumerable <SysMenuDto> sysMenuTreeItems) { bool hideModuleManager = FullSystemConfig.HideModuleManager == true;//是否处于发布状态,需要隐藏部分菜单 List <SysMenuTreeItemDto> sysMenuTrees = new List <SysMenuTreeItemDto>(); List <SysMenuDto> dest = new List <SysMenuDto>(); int index = 60000; XncfRegisterManager xncfRegisterManager = new XncfRegisterManager(_serviceProvider); //遍历菜单设置项目,查找和 XNCF 模块有关的菜单节点 foreach (var item in sysMenuTreeItems) { //定位 XNCF 模块 IXncfRegister xncfRegister = XncfRegisterList .FirstOrDefault(z => !string.IsNullOrEmpty(item.Url) && item.Url.Contains($"uid={z.Uid}", StringComparison.OrdinalIgnoreCase)); //TODO:判断Xncf条件还可以更细 var isStoredXncf = !string.IsNullOrEmpty(item.Url) && item.Url.Contains("uid=", StringComparison.OrdinalIgnoreCase); //在数据库里面注册为模块 var xncfMissing = isStoredXncf && xncfRegister == null; //程序集未加载 if (xncfRegister != null && xncfRegister is Senparc.Ncf.Core.Areas.IAreaRegister xncfAreapage && xncfAreapage.AareaPageMenuItems.Count() > 0) { if (hideModuleManager) { item.ParentId = null; item.Id = (index++).ToString(); } else { dest.Add(new SysMenuDto() { MenuName = "设置/执行", Url = item.Url, Id = (index++).ToString(), ParentId = item.Id, Icon = "fa fa-play" }); } dest.AddRange(xncfAreapage.AareaPageMenuItems.Select(_ => new SysMenuDto() { MenuName = _.Name, Url = _.Url, Icon = _.Icon, Id = string.IsNullOrEmpty(_.Id) ? (index++).ToString() : _.Id, ParentId = string.IsNullOrEmpty(_.ParentId) ? item.Id : _.ParentId })); item.Url = string.Empty; }
/// <summary> /// 获取已安装模块模块 handler=Mofules /// </summary> /// <returns></returns> public async Task <IActionResult> OnGetMofulesAsync(int pageIndex = 0, int pageSize = 0) { //更新菜单缓存 await _sysMenuService.GetMenuDtoByCacheAsync(true).ConfigureAwait(false); PagedList <XncfModule> xncfModules = await _xncfModuleService.GetObjectListAsync(pageIndex, pageSize, _ => true, _ => _.AddTime, Ncf.Core.Enums.OrderingType.Descending); //xncfModules.FirstOrDefault(). var xncfRegisterList = XncfRegisterList.Select(_ => new { _.Uid, homeUrl = _.GetAreaHomeUrl(), _.Icon }); var result = from xncfModule in xncfModules join xncfRegister in xncfRegisterList on xncfModule.Uid equals xncfRegister.Uid into xncfRegister_left from xncfRegister in xncfRegister_left.DefaultIfEmpty() select new { xncfModule, xncfRegister }; return(Ok(new { result, FullSystemConfig.HideModuleManager })); }