feat(struktur): weniger Klicks, Org-Detail als eine Seite, Kontingent in der Übersicht
Drei Vereinfachungen auf Nutzerwunsch. 1. Das Org-Detail hat keine Unterreiter mehr. Verbrauch & Kontingent, Nutzer, Lizenzen und Einstellungen stehen untereinander auf einer Seite (Verbrauch optisch zuerst, per CSS-Order ohne Block-Verschiebung), die bisherigen Reiter sind Sprungmarken, die nur scrollen. Alle Bereiche laden sofort, der Org-Kopf zeigt den Kontingent-Stand als Kurzinfo. 2. Die Organisations-Tabelle bekommt eine Kontingent-Spalte mit Verbraucht/Verfügbar und Mini-Balken (gelb ab 50, rot ab 80 Prozent), Datenquelle ist die vorhandene Overview-API. Ganze Zeile klickbar. 3. Der globale Hauptreiter "Lizenzen" entfällt, er zeigte nur die Ablauf-Liste, die bereits auf dem Dashboard steht. Die Einträge dort öffnen jetzt direkt die jeweilige Organisation, die Kachel "Aktive Lizenzen" führt zur Organisations-Verwaltung. loadExpiringLicenses bleibt als abgesicherter No-op für Alt-Aufrufer erhalten. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -6,7 +6,7 @@
|
||||
<title>AegisSight Monitor-Verwaltung</title>
|
||||
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
|
||||
<link rel="apple-touch-icon" href="/static/favicon.svg">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=20260725b">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=20260725c">
|
||||
<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>
|
||||
@@ -51,10 +51,6 @@
|
||||
<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="M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z"/><path d="M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2"/><path d="M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2"/><path d="M10 6h4"/><path d="M10 10h4"/><path d="M10 14h4"/><path d="M10 18h4"/></svg>
|
||||
Organisationen
|
||||
</button>
|
||||
<button class="nav-tab" data-section="licenses">
|
||||
<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="M2 18v3c0 .6.4 1 1 1h4v-3h3v-3h2l1.4-1.4a6.5 6.5 0 1 0-4-4Z"/><circle cx="16.5" cy="7.5" r=".5"/></svg>
|
||||
Lizenzen
|
||||
</button>
|
||||
<button class="nav-tab" data-section="sources">
|
||||
<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="M4 11a9 9 0 0 1 9 9"/><path d="M4 4a16 16 0 0 1 16 16"/><circle cx="5" cy="19" r="1"/></svg>
|
||||
Quellen
|
||||
@@ -70,7 +66,7 @@
|
||||
<div class="stats-grid" id="statsGrid"></div>
|
||||
|
||||
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px;">
|
||||
<div class="card card-link" onclick="gotoSection('licenses')" role="link" tabindex="0" title="Zu den Lizenzen">
|
||||
<div class="card card-link" onclick="gotoSection('orgs')" role="link" tabindex="0" title="Zu den Organisationen (Klick auf einen Eintrag öffnet die Organisation)">
|
||||
<div class="card-header">
|
||||
<h2>Bald ablaufende Lizenzen</h2>
|
||||
<svg class="card-link-chevron" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
@@ -137,6 +133,7 @@
|
||||
<th>Slug</th>
|
||||
<th>Nutzer</th>
|
||||
<th>Lizenz</th>
|
||||
<th>Kontingent</th>
|
||||
<th>Status</th>
|
||||
<th>Aktionen</th>
|
||||
</tr>
|
||||
@@ -152,15 +149,19 @@
|
||||
<button class="detail-back" id="orgBackBtn">← Zurück</button>
|
||||
<div id="orgDetailHeader"></div>
|
||||
|
||||
<!-- Alles auf einer Seite: die Pillen scrollen nur zu den Bereichen,
|
||||
sie schalten nichts mehr um. Anzeige-Reihenfolge steuert CSS (order),
|
||||
Verbrauch steht optisch zuerst. -->
|
||||
<div class="nav-tabs mt-16" id="orgDetailTabs">
|
||||
<button class="nav-tab active" data-subtab="users">Nutzer</button>
|
||||
<button class="nav-tab active" data-subtab="tokens">Verbrauch</button>
|
||||
<button class="nav-tab" data-subtab="users">Nutzer</button>
|
||||
<button class="nav-tab" data-subtab="org-licenses">Lizenzen</button>
|
||||
<button class="nav-tab" data-subtab="settings">Einstellungen</button>
|
||||
<button class="nav-tab" data-subtab="tokens">Verbrauch</button>
|
||||
</div>
|
||||
|
||||
<!-- Users Sub-Tab -->
|
||||
<div class="section active" id="sub-users">
|
||||
<!-- Bereich: Nutzer -->
|
||||
<div class="org-block" id="sub-users">
|
||||
<h2 class="org-block-title">Nutzer</h2>
|
||||
<div class="action-bar">
|
||||
<span class="text-secondary" id="userLimitInfo"></span>
|
||||
<button class="btn btn-primary" id="newUserBtn"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>Nutzer anlegen</button>
|
||||
@@ -184,8 +185,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Licenses Sub-Tab -->
|
||||
<div class="section" id="sub-org-licenses">
|
||||
<!-- Bereich: Lizenzen -->
|
||||
<div class="org-block" id="sub-org-licenses">
|
||||
<h2 class="org-block-title">Lizenzen</h2>
|
||||
<div class="action-bar">
|
||||
<span></span>
|
||||
<button class="btn btn-primary" id="newLicenseBtn"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>Neue Lizenz</button>
|
||||
@@ -209,8 +211,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Settings Sub-Tab -->
|
||||
<div class="section" id="sub-settings">
|
||||
<!-- Bereich: Einstellungen -->
|
||||
<div class="org-block" id="sub-settings">
|
||||
<h2 class="org-block-title">Einstellungen</h2>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form id="orgEditForm">
|
||||
@@ -242,7 +245,8 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="section" id="sub-tokens">
|
||||
<div class="org-block" id="sub-tokens">
|
||||
<h2 class="org-block-title">Verbrauch & Kontingent</h2>
|
||||
<div class="token-overview">
|
||||
<!-- Kundensicht: das, was der Kunde im Monitor auch sieht -->
|
||||
<h3 style="margin-bottom:8px;">Kundensicht (Credits)</h3>
|
||||
@@ -398,34 +402,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Licenses Section (global overview) -->
|
||||
<div class="section" id="sec-licenses">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h2>Bald ablaufende Lizenzen</h2>
|
||||
<select id="expiringDays" style="background: var(--bg-primary); border: 1px solid var(--border); border-radius: var(--radius); color: var(--text-primary); padding: 4px 8px; font-size: 13px;">
|
||||
<option value="14">14 Tage</option>
|
||||
<option value="30" selected>30 Tage</option>
|
||||
<option value="90">90 Tage</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Organisation</th>
|
||||
<th>Typ</th>
|
||||
<th>Max Nutzer</th>
|
||||
<th>Läuft ab</th>
|
||||
<th>Aktionen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="expiringTable"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sources Section -->
|
||||
<div class="section" id="sec-sources">
|
||||
<div class="nav-tabs" id="sourceSubTabs">
|
||||
@@ -1241,7 +1217,7 @@
|
||||
</div>
|
||||
|
||||
<script src="/static/js/a11y.js?v=20260725a"></script>
|
||||
<script src="/static/js/app.js?v=20260725c"></script>
|
||||
<script src="/static/js/app.js?v=20260725d"></script>
|
||||
<script src="/static/js/sources.js?v=20260522x2"></script>
|
||||
<script src="/static/js/x-scraper.js?v=20260522a"></script>
|
||||
<script src="/static/js/source-health.js?v=20260509l"></script>
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren