diff --git a/src/admin/Bootstrap.Admin/Components/DefaultLayoutComponentBase.cs b/src/admin/Bootstrap.Admin/Components/DefaultLayoutComponentBase.cs
index d4bd92b9..44558682 100644
--- a/src/admin/Bootstrap.Admin/Components/DefaultLayoutComponentBase.cs
+++ b/src/admin/Bootstrap.Admin/Components/DefaultLayoutComponentBase.cs
@@ -1,4 +1,5 @@
-using Bootstrap.Admin.Models;
+using Bootstrap.Admin.Extensions;
+using Bootstrap.Admin.Models;
using Bootstrap.Admin.Shared;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
@@ -69,7 +70,12 @@ namespace Bootstrap.Admin.Components
public string HomeUrl { get; protected set; } = "/Pages";
///
- ///
+ /// 获得/设置 当前请求路径
+ ///
+ protected string RequestUrl { get; set; } = "";
+
+ ///
+ /// OnInitializedAsync 方法
///
///
protected override async Task OnInitializedAsync()
@@ -81,11 +87,31 @@ namespace Bootstrap.Admin.Components
}
else
{
- Model = new NavigatorBarModel(state.User.Identity.Name);
+ RequestUrl = new UriBuilder(NavigationManager?.Uri ?? "").Path;
+ Model = new NavigatorBarModel(state.User.Identity.Name, RequestUrl.ToMvcMenuUrl());
IsAdmin = state.User.IsInRole("Administrators");
UserName = state.User.Identity.Name ?? "";
DisplayName = Model.DisplayName;
}
}
+
+ ///
+ ///
+ ///
+ ///
+ protected override void OnAfterRender(bool firstRender)
+ {
+ if (!firstRender) ResetSideBar();
+ }
+
+ ///
+ /// 更新侧边栏方法
+ ///
+ public void ResetSideBar()
+ {
+ RequestUrl = new UriBuilder(NavigationManager?.Uri ?? "").Path;
+ Model = new NavigatorBarModel(UserName, RequestUrl.ToMvcMenuUrl());
+ SideBar?.Update(Model);
+ }
}
}
diff --git a/src/admin/Bootstrap.Admin/Components/SideBarBase.cs b/src/admin/Bootstrap.Admin/Components/SideBarBase.cs
index 7355e488..ce48cf72 100644
--- a/src/admin/Bootstrap.Admin/Components/SideBarBase.cs
+++ b/src/admin/Bootstrap.Admin/Components/SideBarBase.cs
@@ -4,14 +4,23 @@ using Microsoft.AspNetCore.Components;
namespace Bootstrap.Admin.Components
{
///
- ///
+ /// 侧边栏组件
///
public class SideBarBase : BootstrapComponentBase
{
///
- ///
+ /// 获得/设置 侧边栏绑定 Model 实例
///
[Parameter]
public NavigatorBarModel Model { get; set; } = new NavigatorBarModel("");
+
+ ///
+ /// 视图更新方法
+ ///
+ public void Update(NavigatorBarModel model)
+ {
+ Model = model;
+ StateHasChanged();
+ }
}
}
diff --git a/src/admin/Bootstrap.Admin/Extensions/UrlHelperExtensions.cs b/src/admin/Bootstrap.Admin/Extensions/UrlHelperExtensions.cs
index 3d83572c..c973dc62 100644
--- a/src/admin/Bootstrap.Admin/Extensions/UrlHelperExtensions.cs
+++ b/src/admin/Bootstrap.Admin/Extensions/UrlHelperExtensions.cs
@@ -1,4 +1,7 @@
-namespace Bootstrap.Admin.Extensions
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Bootstrap.Admin.Extensions
{
///
/// Url 地址辅助操作类
@@ -6,17 +9,28 @@
public static class UrlHelperExtensions
{
///
- /// 转换为 Blazor 地址 移除开始 ~ 字符
+ /// 转换为 Blazor 地址 ~/Admin/Index => /Admin/Index
///
///
///
public static string ToBlazorLink(this string url) => url.TrimStart('~');
///
- /// 转化为 Blazor 菜单地址
+ /// 转化为 Blazor 菜单地址 ~/Admin/Index => /Pages/Admin/Index
///
///
///
public static string ToBlazorMenuUrl(this string url) => url.Replace("~", "/Pages");
+
+ ///
+ /// 转化为 Mvc 菜单地址 /Pages/Admin/Index => ~/Admin/Index
+ ///
+ ///
+ ///
+ public static string ToMvcMenuUrl(this string url)
+ {
+ var index = new List() { "/Pages", "/Pages/Admin" };
+ return index.Any(u => u.Contains(url, System.StringComparison.OrdinalIgnoreCase)) ? "~/Admin/Index" : url.Replace("/Pages", "~");
+ }
}
}
diff --git a/src/admin/Bootstrap.Admin/Shared/NavItem.razor b/src/admin/Bootstrap.Admin/Shared/NavItem.razor
index 3ef22a38..f76454d6 100644
--- a/src/admin/Bootstrap.Admin/Shared/NavItem.razor
+++ b/src/admin/Bootstrap.Admin/Shared/NavItem.razor
@@ -12,6 +12,6 @@
else
{
-
+
}
diff --git a/src/admin/Bootstrap.Admin/wwwroot/js/ba.blazor.js b/src/admin/Bootstrap.Admin/wwwroot/js/ba.blazor.js
index a43815da..dcaa0479 100644
--- a/src/admin/Bootstrap.Admin/wwwroot/js/ba.blazor.js
+++ b/src/admin/Bootstrap.Admin/wwwroot/js/ba.blazor.js
@@ -59,8 +59,6 @@
var menuId = 'menus_' + id;
var $curMenu = $('.sidebar .active').first();
if ($curMenu.attr('id') !== menuId) {
- $curMenu.removeClass('active');
- var $menu = $('#' + menuId).addClass('active');
// set website title
$('head title').text($menu.text());
this.resetTab(id);