Dashboard & Mitarbeiterverwaltung
This commit is contained in:
@@ -1,10 +1,7 @@
|
||||
|
||||
<MudNavMenu>
|
||||
<MudNavLink Href="" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Home">Home</MudNavLink>
|
||||
<MudNavLink Href="counter" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.Add">Counter</MudNavLink>
|
||||
|
||||
<MudNavLink Href="weather" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.List">Weather</MudNavLink>
|
||||
|
||||
<MudNavMenu>
|
||||
<MudNavLink Href="" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Home">Meine Übersicht</MudNavLink>
|
||||
<MudNavLink Href="manager-dashboard" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.Dashboard">Team-Dashboard</MudNavLink>
|
||||
<MudNavLink Href="employee-management" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.People">Mitarbeiterverwaltung</MudNavLink>
|
||||
</MudNavMenu>
|
||||
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
@page "/counter"
|
||||
|
||||
|
||||
<PageTitle>Counter</PageTitle>
|
||||
|
||||
<MudText Typo="Typo.h3" GutterBottom="true">Counter</MudText>
|
||||
|
||||
<MudText Class="mb-4">Current count: @currentCount</MudText>
|
||||
|
||||
<MudButton Color="Color.Primary" Variant="Variant.Filled" @onclick="IncrementCount">Click me</MudButton>
|
||||
|
||||
@code {
|
||||
private int currentCount = 0;
|
||||
|
||||
private void IncrementCount()
|
||||
{
|
||||
currentCount++;
|
||||
}
|
||||
}
|
||||
216
OnProfNext.Client/Pages/EmployeeManagement.razor
Normal file
216
OnProfNext.Client/Pages/EmployeeManagement.razor
Normal file
@@ -0,0 +1,216 @@
|
||||
@page "/employee-management"
|
||||
@using MudBlazor
|
||||
@inject ISnackbar Snackbar
|
||||
|
||||
<PageTitle>Mitarbeiterverwaltung | OnProf</PageTitle>
|
||||
|
||||
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="mt-8">
|
||||
<div class="d-flex justify-space-between align-center mb-6">
|
||||
<div>
|
||||
<MudText Typo="Typo.h4" Class="fw-bold">Mitarbeiterverwaltung</MudText>
|
||||
<MudText Typo="Typo.body1" Color="Color.Secondary" Class="mt-1">Verwalte Rollen, Mandanten und Arbeitszeiten deiner Mitarbeiter.</MudText>
|
||||
</div>
|
||||
<div class="d-flex gap-4">
|
||||
<MudButton Variant="Variant.Outlined" Color="Color.Primary" StartIcon="@Icons.Material.Filled.Sync" OnClick="SyncWithAzureAd">AAD Sync</MudButton>
|
||||
<MudButton Variant="Variant.Filled" Color="Color.Primary" StartIcon="@Icons.Material.Filled.Add" OnClick="OpenAddModal">Neuer Mitarbeiter</MudButton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<MudPaper Elevation="2" Class="pa-4">
|
||||
<MudDataGrid T="Employee" Items="@_employees" Hover="true" Bordered="false" Striped="true" QuickFilter="@_quickFilter" Dense="false">
|
||||
<ToolBarContent>
|
||||
<MudTextField @bind-Value="_searchString" Placeholder="Suchen..." Adornment="Adornment.Start" Immediate="true"
|
||||
AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium" Class="mt-0"
|
||||
Variant="Variant.Outlined" Margin="Margin.Dense" Style="max-width: 300px;"></MudTextField>
|
||||
<MudSpacer />
|
||||
</ToolBarContent>
|
||||
<Columns>
|
||||
<TemplateColumn T="Employee" Title="Mitarbeiter" SortBy="@(x => x.Name)">
|
||||
<CellTemplate>
|
||||
<div class="d-flex align-center">
|
||||
<MudAvatar Size="Size.Medium" Color="Color.Primary" Class="mr-3">
|
||||
@(string.IsNullOrWhiteSpace(context.Item.Name) ? "?" : context.Item.Name[0].ToString().ToUpper())
|
||||
</MudAvatar>
|
||||
<div>
|
||||
<MudText Typo="Typo.body1"><b>@context.Item.Name</b></MudText>
|
||||
<MudText Typo="Typo.caption" Color="Color.Secondary">@context.Item.Email</MudText>
|
||||
</div>
|
||||
</div>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn T="Employee" Title="Mandant" SortBy="@(x => x.Tenant)">
|
||||
<CellTemplate>
|
||||
<MudChip T="string" Color="Color.Secondary" Size="Size.Small" Variant="Variant.Text">@context.Item.Tenant</MudChip>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<PropertyColumn Property="x => x.Role" Title="Rolle" />
|
||||
<TemplateColumn T="Employee" Title="Tägl. Arbeitszeit" SortBy="@(x => x.DailyWorkHours)">
|
||||
<CellTemplate>
|
||||
<div class="d-flex align-center gap-2">
|
||||
<MudIcon Icon="@Icons.Material.Filled.Schedule" Size="Size.Small" Color="Color.Default" />
|
||||
<MudText><b>@context.Item.DailyWorkHours</b> <small>h / Tag</small></MudText>
|
||||
</div>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn T="Employee" Title="AAD Status">
|
||||
<CellTemplate>
|
||||
@if (context.Item.IsAadSynced)
|
||||
{
|
||||
<MudTooltip Text="Mit Azure AD synchronisiert">
|
||||
<MudIcon Icon="@Icons.Material.Filled.CloudSync" Color="Color.Success" Size="Size.Small" />
|
||||
</MudTooltip>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudTooltip Text="Lokal angelegt">
|
||||
<MudIcon Icon="@Icons.Material.Filled.PersonOutline" Color="Color.Warning" Size="Size.Small" />
|
||||
</MudTooltip>
|
||||
}
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn T="Employee" CellClass="d-flex justify-end pr-4">
|
||||
<CellTemplate>
|
||||
<MudIconButton Size="@Size.Small" Icon="@Icons.Material.Filled.Edit" Color="Color.Primary" OnClick="() => EditEmployee(context.Item)" />
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
</Columns>
|
||||
<PagerContent>
|
||||
<MudDataGridPager T="Employee" RowsPerPageString="Einträge pro Seite:" />
|
||||
</PagerContent>
|
||||
</MudDataGrid>
|
||||
</MudPaper>
|
||||
</MudContainer>
|
||||
|
||||
<MudDialog @bind-Visible="_isModalOpen" Options="new DialogOptions { MaxWidth = MaxWidth.Small, FullWidth = true }">
|
||||
<TitleContent>
|
||||
<MudText Typo="Typo.h6">@(_isEditing ? "Mitarbeiter bearbeiten" : "Neuen Mitarbeiter anlegen")</MudText>
|
||||
</TitleContent>
|
||||
<DialogContent>
|
||||
<MudTextField @bind-Value="_currentEmployee.Name" Label="Name" Variant="Variant.Outlined" Margin="Margin.Dense" Class="mb-3" Required="true"
|
||||
Disabled="@(_isEditing && _currentEmployee.IsAadSynced)" HelperText="@(_isEditing && _currentEmployee.IsAadSynced ? "Wird durch AAD verwaltet" : "")" />
|
||||
<MudTextField @bind-Value="_currentEmployee.Email" Label="E-Mail" Variant="Variant.Outlined" Margin="Margin.Dense" Class="mb-3" Required="true"
|
||||
Disabled="@(_isEditing && _currentEmployee.IsAadSynced)" />
|
||||
|
||||
<MudSelect @bind-Value="_currentEmployee.Tenant" Label="Mandant" Variant="Variant.Outlined" Margin="Margin.Dense" Class="mb-3">
|
||||
@foreach (var tenant in _availableTenants)
|
||||
{
|
||||
<MudSelectItem Value="@tenant">@tenant</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="_currentEmployee.Role" Label="Rolle" Variant="Variant.Outlined" Margin="Margin.Dense" Class="mb-3">
|
||||
@foreach (var role in _availableRoles)
|
||||
{
|
||||
<MudSelectItem Value="@role">@role</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudNumericField @bind-Value="_currentEmployee.DailyWorkHours" Label="Tägliche Arbeitszeit (Stunden)" Variant="Variant.Outlined" Margin="Margin.Dense" Step="0.5" Min="1" Max="24" />
|
||||
</DialogContent>
|
||||
<DialogActions>
|
||||
<MudButton OnClick="CloseModal">Abbrechen</MudButton>
|
||||
<MudButton Color="Color.Primary" Variant="Variant.Filled" OnClick="SaveEmployee">Speichern</MudButton>
|
||||
</DialogActions>
|
||||
</MudDialog>
|
||||
|
||||
@code {
|
||||
private string _searchString = "";
|
||||
private bool _isModalOpen = false;
|
||||
private bool _isEditing = false;
|
||||
private Employee _currentEmployee = new();
|
||||
|
||||
// Listen für Dropdowns
|
||||
private List<string> _availableTenants = new() { "OnProf GmbH", "SubCorp AG", "Freelancer Network" };
|
||||
private List<string> _availableRoles = new() { "Teamleiter", "Entwickler", "Projektleiter", "Designer", "Tester", "Administrator" };
|
||||
|
||||
public class Employee
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Email { get; set; } = string.Empty;
|
||||
public string Tenant { get; set; } = string.Empty;
|
||||
public string Role { get; set; } = string.Empty;
|
||||
public double DailyWorkHours { get; set; } = 8.0;
|
||||
public bool IsAadSynced { get; set; } = false;
|
||||
}
|
||||
|
||||
private List<Employee> _employees = new()
|
||||
{
|
||||
new Employee { Name = "Marc Mustermann", Email = "marc@onprof.de", Tenant = "OnProf GmbH", Role = "Entwickler", DailyWorkHours = 8.0, IsAadSynced = true },
|
||||
new Employee { Name = "Anna Schmidt", Email = "anna@onprof.de", Tenant = "OnProf GmbH", Role = "Projektleiter", DailyWorkHours = 8.0, IsAadSynced = true },
|
||||
new Employee { Name = "John Doe", Email = "john@subcorp.com", Tenant = "SubCorp AG", Role = "Entwickler", DailyWorkHours = 4.0, IsAadSynced = false },
|
||||
new Employee { Name = "Maria Mayer", Email = "maria@onprof.de", Tenant = "OnProf GmbH", Role = "Tester", DailyWorkHours = 6.0, IsAadSynced = true },
|
||||
new Employee { Name = "Peter Parker", Email = "peter@freelance.net", Tenant = "Freelancer Network", Role = "Designer", DailyWorkHours = 8.0, IsAadSynced = false },
|
||||
};
|
||||
|
||||
private Func<Employee, bool> _quickFilter => x =>
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(_searchString)) return true;
|
||||
if (x.Name.Contains(_searchString, StringComparison.OrdinalIgnoreCase)) return true;
|
||||
if (x.Email.Contains(_searchString, StringComparison.OrdinalIgnoreCase)) return true;
|
||||
if (x.Role.Contains(_searchString, StringComparison.OrdinalIgnoreCase)) return true;
|
||||
if (x.Tenant.Contains(_searchString, StringComparison.OrdinalIgnoreCase)) return true;
|
||||
return false;
|
||||
};
|
||||
|
||||
private void SyncWithAzureAd()
|
||||
{
|
||||
Snackbar.Add("Synchronisation mit Azure AD wird gestartet (Mock)...", Severity.Info);
|
||||
// Hier käme später die MS Graph API Integration hin
|
||||
}
|
||||
|
||||
private void OpenAddModal()
|
||||
{
|
||||
_isEditing = false;
|
||||
_currentEmployee = new Employee { Tenant = _availableTenants.First(), Role = _availableRoles.First() };
|
||||
_isModalOpen = true;
|
||||
}
|
||||
|
||||
private void EditEmployee(Employee employee)
|
||||
{
|
||||
_isEditing = true;
|
||||
// Deep Copy für die Bearbeitung, um direkte Listen-Updates bei Abbruch zu vermeiden
|
||||
_currentEmployee = new Employee
|
||||
{
|
||||
Id = employee.Id,
|
||||
Name = employee.Name,
|
||||
Email = employee.Email,
|
||||
Tenant = employee.Tenant,
|
||||
Role = employee.Role,
|
||||
DailyWorkHours = employee.DailyWorkHours,
|
||||
IsAadSynced = employee.IsAadSynced
|
||||
};
|
||||
_isModalOpen = true;
|
||||
}
|
||||
|
||||
private void SaveEmployee()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(_currentEmployee.Name) || string.IsNullOrWhiteSpace(_currentEmployee.Email))
|
||||
{
|
||||
Snackbar.Add("Name und E-Mail sind Pflichtfelder.", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_isEditing)
|
||||
{
|
||||
var index = _employees.FindIndex(e => e.Id == _currentEmployee.Id);
|
||||
if (index != -1)
|
||||
{
|
||||
_employees[index] = _currentEmployee;
|
||||
Snackbar.Add("Änderungen gespeichert.", Severity.Success);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_employees.Add(_currentEmployee);
|
||||
Snackbar.Add("Neuer Mitarbeiter angelegt.", Severity.Success);
|
||||
}
|
||||
|
||||
CloseModal();
|
||||
}
|
||||
|
||||
private void CloseModal()
|
||||
{
|
||||
_isModalOpen = false;
|
||||
}
|
||||
}
|
||||
147
OnProfNext.Client/Pages/ManagerDashboard.razor
Normal file
147
OnProfNext.Client/Pages/ManagerDashboard.razor
Normal file
@@ -0,0 +1,147 @@
|
||||
@page "/manager-dashboard"
|
||||
@using MudBlazor
|
||||
|
||||
<PageTitle>Team-Dashboard | OnProf</PageTitle>
|
||||
|
||||
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="mt-8">
|
||||
<div class="d-flex justify-space-between align-center mb-6">
|
||||
<MudText Typo="Typo.h4" Class="fw-bold">Team-Dashboard</MudText>
|
||||
<MudButton Variant="Variant.Outlined" Color="Color.Primary" StartIcon="@Icons.Material.Filled.FileDownload">Als PDF exportieren</MudButton>
|
||||
</div>
|
||||
|
||||
<MudGrid>
|
||||
<!-- Top KPI Cards -->
|
||||
<MudItem xs="12" sm="6" md="3">
|
||||
<MudPaper Elevation="2" Class="pa-4" Style="height: 120px; border-left: 6px solid var(--mud-palette-primary);">
|
||||
<MudText Typo="Typo.subtitle2" Color="Color.Secondary">Team-Stunden (Aktueller Monat)</MudText>
|
||||
<div class="d-flex align-end justify-space-between mt-2">
|
||||
<MudText Typo="Typo.h3">850 <small style="font-size: 1rem">h</small></MudText>
|
||||
<MudIcon Icon="@Icons.Material.Filled.Group" Color="Color.Primary" Size="Size.Large" />
|
||||
</div>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12" sm="6" md="3">
|
||||
<MudPaper Elevation="2" Class="pa-4" Style="height: 120px; border-left: 6px solid var(--mud-palette-success);">
|
||||
<MudText Typo="Typo.subtitle2" Color="Color.Secondary">Auslastung (Durchschnitt)</MudText>
|
||||
<MudText Typo="Typo.h3">92 <small style="font-size: 1rem">%</small></MudText>
|
||||
<MudProgressLinear Color="Color.Success" Value="92" Class="mt-2" />
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12" sm="6" md="3">
|
||||
<MudPaper Elevation="2" Class="pa-4" Style="height: 120px; border-left: 6px solid var(--mud-palette-info);">
|
||||
<MudText Typo="Typo.subtitle2" Color="Color.Secondary">Aktive Auftragsprojekte</MudText>
|
||||
<div class="d-flex align-end justify-space-between mt-2">
|
||||
<MudText Typo="Typo.h3">14</MudText>
|
||||
<MudIcon Icon="@Icons.Material.Filled.Domain" Color="Color.Info" Size="Size.Large" />
|
||||
</div>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12" sm="6" md="3">
|
||||
<MudPaper Elevation="2" Class="pa-4" Style="height: 120px; border-left: 6px solid var(--mud-palette-warning);">
|
||||
<MudText Typo="Typo.subtitle2" Color="Color.Secondary">Überstundenkonto gesamt</MudText>
|
||||
<div class="d-flex align-end justify-space-between mt-2">
|
||||
<MudText Typo="Typo.h3">185 <small style="font-size: 1rem">h</small></MudText>
|
||||
<MudIcon Icon="@Icons.Material.Filled.Warning" Color="Color.Warning" Size="Size.Large" />
|
||||
</div>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
<!-- Charts Row -->
|
||||
<MudItem xs="12" md="8">
|
||||
<MudPaper Elevation="2" Class="pa-6" Style="height: 400px; display: flex; flex-direction: column;">
|
||||
<MudText Typo="Typo.h6" Class="mb-4">Gebuchte Stunden der letzten 5 Wochen</MudText>
|
||||
<div class="flex-grow-1">
|
||||
<MudChart T="double" ChartType="ChartType.Bar" ChartSeries="@_barSeries" XAxisLabels="@_xAxisLabels" Width="100%" Height="280px" />
|
||||
</div>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12" md="4">
|
||||
<MudPaper Elevation="2" Class="pa-6" Style="height: 400px; display: flex; flex-direction: column;">
|
||||
<MudText Typo="Typo.h6" Class="mb-4">Projektverteilung gesamt</MudText>
|
||||
<div class="flex-grow-1 d-flex justify-center align-center">
|
||||
<MudChart T="double" ChartType="ChartType.Donut" InputData="@_donutData" InputLabels="@_donutLabels" Width="200px" Height="200px" />
|
||||
</div>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
<!-- Top Mitarbeiter Table -->
|
||||
<MudItem xs="12">
|
||||
<MudPaper Elevation="2" Class="pa-6 mt-2">
|
||||
<MudText Typo="Typo.h6" Class="mb-4">Performance der Mitarbeiter im aktuellen Monat</MudText>
|
||||
<MudDataGrid T="EmployeeStat" Items="@_employees" Hover="true" Bordered="false" Striped="true" Dense="true" Elevation="0">
|
||||
<Columns>
|
||||
<TemplateColumn T="EmployeeStat" Title="Mitarbeiter" SortBy="@(x => x.Name)">
|
||||
<CellTemplate>
|
||||
<div class="d-flex align-center">
|
||||
<MudAvatar Size="Size.Small" Color="Color.Primary" Class="mr-3">
|
||||
@context.Item.Name.Substring(0, 1)
|
||||
</MudAvatar>
|
||||
<MudText Typo="Typo.body2"><b>@context.Item.Name</b></MudText>
|
||||
</div>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<PropertyColumn Property="x => x.Role" Title="Rolle" />
|
||||
<PropertyColumn Property="x => x.ProjectCount" Title="Aktive Projekte" />
|
||||
<TemplateColumn T="EmployeeStat" Title="Stunden (Monat)" SortBy="@(x => x.HoursBooked)">
|
||||
<CellTemplate>
|
||||
<MudText Typo="Typo.body2"><b>@context.Item.HoursBooked</b> <small class="mud-text-secondary ml-1">h</small></MudText>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn T="EmployeeStat" Title="Auslastung" SortBy="@(x => x.Utilization)">
|
||||
<CellTemplate>
|
||||
<div class="d-flex align-center">
|
||||
<MudProgressLinear Color="@GetUtilizationColor(context.Item.Utilization)" Value="@context.Item.Utilization" Class="mr-2" Style="width: 100px; min-width: 60px;" />
|
||||
<MudText Typo="Typo.caption" Color="@GetUtilizationColor(context.Item.Utilization)"><b>@context.Item.Utilization%</b></MudText>
|
||||
</div>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
</Columns>
|
||||
</MudDataGrid>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
</MudGrid>
|
||||
</MudContainer>
|
||||
|
||||
@code {
|
||||
public class EmployeeStat
|
||||
{
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Role { get; set; } = string.Empty;
|
||||
public int ProjectCount { get; set; }
|
||||
public double HoursBooked { get; set; }
|
||||
public double Utilization { get; set; }
|
||||
}
|
||||
|
||||
private List<EmployeeStat> _employees = new()
|
||||
{
|
||||
new EmployeeStat { Name = "Marc Mustermann", Role = "Entwickler", ProjectCount = 3, HoursBooked = 160, Utilization = 100 },
|
||||
new EmployeeStat { Name = "Anna Schmidt", Role = "Projektleiterin", ProjectCount = 5, HoursBooked = 145, Utilization = 90 },
|
||||
new EmployeeStat { Name = "John Doe", Role = "Entwickler", ProjectCount = 4, HoursBooked = 175, Utilization = 110 },
|
||||
new EmployeeStat { Name = "Maria Mayer", Role = "Testerin", ProjectCount = 2, HoursBooked = 150, Utilization = 95 },
|
||||
new EmployeeStat { Name = "Peter Parker", Role = "Designer", ProjectCount = 2, HoursBooked = 80, Utilization = 50 },
|
||||
};
|
||||
|
||||
private string[] _xAxisLabels = { "KW 08", "KW 09", "KW 10", "KW 11", "KW 12" };
|
||||
|
||||
private List<ChartSeries<double>> _barSeries = new()
|
||||
{
|
||||
new ChartSeries<double>() { Name = "Kundenaufträge", Data = new double[] { 300, 320, 280, 350, 400 } },
|
||||
new ChartSeries<double>() { Name = "Intern", Data = new double[] { 60, 40, 50, 30, 20 } },
|
||||
new ChartSeries<double>() { Name = "Gleitzeit / Urlaub", Data = new double[] { 40, 50, 60, 45, 30 } },
|
||||
};
|
||||
|
||||
private double[] _donutData = { 65, 15, 20 };
|
||||
private string[] _donutLabels = { "Kundenaufträge", "Intern", "Gleitzeit / Urlaub" };
|
||||
|
||||
private Color GetUtilizationColor(double utilization)
|
||||
{
|
||||
if (utilization > 105) return Color.Warning;
|
||||
if (utilization < 75) return Color.Error;
|
||||
return Color.Success;
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
@page "/weather"
|
||||
|
||||
|
||||
<PageTitle>Weather</PageTitle>
|
||||
|
||||
<MudText Typo="Typo.h3" GutterBottom="true">Weather forecast</MudText>
|
||||
<MudText Typo="Typo.body1" Class="mb-8">This component demonstrates fetching data from the server.</MudText>
|
||||
|
||||
@if (Forecasts == null)
|
||||
{
|
||||
<MudProgressCircular Color="Color.Default" Indeterminate="true" />
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudTable Items="Forecasts" Hover="true" SortLabel="Sort By" Elevation="0" AllowUnsorted="false">
|
||||
<HeaderContent>
|
||||
<MudTh><MudTableSortLabel InitialDirection="SortDirection.Ascending" SortBy="new Func<WeatherForecast, object>(x=>x.Date)">Date</MudTableSortLabel></MudTh>
|
||||
<MudTh><MudTableSortLabel SortBy="new Func<WeatherForecast, object>(x=>x.TemperatureC)">Temp. (C)</MudTableSortLabel></MudTh>
|
||||
<MudTh><MudTableSortLabel SortBy="new Func<WeatherForecast, object>(x=>x.TemperatureF)">Temp. (F)</MudTableSortLabel></MudTh>
|
||||
<MudTh><MudTableSortLabel SortBy="new Func<WeatherForecast, object>(x=>x.Summary!)">Summary</MudTableSortLabel></MudTh>
|
||||
</HeaderContent>
|
||||
<RowTemplate>
|
||||
<MudTd DataLabel="Date">@context.Date</MudTd>
|
||||
<MudTd DataLabel="Temp. (C)">@context.TemperatureC</MudTd>
|
||||
<MudTd DataLabel="Temp. (F)">@context.TemperatureF</MudTd>
|
||||
<MudTd DataLabel="Summary">@context.Summary</MudTd>
|
||||
</RowTemplate>
|
||||
<PagerContent>
|
||||
<MudTablePager PageSizeOptions="new int[]{50, 100}" />
|
||||
</PagerContent>
|
||||
</MudTable>
|
||||
}
|
||||
|
||||
@code {
|
||||
[PersistentState(AllowUpdates = true)]
|
||||
public WeatherForecast[]? Forecasts { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
if (Forecasts is null)
|
||||
{
|
||||
// Simulate asynchronous loading to demonstrate a loading indicator
|
||||
await Task.Delay(500);
|
||||
|
||||
var startDate = DateOnly.FromDateTime(DateTime.Now);
|
||||
var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
|
||||
Forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
|
||||
{
|
||||
Date = startDate.AddDays(index),
|
||||
TemperatureC = Random.Shared.Next(-20, 55),
|
||||
Summary = summaries[Random.Shared.Next(summaries.Length)]
|
||||
}).ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public class WeatherForecast
|
||||
{
|
||||
public DateOnly Date { get; set; }
|
||||
public int TemperatureC { get; set; }
|
||||
public string? Summary { get; set; }
|
||||
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,7 +5,7 @@ var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,
|
||||
"mainAssemblyName": "OnProfNext.Client",
|
||||
"applicationEnvironment": "Development",
|
||||
"resources": {
|
||||
"hash": "sha256-0jRv7kYnF4D0VUs8jGx8ORPXW37eJ4aGs7nqv5MaXmw=",
|
||||
"hash": "sha256-dDAtD663tbmfDUp8ZE8oi21U69a+khO5Ei19QXc13BE=",
|
||||
"jsModuleNative": [
|
||||
{
|
||||
"name": "dotnet.native.ykrnppwhq2.js"
|
||||
@@ -1260,16 +1260,16 @@ var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,
|
||||
},
|
||||
{
|
||||
"virtualPath": "OnProfNext.Client.wasm",
|
||||
"name": "OnProfNext.Client.szhvrb7xox.wasm",
|
||||
"integrity": "sha256-KNzUOd1ZeCKoOujwusI45QSuLmQVAgPWZVJKNja0ybA=",
|
||||
"name": "OnProfNext.Client.dh6mn4i5sw.wasm",
|
||||
"integrity": "sha256-r87V1zANlRraLshRk/Jo0eJb13yGpG4K4aW7eSbaMXc=",
|
||||
"cache": "force-cache"
|
||||
}
|
||||
],
|
||||
"pdb": [
|
||||
{
|
||||
"virtualPath": "OnProfNext.Client.pdb",
|
||||
"name": "OnProfNext.Client.hwlp25tq9f.pdb",
|
||||
"integrity": "sha256-3/7YDotr5H2dQg8f0lqchKQo1dABUNpA3bK633HaMNE=",
|
||||
"name": "OnProfNext.Client.l4c6v0ola1.pdb",
|
||||
"integrity": "sha256-5cFxRmQTowcbq1pcN/paYq1Pq2HHBh4WMX3gRXDW9zk=",
|
||||
"cache": "force-cache"
|
||||
}
|
||||
],
|
||||
|
||||
Binary file not shown.
@@ -14,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("OnProfNext.Client")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d8908d9553dc0c927bb41bf7a3f5058bd930a45f")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9a8789a7ae824d2ea7a0fb2e157b070acd39b48a")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("OnProfNext.Client")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("OnProfNext.Client")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@@ -1 +1 @@
|
||||
b9f3204c494cb720185f7e20979ba2b42c1358f03d7e49854e068c03c240adbd
|
||||
b4cba670dad6e58e051410a88f00f9832fbb70bedd102c047d11069d1fb21433
|
||||
|
||||
@@ -39,8 +39,8 @@ build_metadata.AdditionalFiles.CssScope =
|
||||
build_metadata.AdditionalFiles.TargetPath = TGF5b3V0XE5hdk1lbnUucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[D:/Dev/Tut/OnProfNext/OnProfNext/OnProfNext.Client/Pages/Counter.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQ291bnRlci5yYXpvcg==
|
||||
[D:/Dev/Tut/OnProfNext/OnProfNext/OnProfNext.Client/Pages/EmployeeManagement.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcRW1wbG95ZWVNYW5hZ2VtZW50LnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[D:/Dev/Tut/OnProfNext/OnProfNext/OnProfNext.Client/Pages/Home.razor]
|
||||
@@ -51,12 +51,12 @@ build_metadata.AdditionalFiles.CssScope =
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcSXRlbVRlbXBsYXRlLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[D:/Dev/Tut/OnProfNext/OnProfNext/OnProfNext.Client/Pages/NotFound.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcTm90Rm91bmQucmF6b3I=
|
||||
[D:/Dev/Tut/OnProfNext/OnProfNext/OnProfNext.Client/Pages/ManagerDashboard.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcTWFuYWdlckRhc2hib2FyZC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[D:/Dev/Tut/OnProfNext/OnProfNext/OnProfNext.Client/Pages/Weather.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcV2VhdGhlci5yYXpvcg==
|
||||
[D:/Dev/Tut/OnProfNext/OnProfNext/OnProfNext.Client/Pages/NotFound.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcTm90Rm91bmQucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[D:/Dev/Tut/OnProfNext/OnProfNext/OnProfNext.Client/Routes.razor]
|
||||
|
||||
@@ -1086,10 +1086,10 @@ D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\refint\OnPr
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\OnProfNext.Client.pdb
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\ref\OnProfNext.Client.dll
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\staticwebassets.upToDateCheck.txt
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\bin\Debug\net10.0\wwwroot\_framework\OnProfNext.Client.szhvrb7xox.wasm
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\bin\Debug\net10.0\wwwroot\_framework\OnProfNext.Client.hwlp25tq9f.pdb
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\bin\Debug\net10.0\wwwroot\_framework\OnProfNext.Client.szhvrb7xox.wasm.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\bin\Debug\net10.0\wwwroot\_framework\OnProfNext.Client.hwlp25tq9f.pdb.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\compressed\f6u1msztxb-{0}-szhvrb7xox-szhvrb7xox.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\compressed\cycczivqx5-{0}-hwlp25tq9f-hwlp25tq9f.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\compressed\qz9h56e7z8-{0}-kdxkkbcqse-kdxkkbcqse.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\bin\Debug\net10.0\wwwroot\_framework\OnProfNext.Client.dh6mn4i5sw.wasm
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\bin\Debug\net10.0\wwwroot\_framework\OnProfNext.Client.l4c6v0ola1.pdb
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\bin\Debug\net10.0\wwwroot\_framework\OnProfNext.Client.dh6mn4i5sw.wasm.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\bin\Debug\net10.0\wwwroot\_framework\OnProfNext.Client.l4c6v0ola1.pdb.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\compressed\f6u1msztxb-{0}-dh6mn4i5sw-dh6mn4i5sw.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\compressed\cycczivqx5-{0}-l4c6v0ola1-l4c6v0ola1.gz
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\compressed\qz9h56e7z8-{0}-jnflitrpbd-jnflitrpbd.gz
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -5,7 +5,7 @@ var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,
|
||||
"mainAssemblyName": "OnProfNext.Client",
|
||||
"applicationEnvironment": "Development",
|
||||
"resources": {
|
||||
"hash": "sha256-0jRv7kYnF4D0VUs8jGx8ORPXW37eJ4aGs7nqv5MaXmw=",
|
||||
"hash": "sha256-dDAtD663tbmfDUp8ZE8oi21U69a+khO5Ei19QXc13BE=",
|
||||
"jsModuleNative": [
|
||||
{
|
||||
"name": "dotnet.native.ykrnppwhq2.js"
|
||||
@@ -1260,16 +1260,16 @@ var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,
|
||||
},
|
||||
{
|
||||
"virtualPath": "OnProfNext.Client.wasm",
|
||||
"name": "OnProfNext.Client.szhvrb7xox.wasm",
|
||||
"integrity": "sha256-KNzUOd1ZeCKoOujwusI45QSuLmQVAgPWZVJKNja0ybA=",
|
||||
"name": "OnProfNext.Client.dh6mn4i5sw.wasm",
|
||||
"integrity": "sha256-r87V1zANlRraLshRk/Jo0eJb13yGpG4K4aW7eSbaMXc=",
|
||||
"cache": "force-cache"
|
||||
}
|
||||
],
|
||||
"pdb": [
|
||||
{
|
||||
"virtualPath": "OnProfNext.Client.pdb",
|
||||
"name": "OnProfNext.Client.hwlp25tq9f.pdb",
|
||||
"integrity": "sha256-3/7YDotr5H2dQg8f0lqchKQo1dABUNpA3bK633HaMNE=",
|
||||
"name": "OnProfNext.Client.l4c6v0ola1.pdb",
|
||||
"integrity": "sha256-5cFxRmQTowcbq1pcN/paYq1Pq2HHBh4WMX3gRXDW9zk=",
|
||||
"cache": "force-cache"
|
||||
}
|
||||
],
|
||||
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
{"GlobalPropertiesHash":"AHqUvtcq0/uGMCYQndTbkCTxTcoYUarDG7PCme/1A7Y=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["VE\u002BpR917HjFp9gYK1XDTmwHtO7D52AaupqiGoT47KOg=","UJnkQBNtjaxTikg3vmugRVAFtF6hvHDn4FaWCEz2zjM=","4CkZKjhmIpvEqKpnX4SHqDYTPppSz6VvTDTpl2HUdv8=","eI4bVy3Gh8j8eCYfgX8V8M7uHKKDISoT60q\u002BF8/UaQI=","R\u002BM/OthMdeQATqSrWj5YvibIW0f6FRHRb9KPZPxfx\u002Bk=","KtMcCZYV1pVsrd0MLUMfbt28YdvVhiWYMjq0fNuUdQA=","58B7yF7PQXq4TW\u002B8ZQHUC\u002BlKI1VVPrUYhQTqucI0DHM=","9Vr8OXWFXuNoJ0MgoEHdmVDwdQxG4F7wb\u002Bp/hZ6Dw50=","4cFvcUIUrBodlCinZvANH95jRWA2Tv56JFz0JCB23r4=","597cJLP130m7F8NABJtyCFYjqBXBZZ\u002ByS79uvYE\u002ByYY=","8\u002BzS1fkNIeUtk2qi1DErgqc02\u002B6IPeIAkp\u002B6vFr6uK4=","m574K3xCoXT254R89TxToR59xHmi3gsExT8w\u002BHxiNyA=","2aX\u002BX\u002B4eE8xi\u002BR7ngW0cq03FjNfIsbVE\u002BusEwCQmFWI=","SqTDM3v2LWiW/nP3WnxvUb3FCx88S4FQBhwnCKof6mk="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
{"GlobalPropertiesHash":"AHqUvtcq0/uGMCYQndTbkCTxTcoYUarDG7PCme/1A7Y=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["VE\u002BpR917HjFp9gYK1XDTmwHtO7D52AaupqiGoT47KOg=","UJnkQBNtjaxTikg3vmugRVAFtF6hvHDn4FaWCEz2zjM=","4CkZKjhmIpvEqKpnX4SHqDYTPppSz6VvTDTpl2HUdv8=","ALliHz343Q6iG2kAWI4lPAn2SIcJCnjxNe9MQc46uck=","R\u002BM/OthMdeQATqSrWj5YvibIW0f6FRHRb9KPZPxfx\u002Bk=","rMK\u002BD7hPTq6nRPjx5GMEtOtCF8PbfMNj8oTfqo\u002BBWGE=","9Vr8OXWFXuNoJ0MgoEHdmVDwdQxG4F7wb\u002Bp/hZ6Dw50=","4wJu/WsqjwkaX/IA1Ko9SpnUHOoivPFErgUDS4Csnvg=","4cFvcUIUrBodlCinZvANH95jRWA2Tv56JFz0JCB23r4=","8\u002BzS1fkNIeUtk2qi1DErgqc02\u002B6IPeIAkp\u002B6vFr6uK4=","m574K3xCoXT254R89TxToR59xHmi3gsExT8w\u002BHxiNyA=","2aX\u002BX\u002B4eE8xi\u002BR7ngW0cq03FjNfIsbVE\u002BusEwCQmFWI=","SqTDM3v2LWiW/nP3WnxvUb3FCx88S4FQBhwnCKof6mk="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
@@ -1 +1 @@
|
||||
{"GlobalPropertiesHash":"nTZLcUNcq6m2VFEdFbcXfzvxonGExOJOO/jRXnOQPjE=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["VE\u002BpR917HjFp9gYK1XDTmwHtO7D52AaupqiGoT47KOg=","UJnkQBNtjaxTikg3vmugRVAFtF6hvHDn4FaWCEz2zjM=","4CkZKjhmIpvEqKpnX4SHqDYTPppSz6VvTDTpl2HUdv8=","eI4bVy3Gh8j8eCYfgX8V8M7uHKKDISoT60q\u002BF8/UaQI=","R\u002BM/OthMdeQATqSrWj5YvibIW0f6FRHRb9KPZPxfx\u002Bk=","KtMcCZYV1pVsrd0MLUMfbt28YdvVhiWYMjq0fNuUdQA=","58B7yF7PQXq4TW\u002B8ZQHUC\u002BlKI1VVPrUYhQTqucI0DHM=","9Vr8OXWFXuNoJ0MgoEHdmVDwdQxG4F7wb\u002Bp/hZ6Dw50=","4cFvcUIUrBodlCinZvANH95jRWA2Tv56JFz0JCB23r4=","597cJLP130m7F8NABJtyCFYjqBXBZZ\u002ByS79uvYE\u002ByYY=","8\u002BzS1fkNIeUtk2qi1DErgqc02\u002B6IPeIAkp\u002B6vFr6uK4=","m574K3xCoXT254R89TxToR59xHmi3gsExT8w\u002BHxiNyA=","2aX\u002BX\u002B4eE8xi\u002BR7ngW0cq03FjNfIsbVE\u002BusEwCQmFWI=","SqTDM3v2LWiW/nP3WnxvUb3FCx88S4FQBhwnCKof6mk="],"CachedAssets":{"SqTDM3v2LWiW/nP3WnxvUb3FCx88S4FQBhwnCKof6mk=":{"Identity":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\Layout\\ReconnectModal.razor.js","SourceId":"OnProfNext.Client","SourceType":"Discovered","ContentRoot":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\","BasePath":"/","RelativePath":"Layout/ReconnectModal#[.{fingerprint}]?.razor.js","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":null,"AssetMergeSource":"","RelatedAsset":null,"AssetTraitName":null,"AssetTraitValue":null,"Fingerprint":"ycbzh0sbjd","Integrity":"QlWWcf5RpEclEeIaJ/IPv/jDMRlIfAjHvdR/vuJ9su4=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"Layout\\ReconnectModal.razor.js","FileLength":2746,"LastWriteTime":"2026-03-18T16:33:32.4827835+00:00"}},"CachedCopyCandidates":{}}
|
||||
{"GlobalPropertiesHash":"nTZLcUNcq6m2VFEdFbcXfzvxonGExOJOO/jRXnOQPjE=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["VE\u002BpR917HjFp9gYK1XDTmwHtO7D52AaupqiGoT47KOg=","UJnkQBNtjaxTikg3vmugRVAFtF6hvHDn4FaWCEz2zjM=","4CkZKjhmIpvEqKpnX4SHqDYTPppSz6VvTDTpl2HUdv8=","ALliHz343Q6iG2kAWI4lPAn2SIcJCnjxNe9MQc46uck=","R\u002BM/OthMdeQATqSrWj5YvibIW0f6FRHRb9KPZPxfx\u002Bk=","rMK\u002BD7hPTq6nRPjx5GMEtOtCF8PbfMNj8oTfqo\u002BBWGE=","9Vr8OXWFXuNoJ0MgoEHdmVDwdQxG4F7wb\u002Bp/hZ6Dw50=","4wJu/WsqjwkaX/IA1Ko9SpnUHOoivPFErgUDS4Csnvg=","4cFvcUIUrBodlCinZvANH95jRWA2Tv56JFz0JCB23r4=","8\u002BzS1fkNIeUtk2qi1DErgqc02\u002B6IPeIAkp\u002B6vFr6uK4=","m574K3xCoXT254R89TxToR59xHmi3gsExT8w\u002BHxiNyA=","2aX\u002BX\u002B4eE8xi\u002BR7ngW0cq03FjNfIsbVE\u002BusEwCQmFWI=","SqTDM3v2LWiW/nP3WnxvUb3FCx88S4FQBhwnCKof6mk="],"CachedAssets":{"SqTDM3v2LWiW/nP3WnxvUb3FCx88S4FQBhwnCKof6mk=":{"Identity":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\Layout\\ReconnectModal.razor.js","SourceId":"OnProfNext.Client","SourceType":"Discovered","ContentRoot":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\","BasePath":"/","RelativePath":"Layout/ReconnectModal#[.{fingerprint}]?.razor.js","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":null,"AssetMergeSource":"","RelatedAsset":null,"AssetTraitName":null,"AssetTraitValue":null,"Fingerprint":"ycbzh0sbjd","Integrity":"QlWWcf5RpEclEeIaJ/IPv/jDMRlIfAjHvdR/vuJ9su4=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"Layout\\ReconnectModal.razor.js","FileLength":2746,"LastWriteTime":"2026-03-18T16:33:32.4827835+00:00"}},"CachedCopyCandidates":{}}
|
||||
@@ -1 +1 @@
|
||||
{"GlobalPropertiesHash":"ceVpLKOwAYIalAIdJEpP4itQE+Net5TgzJv3073CDrM=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["VE\u002BpR917HjFp9gYK1XDTmwHtO7D52AaupqiGoT47KOg=","UJnkQBNtjaxTikg3vmugRVAFtF6hvHDn4FaWCEz2zjM=","4CkZKjhmIpvEqKpnX4SHqDYTPppSz6VvTDTpl2HUdv8=","eI4bVy3Gh8j8eCYfgX8V8M7uHKKDISoT60q\u002BF8/UaQI=","R\u002BM/OthMdeQATqSrWj5YvibIW0f6FRHRb9KPZPxfx\u002Bk=","KtMcCZYV1pVsrd0MLUMfbt28YdvVhiWYMjq0fNuUdQA=","58B7yF7PQXq4TW\u002B8ZQHUC\u002BlKI1VVPrUYhQTqucI0DHM=","9Vr8OXWFXuNoJ0MgoEHdmVDwdQxG4F7wb\u002Bp/hZ6Dw50=","4cFvcUIUrBodlCinZvANH95jRWA2Tv56JFz0JCB23r4=","597cJLP130m7F8NABJtyCFYjqBXBZZ\u002ByS79uvYE\u002ByYY=","8\u002BzS1fkNIeUtk2qi1DErgqc02\u002B6IPeIAkp\u002B6vFr6uK4=","m574K3xCoXT254R89TxToR59xHmi3gsExT8w\u002BHxiNyA="],"CachedAssets":{"VE\u002BpR917HjFp9gYK1XDTmwHtO7D52AaupqiGoT47KOg=":{"Identity":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\wwwroot\\appsettings.Development.json","SourceId":"OnProfNext.Client","SourceType":"Discovered","ContentRoot":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\wwwroot\\","BasePath":"/","RelativePath":"appsettings.Development#[.{fingerprint}]?.json","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":null,"AssetMergeSource":"","RelatedAsset":null,"AssetTraitName":null,"AssetTraitValue":null,"Fingerprint":"x0ueugt8gp","Integrity":"gX2wvy7Mp4NkxB2695Sb8lBM9HocPQ1U876BeP78Aws=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"wwwroot\\appsettings.Development.json","FileLength":119,"LastWriteTime":"2026-03-18T16:33:32.4217478+00:00"},"UJnkQBNtjaxTikg3vmugRVAFtF6hvHDn4FaWCEz2zjM=":{"Identity":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\wwwroot\\appsettings.json","SourceId":"OnProfNext.Client","SourceType":"Discovered","ContentRoot":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\wwwroot\\","BasePath":"/","RelativePath":"appsettings#[.{fingerprint}]?.json","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":null,"AssetMergeSource":"","RelatedAsset":null,"AssetTraitName":null,"AssetTraitValue":null,"Fingerprint":"x0ueugt8gp","Integrity":"gX2wvy7Mp4NkxB2695Sb8lBM9HocPQ1U876BeP78Aws=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"wwwroot\\appsettings.json","FileLength":119,"LastWriteTime":"2026-03-18T16:33:32.4227457+00:00"}},"CachedCopyCandidates":{}}
|
||||
{"GlobalPropertiesHash":"ceVpLKOwAYIalAIdJEpP4itQE+Net5TgzJv3073CDrM=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["VE\u002BpR917HjFp9gYK1XDTmwHtO7D52AaupqiGoT47KOg=","UJnkQBNtjaxTikg3vmugRVAFtF6hvHDn4FaWCEz2zjM=","4CkZKjhmIpvEqKpnX4SHqDYTPppSz6VvTDTpl2HUdv8=","ALliHz343Q6iG2kAWI4lPAn2SIcJCnjxNe9MQc46uck=","R\u002BM/OthMdeQATqSrWj5YvibIW0f6FRHRb9KPZPxfx\u002Bk=","98f6kSZiNOrHq9QPQOnjzMAYB02RtoI5JgJgw9\u002BsIyM=","rMK\u002BD7hPTq6nRPjx5GMEtOtCF8PbfMNj8oTfqo\u002BBWGE=","9Vr8OXWFXuNoJ0MgoEHdmVDwdQxG4F7wb\u002Bp/hZ6Dw50=","4wJu/WsqjwkaX/IA1Ko9SpnUHOoivPFErgUDS4Csnvg=","4cFvcUIUrBodlCinZvANH95jRWA2Tv56JFz0JCB23r4=","8\u002BzS1fkNIeUtk2qi1DErgqc02\u002B6IPeIAkp\u002B6vFr6uK4=","m574K3xCoXT254R89TxToR59xHmi3gsExT8w\u002BHxiNyA=","2aX\u002BX\u002B4eE8xi\u002BR7ngW0cq03FjNfIsbVE\u002BusEwCQmFWI="],"CachedAssets":{"VE\u002BpR917HjFp9gYK1XDTmwHtO7D52AaupqiGoT47KOg=":{"Identity":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\wwwroot\\appsettings.Development.json","SourceId":"OnProfNext.Client","SourceType":"Discovered","ContentRoot":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\wwwroot\\","BasePath":"/","RelativePath":"appsettings.Development#[.{fingerprint}]?.json","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":null,"AssetMergeSource":"","RelatedAsset":null,"AssetTraitName":null,"AssetTraitValue":null,"Fingerprint":"x0ueugt8gp","Integrity":"gX2wvy7Mp4NkxB2695Sb8lBM9HocPQ1U876BeP78Aws=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"wwwroot\\appsettings.Development.json","FileLength":119,"LastWriteTime":"2026-03-18T16:33:32.4217478+00:00"},"UJnkQBNtjaxTikg3vmugRVAFtF6hvHDn4FaWCEz2zjM=":{"Identity":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\wwwroot\\appsettings.json","SourceId":"OnProfNext.Client","SourceType":"Discovered","ContentRoot":"D:\\Dev\\Tut\\OnProfNext\\OnProfNext\\OnProfNext.Client\\wwwroot\\","BasePath":"/","RelativePath":"appsettings#[.{fingerprint}]?.json","AssetKind":"All","AssetMode":"All","AssetRole":"Primary","AssetMergeBehavior":null,"AssetMergeSource":"","RelatedAsset":null,"AssetTraitName":null,"AssetTraitValue":null,"Fingerprint":"x0ueugt8gp","Integrity":"gX2wvy7Mp4NkxB2695Sb8lBM9HocPQ1U876BeP78Aws=","CopyToOutputDirectory":"Never","CopyToPublishDirectory":"PreserveNewest","OriginalItemSpec":"wwwroot\\appsettings.json","FileLength":119,"LastWriteTime":"2026-03-18T16:33:32.4227457+00:00"}},"CachedCopyCandidates":{}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
ckSNxJSQ+p5ctBRgiDxade01OuHr38XzSeXURCM4c3A=
|
||||
lOatcVrEHDkitBinbqbj7FFtJW7aDN1BSdEPC+zqhgE=
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -14,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("OnProfNext")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d8908d9553dc0c927bb41bf7a3f5058bd930a45f")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9a8789a7ae824d2ea7a0fb2e157b070acd39b48a")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("OnProfNext")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("OnProfNext")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@@ -1 +1 @@
|
||||
9497fca390bf14522fb17495a37305ffba910007e2ff231efb653eaebd808f4c
|
||||
aa4f72102874befb44678503ef16e22be6e63270700d9fe458b2d7a041485c29
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
{"GlobalPropertiesHash":"bAkKC+nVWweE76nob4C9J+dFUzoC/TSMK/+7Va2pEMQ=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["XalveFocMXOm37mVadyo/IW5OGvQ/lODnx2TscTUtmg=","97mJ4IawCQABCF0KFzwGfxqgIjqy1QmaxUaca1BmvN4=","pwbDm\u002BtuPrkkqYGciBeibsjIYD0XR0Oz\u002BZ9BHDd6Puc=","cdg3Zlnjx9JVVy55JTZ/aF1D/LCceFBFjShywDeeMOE=","5R3c0nUvzYa85XM8E8qiKiHB9f9fY\u002BKQFN7tk1Xj30w=","Igjj5gMX02oP225xpwDz/yAIu5tv8WkiY6dRGb4F8NQ=","nBYj8i61sCgl1nUtUnzDYPtjtMi6DMVMVUOYLiNwPj0=","uUwBddsA4K2hHam3dVRUqIPnUKFFCf\u002BC6Bh/Xsq4BeA=","zEB8ma4uSEyqauoElD6tTBhdMbnWJWjSHBzAwVK0lzU=","qHVO01qP1rW4qGtGdFdUOYGcJAHcArvkTUT7RXSb4lw=","EtC\u002BxWOyo9lnT2ef7Q5V33kIW6378BTiA2xyTNVejHc=","qdH8zWynS8jrvHLMU\u002BCjyePLujbMY1XPVkKVX4JXrbI=","hrSkJngleIaorlgApro6sH0NbLF2ikGM/MdaDA15s2I=","yLMv953kk3b0\u002BgonsiVVAM91iR\u002BVlzH0h7OLkLDNZ10=","wO85d/tlqaOzbrlEJ0byD4EQQIVz7bTFDraYXMPkY6E=","hDaFTY\u002BUgTD4lomlNCNkTT2kLZ6VokV40qQLxxDpeRk=","pPLVSrJMu0DTHQZxeD5rvkTibZtAiN6RkiPJ1Bhntso=","oO/Tqc89d180i2biEPjarWAX96rQQ3iUqbc4DXnfF9k=","xeioYEOcCAINAmT07RoDZpO5ff3MCsXmo6GVrDY5FGA="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
{"GlobalPropertiesHash":"bAkKC+nVWweE76nob4C9J+dFUzoC/TSMK/+7Va2pEMQ=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["XalveFocMXOm37mVadyo/IW5OGvQ/lODnx2TscTUtmg=","97mJ4IawCQABCF0KFzwGfxqgIjqy1QmaxUaca1BmvN4=","pwbDm\u002BtuPrkkqYGciBeibsjIYD0XR0Oz\u002BZ9BHDd6Puc=","cdg3Zlnjx9JVVy55JTZ/aF1D/LCceFBFjShywDeeMOE=","5R3c0nUvzYa85XM8E8qiKiHB9f9fY\u002BKQFN7tk1Xj30w=","Igjj5gMX02oP225xpwDz/yAIu5tv8WkiY6dRGb4F8NQ=","nBYj8i61sCgl1nUtUnzDYPtjtMi6DMVMVUOYLiNwPj0=","uUwBddsA4K2hHam3dVRUqIPnUKFFCf\u002BC6Bh/Xsq4BeA=","zEB8ma4uSEyqauoElD6tTBhdMbnWJWjSHBzAwVK0lzU=","qHVO01qP1rW4qGtGdFdUOYGcJAHcArvkTUT7RXSb4lw=","EtC\u002BxWOyo9lnT2ef7Q5V33kIW6378BTiA2xyTNVejHc=","qdH8zWynS8jrvHLMU\u002BCjyePLujbMY1XPVkKVX4JXrbI=","hrSkJngleIaorlgApro6sH0NbLF2ikGM/MdaDA15s2I=","yLMv953kk3b0\u002BgonsiVVAM91iR\u002BVlzH0h7OLkLDNZ10=","wO85d/tlqaOzbrlEJ0byD4EQQIVz7bTFDraYXMPkY6E=","hDaFTY\u002BUgTD4lomlNCNkTT2kLZ6VokV40qQLxxDpeRk=","pPLVSrJMu0DTHQZxeD5rvkTibZtAiN6RkiPJ1Bhntso=","oO/Tqc89d180i2biEPjarWAX96rQQ3iUqbc4DXnfF9k=","AmM6Kwm0hGKjCiPYRG5SaRiX6vf8H/3FenhNRjhRibc="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
@@ -1 +1 @@
|
||||
{"GlobalPropertiesHash":"MNvSBurCTEOUuR+IcnH0PakuTmc+/mF96BjR0OsyLQ4=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["XalveFocMXOm37mVadyo/IW5OGvQ/lODnx2TscTUtmg=","97mJ4IawCQABCF0KFzwGfxqgIjqy1QmaxUaca1BmvN4=","pwbDm\u002BtuPrkkqYGciBeibsjIYD0XR0Oz\u002BZ9BHDd6Puc=","cdg3Zlnjx9JVVy55JTZ/aF1D/LCceFBFjShywDeeMOE=","5R3c0nUvzYa85XM8E8qiKiHB9f9fY\u002BKQFN7tk1Xj30w=","Igjj5gMX02oP225xpwDz/yAIu5tv8WkiY6dRGb4F8NQ=","nBYj8i61sCgl1nUtUnzDYPtjtMi6DMVMVUOYLiNwPj0=","uUwBddsA4K2hHam3dVRUqIPnUKFFCf\u002BC6Bh/Xsq4BeA=","zEB8ma4uSEyqauoElD6tTBhdMbnWJWjSHBzAwVK0lzU=","qHVO01qP1rW4qGtGdFdUOYGcJAHcArvkTUT7RXSb4lw=","EtC\u002BxWOyo9lnT2ef7Q5V33kIW6378BTiA2xyTNVejHc=","qdH8zWynS8jrvHLMU\u002BCjyePLujbMY1XPVkKVX4JXrbI=","hrSkJngleIaorlgApro6sH0NbLF2ikGM/MdaDA15s2I=","yLMv953kk3b0\u002BgonsiVVAM91iR\u002BVlzH0h7OLkLDNZ10=","wO85d/tlqaOzbrlEJ0byD4EQQIVz7bTFDraYXMPkY6E=","hDaFTY\u002BUgTD4lomlNCNkTT2kLZ6VokV40qQLxxDpeRk=","pPLVSrJMu0DTHQZxeD5rvkTibZtAiN6RkiPJ1Bhntso=","oO/Tqc89d180i2biEPjarWAX96rQQ3iUqbc4DXnfF9k=","xeioYEOcCAINAmT07RoDZpO5ff3MCsXmo6GVrDY5FGA="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
{"GlobalPropertiesHash":"MNvSBurCTEOUuR+IcnH0PakuTmc+/mF96BjR0OsyLQ4=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["XalveFocMXOm37mVadyo/IW5OGvQ/lODnx2TscTUtmg=","97mJ4IawCQABCF0KFzwGfxqgIjqy1QmaxUaca1BmvN4=","pwbDm\u002BtuPrkkqYGciBeibsjIYD0XR0Oz\u002BZ9BHDd6Puc=","cdg3Zlnjx9JVVy55JTZ/aF1D/LCceFBFjShywDeeMOE=","5R3c0nUvzYa85XM8E8qiKiHB9f9fY\u002BKQFN7tk1Xj30w=","Igjj5gMX02oP225xpwDz/yAIu5tv8WkiY6dRGb4F8NQ=","nBYj8i61sCgl1nUtUnzDYPtjtMi6DMVMVUOYLiNwPj0=","uUwBddsA4K2hHam3dVRUqIPnUKFFCf\u002BC6Bh/Xsq4BeA=","zEB8ma4uSEyqauoElD6tTBhdMbnWJWjSHBzAwVK0lzU=","qHVO01qP1rW4qGtGdFdUOYGcJAHcArvkTUT7RXSb4lw=","EtC\u002BxWOyo9lnT2ef7Q5V33kIW6378BTiA2xyTNVejHc=","qdH8zWynS8jrvHLMU\u002BCjyePLujbMY1XPVkKVX4JXrbI=","hrSkJngleIaorlgApro6sH0NbLF2ikGM/MdaDA15s2I=","yLMv953kk3b0\u002BgonsiVVAM91iR\u002BVlzH0h7OLkLDNZ10=","wO85d/tlqaOzbrlEJ0byD4EQQIVz7bTFDraYXMPkY6E=","hDaFTY\u002BUgTD4lomlNCNkTT2kLZ6VokV40qQLxxDpeRk=","pPLVSrJMu0DTHQZxeD5rvkTibZtAiN6RkiPJ1Bhntso=","oO/Tqc89d180i2biEPjarWAX96rQQ3iUqbc4DXnfF9k=","AmM6Kwm0hGKjCiPYRG5SaRiX6vf8H/3FenhNRjhRibc="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
RFeCi4TzRrTSTJeKC+26d8Q+KbX1rMiYNhVf1rLIwSM=
|
||||
60SO/ao4KfnmL0Qz7KIgx/Dl2C0uhSXv+ZOtE6C72+A=
|
||||
File diff suppressed because one or more lines are too long
@@ -6,3 +6,4 @@ D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\staticwebas
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\staticwebassets.build.json
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\staticwebassets.build.json
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\staticwebassets.build.json
|
||||
D:\Dev\Tut\OnProfNext\OnProfNext\OnProfNext.Client\obj\Debug\net10.0\staticwebassets.build.json
|
||||
|
||||
Reference in New Issue
Block a user