Files
hcs/Hcs.WebApp/Components/Pages/Account/Manage.razor

105 lines
5.1 KiB
Plaintext

@page "/account/manage"
@using Hcs.WebApp.Services
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
@inject IdentityService IdentityService
<PageTitle>Профиль</PageTitle>
<RadzenTabs RenderMode="TabRenderMode.Server">
<Tabs>
<RadzenTabsItem Text="Пароль">
<div style="max-width: 420px">
<RadzenTemplateForm TItem="PasswordInputModel" Data=@PasswordInput Method="post" Submit="@ChangePassword">
<RadzenAlert AlertStyle="AlertStyle.Danger" Variant="Variant.Flat" Shade="Shade.Lighter" Visible="@hasError">
@errorMessage
</RadzenAlert>
<RadzenAlert AlertStyle="AlertStyle.Success" Variant="Variant.Flat" Shade="Shade.Lighter" Visible="@hasSuccess">
Пароль успешно изменен
</RadzenAlert>
<RadzenStack Gap="1rem" class="rz-p-sm-12">
<RadzenText TextStyle="TextStyle.H5">Смена пароля</RadzenText>
<RadzenFormField Text="Текущий пароль" Variant="Variant.Outlined">
<ChildContent>
<RadzenPassword Name="OldPassword" @bind-Value=@PasswordInput.OldPassword AutoCompleteType="AutoCompleteType.CurrentPassword" />
</ChildContent>
<Helper>
<RadzenRequiredValidator Component="OldPassword" Text="Поле 'Текущий пароль' обязательно к заполнению" />
<RadzenLengthValidator Component="OldPassword" Min="6" Text="Длина поля 'Текущий пароль' должна быть не меньше 6" />
<RadzenLengthValidator Component="OldPassword" Max="100" Text="Длина поля 'Текущий пароль' должна быть не больше 100" />
</Helper>
</RadzenFormField>
<RadzenFormField Text="Новый пароль" Variant="Variant.Outlined">
<ChildContent>
<RadzenPassword Name="NewPassword" @bind-Value=@PasswordInput.NewPassword AutoCompleteType="AutoCompleteType.NewPassword" />
</ChildContent>
<Helper>
<RadzenRequiredValidator Component="NewPassword" Text="Поле 'Новый пароль' обязательно к заполнению" />
<RadzenLengthValidator Component="NewPassword" Min="6" Text="Длина поля 'Новый пароль' должна быть не меньше 6" />
<RadzenLengthValidator Component="NewPassword" Max="100" Text="Длина поля 'Новый пароль' должна быть не больше 100" />
</Helper>
</RadzenFormField>
<RadzenFormField Text="Повторите новый пароль" Variant="Variant.Outlined">
<ChildContent>
<RadzenPassword Name="ConfirmNewPassword" @bind-Value=@PasswordInput.ConfirmNewPassword AutoCompleteType="AutoCompleteType.NewPassword" />
</ChildContent>
<Helper>
<RadzenRequiredValidator Component="ConfirmNewPassword" Text="Поле 'Повторите новый пароль' обязательно к заполнению" />
<RadzenCompareValidator Value=@PasswordInput.NewPassword Component="ConfirmNewPassword" Text="Пароли должны совпадать" />
</Helper>
</RadzenFormField>
<RadzenButton ButtonType="ButtonType.Submit" Text="Сменить пароль"></RadzenButton>
</RadzenStack>
</RadzenTemplateForm>
</div>
</RadzenTabsItem>
</Tabs>
</RadzenTabs>
<BusyOverlay @ref=@busyOverlay />
@code {
sealed class PasswordInputModel
{
public string OldPassword { get; set; } = "";
public string NewPassword { get; set; } = "";
public string ConfirmNewPassword { get; set; } = "";
}
bool hasError;
string? errorMessage;
bool hasSuccess;
BusyOverlay busyOverlay;
[SupplyParameterFromForm]
PasswordInputModel PasswordInput { get; set; } = new();
async Task ChangePassword()
{
hasError = false;
hasSuccess = false;
try
{
busyOverlay.Show();
await IdentityService.ChangePassword(PasswordInput.OldPassword, PasswordInput.NewPassword);
hasSuccess = true;
}
catch (Exception e)
{
hasError = true;
errorMessage = e.Message;
}
finally
{
busyOverlay.Hide();
}
}
}