feat(org-detail): Org-Status als prominenter Umschalter in der Kopfzeile

Statt des kleinen Auswahlfelds neben dem Namen jetzt ein deutlich
sichtbarer Zwei-Knopf-Umschalter (Aktiv grün mit Haken, Deaktiviert rot
mit Sperr-Symbol), der aktive Zustand ist farbig gefüllt, Klick
speichert sofort wie bisher.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
claude-dev
2026-07-25 15:49:38 +00:00
Ursprung f301e22c6b
Commit db0a8c1d9e
3 geänderte Dateien mit 45 neuen und 8 gelöschten Zeilen

Datei anzeigen

@@ -1434,3 +1434,35 @@ details.adv-section .adv-hint { grid-column: 1 / -1; font-size: 12px; color: var
/* === Klickbare Eintraege in der Ablauf-Liste === */ /* === Klickbare Eintraege in der Ablauf-Liste === */
.expiring-item-link { cursor: pointer; border-radius: var(--radius); transition: background 0.15s ease; } .expiring-item-link { cursor: pointer; border-radius: var(--radius); transition: background 0.15s ease; }
.expiring-item-link:hover, .expiring-item-link:focus-visible { background: var(--bg-hover); } .expiring-item-link:hover, .expiring-item-link:focus-visible { background: var(--bg-hover); }
/* === Prominenter Org-Status-Umschalter in der Kopfzeile === */
.org-status-toggle {
display: inline-flex;
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
}
.ost-btn {
padding: 8px 18px;
font-size: 14px;
font-weight: 600;
font-family: var(--font-body);
background: var(--bg-secondary);
color: var(--text-muted);
border: none;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 7px;
transition: background 0.15s ease, color 0.15s ease;
}
.ost-btn + .ost-btn { border-left: 1px solid var(--border); }
.ost-btn:hover { color: var(--text-primary); background: var(--bg-hover); }
.ost-btn.on.ost-aktiv {
background: rgba(16, 185, 129, 0.16);
color: var(--success);
}
.ost-btn.on.ost-inaktiv {
background: rgba(239, 68, 68, 0.16);
color: var(--danger);
}

Datei anzeigen

@@ -6,7 +6,7 @@
<title>AegisSight Monitor-Verwaltung</title> <title>AegisSight Monitor-Verwaltung</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg"> <link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<link rel="apple-touch-icon" href="/static/favicon.svg"> <link rel="apple-touch-icon" href="/static/favicon.svg">
<link rel="stylesheet" href="/static/css/style.css?v=20260725d"> <link rel="stylesheet" href="/static/css/style.css?v=20260725e">
<script>(function(){var t=localStorage.getItem('portal_theme');if(t==='light')document.documentElement.setAttribute('data-theme','light');try{var a=JSON.parse(localStorage.getItem('osint_a11y')||'{}');Object.keys(a).forEach(function(k){if(a[k])document.documentElement.setAttribute('data-a11y-'+k,'true');});}catch(e){}})()</script> <script>(function(){var t=localStorage.getItem('portal_theme');if(t==='light')document.documentElement.setAttribute('data-theme','light');try{var a=JSON.parse(localStorage.getItem('osint_a11y')||'{}');Object.keys(a).forEach(function(k){if(a[k])document.documentElement.setAttribute('data-a11y-'+k,'true');});}catch(e){}})()</script>
<style> <style>
@@ -1162,7 +1162,7 @@
</div> </div>
<script src="/static/js/a11y.js?v=20260725a"></script> <script src="/static/js/a11y.js?v=20260725a"></script>
<script src="/static/js/app.js?v=20260725i"></script> <script src="/static/js/app.js?v=20260725j"></script>
<script src="/static/js/sources.js?v=20260522x2"></script> <script src="/static/js/sources.js?v=20260522x2"></script>
<script src="/static/js/x-scraper.js?v=20260522a"></script> <script src="/static/js/x-scraper.js?v=20260522a"></script>
<script src="/static/js/source-health.js?v=20260509l"></script> <script src="/static/js/source-health.js?v=20260509l"></script>

Datei anzeigen

@@ -314,12 +314,17 @@ function renderOrgHeader(org) {
document.getElementById("orgDetailHeader").innerHTML = ` document.getElementById("orgDetailHeader").innerHTML = `
<div style="display:flex; align-items:flex-start; gap:10px; flex-wrap:wrap;"> <div style="display:flex; align-items:flex-start; gap:10px; flex-wrap:wrap;">
<div style="flex:1; min-width:260px;"> <div style="flex:1; min-width:260px;">
<h2 style="display:flex; align-items:center; gap:10px; flex-wrap:wrap;">${esc(org.name)} <h2 style="display:flex; align-items:center; gap:14px; flex-wrap:wrap;">${esc(org.name)}
<select onchange="setOrgActive(this.value)" title="Status der Organisation, speichert sofort" <div class="org-status-toggle" role="group" aria-label="Status der Organisation, Klick speichert sofort">
style="width:auto; font-size:13px; padding:4px 8px;"> <button type="button" class="ost-btn ost-aktiv${org.is_active ? " on" : ""}" onclick="setOrgActive('true')" title="Organisation aktivieren">
<option value="true"${org.is_active ? " selected" : ""}>Aktiv</option> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
<option value="false"${org.is_active ? "" : " selected"}>Deaktiviert</option> Aktiv
</select> </button>
<button type="button" class="ost-btn ost-inaktiv${org.is_active ? "" : " on"}" onclick="setOrgActive('false')" title="Organisation deaktivieren">
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><line x1="4.93" y1="4.93" x2="19.07" y2="19.07"/></svg>
Deaktiviert
</button>
</div>
</h2> </h2>
<div class="text-secondary mt-8">Slug: ${esc(org.slug)} | Nutzer: ${org.user_count} | Lizenz: ${org.license_type || "Keine"} | Kontingent: <span id="orgKpiCredits">${esc(kpiText)}</span></div> <div class="text-secondary mt-8">Slug: ${esc(org.slug)} | Nutzer: ${org.user_count} | Lizenz: ${org.license_type || "Keine"} | Kontingent: <span id="orgKpiCredits">${esc(kpiText)}</span></div>
</div> </div>