@page "/system/menu/list" @page "/{locale}/system/menu/list" @inject ILogger Logger @using MenuItem = Atomx.Admin.Client.Models.MenuItem @using Menu = Atomx.Common.Entities.Menu @attribute [Authorize] 管理后台 系统功能 菜单管理
菜单列表
@GetName(context) @if (!string.IsNullOrEmpty(context.Icon)) { } @if (context.Enabled) { } else { } 编辑 删除
@if (menu.ParentId == 0) { }
@code { [Parameter] public string Locale { get; set; } = string.Empty; [SupplyParameterFromQuery] int? Page { get; set; } [SupplyParameterFromForm] MenuSearch search { get; set; } = new(); Form searchForm = null!; [SupplyParameterFromForm] MenuModel menu { get; set; } = new(); Form editform = null!; List Menus = new(); private bool drawerVisible; protected override void OnInitialized() { base.OnInitialized(); } protected override void OnParametersSet() { loadQueryString(); LoadList(); base.OnParametersSet(); } void loadQueryString() { var uri = new Uri(Navigation.Uri); var query = uri.Query; search.Name = query.GetQueryString("Name"); } private async void LoadList() { var url = "/api/menu/list"; var apiResult = await HttpService.Get>>(url); if (apiResult.Success) { if (apiResult.Data != null) { Menus = apiResult.Data; StateHasChanged(); } } } void OnSearchFinish() { Page = Page.GetValueOrDefault(1) - 1; OnSearch(Page.Value); } void OnSearchReset() { search = new(); searchForm?.Reset(); OnSearchFinish(); } private void OnReset() { search = new(); LoadList(); } private void OnSearch(int page) { var queryString = search.BuildQueryString(); if (string.IsNullOrEmpty(queryString)) { if (page > 1) { Navigation.NavigateTo($"/system/menu/list?page={page}"); } else { Navigation.NavigateTo($"/system/menu/list"); } } else { if (page > 1) { Navigation.NavigateTo($"/system/menu/list?page={page}&{queryString}"); } else { Navigation.NavigateTo($"/system/menu/list?{queryString}"); } } LoadList(); } async Task HandleDeleteConfirmAsync(MouseEventArgs e, long id) { var url = $"/api/menu/delete/{id}"; var apiResult = await HttpService.Post>(url, new()); if (apiResult.Success) { LoadList(); ModalService.Info(new ConfirmOptions() { Title = "操作提示", Content = "删除数据成功" }); } else { ModalService.Error(new ConfirmOptions() { Title = "操作提示", Content = $"数据删除失败.{apiResult.Message}" }); } } void OnCreateClick() { menu = new(); drawerVisible = true; } void OnEditClick(Common.Entities.Menu model) { menu = model.Adapt(); drawerVisible = true; } async Task OnFormFinish() { if (editform.Validate()) { var result = new ApiResult(); var data = menu.Adapt(); if (menu.Id > 0) { var url = $"api/menu/edit"; result = await HttpService.Post>(url, data); } else { var url = $"api/menu/add"; result = await HttpService.Post>(url, data); } if (result.Code == (int)ResultCode.Success) { CloseDrawer(); LoadList(); await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "数据提交成功!" }); } else { await ModalService.ErrorAsync(new ConfirmOptions() { Title = "服务异常", Content = result.Message }); } } } private string GetPath(string path) { var array = path.Split(",").ToList(); var pathText = string.Empty; foreach (var item in array) { var name = Menus.Where(p => p.Id == item.ToLong()).Select(p => p.Name).SingleOrDefault(); if (string.IsNullOrEmpty(pathText)) { pathText = name; } else { pathText = $"{pathText}>{name}"; } } return pathText ?? string.Empty; } private string GetName(MenuItem menu) { string name = string.Empty; if (menu.Depth > 0) { var symbol = " "; for (var i = 0; i < menu.Depth; i++) { symbol = $"{symbol}├ "; } name = $"{symbol}{menu.Name}"; } else { name = menu.Name; } return name; } private void OpenDrawer() { drawerVisible = true; } private void CloseDrawer() { menu = new(); drawerVisible = false; } }