feat(org-detail): Verbrauch weiter aufgeräumt, Lizenz und Kontingent in einer Karte
Auf Nutzerwunsch vier Änderungen im Org-Detail. 1. Kundensicht (Credits) und interner Einkauf (USD) stehen in EINER Karten-Reihe (Verbraucht, Verbleibend, API-Kosten Monat). Die Karte "Budget-Limit (USD, Altmodus)" entfällt in der Anzeige, das Feld bleibt im Erweitert-Bereich des Formulars erhalten. 2. Die Laufzeitwerte-Karte (Übertrag, laufende Periode, Verfügbar gesamt) ist raus. Der Übertrag bleibt im Verbleibend-Wert als Zusatz "(inkl. X Übertrag)" sichtbar. 3. "Lizenz & Credits-Kontingent bearbeiten" steht jetzt an zweiter Stelle direkt unter der Karten-Reihe und enthält BEIDES, die Lizenz-Verwaltung (Tabelle, Neue Lizenz, Verlängern, Widerrufen) und darunter das Kontingent-Formular. Der eigene Lizenzen-Block entfällt, der Monatliche Verlauf rückt ans Ende. 4. Die Sprungmarken-Leiste (Verbrauch/Nutzer/Lizenzen/Einstellungen) oben im Org-Detail ist entfernt, die Seite ist kurz genug. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -161,17 +161,8 @@ function setupNavTabs() {
|
||||
}
|
||||
|
||||
function setupOrgDetailTabs() {
|
||||
// Das Org-Detail ist eine durchgehende Seite, die Pillen scrollen nur noch
|
||||
// zum jeweiligen Bereich, statt Unterreiter umzuschalten.
|
||||
document.querySelectorAll("#orgDetailTabs .nav-tab").forEach(tab => {
|
||||
tab.addEventListener("click", () => {
|
||||
document.querySelectorAll("#orgDetailTabs .nav-tab").forEach(t => t.classList.remove("active"));
|
||||
tab.classList.add("active");
|
||||
const block = document.getElementById(`sub-${tab.dataset.subtab}`);
|
||||
if (block) block.scrollIntoView({ behavior: "smooth", block: "start" });
|
||||
});
|
||||
});
|
||||
|
||||
// Das Org-Detail ist eine durchgehende Seite ohne Unterreiter oder
|
||||
// Sprungmarken, hier bleibt nur der Zurück-Knopf zu verdrahten.
|
||||
document.getElementById("orgBackBtn").addEventListener("click", () => {
|
||||
document.getElementById("orgListView").style.display = "";
|
||||
document.getElementById("orgDetail").classList.remove("active");
|
||||
@@ -320,10 +311,6 @@ async function openOrg(orgId) {
|
||||
document.getElementById("orgListView").style.display = "none";
|
||||
document.getElementById("orgDetail").classList.add("active");
|
||||
|
||||
// Erste Pille aktiv (Verbrauch), Ansicht nach oben
|
||||
document.querySelectorAll("#orgDetailTabs .nav-tab").forEach(t => t.classList.remove("active"));
|
||||
const firstPill = document.querySelector("#orgDetailTabs .nav-tab");
|
||||
if (firstPill) firstPill.classList.add("active");
|
||||
window.scrollTo({ top: 0 });
|
||||
|
||||
try {
|
||||
@@ -978,14 +965,12 @@ async function loadOrgTokenUsage(orgId) {
|
||||
el('tokenCreditsUsed', budget.credits_used != null ? Math.round(budget.credits_used).toLocaleString('de-DE') : '-');
|
||||
if (unlimited) {
|
||||
el('tokenCreditsRemaining', '∞ Unbegrenzt');
|
||||
el('tokenBudgetUsd', '—');
|
||||
} else {
|
||||
var remainingTxt = budget.credits_remaining != null ? budget.credits_remaining.toLocaleString('de-DE') : '-';
|
||||
if (budget.credits_carried > 0 && budget.credits_remaining != null) {
|
||||
remainingTxt += ' (inkl. ' + Math.round(budget.credits_carried).toLocaleString('de-DE') + ' Übertrag)';
|
||||
}
|
||||
el('tokenCreditsRemaining', remainingTxt);
|
||||
el('tokenBudgetUsd', budget.token_budget_usd != null ? '$' + Number(budget.token_budget_usd).toFixed(2) : '-');
|
||||
}
|
||||
el('tokenCostUsd', usage.total_cost_usd != null ? '$' + Number(usage.total_cost_usd).toFixed(2) : '-');
|
||||
|
||||
@@ -1075,14 +1060,6 @@ function fillBudgetForm(budget) {
|
||||
onUnlimitedToggle();
|
||||
}
|
||||
|
||||
// Laufzeitwerte (verwaltet der Monitor, hier nur Anzeige)
|
||||
const txt = (id, val) => { const e = document.getElementById(id); if (e) e.textContent = val; };
|
||||
const carried = budget.credits_carried || 0;
|
||||
txt('viewCreditsCarried', carried > 0 ? Math.round(carried).toLocaleString('de-DE') + ' Credits' : 'Kein Übertrag');
|
||||
txt('viewCreditsPeriodStart', budget.credits_period_start || 'Noch nicht initialisiert');
|
||||
txt('viewCreditsAvailable', budget.unlimited_budget
|
||||
? '∞ Unbegrenzt'
|
||||
: (budget.credits_available != null ? Math.round(budget.credits_available).toLocaleString('de-DE') + ' Credits' : '-'));
|
||||
}
|
||||
|
||||
// Unlimited-Toggle: Felder ausgrauen wenn aktiv
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren