@page "/projects/{id:int}"
@using OnProfNext.Client.Services
@inject ProjectApiService ProjectService
@inject NavigationManager Nav
@inject OrderApiService OrderService
@inject UserApiService UserService
@using OnProfNext.Shared.Models.DTOs
Projekt nicht gefunden.
}
else
{
@switch (activeTab)
{
case "overview":
Projektübersicht
Hier kommt später ein Überblick über Fortschritt, KPIs und Aktivitäten.
break;
case "tasks":
Aufträge
@if (orders is null)
{
Aufträge werden geladen...
}
else if (!orders.Any())
{
Keine Aufträge vorhanden.
}
else
{
| Nr. |
Titel |
Status |
Plan (h) |
Ist (h) |
Mitarbeiter |
|
@foreach (var o in orders)
{
| @o.Auftragsnummer |
@o.Titel |
@o.Status
|
@o.Planstunden |
@o.Iststunden |
noch offen
|
|
}
}
@if (showAddOrderModal)
{
}
break;
case "bookings":
Buchungen
Zeiterfassungen und Plan/Ist-Vergleiche werden hier erscheinen.
break;
case "members":
Mitarbeiter
Teamzuordnung, Rollenverwaltung, People Picker.
break;
case "documents":
Dokumente
Dateiupload, SharePoint-Verknüpfung, Projektreports.
break;
case "comments":
Kommentare
Chat/Kommentarbereich für Projektkommunikation.
break;
}
}
@code {
[Parameter] public int id { get; set; }
private ProjectDto? project;
private string? errorMessage;
private bool isLoading = true;
// Tabs
private string activeTab = "overview";
private readonly List<(string Key, string Title, string Icon)> tabs = new()
{
("overview", "Übersicht", "bi bi-house"),
("tasks", "Aufträge", "bi bi-list-task"),
("bookings", "Buchungen", "bi bi-clock-history"),
("members", "Mitarbeiter", "bi bi-people"),
("documents", "Dokumente", "bi bi-folder2-open"),
("comments", "Kommentare", "bi bi-chat-left-text")
};
protected override async Task OnInitializedAsync()
{
await LoadProjectAsync();
var result = await OrderService.GetOrdersByProjectAsync(1);
Console.WriteLine($"Orders loaded: {result.Data?.Count}");
}
private async Task LoadProjectAsync()
{
try
{
var result = await ProjectService.GetProjectAsync(id);
if (!result.Success)
{
errorMessage = result.Error;
return;
}
project = result.Data;
}
catch (Exception ex)
{
errorMessage = $"Fehler beim Laden: {ex.Message}";
}
finally
{
isLoading = false;
}
}
private string GetStatusColor(string? status) => status switch
{
"Geplant" => "secondary",
"In Arbeit" => "info",
"Abgeschlossen" => "success",
_ => "light"
};
private void SetActiveTab(string key) => activeTab = key;
private void GoBack() => Nav.NavigateTo("/projects");
private List