diff --git a/src/components/usage/UsageDashboard.tsx b/src/components/usage/UsageDashboard.tsx index 844777ce7..b28d605df 100644 --- a/src/components/usage/UsageDashboard.tsx +++ b/src/components/usage/UsageDashboard.tsx @@ -80,53 +80,51 @@ export function UsageDashboard() { transition={{ duration: 0.4 }} className="space-y-8 pb-8" > -
-
-
-

{t("usage.title")}

-

- {t("usage.subtitle")} -

-
+
+
+

+ {t("usage.title")} +

+

{t("usage.subtitle")}

-
-
+
+
{APP_FILTER_OPTIONS.map((type) => ( ))} +
-
- +
+ - setRange(nextRange)} - /> -
+ setRange(nextRange)} + />
diff --git a/src/components/usage/UsageHero.tsx b/src/components/usage/UsageHero.tsx index f12dd7542..a3173bf77 100644 --- a/src/components/usage/UsageHero.tsx +++ b/src/components/usage/UsageHero.tsx @@ -201,112 +201,121 @@ export function UsageHero({ return ( - - - {/* Header: title + cost */} -
-
-
- -
- - {appLabel && ( - <> - - {appLabel} + + +
+ {/* Top row: Main Token Count, Requests, Cost */} +
+
+
+ +
+
+
+ {appLabel && ( + <> + + {appLabel} + + + + )} + {t("usage.realTotal", "真实消耗 Tokens")} +
+
+ + {realTotal.toLocaleString()} - · - - )} - {t("usage.realTotal", "真实消耗 Tokens")} - -
-
-
- - {t("usage.totalRequests")} - - - - {requests.toLocaleString()} - + + ≈ {formatTokensShort(realTotal, lang, 2)} + +
+
-
- - {t("usage.totalCost")} - - - {totalCost == null ? "--" : fmtUsd(totalCost, 4)} - + +
+
+ + {t("usage.totalRequests")} + + + + {requests.toLocaleString()} + +
+
+
+ + {t("usage.totalCost")} + + + {totalCost == null ? "--" : fmtUsd(totalCost, 4)} + +
-
- {/* Hero number */} -
-
- {realTotal.toLocaleString()} -
-
- ≈ {formatTokensShort(realTotal, lang, 2)}{" "} - {t("usage.tokensSuffix", "tokens")} -
-
- - {/* Breakdown row: 4 mini stats */} -
- } - label={t("usage.freshInput", "新增输入")} - value={formatTokensShort(input, lang)} - accent="text-blue-500" - /> - } - label={t("usage.output")} - value={formatTokensShort(output, lang)} - accent="text-purple-500" - /> - } - label={t("usage.cacheWrite", "缓存写入")} - value={cacheWriteDisplay.value} - accent="text-amber-500" - muted={cacheWriteDisplay.muted} - tooltip={cacheWriteDisplay.tooltip} - /> - } - label={t("usage.cacheRead", "缓存命中")} - value={formatTokensShort(cacheRead, lang)} - accent="text-emerald-500" - /> -
- - {/* Hit rate progress */} -
-
- - {t("usage.cacheHitRate", "缓存命中率")} - - - {hitPercentLabel}% - -
-
- + } + label={t("usage.freshInput", "新增输入")} + value={formatTokensShort(input, lang)} + accent="text-blue-500" /> + } + label={t("usage.output")} + value={formatTokensShort(output, lang)} + accent="text-purple-500" + /> + } + label={t("usage.cacheWrite", "缓存写入")} + value={cacheWriteDisplay.value} + accent="text-amber-500" + muted={cacheWriteDisplay.muted} + tooltip={cacheWriteDisplay.tooltip} + /> + } + label={t("usage.cacheRead", "缓存命中")} + value={formatTokensShort(cacheRead, lang)} + accent="text-emerald-500" + /> + +
+
+ + {t("usage.cacheHitRate", "缓存命中率")} + + + {hitPercentLabel}% + +
+
+ +
+
@@ -336,21 +345,21 @@ function MiniStat({ }: MiniStatProps) { return (
{icon} - {label} + {label} {tooltip && ( - + )}
diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 8fb4a8256..af0a09d4e 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -1345,7 +1345,6 @@ "cacheTokens": "Cache Tokens", "realTotal": "Tokens Processed", "realTotalHint": "Input + Output + Cache Write + Cache Read", - "tokensSuffix": "tokens", "freshInput": "Fresh Input", "cacheHitRate": "Cache Hit Rate", "requestLogs": "Request Logs", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index c59ca40a3..45d2556ae 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -1345,7 +1345,6 @@ "cacheTokens": "キャッシュトークン", "realTotal": "実消費トークン", "realTotalHint": "Input + Output + キャッシュ書込 + キャッシュ命中", - "tokensSuffix": "tokens", "freshInput": "新規入力", "cacheHitRate": "キャッシュヒット率", "requestLogs": "リクエストログ", diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index 8ef165340..5e0e908cc 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json @@ -1291,7 +1291,6 @@ "cacheTokens": "快取 Token", "realTotal": "真實消耗 Tokens", "realTotalHint": "Input + Output + 快取建立 + 快取命中", - "tokensSuffix": "Tokens", "freshInput": "新增輸入", "cacheHitRate": "快取命中率", "requestLogs": "請求日誌", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index e416252d0..3eaabcaa1 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -1345,7 +1345,6 @@ "cacheTokens": "缓存 Token", "realTotal": "真实消耗 Tokens", "realTotalHint": "Input + Output + 缓存写入 + 缓存命中", - "tokensSuffix": "tokens", "freshInput": "新增输入", "cacheHitRate": "缓存命中率", "requestLogs": "请求日志",