zai / app /templates /components /token_stats.html
sanbo110's picture
update sth at 2025-10-16 14:55:36
47258ea
<!-- Token 统计面板 -->
<div class="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4">
<!-- 总数 -->
<div class="bg-white overflow-hidden shadow rounded-lg">
<div class="p-5">
<div class="flex items-center">
<div class="flex-shrink-0">
<svg class="h-6 w-6 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01" />
</svg>
</div>
<div class="ml-5 w-0 flex-1">
<dl>
<dt class="text-sm font-medium text-gray-500 truncate">Token 总数</dt>
<dd class="text-2xl font-bold text-gray-900">{{ stats.total_tokens }}</dd>
</dl>
</div>
</div>
</div>
</div>
<!-- 已启用 -->
<div class="bg-white overflow-hidden shadow rounded-lg">
<div class="p-5">
<div class="flex items-center">
<div class="flex-shrink-0">
<svg class="h-6 w-6 text-green-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
</div>
<div class="ml-5 w-0 flex-1">
<dl>
<dt class="text-sm font-medium text-gray-500 truncate">已启用</dt>
<dd class="flex items-baseline">
<div class="text-2xl font-bold text-green-600">{{ stats.enabled_tokens }}</div>
{% if stats.total_tokens > 0 %}
<div class="ml-2 flex items-baseline text-sm font-semibold text-green-600">
{{ "%.0f"|format(stats.enabled_tokens / stats.total_tokens * 100) }}%
</div>
{% endif %}
</dd>
</dl>
</div>
</div>
</div>
</div>
<!-- 认证用户 -->
<div class="bg-white overflow-hidden shadow rounded-lg">
<div class="p-5">
<div class="flex items-center">
<div class="flex-shrink-0">
<svg class="h-6 w-6 text-blue-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" />
</svg>
</div>
<div class="ml-5 w-0 flex-1">
<dl>
<dt class="text-sm font-medium text-gray-500 truncate">认证用户</dt>
<dd class="flex items-baseline">
<div class="text-2xl font-bold text-blue-600">{{ stats.user_tokens }}</div>
{% if stats.guest_tokens > 0 %}
<div class="ml-2 flex items-baseline text-sm font-semibold text-yellow-600">
<svg class="h-4 w-4 mr-0.5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd" />
</svg>
{{ stats.guest_tokens }} 个匿名
</div>
{% endif %}
</dd>
</dl>
</div>
</div>
</div>
</div>
<!-- 成功率 -->
<div class="bg-white overflow-hidden shadow rounded-lg">
<div class="p-5">
<div class="flex items-center">
<div class="flex-shrink-0">
{% if stats.total_requests > 0 %}
{% set success_rate = (stats.successful_requests / stats.total_requests * 100) %}
{% if success_rate >= 80 %}
<svg class="h-6 w-6 text-green-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" />
</svg>
{% elif success_rate >= 50 %}
<svg class="h-6 w-6 text-yellow-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" />
</svg>
{% else %}
<svg class="h-6 w-6 text-red-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 17h8m0 0v-8m0 8l-8-8-4 4-6-6" />
</svg>
{% endif %}
{% else %}
<svg class="h-6 w-6 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
</svg>
{% endif %}
</div>
<div class="ml-5 w-0 flex-1">
<dl>
<dt class="text-sm font-medium text-gray-500 truncate">总成功率</dt>
<dd>
{% if stats.total_requests > 0 %}
{% set success_rate = (stats.successful_requests / stats.total_requests * 100) %}
<div class="text-2xl font-bold {{ 'text-green-600' if success_rate >= 80 else ('text-yellow-600' if success_rate >= 50 else 'text-red-600') }}">
{{ "%.1f"|format(success_rate) }}%
</div>
<div class="mt-1 text-xs text-gray-500">
{{ stats.successful_requests }} / {{ stats.total_requests }} 请求
</div>
{% else %}
<div class="text-2xl font-bold text-gray-400">N/A</div>
<div class="mt-1 text-xs text-gray-500">暂无请求</div>
{% endif %}
</dd>
</dl>
</div>
</div>
</div>
</div>
</div>