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:
@@ -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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren