mirror of https://github.com/abpframework/abp.git
9 changed files with 117 additions and 284 deletions
@ -1,62 +1,67 @@ |
|||
@using Volo.Abp.UI.Navigation |
|||
@using Volo.Abp.UI.Navigation |
|||
@{ |
|||
var elementId = MenuItem.MenuItem.ElementId ?? "MenuItem_" + MenuItem.MenuItem.Name.Replace(".", "_"); |
|||
var cssClass = string.IsNullOrEmpty(MenuItem.MenuItem.CssClass) ? string.Empty : MenuItem.MenuItem.CssClass; |
|||
var disabled = MenuItem.MenuItem.IsDisabled ? "disabled" : string.Empty; |
|||
var url = MenuItem.MenuItem.Url == null ? "#" : MenuItem.MenuItem.Url.TrimStart('/', '~'); |
|||
var customComponentType = MenuItem.MenuItem.GetComponentTypeOrDefault(); |
|||
var customComponentType = MenuItem.GetComponentTypeOrDefault(); |
|||
} |
|||
@if (MenuItem.MenuItem.IsLeaf) |
|||
|
|||
@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) |
|||
{ |
|||
if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) |
|||
{ |
|||
<DynamicComponent Type="@customComponentType" /> |
|||
} |
|||
else if (MenuItem.MenuItem.Url != null) |
|||
{ |
|||
<li class="nav-item @cssClass @disabled" id="@elementId"> |
|||
<a class="nav-link" href="@url" target="@MenuItem.MenuItem.Target"> |
|||
@if (MenuItem.MenuItem.Icon != null) |
|||
{ |
|||
if (MenuItem.MenuItem.Icon.StartsWith("fa")) |
|||
{ |
|||
<i class="@MenuItem.MenuItem.Icon me-1"></i> |
|||
} |
|||
} |
|||
@MenuItem.MenuItem.DisplayName |
|||
</a> |
|||
</li> |
|||
} |
|||
<DynamicComponent Type="@customComponentType" /> |
|||
} |
|||
else |
|||
{ |
|||
<li class="nav-item"> |
|||
<div class="dropdown"> |
|||
@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) |
|||
{ |
|||
<DynamicComponent Type="@customComponentType" /> |
|||
} |
|||
else |
|||
{ |
|||
<a class="nav-link dropdown-toggle" @onclick="ToggleMenu" id="Menu_@(MenuItem.MenuItem.Name)" |
|||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|||
@if (MenuItem.MenuItem.Icon != null) |
|||
{ |
|||
if (MenuItem.MenuItem.Icon.StartsWith("fa")) |
|||
<Dropdown @ref="_dropdown" |
|||
Class="@(string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass)" |
|||
ElementId="@(MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"))" |
|||
Disabled="MenuItem.IsDisabled"> |
|||
<DropdownToggle ToggleIconVisible="false"> |
|||
<ChildContent> |
|||
@if (MenuItem.Url != null) |
|||
{ |
|||
var url = MenuItem.Url == null ? "#" : MenuItem.Url.TrimStart('/', '~'); |
|||
<a class="text-white text-decoration-none" href="@url" target="@MenuItem.Target"> |
|||
@if (MenuItem.Icon != null && MenuItem.Icon.StartsWith("fa")) |
|||
{ |
|||
<i class="@MenuItem.MenuItem.Icon me-1"></i> |
|||
<i class="@MenuItem.Icon me-1"></i> |
|||
} |
|||
} |
|||
@MenuItem.MenuItem.DisplayName |
|||
</a> |
|||
} |
|||
|
|||
<div class="dropdown-menu border-0 shadow-sm @(MenuItem.IsOpen ? "show" : "")" aria-labelledby="Menu_@(MenuItem.MenuItem.Name)"> |
|||
@foreach (var childMenuItem in MenuItem.Items) |
|||
@MenuItem.DisplayName |
|||
</a> |
|||
} |
|||
else |
|||
{ |
|||
<SecondLevelNavMenuItem Menu="Menu" MenuItem="childMenuItem" /> |
|||
<a class="text-white text-decoration-none dropdown-toggle"> |
|||
@if (MenuItem.Icon != null) |
|||
{ |
|||
if (MenuItem.Icon.StartsWith("fa")) |
|||
{ |
|||
<i class="@MenuItem.Icon me-1"></i> |
|||
} |
|||
} |
|||
@MenuItem.DisplayName |
|||
</a> |
|||
} |
|||
</ChildContent> |
|||
</DropdownToggle> |
|||
<DropdownMenu> |
|||
@foreach (var item in MenuItem.Items) |
|||
{ |
|||
if (item.Items.Any()) |
|||
{ |
|||
<SecondLevelNavMenuItem MenuItem="item" ParentDropdown="_dropdown" /> |
|||
} |
|||
</div> |
|||
</div> |
|||
</li> |
|||
else |
|||
{ |
|||
var itemUrl = item.Url == null ? "#" : item.Url.TrimStart('/', '~'); |
|||
<a class="text-black text-decoration-none" href="@itemUrl"> |
|||
@if (item.Icon != null) |
|||
{ |
|||
<i class="@item.Icon me-1"></i> |
|||
} |
|||
<span> |
|||
@item.DisplayName |
|||
</span> |
|||
</a> |
|||
} |
|||
} |
|||
</DropdownMenu> |
|||
</Dropdown> |
|||
} |
|||
|
|||
@ -1,46 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.UI.Navigation; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic; |
|||
|
|||
public class MainMenuProvider : IScopedDependency |
|||
{ |
|||
private readonly IMenuManager _menuManager; |
|||
|
|||
public MainMenuProvider(IMenuManager menuManager) |
|||
{ |
|||
_menuManager = menuManager; |
|||
} |
|||
|
|||
public virtual async Task<MenuViewModel> GetMenuAsync() |
|||
{ |
|||
var menu = await _menuManager.GetMainMenuAsync(); |
|||
var result = new MenuViewModel |
|||
{ |
|||
Menu = menu, |
|||
Items = menu.Items.Select(CreateMenuItemViewModel).ToList() |
|||
}; |
|||
result.SetParents(); |
|||
return result; |
|||
} |
|||
|
|||
private MenuItemViewModel CreateMenuItemViewModel(ApplicationMenuItem applicationMenuItem) |
|||
{ |
|||
var viewModel = new MenuItemViewModel |
|||
{ |
|||
MenuItem = applicationMenuItem, |
|||
}; |
|||
|
|||
viewModel.Items = new List<MenuItemViewModel>(); |
|||
|
|||
foreach (var item in applicationMenuItem.Items) |
|||
{ |
|||
viewModel.Items.Add(CreateMenuItemViewModel(item)); |
|||
} |
|||
|
|||
return viewModel; |
|||
} |
|||
} |
|||
@ -1,43 +0,0 @@ |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.UI.Navigation; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic; |
|||
|
|||
public class MenuItemViewModel |
|||
{ |
|||
public ApplicationMenuItem MenuItem { get; set; } |
|||
|
|||
public IList<MenuItemViewModel> Items { get; set; } |
|||
|
|||
public bool IsOpen { get; set; } |
|||
|
|||
[CanBeNull] |
|||
public MenuItemViewModel Parent { get; set; } |
|||
|
|||
public void Open() |
|||
{ |
|||
Parent?.Open(); |
|||
IsOpen = true; |
|||
} |
|||
|
|||
public void Close() |
|||
{ |
|||
foreach (var childItem in Items) |
|||
{ |
|||
childItem.Close(); |
|||
} |
|||
|
|||
IsOpen = false; |
|||
} |
|||
|
|||
public void SetParents([CanBeNull] MenuItemViewModel parent) |
|||
{ |
|||
Parent = parent; |
|||
|
|||
foreach (var childItem in Items) |
|||
{ |
|||
childItem.SetParents(this); |
|||
} |
|||
} |
|||
} |
|||
@ -1,50 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using Volo.Abp.UI.Navigation; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic; |
|||
|
|||
public class MenuViewModel |
|||
{ |
|||
public ApplicationMenu Menu { get; set; } |
|||
|
|||
public List<MenuItemViewModel> Items { get; set; } |
|||
|
|||
public EventHandler StateChanged; |
|||
|
|||
public void SetParents() |
|||
{ |
|||
foreach (var item in Items) |
|||
{ |
|||
item.SetParents(null); |
|||
} |
|||
} |
|||
|
|||
public void ToggleOpen(MenuItemViewModel menuItem) |
|||
{ |
|||
if (menuItem.IsOpen) |
|||
{ |
|||
menuItem.Close(); |
|||
} |
|||
else |
|||
{ |
|||
CloseAll(); |
|||
menuItem.Open(); |
|||
} |
|||
|
|||
StateChanged.InvokeSafely(this); |
|||
} |
|||
|
|||
public void CloseAll() |
|||
{ |
|||
foreach (var item in Items) |
|||
{ |
|||
item.Close(); |
|||
} |
|||
} |
|||
|
|||
public void InvokeStateChanged() |
|||
{ |
|||
StateChanged.InvokeSafely(this); |
|||
} |
|||
} |
|||
@ -1,55 +1,48 @@ |
|||
@using Volo.Abp.UI.Navigation |
|||
@using Volo.Abp.UI.Navigation |
|||
@{ |
|||
var elementId = MenuItem.MenuItem.ElementId ?? "MenuItem_" + MenuItem.MenuItem.Name.Replace(".", "_"); |
|||
var cssClass = string.IsNullOrEmpty(MenuItem.MenuItem.CssClass) ? string.Empty : MenuItem.MenuItem.CssClass; |
|||
var disabled = MenuItem.MenuItem.IsDisabled ? "disabled" : string.Empty; |
|||
var url = MenuItem.MenuItem.Url == null ? "#" : MenuItem.MenuItem.Url.TrimStart('/', '~'); |
|||
var customComponentType = MenuItem.MenuItem.GetComponentTypeOrDefault(); |
|||
var customComponentType = MenuItem.GetComponentTypeOrDefault(); |
|||
} |
|||
@if (MenuItem.MenuItem.IsLeaf) |
|||
|
|||
@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) |
|||
{ |
|||
if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) |
|||
{ |
|||
<DynamicComponent Type="@customComponentType" /> |
|||
} |
|||
else if (MenuItem.MenuItem.Url != null) |
|||
{ |
|||
<a class="dropdown-item @cssClass @disabled" href="@url" target="@MenuItem.MenuItem.Target" id="@elementId"> |
|||
@if (MenuItem.MenuItem.Icon != null) |
|||
{ |
|||
<i class="@MenuItem.MenuItem.Icon me-1"></i> |
|||
} |
|||
<span> |
|||
@MenuItem.MenuItem.DisplayName |
|||
</span> |
|||
</a> |
|||
} |
|||
<DynamicComponent Type="@customComponentType" /> |
|||
} |
|||
else |
|||
{ |
|||
<div class="dropdown-submenu"> |
|||
@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) |
|||
{ |
|||
<DynamicComponent Type="@customComponentType" /> |
|||
} |
|||
else |
|||
{ |
|||
<a role="button" @onclick="ToggleMenu" class="btn dropdown-toggle" data-toggle="dropdown" |
|||
aria-haspopup="true" aria-expanded="false"> |
|||
@if (MenuItem.MenuItem.Icon != null) |
|||
<Dropdown @ref="_dropdown" |
|||
Class="@(string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass)" |
|||
ElementId="@(MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"))" |
|||
Disabled="MenuItem.IsDisabled"> |
|||
<DropdownToggle Class="me-3"> |
|||
<ChildContent> |
|||
@if (MenuItem.Icon != null && MenuItem.Icon.StartsWith("fa")) |
|||
{ |
|||
<i class="@MenuItem.MenuItem.Icon me-1"></i> |
|||
<i class="@MenuItem.Icon me-1"></i> |
|||
} |
|||
<span> |
|||
@MenuItem.MenuItem.DisplayName |
|||
</span> |
|||
</a> |
|||
} |
|||
<div class="dropdown-menu border-0 shadow-sm @(MenuItem.IsOpen ? "show" : "")"> |
|||
@foreach (var childMenuItem in MenuItem.Items) |
|||
@MenuItem.DisplayName |
|||
</ChildContent> |
|||
</DropdownToggle> |
|||
<DropdownMenu> |
|||
@foreach (var item in MenuItem.Items) |
|||
{ |
|||
<SecondLevelNavMenuItem Menu="Menu" MenuItem="childMenuItem" /> |
|||
if (item.Items.Any()) |
|||
{ |
|||
<SecondLevelNavMenuItem MenuItem="item" ParentDropdown="_dropdown"/> |
|||
} |
|||
else |
|||
{ |
|||
var itemUrl = item.Url == null ? "#" : item.Url.TrimStart('/', '~'); |
|||
<a class="text-black text-decoration-none" href="@itemUrl"> |
|||
@if (item.Icon != null) |
|||
{ |
|||
<i class="@item.Icon me-1"></i> |
|||
} |
|||
<span> |
|||
@item.DisplayName |
|||
</span> |
|||
</a> |
|||
} |
|||
} |
|||
</div> |
|||
</div> |
|||
</DropdownMenu> |
|||
</Dropdown> |
|||
} |
|||
|
|||
Loading…
Reference in new issue