feat(frontend): 统一 Gemini 四种授权方式的用量窗口显示格式
**统一显示规则:** - 第一行:授权方式简称 + 用户等级(如有) - 后续内容: - 有分模型限额:显示各模型的用量进度条和窗口时间 - 无限额/无分模型:显示「无限流」 **具体改动:** 1. AI Studio OAuth - 第一行:「AI Studio」 - 后续:「无限流」 2. GCP Code Assist OAuth - 第一行:「CLI Free/Pro/Ultra」 - 后续:Pro/Flash 模型进度条(保持现状) 3. Google One OAuth - 第一行:「G1 Personal/Free/Pro/...」 - 后续:「无限流」(暂无配额追踪) 4. API Key - 第一行:「Gemini」徽章 - 后续:「无限流」或「限流 XX」 **文件修改:** - AccountUsageCell.vue: 区分 Code Assist 和其他类型的显示逻辑 - AccountQuotaInfo.vue: 改为两行布局,统一样式 - i18n: 添加 rateLimit.unlimited 翻译(中文「无限流」/英文「Unlimited」)
This commit is contained in:
@@ -1,28 +1,29 @@
|
||||
<template>
|
||||
<div v-if="shouldShowQuota" class="flex items-center gap-2">
|
||||
<!-- Tier Badge -->
|
||||
<span :class="['badge text-xs px-2 py-0.5 rounded font-medium', tierBadgeClass]">
|
||||
{{ tierLabel }}
|
||||
</span>
|
||||
<div v-if="shouldShowQuota">
|
||||
<!-- First line: Platform + Tier Badge -->
|
||||
<div class="mb-1 flex items-center gap-1">
|
||||
<span :class="['badge text-xs px-2 py-0.5 rounded font-medium', tierBadgeClass]">
|
||||
{{ tierLabel }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- 限流状态 -->
|
||||
<span
|
||||
v-if="!isRateLimited"
|
||||
class="text-xs text-gray-400 dark:text-gray-500"
|
||||
>
|
||||
{{ t('admin.accounts.gemini.rateLimit.ok') }}
|
||||
</span>
|
||||
<span
|
||||
v-else
|
||||
:class="[
|
||||
'text-xs font-medium',
|
||||
isUrgent
|
||||
? 'text-red-600 dark:text-red-400 animate-pulse'
|
||||
: 'text-amber-600 dark:text-amber-400'
|
||||
]"
|
||||
>
|
||||
{{ t('admin.accounts.gemini.rateLimit.limited', { time: resetCountdown }) }}
|
||||
</span>
|
||||
<!-- Usage status: unlimited flow or rate limit -->
|
||||
<div class="text-xs text-gray-400 dark:text-gray-500">
|
||||
<span v-if="!isRateLimited">
|
||||
{{ t('admin.accounts.gemini.rateLimit.unlimited') }}
|
||||
</span>
|
||||
<span
|
||||
v-else
|
||||
:class="[
|
||||
'font-medium',
|
||||
isUrgent
|
||||
? 'text-red-600 dark:text-red-400 animate-pulse'
|
||||
: 'text-amber-600 dark:text-amber-400'
|
||||
]"
|
||||
>
|
||||
{{ t('admin.accounts.gemini.rateLimit.limited', { time: resetCountdown }) }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -229,6 +229,7 @@
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- Usage data or unlimited flow -->
|
||||
<div class="space-y-1">
|
||||
<div v-if="loading" class="space-y-1">
|
||||
<div class="flex items-center gap-1">
|
||||
@@ -240,7 +241,8 @@
|
||||
<div v-else-if="error" class="text-xs text-red-500">
|
||||
{{ error }}
|
||||
</div>
|
||||
<div v-else-if="geminiUsageAvailable" class="space-y-1">
|
||||
<!-- Code Assist: show model usage bars -->
|
||||
<div v-else-if="isGeminiCodeAssist && geminiUsageAvailable" class="space-y-1">
|
||||
<UsageProgressBar
|
||||
v-if="usageInfo?.gemini_pro_daily"
|
||||
:label="t('admin.accounts.usageWindow.geminiProDaily')"
|
||||
@@ -263,6 +265,10 @@
|
||||
* {{ t('admin.accounts.gemini.quotaPolicy.simulatedNote') || 'Simulated quota' }}
|
||||
</p>
|
||||
</div>
|
||||
<!-- AI Studio & Google One: show unlimited flow -->
|
||||
<div v-else class="text-xs text-gray-400">
|
||||
{{ t('admin.accounts.gemini.rateLimit.unlimited') }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -1347,6 +1347,7 @@ export default {
|
||||
},
|
||||
rateLimit: {
|
||||
ok: 'Not rate limited',
|
||||
unlimited: 'Unlimited',
|
||||
limited: 'Rate limited {time}',
|
||||
now: 'now'
|
||||
}
|
||||
|
||||
@@ -1484,6 +1484,7 @@ export default {
|
||||
},
|
||||
rateLimit: {
|
||||
ok: '未限流',
|
||||
unlimited: '无限流',
|
||||
limited: '限流 {time}',
|
||||
now: '现在'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user