VzNavigationProvider.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using Abp.Application.Navigation;
  2. using Abp.Authorization;
  3. using Abp.Domain.Repositories;
  4. using Abp.Domain.Uow;
  5. using Abp.Localization;
  6. using Abp.Runtime.Caching;
  7. using VberZero.BaseSystem;
  8. namespace VberZero.Navigation;
  9. public class VzNavigationProvider : NavigationProvider
  10. {
  11. protected ICacheManager CacheManager { get; }
  12. protected IRepository<SysFunction, int?> FunRepository { get; }
  13. public VzNavigationProvider(ICacheManager cacheManager, IRepository<SysFunction, int?> funRepository)
  14. {
  15. CacheManager = cacheManager;
  16. FunRepository = funRepository;
  17. }
  18. public void Refresh(INavigationProviderContext context)
  19. {
  20. var itemNames = context.Manager.MainMenu.Items.Select(a => a.Name);
  21. foreach (var name in itemNames)
  22. {
  23. context.Manager.MainMenu.RemoveItem(name);
  24. }
  25. SetNavigation(context);
  26. }
  27. [UnitOfWork]
  28. public override void SetNavigation(INavigationProviderContext context)
  29. {
  30. if (context is VzNavigationProviderContext)
  31. {
  32. var funs = CacheManager.GetCache<string, List<SysFunction>>(VzConsts.CacheFunction).Get(
  33. "ALL-FUN", () => FunRepository.GetAllList());
  34. var funRootName = VzConsts.FunRootName;
  35. var fun = funs.FirstOrDefault(a => a.Name == funRootName);
  36. if (fun != null)
  37. {
  38. context.Manager.MainMenu.AddItem(new MenuItemDefinition(fun.PermissionName, L("Home"), fun.Icon, fun.Url,
  39. fun.NeedAuth, fun.Sort, fun, permissionDependency: new SimplePermissionDependency(fun.PermissionName)));
  40. SetChildNavigation(context.Manager.MainMenu, funs, fun.Id);
  41. }
  42. }
  43. }
  44. private void SetChildNavigation(MenuDefinition menu, IList<SysFunction> list, int? parentNo)
  45. {
  46. var funs = list.Where(a => a.ParentNo == parentNo).ToList();
  47. if (funs.Any())
  48. {
  49. foreach (var fun in funs)
  50. {
  51. if (fun.FunctionType != VzDefinition.FunctionType.Catalog &&
  52. fun.FunctionType != VzDefinition.FunctionType.Menu)
  53. continue;
  54. var item = new MenuItemDefinition(fun.PermissionName,
  55. L(fun.PermissionName.Replace(".", "")), fun.Icon, fun.Url,
  56. fun.NeedAuth, fun.Sort, fun, permissionDependency: new SimplePermissionDependency(fun.PermissionName));
  57. SetChildNavigation(item, list, fun.Id);
  58. menu.AddItem(item);
  59. }
  60. }
  61. }
  62. private void SetChildNavigation(MenuItemDefinition menu, IList<SysFunction> list, int? parentNo)
  63. {
  64. var funs = list.Where(a => a.ParentNo == parentNo).OrderBy(a => a.Sort).ToList();
  65. if (funs.Any())
  66. {
  67. foreach (var fun in funs)
  68. {
  69. if (fun.FunctionType != VzDefinition.FunctionType.Catalog && fun.FunctionType != VzDefinition.FunctionType.Menu)
  70. continue;
  71. var item = new MenuItemDefinition(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), fun.Icon, fun.Url,
  72. fun.NeedAuth, fun.Sort, fun, permissionDependency: new SimplePermissionDependency(fun.PermissionName));
  73. SetChildNavigation(item, list, fun.Id);
  74. menu.AddItem(item);
  75. }
  76. }
  77. }
  78. private static ILocalizableString L(string name)
  79. {
  80. return new LocalizableString(name, VzConsts.LocalizationSourceName);
  81. }
  82. }