diff --git a/JSMR.UI.Blazor/Pages/Login.razor b/JSMR.UI.Blazor/Pages/Login.razor
index c8d0fef..e8ca52b 100644
--- a/JSMR.UI.Blazor/Pages/Login.razor
+++ b/JSMR.UI.Blazor/Pages/Login.razor
@@ -1,12 +1,17 @@
@page "/login"
@layout LoginLayout
+@using AntDesign
@using JSMR.UI.Blazor.Services
+@using MudBlazor.Charts
+@using System.ComponentModel.DataAnnotations
@inject SessionState Session
@inject NavigationManager Nav
-
Login
+@* Login
*@
+
+Sign In - JSMR
@if (Session.IsAuthenticated)
{
@@ -15,27 +20,82 @@
}
else
{
-
-
-
-
-
- Login
- @if (!string.IsNullOrWhiteSpace(error))
- {
- @error
- }
-
-
+
+
+
+
+
+
+
+
+
+
+ Sign In
+
+
+
+ @if (!string.IsNullOrWhiteSpace(error))
+ {
+
+ }
}
+
+
@code {
private string username = "";
private string password = "";
private bool busy;
private string? error;
+ private LoginModel loginModel = new();
+
+ public class LoginModel
+ {
+ [Required]
+ public string? Username { get; set; }
+
+ [Required]
+ public string? Password { get; set; }
+ }
+
private async Task LoginAsync()
{
busy = true;
@@ -61,6 +121,43 @@ else
}
}
+ private async Task Login2Async()
+ {
+ busy = true;
+ error = null;
+ try
+ {
+ if (string.IsNullOrWhiteSpace(loginModel.Username))
+ {
+ error = "Username is required.";
+ return;
+ }
+
+ if (string.IsNullOrWhiteSpace(loginModel.Password))
+ {
+ error = "Password is required.";
+ return;
+ }
+
+ var ok = await Session.LoginAsync(loginModel.Username, loginModel.Password);
+ if (!ok)
+ {
+ error = "Invalid username or password.";
+ return;
+ }
+
+ Nav.NavigateTo("/");
+ }
+ catch (Exception ex)
+ {
+ error = ex.Message;
+ }
+ finally
+ {
+ busy = false;
+ }
+ }
+
private async Task Logout()
{
busy = true;