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