IwbNavigationProvider.cs 3.8 KB

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