monitor/html/office.html
fds2610-bot ba52522415 Frontend-API-URL ueber MONITOR_API_BASE konfigurieren statt aus dem Port raten
Die Basis-URL der API wurde bisher aus dem Port der Seite abgeleitet
(office.html: `if (location.port === "8090")`). Laeuft das Frontend hinter
anderen Ports - in Produktion 4443 (web) / 4444 (api) - griff die Bedingung
nicht, der relative Default /api/v1 lief gegen den Webserver ins Leere, und
die Szene fiel still auf Demo-Daten zurueck: fremde Agenten-Namen und
erfundene Ticketzahlen bei gleichzeitig leeren Detail-Modals.

Die URL kommt jetzt aus MONITOR_API_BASE (.env, Default passend zum
Port-Mapping in docker-compose.yml). Der Webserver liefert den Wert zur
Laufzeit als /config.js aus; das nginx-Image setzt ihn beim Start per
envsubst in die Config ein (default.conf -> default.conf.template). Damit
bleibt html/ ein rein statisches, read-only gemountetes Verzeichnis - kein
Build-Schritt, kein eigenes Entrypoint-Skript. Ein leerer Wert bedeutet
"gleicher Origin" und faellt auf /api/v1 zurueck.

Zusaetzlich macht ein roter Banner "API nicht erreichbar!" den Demo-Fallback
sichtbar, statt ihn wie bisher stillschweigend als echte Daten auszugeben.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 22:54:36 +02:00

31 lines
1.3 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="/favicon.png">
<title>FDS Buero-Visualisierung</title>
<link rel="stylesheet" href="css/office.css">
</head>
<body>
<header class="office-header">
<h1>Buero</h1>
<p>
Kanban-Board, Monitor-Wand und Schreibtische zeigen live die Daten aus der
<a href="/API.md">REST-API</a> (Push-Updates per Server-Sent Events, Fallback:
Polling). Klick auf das Board oder einen Monitor oeffnet die Detailansicht. Ist
die API nicht erreichbar, zeigt die Szene ersatzweise Demo-Daten.
</p>
</header>
<div id="api-status-banner" class="api-banner" role="alert" hidden>API nicht erreichbar!</div>
<main id="office-scene" aria-label="Buero-Szene"></main>
<!-- Laufzeit-Konfiguration (API-Basis-URL): wird vom Webserver aus der Umgebungsvariable
MONITOR_API_BASE erzeugt, siehe docker/nginx/default.conf.template und .env.example.
Muss vor dem Modul stehen - ein klassisches Script laeuft synchron vor jedem Modul. -->
<script src="/config.js"></script>
<script type="module" src="js/office-render.js"></script>
</body>
</html>