fix: stabilize usage loading and session search

This commit is contained in:
shiyue
2026-08-05 10:41:50 +08:00
parent c61b7434d2
commit 3f00cfe7a4
22 changed files with 109 additions and 47 deletions

View File

@@ -349,13 +349,13 @@
const usageDashboardStatus = $('#usage-dashboard-status');
const usageDashboardGeneratedAt = $('#usage-dashboard-generated-at');
const usageDashboardRefresh = $('#usage-dashboard-refresh');
const usageDashboardRefreshLabel = $('#usage-dashboard-refresh-label');
const usageDashboardPeriodWeek = $('#usage-dashboard-period-week');
const usageDashboardPeriodMonth = $('#usage-dashboard-period-month');
const usageDashboardPeriodCustom = $('#usage-dashboard-period-custom');
const usageDashboardFrom = $('#usage-dashboard-from');
const usageDashboardTo = $('#usage-dashboard-to');
const usageDashboardApply = $('#usage-dashboard-apply');
const usageDashboardLoading = $('#usage-dashboard-loading');
const usageDashboardError = $('#usage-dashboard-error');
const usageDashboardTrend = $('#usage-dashboard-trend');
const usageDashboardMcpStatus = $('#usage-dashboard-mcp-status');
@@ -4142,7 +4142,8 @@
title: result?.title || match?.title || '未命名会话',
projectName: result?.projectName || match?.projectName || '',
cwd: result?.cwd || match?.cwd || '',
updated: match?.timestamp || result?.updated || null,
updated: match?.timestamp || result?.matchTimestamp || result?.updated || null,
sessionUpdated: result?.sessionUpdated || result?.updated || null,
snippet: match?.snippet || result?.snippet || '',
messageIndex: Number.isFinite(Number(match?.messageIndex)) ? Number(match.messageIndex) : null,
});
@@ -4459,19 +4460,23 @@
}
function setUsageDashboardState(state, message = '') {
usageDashboardState.loading = state === 'loading';
const loading = state === 'loading';
usageDashboardState.loading = loading;
usageDashboardState.error = state === 'error' ? String(message || '统计查询失败') : '';
if (usageDashboardPanel) usageDashboardPanel.dataset.state = state;
if (usageDashboardLoading) usageDashboardLoading.hidden = state !== 'loading';
if (usageDashboardError) {
usageDashboardError.hidden = state !== 'error';
usageDashboardError.textContent = state === 'error' ? usageDashboardState.error : '';
}
if (usageDashboardRefresh) {
usageDashboardRefresh.disabled = state === 'loading';
usageDashboardRefresh.setAttribute('aria-busy', state === 'loading' ? 'true' : 'false');
const refreshText = loading ? '整理中' : '刷新';
usageDashboardRefresh.disabled = loading;
usageDashboardRefresh.setAttribute('aria-busy', loading ? 'true' : 'false');
usageDashboardRefresh.setAttribute('aria-label', loading ? '正在整理统计数据' : '刷新统计');
usageDashboardRefresh.title = loading ? '正在整理统计数据' : '刷新统计';
if (usageDashboardRefreshLabel) usageDashboardRefreshLabel.textContent = refreshText;
}
if (usageDashboardApply) usageDashboardApply.disabled = state === 'loading';
if (usageDashboardApply) usageDashboardApply.disabled = loading;
}
function formatUsageNumber(value) {

View File

@@ -24,7 +24,7 @@
document.documentElement.dataset.dividerTime = dividerTime;
})();
</script>
<link rel="stylesheet" href="style.css?v=20260803-usage-statistics-echarts">
<link rel="stylesheet" href="style.css?v=20260805-usage-loading-inline">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css">
</head>
<body>
@@ -164,7 +164,7 @@
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M21 12a9 9 0 0 0-15.12-6.6L3 8"></path><path d="M3 3v5h5"></path><path d="M3 12a9 9 0 0 0 15.12 6.6L21 16"></path><path d="M16 16h5v5"></path>
</svg>
<span>刷新</span>
<span id="usage-dashboard-refresh-label" aria-live="polite">刷新</span>
</button>
<button id="usage-dashboard-close" class="usage-dashboard__icon-button usage-dashboard__back" type="button" aria-label="返回聊天" title="返回聊天">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
@@ -196,7 +196,6 @@
</div>
<div class="usage-dashboard__body">
<div id="usage-dashboard-loading" class="usage-dashboard__loading" role="status" hidden>正在整理统计数据</div>
<div id="usage-dashboard-error" class="usage-dashboard__error" role="alert" hidden></div>
<section class="usage-dashboard__metric-grid" aria-label="统计概览">
@@ -387,6 +386,6 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.9.1/mermaid.min.js"></script>
<script src="vendor/echarts.min.js?v=5.6.0"></script>
<script src="app.js?v=20260803-usage-statistics-echarts"></script>
<script src="app.js?v=20260805-usage-loading-inline"></script>
</body>
</html>

View File

@@ -10209,7 +10209,6 @@ html[data-theme='gilded'] {
scrollbar-gutter: stable;
}
.usage-dashboard__loading,
.usage-dashboard__error {
margin-bottom: 14px;
padding: 10px 12px;
@@ -10220,18 +10219,6 @@ html[data-theme='gilded'] {
font-size: 12px;
}
.usage-dashboard__loading::before {
content: '';
display: inline-block;
width: 9px;
height: 9px;
margin-right: 8px;
border: 2px solid var(--usage-dashboard-border);
border-top-color: var(--usage-dashboard-accent);
border-radius: 50%;
animation: usageDashboardSpin 800ms linear infinite;
}
.usage-dashboard__error {
color: var(--usage-dashboard-danger);
border-color: color-mix(in srgb, var(--usage-dashboard-danger) 30%, transparent);
@@ -10812,7 +10799,6 @@ html[data-theme='gilded'] {
padding: 8px 14px 30px;
}
.usage-dashboard__loading,
.usage-dashboard__error {
margin-bottom: 10px;
}
@@ -11950,7 +11936,6 @@ html[data-theme='wasteland'] :is(
.usage-dashboard__dates input,
.usage-dashboard__metric,
.usage-dashboard__panel,
.usage-dashboard__loading,
.usage-dashboard__error,
.usage-dashboard__badge,
.usage-dashboard__row-action
@@ -11973,7 +11958,6 @@ html[data-theme='wasteland'] .usage-dashboard__metric {
@media (prefers-reduced-motion: reduce) {
.usage-dashboard,
.usage-dashboard__loading::before,
.usage-dashboard__refresh svg,
.usage-dashboard-open,
.usage-dashboard__icon-button,
@@ -11984,8 +11968,4 @@ html[data-theme='wasteland'] .usage-dashboard__metric {
transition: none !important;
scroll-behavior: auto !important;
}
.usage-dashboard__loading::before {
border-color: var(--usage-dashboard-accent);
}
}