import { useEffect, useState } from "react"; import { Link, useParams } from "react-router-dom"; import { apiRequest } from "../api/client"; import type { Akte } from "../api/types"; import { DokumentePanel } from "../components/DokumentePanel"; import { ReadinessBadge } from "../components/status/ReadinessBadge"; import { GRUND_TEXT } from "../components/status/gruendeText"; const MANGEL_PRIORITAET_LABEL: Record = { niedrig: "Niedrig", normal: "Normal", hoch: "Hoch", }; // FILE-006: EIN Screen für alle Teilbereiche einer Ressource statt mehrerer // Einzelseiten - konsumiert den FILE-001-Aggregations-Endpunkt. export function AktePage() { const { objektId } = useParams<{ objektId: string }>(); const [akte, setAkte] = useState(null); const [fehler, setFehler] = useState(null); const [laedt, setLaedt] = useState(true); useEffect(() => { if (!objektId) return; setLaedt(true); apiRequest(`/akte/objekt/${objektId}`) .then(setAkte) .catch(() => setFehler("Akte konnte nicht geladen werden.")) .finally(() => setLaedt(false)); }, [objektId]); if (laedt) return

Lade…

; if (fehler) return
{fehler}
; if (!akte) return null; const { objekt } = akte; return (

{objekt.name}

{objekt.code} · {akte.objekttyp_name} · Objekt-Status: {objekt.status}
{akte.einsatzbereitschaft_gruende.length > 0 && (
    {akte.einsatzbereitschaft_gruende.map((g) => (
  • • {GRUND_TEXT[g] ?? g}
  • ))}
)} {/* UI-007 (Epic 20): nach dem QR-Scan (MOBILE-002) landet man hier - die Kernaktionen sollen direkt sichtbar sein, nicht erst am Seitenende. */}
Kontrolle starten Mangel melden

Stammdaten

Standort: {akte.standort_name}
Letzte Kontrolle:{" "} {akte.letzte_kontrolle_am ? new Date(akte.letzte_kontrolle_am).toLocaleString("de-DE") : "noch nie kontrolliert"}
{akte.fahrzeugdetails && ( <> {akte.fahrzeugdetails.kennzeichen &&
Kennzeichen: {akte.fahrzeugdetails.kennzeichen}
} {akte.fahrzeugdetails.funkrufname &&
Funkrufname: {akte.fahrzeugdetails.funkrufname}
} {akte.fahrzeugdetails.funkkenner &&
Funkkenner: {akte.fahrzeugdetails.funkkenner}
} {akte.fahrzeugdetails.kilometerstand !== null && (
Kilometerstand: {akte.fahrzeugdetails.kilometerstand} km
)} )}

Verantwortlichkeit

{akte.zustaendige_benutzer.length === 0 && akte.kontrollverantwortung.length === 0 && (

Keine Zuordnung hinterlegt.

)} {akte.zustaendige_benutzer.length > 0 && (
    {akte.zustaendige_benutzer.map((z) => (
  • {z.name} ({z.quelle === "standort" ? "über Standort" : "direkt"})
  • ))}
)}

Prüfungen (Geräte)

{akte.geraete.length === 0 &&

Keine Geräte-Instanzen erfasst.

} {akte.geraete.length > 0 && (
    {akte.geraete.map((g) => (
  • SN {g.seriennummer} —{" "} {g.status} {g.naechste_pruefung && ( · nächste Prüfung {new Date(g.naechste_pruefung).toLocaleDateString("de-DE")} )}
  • ))}
)}

Mängel

{akte.maengel.length === 0 &&

Keine Mängel gemeldet.

} {akte.maengel.length > 0 && (
    {akte.maengel.map((m) => (
  • {m.beschreibung} — {MANGEL_PRIORITAET_LABEL[m.prioritaet]}, {m.status}
  • ))}
)}

Dokumente

Historie

{akte.historie.length === 0 &&

Noch keine Änderungen protokolliert.

} {akte.historie.length > 0 && (
    {akte.historie.map((h) => (
  • {new Date(h.zeitpunkt).toLocaleString("de-DE")} — {h.ereignistyp} {h.benutzer_name && ({h.benutzer_name})}
  • ))}
)}
); }