feat(einstellungen): Betriebswerte im Dashboard einstellbar (#025)
Vier Bereiche unter Einstellungen -> System: Adresse und Agent, Kaufmaennisches, Sicherheit sowie Firma und Darstellung. Alles liegt als eine JSON-Zeile in der Tabelle Einstellung; fehlende Felder bekommen ihren Vorgabewert, eine kaputte Zeile legt den Betrieb nicht lahm. Die Werte wirken auch wirklich: Die Dashboard-Adresse und der Melderhythmus landen im ausgelieferten Einzeiler und im systemd-Timer (live geprueft), der Steuersatz in neuen Rechnungspositionen, die Sitzungsdauer im Token, die Firmenangaben im Kopf der PDF-Dateien. Nebenbei geschlossen: die OIDC-Luecke aus #024. Erlaubte Domaenen und ein Schalter gegen automatisch angelegte Konten. Dazu raeumt der Worker nachts nach den eingestellten Fristen auf - der juengste Report je Host bleibt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,23 +1,32 @@
|
||||
import { SystemFormular } from "@/components/einstellungen/SystemFormular";
|
||||
import { ContentHeader } from "@/components/layout/ContentHeader";
|
||||
import { Card } from "@/components/ui/Card";
|
||||
import { APP_VERSION } from "@/lib/version";
|
||||
import { einstellungen } from "@/server/einstellungen";
|
||||
|
||||
export const metadata = { title: "System" };
|
||||
|
||||
export default function SystemSeite() {
|
||||
export default async function SystemSeite() {
|
||||
const werte = await einstellungen();
|
||||
|
||||
return (
|
||||
<>
|
||||
<ContentHeader titel="System" brotkrumen={[{ titel: "Einstellungen" }, { titel: "System" }]} />
|
||||
<div className="app-content">
|
||||
<div className="container-fluid">
|
||||
<Card titel="Systeminformationen" rahmen="primary">
|
||||
<SystemFormular werte={werte} appUrl={process.env.APP_URL ?? ""} />
|
||||
|
||||
<Card titel="Systeminformationen" rahmen="keiner">
|
||||
<dl className="row mb-0">
|
||||
<dt className="col-4 fw-normal text-body-secondary">Version</dt>
|
||||
<dd className="col-8">{APP_VERSION}</dd>
|
||||
<dt className="col-4 fw-normal text-body-secondary">Datenquelle</dt>
|
||||
<dd className="col-8">Beispieldaten (Prototyp, #002)</dd>
|
||||
<dt className="col-4 fw-normal text-body-secondary">Warnregeln</dt>
|
||||
<dd className="col-8">Konfigurierbar ab #011</dd>
|
||||
<dt className="col-4 fw-normal text-body-secondary">Zeitzone des Servers</dt>
|
||||
<dd className="col-8">{Intl.DateTimeFormat().resolvedOptions().timeZone}</dd>
|
||||
<dt className="col-4 fw-normal text-body-secondary">Nur in der Umgebung</dt>
|
||||
<dd className="col-8">
|
||||
<code>APP_SECRET</code> und <code>DATABASE_URL</code> – beide werden gebraucht, bevor
|
||||
die Datenbank gelesen werden kann.
|
||||
</dd>
|
||||
</dl>
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user