diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts
index a9937ad..ccae308 100644
--- a/src/app/app.routes.ts
+++ b/src/app/app.routes.ts
@@ -5,7 +5,7 @@ import { NotFoundComponent } from './core/components/not-found/not-found.compone
import { DefaultLayoutComponent } from './core/components/default-layout/default-layout.component';
-import { DashboardPageComponent } from './features/dashboard/pages/dashboard-page/dashboard-page.component';
+import { DashboardPageComponent } from './features/dashboard/components/dashboard-page/dashboard-page.component';
export const routes: Routes = [
{
diff --git a/src/app/core/components/default-layout/default-layout.component.css b/src/app/core/components/default-layout/default-layout.component.css
index 8c0827f..430f963 100644
--- a/src/app/core/components/default-layout/default-layout.component.css
+++ b/src/app/core/components/default-layout/default-layout.component.css
@@ -34,11 +34,13 @@ app-page-header {
}
app-sidebar {
margin: 1rem;
+ margin-top:0;
grid-area: 2 / 1 / 6 / 2;
}
.main-content {
- background-color: var(--color-body-bg);
- margin: 1rem;
+ border-radius: var(--border-radius-md) 0 0 0;
+ background-color: var(--color-body-bg-lighter);
+ padding: 1rem;
grid-area: 2 / 2 / 6 / 6;
overflow-y: auto; /* Fügt Scrollen hinzu, falls der Inhalt den Bereich übersteigt */
}
diff --git a/src/app/core/models/dashboard.ts b/src/app/core/models/dashboard.ts
new file mode 100644
index 0000000..393f23b
--- /dev/null
+++ b/src/app/core/models/dashboard.ts
@@ -0,0 +1,9 @@
+
+import { KpiColor } from "../types/dashboard";
+
+export interface Kpi {
+ value: string;
+ label: string;
+ color: KpiColor; // <-- Hier verwenden wir den importierten Typ
+ iconName: string;
+}
\ No newline at end of file
diff --git a/src/app/core/models/order.ts b/src/app/core/models/order.ts
new file mode 100644
index 0000000..7c1d72f
--- /dev/null
+++ b/src/app/core/models/order.ts
@@ -0,0 +1,19 @@
+import { OrderStatus } from "../types/order";
+
+export interface OrderUser {
+ name: string;
+ email: string;
+ avatarUrl: string;
+}
+
+export interface Order {
+ id: string;
+ user: OrderUser;
+ amount: string;
+ status: OrderStatus;
+}
+
+export interface StatusOption {
+ value: OrderStatus | 'all';
+ label: string;
+}
\ No newline at end of file
diff --git a/src/app/core/types/dashboard.ts b/src/app/core/types/dashboard.ts
new file mode 100644
index 0000000..0dfe432
--- /dev/null
+++ b/src/app/core/types/dashboard.ts
@@ -0,0 +1 @@
+export type KpiColor = 'blue' | 'green' | 'orange' | 'purple';
\ No newline at end of file
diff --git a/src/app/core/types/order.ts b/src/app/core/types/order.ts
new file mode 100644
index 0000000..d57aad1
--- /dev/null
+++ b/src/app/core/types/order.ts
@@ -0,0 +1 @@
+export type OrderStatus = 'completed' | 'processing' | 'cancelled' | 'info';
\ No newline at end of file
diff --git a/src/app/core/types/status-pill.ts b/src/app/core/types/status-pill.ts
new file mode 100644
index 0000000..8a59cfe
--- /dev/null
+++ b/src/app/core/types/status-pill.ts
@@ -0,0 +1 @@
+export type PillStatus = 'success' | 'warning' | 'danger' | 'info';
\ No newline at end of file
diff --git a/src/app/features/dashboard/pages/dashboard-page/dashboard-page.component.css b/src/app/features/dashboard/components/dashboard-page/dashboard-page.component.css
similarity index 100%
rename from src/app/features/dashboard/pages/dashboard-page/dashboard-page.component.css
rename to src/app/features/dashboard/components/dashboard-page/dashboard-page.component.css
diff --git a/src/app/features/dashboard/components/dashboard-page/dashboard-page.component.html b/src/app/features/dashboard/components/dashboard-page/dashboard-page.component.html
new file mode 100644
index 0000000..e4c3664
--- /dev/null
+++ b/src/app/features/dashboard/components/dashboard-page/dashboard-page.component.html
@@ -0,0 +1,75 @@
+
dashboard-page works!
-- Key Performance Indicators (KPIs) – Das "Big Picture" Dies sind die - wichtigsten Kennzahlen, die den Geschäftserfolg auf einen Blick zeigen. Sie - sollten prominent ganz oben platziert werden. Alle diese Daten stammen direkt - aus dem KpiSummaryDto, das Sie vom /api/v1/admin/AdminAnalytics-Endpunkt - bekommen. Gesamtumsatz (totalRevenue): Die wichtigste Kennzahl. Zeigt, wie - viel Geld der Shop einnimmt. Anzahl der Bestellungen (totalOrders): Zeigt die - Aktivität im Shop. Durchschnittlicher Bestellwert (averageOrderValue): Hilft - zu beurteilen, ob Kunden tendenziell mehr oder weniger pro Einkauf ausgeben. - Anzahl der Neukunden (newCustomersThisPeriod): Wichtig für das Wachstum. - Zeigt, wie viele neue Kunden im gewählten Zeitraum registriert wurden. - Darstellung: Am besten als einzelne, große "KPI-Karten", wie wir es im - vorherigen Beispiel hatten. -
- -- Handlungsrelevante Aufgaben – "Was muss ich jetzt tun?" Das ist der vielleicht - wichtigste Teil des Dashboards. Er sollte dem Admin direkt zeigen, wo seine - Aufmerksamkeit benötigt wird. Bestellungen zur Bearbeitung: Eine Zählung und - eine Liste der letzten Bestellungen mit dem Status Pending oder Processing. - Dies signalisiert "Hier muss etwas verpackt und versendet werden!". - API-Endpunkt: GET /api/v1/admin/AdminOrders – Sie müssten die zurückgegebene - Liste clientseitig nach dem Status filtern. Produkte mit niedrigem - Lagerbestand: Eine Warnung oder eine Liste von Produkten, deren stockQuantity - unter einen bestimmten Schwellenwert fällt. API-Endpunkt: Das - InventoryStatusDto aus dem AdminAnalytics-Endpunkt liefert Ihnen direkt die - Anzahl (productsWithLowStock). Zu genehmigende Bewertungen (Reviews): Falls - Sie ein Freigabeverfahren für Kundenbewertungen haben, ist eine Anzeige wie "3 - neue Bewertungen warten auf Freigabe" extrem hilfreich. API-Endpunkt: GET - /api/v1/admin/AdminReviews – Sie müssten hier eine Zählung der noch nicht - genehmigten Reviews durchführen. Darstellung: Als auffällige - Benachrichtigungs-Boxen oder "To-Do"-Listen. -
-- Jüngste Aktivitäten – "Was passiert gerade im Shop?" Diese Sektion gibt dem - Admin ein Gefühl für die aktuelle Dynamik im Shop. Letzte Bestellungen: Eine - kurze Liste der 5-10 neuesten Bestellungen, unabhängig vom Status. Zeigt den - Namen des Kunden, den Bestellwert und das Datum. API-Endpunkt: GET - /api/v1/admin/AdminOrders. Umsatzverlauf der letzten 30 Tage: Ein einfaches - Linien- oder Balkendiagramm, das den täglichen Umsatz anzeigt. API-Endpunkt: - Die salesOverTime-Daten aus dem AdminAnalytics-Endpunkt sind perfekt dafür - gemacht. -
-- Top-Listen – "Was läuft am besten?" Diese Informationen sind strategisch - wertvoll, um zu wissen, welche Produkte populär sind. Top 5 meistverkaufte - Produkte: Eine einfache Tabelle mit den Produkten, die den meisten Umsatz - generieren oder am häufigsten verkauft wurden. API-Endpunkt: Die Liste - topPerformingProducts aus dem AdminAnalytics-Endpunkt liefert Ihnen genau - diese Daten. -
-|
- |
{{ order.amount }} |
@@ -66,7 +82,7 @@
+ {{ displayText }}
+
\ No newline at end of file
diff --git a/src/app/shared/components/ui/status-pill/status-pill.component.ts b/src/app/shared/components/ui/status-pill/status-pill.component.ts
index 6bb837e..d5cbc2a 100644
--- a/src/app/shared/components/ui/status-pill/status-pill.component.ts
+++ b/src/app/shared/components/ui/status-pill/status-pill.component.ts
@@ -1,16 +1,34 @@
-import { Component, Input } from '@angular/core';
-import { CommonModule } from '@angular/common';
-
-// Definiert die erlaubten Status-Typen für Typsicherheit
-type PillStatus = 'success' | 'warning' | 'danger' | 'info';
+import { Component, Input, OnChanges } from '@angular/core';
+import { CommonModule, NgClass } from '@angular/common';
+import { OrderStatus } from '../../../../core/types/order';
@Component({
selector: 'app-status-pill',
standalone: true,
- imports: [CommonModule],
+ imports: [CommonModule, NgClass],
templateUrl: './status-pill.component.html',
styleUrl: './status-pill.component.css'
})
-export class StatusPillComponent {
- @Input() status: PillStatus = 'info';
+export class StatusPillComponent implements OnChanges {
+ // Nimmt jetzt den neuen, sprechenden Status entgegen
+ @Input() status: OrderStatus = 'info';
+
+ // Diese Eigenschaften werden vom Template verwendet
+ public displayText = '';
+ public cssClass = '';
+
+ // Eine Map, die Statusnamen auf Text und CSS-Klasse abbildet
+ private statusMap = new Map |