fix(frontend): 统一徽标样式并修复 Google One 用量显示
**修复内容:** 1. **统一徽标样式** - 所有徽标使用相同的 Tailwind 类 - Free: gray-100/600, Pro: blue-100/600, Ultra: purple-100/600 - 暗色模式统一使用 /40 透明度 - Client 和 AI Studio 都使用蓝色徽标 2. **修复 Google One 用量显示** - 后端已为所有 Gemini OAuth (GCP/Google One/Client) 返回用量数据 - 前端只要有用量数据就显示进度条(移除 isGeminiCodeAssist 限制) - Google One 现在也会显示 Pro/Flash 进度条 + 统计数据 - 只有自定义 Client OAuth 显示「无限流」(无追踪) **最终显示规则:** - AI Studio API Key: 「无限流」或「限流 XX」 - Client OAuth: 「无限流」(无追踪) - GCP OAuth: Pro/Flash 进度条 + 统计 - Google One OAuth: Pro/Flash 进度条 + 统计
This commit is contained in:
@@ -94,41 +94,41 @@ const tierLabel = computed(() => {
|
||||
return 'AI Studio'
|
||||
})
|
||||
|
||||
// Tier Badge 样式
|
||||
// Tier Badge 样式(统一样式)
|
||||
const tierBadgeClass = computed(() => {
|
||||
const creds = props.account.credentials as GeminiCredentials | undefined
|
||||
|
||||
if (isCodeAssist.value) {
|
||||
// GCP Code Assist 样式
|
||||
const tierColorMap: Record<string, string> = {
|
||||
LEGACY: 'bg-gray-100 text-gray-700 dark:bg-gray-900/30 dark:text-gray-400',
|
||||
PRO: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400',
|
||||
ULTRA: 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400',
|
||||
'standard-tier': 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400',
|
||||
'pro-tier': 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400',
|
||||
'ultra-tier': 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400'
|
||||
LEGACY: 'bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300',
|
||||
PRO: 'bg-blue-100 text-blue-600 dark:bg-blue-900/40 dark:text-blue-300',
|
||||
ULTRA: 'bg-purple-100 text-purple-600 dark:bg-purple-900/40 dark:text-purple-300',
|
||||
'standard-tier': 'bg-green-100 text-green-600 dark:bg-green-900/40 dark:text-green-300',
|
||||
'pro-tier': 'bg-blue-100 text-blue-600 dark:bg-blue-900/40 dark:text-blue-300',
|
||||
'ultra-tier': 'bg-purple-100 text-purple-600 dark:bg-purple-900/40 dark:text-purple-300'
|
||||
}
|
||||
return (
|
||||
tierColorMap[creds?.tier_id || ''] ||
|
||||
'bg-gray-100 text-gray-700 dark:bg-gray-900/30 dark:text-gray-400'
|
||||
'bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300'
|
||||
)
|
||||
}
|
||||
|
||||
if (isGoogleOne.value) {
|
||||
// Google One tier 样式
|
||||
const tierColorMap: Record<string, string> = {
|
||||
AI_PREMIUM: 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400',
|
||||
GOOGLE_ONE_STANDARD: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400',
|
||||
GOOGLE_ONE_BASIC: 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400',
|
||||
FREE: 'bg-gray-100 text-gray-700 dark:bg-gray-900/30 dark:text-gray-400',
|
||||
GOOGLE_ONE_UNKNOWN: 'bg-gray-100 text-gray-700 dark:bg-gray-900/30 dark:text-gray-400',
|
||||
GOOGLE_ONE_UNLIMITED: 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400'
|
||||
AI_PREMIUM: 'bg-purple-100 text-purple-600 dark:bg-purple-900/40 dark:text-purple-300',
|
||||
GOOGLE_ONE_STANDARD: 'bg-blue-100 text-blue-600 dark:bg-blue-900/40 dark:text-blue-300',
|
||||
GOOGLE_ONE_BASIC: 'bg-green-100 text-green-600 dark:bg-green-900/40 dark:text-green-300',
|
||||
FREE: 'bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300',
|
||||
GOOGLE_ONE_UNKNOWN: 'bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300',
|
||||
GOOGLE_ONE_UNLIMITED: 'bg-amber-100 text-amber-600 dark:bg-amber-900/40 dark:text-amber-300'
|
||||
}
|
||||
return tierColorMap[creds?.tier_id || ''] || 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400'
|
||||
return tierColorMap[creds?.tier_id || ''] || 'bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300'
|
||||
}
|
||||
|
||||
// AI Studio 默认样式:蓝色
|
||||
return 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400'
|
||||
return 'bg-blue-100 text-blue-600 dark:bg-blue-900/40 dark:text-blue-300'
|
||||
})
|
||||
|
||||
// 是否限流
|
||||
|
||||
@@ -241,8 +241,8 @@
|
||||
<div v-else-if="error" class="text-xs text-red-500">
|
||||
{{ error }}
|
||||
</div>
|
||||
<!-- Code Assist: show model usage bars -->
|
||||
<div v-else-if="isGeminiCodeAssist && geminiUsageAvailable" class="space-y-1">
|
||||
<!-- GCP & Google One: show model usage bars when available -->
|
||||
<div v-else-if="geminiUsageAvailable" class="space-y-1">
|
||||
<UsageProgressBar
|
||||
v-if="usageInfo?.gemini_pro_daily"
|
||||
label="Pro"
|
||||
@@ -263,7 +263,7 @@
|
||||
* {{ t('admin.accounts.gemini.quotaPolicy.simulatedNote') || 'Simulated quota' }}
|
||||
</p>
|
||||
</div>
|
||||
<!-- AI Studio & Google One: show unlimited flow -->
|
||||
<!-- AI Studio Client OAuth: show unlimited flow (no usage tracking) -->
|
||||
<div v-else class="text-xs text-gray-400">
|
||||
{{ t('admin.accounts.gemini.rateLimit.unlimited') }}
|
||||
</div>
|
||||
@@ -613,14 +613,14 @@ const geminiAuthTypeLabel = computed(() => {
|
||||
return null
|
||||
})
|
||||
|
||||
// Gemini 账户类型徽章样式
|
||||
// Gemini 账户类型徽章样式(统一样式)
|
||||
const geminiTierClass = computed(() => {
|
||||
const creds = props.account.credentials as GeminiCredentials | undefined
|
||||
const oauthType = creds?.oauth_type
|
||||
|
||||
// AI Studio: use neutral gray color (no tier)
|
||||
// Client (自定义 OAuth): 使用蓝色(与 AI Studio 一致)
|
||||
if (oauthType === 'ai_studio') {
|
||||
return 'bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300'
|
||||
return 'bg-blue-100 text-blue-600 dark:bg-blue-900/40 dark:text-blue-300'
|
||||
}
|
||||
|
||||
if (!geminiTier.value) return ''
|
||||
|
||||
Reference in New Issue
Block a user