@page "/system/role/permission/{RoleId:long}" @inject ILogger Logger 权限设置 编辑角色权限
为角色 @role?.Name 设置权限
@if (!PermissionGroups.Any()) {

暂无权限可设置

} else { @foreach (var group in PermissionGroups) { @foreach (var permission in group.PermissionItems) { } } }
@code { [Parameter] public long RoleId { get; set; } bool loading = false; bool isSaving = false; Role role; List PermissionGroups = new List(); [SupplyParameterFromForm] RoleModel model { get; set; } = new(); Form editForm = null!; protected override void OnInitialized() { base.OnInitialized(); } protected override async Task OnParametersSetAsync() { loading = true; await LoadRoleAndPermission(); loading = false; base.OnParametersSet(); } async Task LoadRoleAndPermission() { var roleResult = await HttpService.Get>($"/api/role/{RoleId}"); if (roleResult.Success) { if (roleResult.Data != null) { role = roleResult.Data; StateHasChanged(); } } var apiResult = await HttpService.Get>>($"/api/role/permission/{RoleId}"); if (apiResult.Success) { if (apiResult.Data != null) { PermissionGroups = apiResult.Data; StateHasChanged(); } } } private void ToggleAllPermissions(RolePermissionGroup group, bool isSelected) { foreach (var permission in group.PermissionItems) { permission.IsSelected = isSelected; } StateHasChanged(); } async void OnFormFinishAsync() { isSaving = true; StateHasChanged(); try { var selectedPermissions = PermissionGroups! .SelectMany(g => g.PermissionItems) .Where(p => p.IsSelected) .Select(p => p.Name) .ToList(); model = role.Adapt(); model.Permission = string.Join(",", selectedPermissions); var url = $"api/role/edit"; var result = await HttpService.Post>(url, model); if (result.Success) { await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "权限设置保存成功!" }); } else { await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "服务异常!" }); } Navigation.NavigateTo("/system/role/list"); } catch (Exception ex) { await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "保存权限设置失败!" }); } finally { isSaving = false; StateHasChanged(); } } }