using Abp.Application.Navigation; using Abp.Authorization; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.Localization; using Abp.Runtime.Caching; using VberZero.BaseSystem; namespace VberZero.Navigation; public class VzNavigationProvider : NavigationProvider { protected ICacheManager CacheManager { get; } protected IRepository FunRepository { get; } public VzNavigationProvider(ICacheManager cacheManager, IRepository funRepository) { CacheManager = cacheManager; FunRepository = funRepository; } public void Refresh(INavigationProviderContext context) { var itemNames = context.Manager.MainMenu.Items.Select(a => a.Name); foreach (var name in itemNames) { context.Manager.MainMenu.RemoveItem(name); } SetNavigation(context); } [UnitOfWork] public override void SetNavigation(INavigationProviderContext context) { if (context is VzNavigationProviderContext) { var funs = CacheManager.GetCache>(VzConsts.CacheFunction).Get( "ALL-FUN", () => FunRepository.GetAllList()); var funRootName = VzConsts.FunRootName; var fun = funs.FirstOrDefault(a => a.Name == funRootName); if (fun != null) { context.Manager.MainMenu.AddItem(new MenuItemDefinition(fun.PermissionName, L("Home"), fun.Icon, fun.Url, fun.NeedAuth, fun.Sort, fun, permissionDependency: new SimplePermissionDependency(fun.PermissionName))); SetChildNavigation(context.Manager.MainMenu, funs, fun.Id); } } } private void SetChildNavigation(MenuDefinition menu, IList list, int? parentNo) { var funs = list.Where(a => a.ParentNo == parentNo).ToList(); if (funs.Any()) { foreach (var fun in funs) { if (fun.FunctionType != VzDefinition.FunctionType.Catalog && fun.FunctionType != VzDefinition.FunctionType.Menu) continue; var item = new MenuItemDefinition(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), fun.Icon, fun.Url, fun.NeedAuth, fun.Sort, fun, permissionDependency: new SimplePermissionDependency(fun.PermissionName)); SetChildNavigation(item, list, fun.Id); menu.AddItem(item); } } } private void SetChildNavigation(MenuItemDefinition menu, IList list, int? parentNo) { var funs = list.Where(a => a.ParentNo == parentNo).OrderBy(a => a.Sort).ToList(); if (funs.Any()) { foreach (var fun in funs) { if (fun.FunctionType != VzDefinition.FunctionType.Catalog && fun.FunctionType != VzDefinition.FunctionType.Menu) continue; var item = new MenuItemDefinition(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), fun.Icon, fun.Url, fun.NeedAuth, fun.Sort, fun, permissionDependency: new SimplePermissionDependency(fun.PermissionName)); SetChildNavigation(item, list, fun.Id); menu.AddItem(item); } } } private static ILocalizableString L(string name) { return new LocalizableString(name, VzConsts.LocalizationSourceName); } }