"use client"; import React from "react"; import { PageContainer, Raster } from "../components/layout/PageContainer"; import { KPICard } from "../components/cards/KPICard"; import { ChartCard } from "../components/cards/ChartCard"; import { AuslastungsBalken } from "../components/charts/AuslastungsBalken"; import { BalkenHorizontal } from "../components/charts/BalkenHorizontal"; import { Donut } from "../components/charts/Donut"; import { DataTable, type Spalte } from "../components/tables/DataTable"; import { formatEuro, formatEuroKompakt, formatProzent, formatStunden, formatZahl } from "../utils/formatters"; import { SeitenZustand } from "../components/layout/SeitenZustand"; import type { VMState } from "../view-models"; import type { TeamDaten, TeamZeile } from "../view-models/team.vm"; export function TeamSeite({ vm }: { vm: VMState }) { if (vm.status !== "ready") { return ; } const d = vm.data; const spalten: Spalte[] = [ { key: "name", titel: "Mitarbeiter", breite: "26%", zelle: (k) => (
{k.mitarbeiter.kuerzel}
{k.mitarbeiter.name} {k.mitarbeiter.rolle} · {k.mitarbeiter.gewerk}
), sortWert: (k) => k.mitarbeiter.name, }, { key: "status", titel: "Status", zelle: (k) => k.mitarbeiter.status === "aktiv" ? ( aktiv ) : ( inaktiv ), sortWert: (k) => k.mitarbeiter.status, }, { key: "stunden", titel: "Stunden", numerisch: true, zelle: (k) => formatStunden(k.stunden), sortWert: (k) => k.stunden, }, { key: "produktiv", titel: "davon produktiv", numerisch: true, zelle: (k) => formatStunden(k.produktivStunden), sortWert: (k) => k.produktivStunden, }, { key: "auslastung", titel: "Auslastung", numerisch: true, zelle: (k) => ( 95 ? "font-medium text-[#8a3800]" : k.auslastungProzent < 70 ? "text-[#00539a]" : "font-medium text-[#0e6027]" } > {formatProzent(k.auslastungProzent, 0)} ), sortWert: (k) => k.auslastungProzent, }, { key: "abgeschlossen", titel: "Abgeschlossen", numerisch: true, zelle: (k) => formatZahl(k.abgeschlossen), sortWert: (k) => k.abgeschlossen, }, { key: "umsatz", titel: "Auftragswert", numerisch: true, zelle: (k) => {formatEuro(k.umsatz)}, sortWert: (k) => k.umsatz, }, ]; return ( <> 95 ? "warnung" : "positiv"} /> ({ name: k.mitarbeiter.name, wert: k.auslastungProzent, zusatz: `${k.mitarbeiter.rolle} · ${k.mitarbeiter.gewerk}`, }))} maxZeilen={12} />
({ name: k.mitarbeiter.name, value: k.abgeschlossen, zweitwert: k.umsatz, }))} formatWert={(w) => formatZahl(w)} formatZweitwert={formatEuroKompakt} maxBalken={8} /> formatStunden(w)} hoehe={210} mitteLabel="Stunden" />
`${k.mitarbeiter.name} ${k.mitarbeiter.rolle} ${k.mitarbeiter.gewerk}`} />
); }