添加项目文件。

This commit is contained in:
2025-12-02 13:10:10 +08:00
parent 93a2382a16
commit 289aa4cbe7
400 changed files with 91177 additions and 0 deletions

View File

@@ -0,0 +1,186 @@
@page "/system/role/permission/{RoleId:long}"
@inject ILogger<RoleList> Logger
<PageTitle>权限设置</PageTitle>
<Spin Spinning="loading">
<Title Level="4">编辑角色权限</Title>
<Card>
<Form @ref="editForm" Model="model" LabelColSpan="2" WrapperColSpan="22" Class="search-form" OnFinish="OnFormFinishAsync">
<FormItem Label="角色">
为角色 <Text>@role?.Name</Text> 设置权限
</FormItem>
<FormItem Label="权限">
<div class="ant-form-item-control-input-content">
@if (!PermissionGroups.Any())
{
<div>
<p>暂无权限可设置</p>
</div>
}
else
{
@foreach (var group in PermissionGroups)
{
<GridRow Style="padding-top:10px;">
<GridCol Span="24">
<label class="ant-checkbox-wrapper">
<span class="ant-checkbox @((@group.PermissionItems.Count(p => p.IsSelected) > 0 && @group.PermissionItems.Count(p => p.IsSelected) < @group.PermissionItems.Count) ? "ant-checkbox-indeterminate" : "")">
<input class="ant-checkbox-input" type="checkbox"
@onchange="(e) => ToggleAllPermissions(group, (bool)e.Value!)"
checked="@group.PermissionItems.All(p => p.IsSelected)" />
<span class="ant-checkbox-inner"></span>
</span>
<span>
<span class="form-check-label fw-bold">
@group.CategoryName
</span>
<small class="text-muted ms-2">
(@group.PermissionItems.Count(p => p.IsSelected)/@group.PermissionItems.Count)
</small>
</span>
</label>
</GridCol>
</GridRow>
<GridRow Style="margin-left:20px;margin-right:20px;">
@foreach (var permission in group.PermissionItems)
{
<GridCol Span="6">
<label class="ant-checkbox-wrapper">
<span class="ant-checkbox">
<input class="ant-checkbox-input" type="checkbox"
@bind="permission.IsSelected"
id="perm_@permission.Name" />
<span class="ant-checkbox-inner"></span>
</span>
<span class="form-check-label" for="perm_@permission.Name">
@permission.Description
<small class="text-muted d-block">@permission.Name</small>
</span>
</label>
</GridCol>
}
</GridRow>
}
}
</div>
</FormItem>
<FormItem WrapperCol="new ColLayoutParam { Span = 24, Offset = 2 }">
<Button Type="@ButtonType.Primary" HtmlType="submit" Loading="@isSaving">
@if (isSaving)
{
<span>保存中...</span>
}
else
{
<span>保存权限设置</span>
}
</Button>
</FormItem>
</Form>
</Card>
</Spin>
@code {
[Parameter]
public long RoleId { get; set; }
bool loading = false;
bool isSaving = false;
Role role;
List<RolePermissionGroup> PermissionGroups = new List<RolePermissionGroup>();
[SupplyParameterFromForm]
RoleModel model { get; set; } = new();
Form<RoleModel> 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<ApiResult<Role>>($"/api/role/{RoleId}");
if (roleResult.Success)
{
if (roleResult.Data != null)
{
role = roleResult.Data;
StateHasChanged();
}
}
var apiResult = await HttpService.Get<ApiResult<List<RolePermissionGroup>>>($"/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<RoleModel>();
model.Permission = string.Join(",", selectedPermissions);
var url = $"api/role/edit";
var result = await HttpService.Post<ApiResult<string>>(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();
}
}
}