IwbNavigationProvider.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Abp.Application.Navigation;
  4. using Abp.Dependency;
  5. using Abp.Domain.Repositories;
  6. using Abp.Localization;
  7. using Abp.Runtime.Caching;
  8. using IwbZero;
  9. using ContractService.Authorization;
  10. using ContractService.BaseInfo;
  11. using ContractService.Configuration;
  12. namespace ContractService
  13. {
  14. /// <summary>
  15. /// This class defines menus for the application.
  16. /// It uses ABP's menu system.
  17. /// When you add menu items here, they are automatically appear in angular application.
  18. /// See Views/Layout/_TopMenu.cshtml file to know how to render menu.
  19. /// </summary>
  20. public class ContractServiceNavigationProvider : NavigationProvider
  21. {
  22. protected readonly IIocManager IocManager;
  23. protected ICacheManager CacheManager { get; }
  24. public ContractServiceNavigationProvider(IIocManager iocManager, ICacheManager cacheManager)
  25. {
  26. IocManager = iocManager;
  27. CacheManager = cacheManager;
  28. }
  29. public void Refresh(INavigationProviderContext context)
  30. {
  31. var itemNames = context.Manager.MainMenu.Items.Select(a => a.Name);
  32. foreach (var name in itemNames)
  33. {
  34. context.Manager.MainMenu.RemoveItem(name);
  35. }
  36. SetNavigation(context);
  37. }
  38. public override void SetNavigation(INavigationProviderContext context)
  39. {
  40. var funs = CacheManager.GetCache<string, List<SysFunction>>(IwbCacheNames.NavFunctionCache).Get(
  41. "ALLFUN", () =>
  42. {
  43. using (var funRepository = IocManager.ResolveAsDisposable<IRepository<SysFunction>>())
  44. {
  45. return funRepository.Object.GetAllList(a => a.IsDeleted == false);
  46. }
  47. });
  48. var topFunNo = System.Configuration.ConfigurationManager.AppSettings["SystemFunction.Top.FunctionNo"] ?? "HTSystem";
  49. var topFun = funs.FirstOrDefault(a => a.FunctionNo == topFunNo);
  50. var topPermName = topFun?.PermissionName ?? PermissionNames.Pages;
  51. if (topFun != null)
  52. context.Manager.MainMenu.AddItem(new MenuItemDefinition(topPermName, L("Home"), topFun.Icon, topFun.Url,
  53. topFun.NeedAuth, topPermName, 0, topFun));
  54. SetChildNavigation(context.Manager.MainMenu, funs, topFunNo);
  55. //using (var funRepository = IocManager.ResolveAsDisposable<IRepository<SysFunction>>())
  56. //{
  57. // var funs = funRepository.Object.GetAllList(a => a.IsDeleted == false);
  58. // var topFunNo = System.Configuration.ConfigurationManager.AppSettings["SystemFunction.Top.FunctionNo"] ?? "HTSystem";
  59. //}
  60. }
  61. private void SetChildNavigation(MenuDefinition menu, IList<SysFunction> list, string parentNo)
  62. {
  63. var funs = list.Where(a => a.ParentNo == parentNo).ToList();
  64. if (funs.Any())
  65. {
  66. foreach (var fun in funs)
  67. {
  68. if (fun.FunctionType != FunctionTypeDefinition.Catalog &&
  69. fun.FunctionType != FunctionTypeDefinition.Menu)
  70. continue;
  71. var item = new MenuItemDefinition(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), fun.Icon, fun.Url,
  72. fun.NeedAuth, fun.PermissionName, fun.Sort, fun);
  73. SetChildNavigation(item, list, fun.FunctionNo);
  74. menu.AddItem(item);
  75. }
  76. }
  77. }
  78. private void SetChildNavigation(MenuItemDefinition menu, IList<SysFunction> list, string parentNo)
  79. {
  80. var funs = list.Where(a => a.ParentNo == parentNo).ToList();
  81. if (funs.Any())
  82. {
  83. foreach (var fun in funs)
  84. {
  85. if (fun.FunctionType != FunctionTypeDefinition.Catalog &&
  86. fun.FunctionType != FunctionTypeDefinition.Menu)
  87. continue;
  88. var item = new MenuItemDefinition(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), fun.Icon, fun.Url,
  89. fun.NeedAuth, fun.PermissionName, fun.Sort, fun);
  90. SetChildNavigation(item, list, fun.FunctionNo);
  91. menu.AddItem(item);
  92. }
  93. }
  94. }
  95. private static ILocalizableString L(string name)
  96. {
  97. return new LocalizableString(name, IwbZeroConsts.LocalizationSourceName);
  98. }
  99. }
  100. }