diff --git a/web/admin-spa/src/components/apikeys/LimitProgressBar.vue b/web/admin-spa/src/components/apikeys/LimitProgressBar.vue
index 7a3eb789..5ee0a127 100644
--- a/web/admin-spa/src/components/apikeys/LimitProgressBar.vue
+++ b/web/admin-spa/src/components/apikeys/LimitProgressBar.vue
@@ -14,12 +14,18 @@
-
- {{ label }}
+
+ {{
+ label
+ }}
- ${{ current.toFixed(2) }}
- / ${{ limit.toFixed(2) }}
+
+ ${{ current.toFixed(2) }}
+
+ / ${{ limit.toFixed(2) }}
@@ -109,7 +115,8 @@ const progressBarClass = computed(() => {
} else if (p >= 70) {
return 'bg-gradient-to-r from-orange-500 to-amber-500'
} else {
- return 'bg-gradient-to-r from-purple-500 to-indigo-600'
+ // 使用更亮的紫色渐变,确保与白色文字有良好对比度
+ return 'bg-gradient-to-r from-purple-600 to-indigo-600'
}
}
@@ -169,26 +176,100 @@ const iconClass = computed(() => {
return `${iconName} ${colorClass}`
})
-// 文字颜色(根据进度自动调整)
+// 文字颜色(根据进度条类型和进度值智能调整)
const textClass = computed(() => {
const p = progress.value
- if (p > 50) {
- // 进度超过50%时,文字使用白色(在深色进度条上)
- return 'text-white drop-shadow-sm'
+
+ // 对于有颜色的进度条,判断是否需要白色文字
+ const needsWhiteText = () => {
+ // Opus类型(紫色系)
+ if (props.type === 'opus') {
+ // 紫色进度条在任何进度下都使用白色文字,确保对比度
+ if (p > 0) return true
+ }
+ // 窗口类型(蓝色系)
+ if (props.type === 'window') {
+ // 蓝色进度条在任何进度下都使用白色文字
+ if (p > 0) return true
+ }
+ // 每日类型(绿色/黄色/红色)
+ if (props.type === 'daily') {
+ // 绿色、黄色、红色进度条都使用白色文字
+ if (p > 0) return true
+ }
+ return false
+ }
+
+ if (needsWhiteText()) {
+ // 增强阴影效果,确保在各种颜色背景上都清晰可见
+ return 'text-white font-medium'
} else {
- // 进度较低时,文字使用深色
- return 'text-gray-600 dark:text-gray-300'
+ // 在浅色背景上使用深色文字
+ return 'text-gray-700 dark:text-gray-300 font-medium'
}
})
-// 数值文字颜色(更突出)
+// 数值文字颜色(更突出,增强可读性)
const valueTextClass = computed(() => {
const p = progress.value
- if (p > 50) {
- return 'text-white drop-shadow-md'
- } else {
- return 'text-gray-800 dark:text-gray-200'
+
+ // 与文字颜色保持一致的逻辑
+ const needsWhiteText = () => {
+ if (props.type === 'opus' && p > 0) return true
+ if (props.type === 'window' && p > 0) return true
+ if (props.type === 'daily' && p > 0) return true
+ return false
}
+
+ if (needsWhiteText()) {
+ // 数值文字使用更粗的字重和更强的阴影
+ return 'text-white font-bold'
+ } else {
+ // 在浅色背景上使用更深的颜色
+ return 'text-gray-900 dark:text-gray-100 font-bold'
+ }
+})
+
+// 文字阴影样式(增强对比度)
+const textShadowStyle = computed(() => {
+ const p = progress.value
+
+ // 判断是否需要强阴影
+ const needsStrongShadow = () => {
+ if (props.type === 'opus' && p > 0) return true
+ if (props.type === 'window' && p > 0) return true
+ if (props.type === 'daily' && p > 0) return true
+ return false
+ }
+
+ if (needsStrongShadow()) {
+ // 在彩色背景上使用强阴影效果
+ return {
+ textShadow: '0 1px 3px rgba(0, 0, 0, 0.5), 0 0 8px rgba(0, 0, 0, 0.3)'
+ }
+ }
+ return {}
+})
+
+// 数值文字阴影样式(更强的阴影效果)
+const valueShadowStyle = computed(() => {
+ const p = progress.value
+
+ // 判断是否需要强阴影
+ const needsStrongShadow = () => {
+ if (props.type === 'opus' && p > 0) return true
+ if (props.type === 'window' && p > 0) return true
+ if (props.type === 'daily' && p > 0) return true
+ return false
+ }
+
+ if (needsStrongShadow()) {
+ // 数值文字使用更强的阴影,确保清晰可见
+ return {
+ textShadow: '0 1px 4px rgba(0, 0, 0, 0.6), 0 0 10px rgba(0, 0, 0, 0.4)'
+ }
+ }
+ return {}
})