_MenuItem.cshtml 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. @using VberAdmin.Web.Views
  2. @using VberAdmin.Web.Views.Shared.Components.SideBarMenu
  3. @using Abp.Application.Navigation
  4. @using VberZero.Tools.StringModel
  5. @model UserMenuItem
  6. @inject ILanguageManager _languageManager
  7. @{
  8. var isActive = IsActiveMenuItem(Model, ViewBag.ActiveMenu);
  9. var subMenus = Model?.Items.Where(x => x.IsVisible).OrderByCustom().ToList();
  10. var hasSubMenus = subMenus?.Any() ?? false;
  11. }
  12. @functions {
  13. static bool IsActiveMenuItem(UserMenuItem menuItem, string pageName)
  14. {
  15. if (string.IsNullOrWhiteSpace(pageName))
  16. return false;
  17. return pageName.Equals(menuItem.Name, StringComparison.InvariantCultureIgnoreCase)
  18. || menuItem.Items.Any(cn => IsActiveMenuItem(cn, pageName));
  19. }
  20. string CalculateMenuUrl(string url)
  21. {
  22. if (string.IsNullOrEmpty(url))
  23. return ApplicationPath;
  24. if (UrlChecker.IsRooted(url))
  25. return url;
  26. return ApplicationPath + url;
  27. }
  28. }
  29. @if (!hasSubMenus)
  30. {
  31. var linkUrl = CalculateMenuUrl(Model?.Url);
  32. var linkClasses = $"{(isActive ? "active" : "")}";
  33. var linkTarget = !string.IsNullOrEmpty(Model?.Target) ? Html.Raw($" target=\"{Model.Target}\"") : null;
  34. <div class="menu-item">
  35. <a class="menu-link @(linkClasses)" href="@(linkUrl)" @linkTarget>
  36. <span class="menu-icon">
  37. <i class="@(Model?.Icon)"></i>
  38. </span>
  39. <span class="menu-title">@Model?.DisplayName</span>
  40. </a>
  41. </div>
  42. }
  43. else
  44. {
  45. var activeClasses = $"{(isActive ? "here show" : "")}";
  46. var icon = Model.Icon.Empty() ? "<span class=\"menu-bullet\"><span class=\"bullet bullet-dot\"></span></span>" : $"<span class=\"menu-icon\"><i class=\"{Model?.Icon}\"></i></span>";
  47. <div data-kt-menu-trigger="click" class="menu-item menu-accordion @(activeClasses)">
  48. <span class="menu-link">
  49. @Html.Raw(icon)
  50. <span class="menu-title">@Model.DisplayName</span>
  51. <span class="menu-arrow"></span>
  52. </span>
  53. <div class="menu-sub menu-sub-accordion menu-active-bg">
  54. @foreach (var menu in subMenus)
  55. {
  56. @await Html.PartialAsync("Components/SideBarMenu/_MenuItem", menu)
  57. }
  58. </div>
  59. </div>
  60. }