From 463c43aae0a893583c4139b76bebf4df3d105c07 Mon Sep 17 00:00:00 2001 From: lzt404 <2596933790@qq.com> Date: Wed, 26 Aug 2026 01:21:22 +0800 Subject: [PATCH] style(usage): center table headers and content - center-align all usage record columns - align result badges consistently - hide the redundant bottom horizontal scrollbar --- src/pages/UsageRecordsPage.tsx | 60 +++++++++++++++++----------------- src/styles.css | 7 ++-- 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/pages/UsageRecordsPage.tsx b/src/pages/UsageRecordsPage.tsx index cc2435c..f5e2759 100644 --- a/src/pages/UsageRecordsPage.tsx +++ b/src/pages/UsageRecordsPage.tsx @@ -1017,21 +1017,21 @@ type EventColumnDef = { }; const EVENT_COLUMNS: readonly EventColumnDef[] = [ - { key: 'time', labelKey: 'usage.column.time', defaultWidth: 150, minWidth: 110, align: 'left' }, - { key: 'model', labelKey: 'usage.column.model', defaultWidth: 190, minWidth: 120, align: 'left' }, - { key: 'input', labelKey: 'usage.column.input', defaultWidth: 84, minWidth: 60, align: 'right' }, - { key: 'output', labelKey: 'usage.column.output', defaultWidth: 84, minWidth: 60, align: 'right' }, - { key: 'cache', labelKey: 'usage.column.cache', defaultWidth: 84, minWidth: 60, align: 'right' }, - { key: 'cacheRate', labelKey: 'usage.column.cacheRate', defaultWidth: 92, minWidth: 70, align: 'right' }, - { key: 'total', labelKey: 'usage.column.total', defaultWidth: 90, minWidth: 65, align: 'right' }, - { key: 'speed', labelKey: 'usage.column.speed', defaultWidth: 104, minWidth: 80, align: 'right' }, - { key: 'ttft', labelKey: 'usage.column.ttft', defaultWidth: 100, minWidth: 75, align: 'right' }, - { key: 'latency', labelKey: 'usage.column.latency', defaultWidth: 100, minWidth: 75, align: 'right' }, - { key: 'result', labelKey: 'usage.column.result', defaultWidth: 150, minWidth: 100, align: 'left' }, - { key: 'provider', labelKey: 'usage.column.provider', defaultWidth: 120, minWidth: 80, align: 'left' }, - { key: 'source', labelKey: 'usage.column.source', defaultWidth: 120, minWidth: 80, align: 'left' }, - { key: 'key', labelKey: 'usage.column.key', defaultWidth: 145, minWidth: 95, align: 'left' }, - { key: 'reasoning', labelKey: 'usage.column.reasoning', defaultWidth: 84, minWidth: 60, align: 'right' }, + { key: 'time', labelKey: 'usage.column.time', defaultWidth: 150, minWidth: 110, align: 'center' }, + { key: 'model', labelKey: 'usage.column.model', defaultWidth: 190, minWidth: 120, align: 'center' }, + { key: 'input', labelKey: 'usage.column.input', defaultWidth: 84, minWidth: 60, align: 'center' }, + { key: 'output', labelKey: 'usage.column.output', defaultWidth: 84, minWidth: 60, align: 'center' }, + { key: 'cache', labelKey: 'usage.column.cache', defaultWidth: 84, minWidth: 60, align: 'center' }, + { key: 'cacheRate', labelKey: 'usage.column.cacheRate', defaultWidth: 92, minWidth: 70, align: 'center' }, + { key: 'total', labelKey: 'usage.column.total', defaultWidth: 90, minWidth: 65, align: 'center' }, + { key: 'speed', labelKey: 'usage.column.speed', defaultWidth: 104, minWidth: 80, align: 'center' }, + { key: 'ttft', labelKey: 'usage.column.ttft', defaultWidth: 100, minWidth: 75, align: 'center' }, + { key: 'latency', labelKey: 'usage.column.latency', defaultWidth: 100, minWidth: 75, align: 'center' }, + { key: 'result', labelKey: 'usage.column.result', defaultWidth: 150, minWidth: 100, align: 'center' }, + { key: 'provider', labelKey: 'usage.column.provider', defaultWidth: 120, minWidth: 80, align: 'center' }, + { key: 'source', labelKey: 'usage.column.source', defaultWidth: 120, minWidth: 80, align: 'center' }, + { key: 'key', labelKey: 'usage.column.key', defaultWidth: 145, minWidth: 95, align: 'center' }, + { key: 'reasoning', labelKey: 'usage.column.reasoning', defaultWidth: 84, minWidth: 60, align: 'center' }, ] as const; const DEFAULT_EVENT_VISIBLE_COLUMNS: readonly EventColumnKey[] = [ @@ -1209,7 +1209,7 @@ function UsageResultCell({ record }: { record: UsageRecord }) { .filter(Boolean) .join(' · '); return ( - + {t(`usage.result.${state}`)} @@ -1231,13 +1231,13 @@ function UsageEventCell({ switch (columnKey) { case 'time': return ( - + {formatTime(record.timestamp)} ); case 'model': return ( - + {record.alias || record.model} {record.alias || record.reasoning_effort ? ( @@ -1250,45 +1250,45 @@ function UsageEventCell({ ); case 'provider': return ( - + {record.provider || '—'} ); case 'source': return ( - + {record.source_display || record.source || '—'} ); case 'key': return ( - + {record.api_key_remark || noRemarkLabel} {record.api_key_display || '—'} ); case 'input': return ( - + {compactNumber(record.tokens.input_tokens)} ); case 'output': return ( - + {compactNumber(record.tokens.output_tokens)} ); case 'reasoning': return ( - + {compactNumber(record.tokens.reasoning_tokens)} ); case 'cache': return ( 0 ? ` / Creation: ${record.tokens.cache_creation_tokens.toLocaleString()} tokens` @@ -1303,11 +1303,11 @@ function UsageEventCell({ inputTokens: record.tokens.input_tokens, cacheReadTokens: record.tokens.cache_read_tokens, }); - return {value}; + return {value}; } case 'total': return ( - + {compactNumber(record.tokens.total_tokens)} ); @@ -1315,13 +1315,13 @@ function UsageEventCell({ return ; case 'latency': return ( - + {compactNumber(record.latency_ms)} ms ); case 'ttft': return ( - + {record.ttft_ms == null ? '—' : `${compactNumber(record.ttft_ms)} ms`} ); @@ -1331,7 +1331,7 @@ function UsageEventCell({ latencyMs: record.latency_ms, ttftMs: record.ttft_ms, }); - return {value}; + return {value}; } } } diff --git a/src/styles.css b/src/styles.css index 4b1dbaa..04e636c 100644 --- a/src/styles.css +++ b/src/styles.css @@ -7556,10 +7556,13 @@ textarea:focus-visible { } /* Hide horizontal scrollbar on the table wrap so only the top scrollbar is shown */ +.usage-table-wrap::-webkit-scrollbar { + height: 0; +} + .usage-table-wrap::-webkit-scrollbar:horizontal { display: none; height: 0; - width: 0; } .usage-events-table { @@ -7767,7 +7770,7 @@ body.table-col-resizing * { .usage-events-table .usage-result-cell { overflow: hidden; - text-align: left; + text-align: center; } .usage-result-cell > small {