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);