Add admin access and landing dashboard

This commit is contained in:
2026-05-21 13:43:47 +02:00
parent 6b3dc2de60
commit 9471c5c310
19 changed files with 1442 additions and 456 deletions
@@ -32,6 +32,21 @@
StartIcon="@Icons.Material.Filled.LockOpen" Disabled="@(!HrKpiAccess.IsConfigured)">
@T("HR KPI entsperren", "Unlock HR KPI")
</MudButton>
<MudDivider />
<MudExpansionPanels Elevation="0">
<MudExpansionPanel Text="@T("Passwort ändern", "Change password")" Icon="@Icons.Material.Filled.Password">
<MudStack Spacing="3" Class="pt-2">
<MudTextField @bind-Value="_changeUsername" Label="@T("Name", "Name")" Disabled="@(!HrKpiAccess.IsConfigured)" />
<MudTextField @bind-Value="_currentPassword" Label="@T("Aktuelles Passwort", "Current password")" InputType="InputType.Password" Disabled="@(!HrKpiAccess.IsConfigured)" />
<MudTextField @bind-Value="_newPassword" Label="@T("Neues Passwort", "New password")" InputType="InputType.Password" HelperText="@T("Mindestens 8 Zeichen.", "At least 8 characters.")" Disabled="@(!HrKpiAccess.IsConfigured)" />
<MudTextField @bind-Value="_newPasswordRepeat" Label="@T("Neues Passwort wiederholen", "Repeat new password")" InputType="InputType.Password" Disabled="@(!HrKpiAccess.IsConfigured)" />
<MudButton Variant="Variant.Outlined" Color="Color.Primary" OnClick="ChangeHrPasswordAsync"
StartIcon="@Icons.Material.Filled.Save" Disabled="@(!HrKpiAccess.IsConfigured)">
@T("Passwort speichern", "Save password")
</MudButton>
</MudStack>
</MudExpansionPanel>
</MudExpansionPanels>
</MudStack>
</MudPaper>
}
@@ -175,6 +190,10 @@ else
private bool _managementView;
private string? _hrUsername;
private string? _hrPassword;
private string? _changeUsername;
private string? _currentPassword;
private string? _newPassword;
private string? _newPasswordRepeat;
private bool _loading;
private HrKpiResult? _result;
private readonly List<(string Key, string Label)> _fluktuationOptions =
@@ -245,6 +264,33 @@ else
await LoadAsync();
}
private Task ChangeHrPasswordAsync()
{
if (string.IsNullOrWhiteSpace(_newPassword) || _newPassword.Length < 8)
{
Snackbar.Add(T("Das neue Passwort muss mindestens 8 Zeichen lang sein.", "The new password must be at least 8 characters long."), Severity.Warning);
return Task.CompletedTask;
}
if (_newPassword != _newPasswordRepeat)
{
Snackbar.Add(T("Die neuen Passwörter stimmen nicht überein.", "The new passwords do not match."), Severity.Warning);
return Task.CompletedTask;
}
if (!HrKpiAccess.TryChangePassword(_changeUsername ?? string.Empty, _currentPassword ?? string.Empty, _newPassword))
{
Snackbar.Add(T("Passwort konnte nicht geändert werden. Name oder aktuelles Passwort prüfen.", "Password could not be changed. Check the name or current password."), Severity.Error);
return Task.CompletedTask;
}
_currentPassword = string.Empty;
_newPassword = string.Empty;
_newPasswordRepeat = string.Empty;
Snackbar.Add(T("Passwort wurde geändert.", "Password has been changed."), Severity.Success);
return Task.CompletedTask;
}
private void LockHrKpi()
{
HrKpiAccess.Lock();