using EasyTemplate.Tool; using EasyTemplate.Tool.Util; using Microsoft.JSInterop; namespace EasyTemplate.Blazor.Web.Components.Layout; public partial class BasicLayout : LayoutComponentBase, IDisposable { /// /// /// /// protected override async Task OnInitializedAsync() { if (Global.CurrentUser == null) { NavigationManager.NavigateTo("/account/login"); } try { LocalizationChanged = (sender, args) => InvokeAsync(StateHasChanged); LocalizationService.LanguageChanged += LocalizationChanged; var menuList = await Menu.AsQueryable().Where(x => x.Enabled).OrderBy(x => x.Sort).ToListAsync(); Global.Menus = BuildMenuTree(menuList, 0); if (Global.CurrentUser != null) { var key = $"menu_{Global.CurrentUser.RoleId}"; if (!await Cache.Exist(key)) { var menus = RoleMenu.AsQueryable() .LeftJoin((rm, m) => rm.MenuId == m.Id) .Where((rm, m) => rm.RoleId == Global.CurrentUser.RoleId && m.Id > 0 && m.Enabled) .OrderBy((rm, m) => m.Sort) .Select((rm, m) => new SystemMenu() { Id = m.Id, Name = m.Name, Path = m.Path, Icon = m.Icon, ParentId = m.ParentId, Sort = m.Sort }) .ToList(); var menuTree = BuildMenuTree(menus, 0); MenuData = menuTree.Select(ConvertToMenuDataItem).ToArray(); Cache.Set(key, MenuData); } else { MenuData = await Cache.Get(key); } } } catch (Exception ex) { Log.Error(ex); } } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { } } /// /// 创建菜单树 /// /// /// /// private List BuildMenuTree(List menus, long parentId) { var children = menus .Where(m => m.ParentId == parentId) .Select(m => { m.Children = BuildMenuTree(menus, m.Id); return m; }) .ToList(); return children.Count == 0 ? null : children; } /// /// 将菜单树转换为AntDesign的菜单结构 /// /// /// private MenuDataItem ConvertToMenuDataItem(SystemMenu menu) { return new MenuDataItem { Path = menu.Path, Name = menu.Name, Key = menu.Key, Icon = menu.Icon, Children = menu.Children?.Select(ConvertToMenuDataItem).ToArray() }; } public void Dispose() { LocalizationService.LanguageChanged -= LocalizationChanged; } /// /// /// private MenuDataItem[] MenuData; /// /// /// [Inject] public NavigationManager NavigationManager { get; set; } /// /// /// [Inject] private ILocalizationService LocalizationService { get; set; } /// /// /// [Inject] private SqlSugarRepository Menu { get; set; } /// /// /// [Inject] private SqlSugarRepository RoleMenu { get; set; } /// /// /// private EventHandler LocalizationChanged; /// /// /// private string CopyRight; }