diff --git a/src/renderer/components/token-dashboard.ts b/src/renderer/components/token-dashboard.ts index 8571ae9..a232a6f 100644 --- a/src/renderer/components/token-dashboard.ts +++ b/src/renderer/components/token-dashboard.ts @@ -206,7 +206,6 @@ function renderGlobalOverview(stats: AllSessionsTokenStats): void { const overviewEl = dashboardModalEl.querySelector('#tdOverview')!; overviewEl.innerHTML = ` -
🌍
${formatTokenCount(totalTokens)}
@@ -228,14 +227,11 @@ function renderGlobalOverview(stats: AllSessionsTokenStats): void {
${formatDuration(totals.total_duration)}
总推理耗时
-
-
📊
${formatTokenCount(avgPerRound)}
平均 Token/轮
-
`; } @@ -303,6 +299,34 @@ function renderBarChart( } } +/** 渲染全局柱状图(按会话) */ +function renderGlobalChart(stats: AllSessionsTokenStats): void { + const chartEl = dashboardModalEl.querySelector('#tdChart')!; + const barsEl = chartEl.querySelector('.td-chart-bars') as HTMLElement | null; + const savedScrollLeft = barsEl?.scrollLeft ?? 0; + + const chartTitleEl = dashboardModalEl.querySelector('#tdChartTitle'); + if (chartTitleEl) chartTitleEl.textContent = '📈 Token 消耗趋势 — 按会话'; + + const sessions = stats.sessions; + if (sessions.length === 0) { + chartEl.innerHTML = '
暂无数据
'; + return; + } + + // 按创建时间正序排列,取最近 30 个会话 + const sorted = [...sessions].sort((a, b) => a.created_at - b.created_at).slice(-30); + + const chartData = sorted.map(s => ({ + label: s.title.length > 10 ? s.title.slice(0, 10) + '…' : s.title, + input: s.total_input, + output: s.total_output, + tooltip: `${s.title} · 模型 ${s.model} · 输入 ${formatTokenCount(s.total_input)} + 输出 ${formatTokenCount(s.total_output)} = ${formatTokenCount(s.total_input + s.total_output)} tokens · ${s.round_count} 轮`, + })); + + renderBarChart(chartEl, chartData, '按会话', `最近 ${sorted.length} 个会话`, savedScrollLeft); +} + /** 渲染全局明细表格 */ function renderGlobalTable(stats: AllSessionsTokenStats): void { const tableTitleEl = dashboardModalEl.querySelector('#tdTableTitle'); @@ -353,7 +377,6 @@ function renderSessionView(): void { // 概览区域 const overviewEl = dashboardModalEl.querySelector('#tdOverview')!; overviewEl.innerHTML = ` -
🔥
${formatTokenCount(totalTokens)}
@@ -375,14 +398,11 @@ function renderSessionView(): void {
${formatDuration(totalDurationNs)}
总推理耗时
-
-
🤖
${session?.model || '-'}
当前模型
-
`; // 柱状图