feat: Credits-System — Token-Usage-Router, Budget-Verwaltung, Frontend-Übersicht

- Neuer Router /api/token-usage mit Overview, Org-Detail, Monatsstatistik
- Budget-Felder (credits_total, cost_per_credit, token_budget_usd) bei Lizenz-Erstellung
- Token-Nutzung Sub-Tab in Org-Detail mit Verbrauchsbalken und Monatstabelle
- Dashboard Stat-Card für API-Kosten gesamt
- CSS Dark-Theme Styling für Token-Komponenten
Dieser Commit ist enthalten in:
Claude Dev
2026-03-17 23:59:49 +01:00
Ursprung 3828d7c8bf
Commit 7cd36959b0
7 geänderte Dateien mit 333 neuen und 4 gelöschten Zeilen

Datei anzeigen

@@ -88,6 +88,7 @@
<button class="nav-tab active" 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">Token-Nutzung</button>
</div>
<!-- Users Sub-Tab -->
@@ -161,6 +162,52 @@
</form>
</div>
</div>
<div class="section" id="sub-tokens" style="display:none;">
<div class="token-overview">
<div class="token-stats-row" id="tokenStatsRow">
<div class="token-stat-card">
<div class="token-stat-label">Verbrauchte Credits</div>
<div class="token-stat-value" id="tokenCreditsUsed">-</div>
</div>
<div class="token-stat-card">
<div class="token-stat-label">Verbleibend</div>
<div class="token-stat-value" id="tokenCreditsRemaining">-</div>
</div>
<div class="token-stat-card">
<div class="token-stat-label">Budget (USD)</div>
<div class="token-stat-value" id="tokenBudgetUsd">-</div>
</div>
<div class="token-stat-card">
<div class="token-stat-label">Kosten (USD)</div>
<div class="token-stat-value" id="tokenCostUsd">-</div>
</div>
</div>
<div class="token-budget-bar-section">
<div class="token-budget-label">
<span>Budget-Auslastung</span>
<span id="tokenBudgetPercent">0%</span>
</div>
<div class="token-budget-bar-container">
<div class="token-budget-bar" id="tokenBudgetBar"></div>
</div>
</div>
<h3 style="margin-top:24px;">Monatlicher Verlauf</h3>
<table class="data-table">
<thead>
<tr>
<th>Monat</th>
<th>Refreshes</th>
<th>API-Calls</th>
<th>Input-Tokens</th>
<th>Output-Tokens</th>
<th>Kosten (USD)</th>
</tr>
</thead>
<tbody id="tokenMonthlyTable"></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@@ -388,6 +435,19 @@
<input type="number" id="newLicDuration" value="14" min="1" max="3650">
<div class="text-muted mt-8" style="font-size: 12px;">Trial: Standard 14 Tage, Jahreslizenz: Standard 365 Tage</div>
</div>
<div class="form-group">
<label for="newLicCreditsTotal">Credits-Kontingent</label>
<input type="number" id="newLicCreditsTotal" placeholder="z.B. 600000">
</div>
<div class="form-group">
<label for="newLicCostPerCredit">Kosten pro Credit (USD)</label>
<input type="number" id="newLicCostPerCredit" step="0.0001" placeholder="z.B. 0.0033">
</div>
<div class="form-group">
<label for="newLicBudgetUsd">Budget-Limit (USD)</label>
<input type="number" id="newLicBudgetUsd" step="0.01" placeholder="z.B. 2000">
</div>
<div id="newLicError" class="error-msg" style="display:none"></div>
</div>
<div class="modal-footer">