diff --git a/frontend/src/pages/TargetsPage.jsx b/frontend/src/pages/TargetsPage.jsx index 9bbcc31..324a793 100644 --- a/frontend/src/pages/TargetsPage.jsx +++ b/frontend/src/pages/TargetsPage.jsx @@ -51,7 +51,7 @@ export function TargetsPage() { }; const deleteTarget = async (id) => { - if (!confirm("Target löschen?")) return; + if (!confirm("Target loeschen?")) return; try { await apiFetch(`/targets/${id}`, { method: "DELETE" }, tokens, refresh); await load(); @@ -64,62 +64,76 @@ export function TargetsPage() {

Targets Management

{error &&
{error}
} + {canManage && ( -
-
-

Neues Target

-

Verbindungsdaten fuer eine PostgreSQL-Instanz.

-
-
- - setForm({ ...form, name: e.target.value })} required /> - Eindeutiger Anzeigename im Dashboard. -
-
- - setForm({ ...form, host: e.target.value })} required /> - Wichtig: Muss vom Backend-Container aus erreichbar sein. -
-
- - setForm({ ...form, port: Number(e.target.value) })} type="number" required /> - Standard PostgreSQL Port ist 5432 (oder gemappter Host-Port). -
-
- - setForm({ ...form, dbname: e.target.value })} required /> - Name der Datenbank, die überwacht werden soll. -
-
- - setForm({ ...form, username: e.target.value })} required /> - DB User mit Leserechten auf Stats-Views. -
-
- - setForm({ ...form, password: e.target.value })} required /> - Wird verschlüsselt in der Core-DB gespeichert. -
-
- - - - Bei Fehler "rejected SSL upgrade" auf disable stellen. - -
-
- - -
-
+
+ +
+

Neues Target

+

Verbindungsdaten fuer eine PostgreSQL-Instanz.

+
+ +
+ +
+
+ + setForm({ ...form, name: e.target.value })} required /> + Eindeutiger Anzeigename im Dashboard. +
+
+ + setForm({ ...form, host: e.target.value })} required /> + Wichtig: Muss vom Backend-Container aus erreichbar sein. +
+
+ + setForm({ ...form, port: Number(e.target.value) })} type="number" required /> + Standard PostgreSQL Port ist 5432 (oder gemappter Host-Port). +
+
+ + setForm({ ...form, dbname: e.target.value })} required /> + Name der Datenbank, die ueberwacht werden soll. +
+
+ + setForm({ ...form, username: e.target.value })} required /> + DB User mit Leserechten auf Stats-Views. +
+
+ + setForm({ ...form, password: e.target.value })} required /> + Wird verschluesselt in der Core-DB gespeichert. +
+
+ + + + Bei Fehler "rejected SSL upgrade" auf disable stellen. + +
+
+ + +
+
+
)} + {canManage && ( -
- Troubleshooting +
+ +
+

Troubleshooting

+

Typische Verbindungsfehler schnell erkennen.

+
+ +

Connection refused: Host/Port falsch oder DB nicht erreichbar.

@@ -129,8 +143,9 @@ export function TargetsPage() {

localhost im Target zeigt aus Backend-Container-Sicht auf den Container selbst.

-
+ )} +
{loading ? (

Lade Targets...

diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 23753c4..911a2c1 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -195,36 +195,59 @@ button { } .target-form { - position: relative; - padding-top: 56px; + margin-top: 12px; } -.target-form-header { - position: absolute; - top: 14px; - left: 16px; +.primary-btn { + font-weight: 650; + letter-spacing: 0.01em; + border-color: #4467ab; + background: linear-gradient(180deg, #1a2f56, #142643); + box-shadow: inset 0 1px 0 #5f8de144; } -.target-form-header h3 { +.primary-btn:hover { + border-color: #6b9ee9; + background: linear-gradient(180deg, #1d3766, #183053); +} + +.collapsible { + padding-top: 12px; +} + +.collapse-head { + list-style: none; + cursor: pointer; + display: flex; + align-items: center; + justify-content: space-between; + margin: -2px 0 0 0; + padding: 0 2px 8px 2px; +} + +.collapse-head::-webkit-details-marker { + display: none; +} + +.collapse-head h3 { margin: 0; - font-size: 16px; + font-size: 24px; } -.target-form-header p { +.collapse-head p { margin: 2px 0 0 0; color: #92a7cc; font-size: 12px; } -.primary-btn { - font-weight: 700; - border-color: #3e73d4; - background: linear-gradient(90deg, #2e7cd4, #265fb4); +.collapse-chevron { + font-size: 22px; + color: #89a7d8; + transition: transform 0.2s ease; } -.primary-btn:hover { - border-color: #6aa8ff; - filter: brightness(1.05); +details[open] .collapse-chevron { + transform: rotate(180deg); } .targets-table table tbody tr:hover {