diff --git a/web/static/css/style.css b/web/static/css/style.css index 8531cdcb..73677e60 100644 --- a/web/static/css/style.css +++ b/web/static/css/style.css @@ -7226,16 +7226,15 @@ header { } .mcp-stats-timeline-dot { - fill: #fff; - stroke: #3b82f6; - stroke-width: 1.5; + fill: #3b82f6; + stroke: none; cursor: crosshair; opacity: 0; - transition: opacity 0.12s ease; + transition: opacity 0.12s ease, r 0.12s ease; } .mcp-stats-timeline-dot--peak { - opacity: 0.7; + opacity: 0.85; } .mcp-stats-timeline__chart-wrap:hover .mcp-stats-timeline-dot, @@ -7244,9 +7243,7 @@ header { } .mcp-stats-timeline-dot.is-active { - fill: #2563eb; - stroke: #fff; - stroke-width: 2; + fill: #1d4ed8; } .mcp-stats-timeline-error { diff --git a/web/static/js/chat.js b/web/static/js/chat.js index ddfb60c0..2b3600cc 100644 --- a/web/static/js/chat.js +++ b/web/static/js/chat.js @@ -7468,8 +7468,11 @@ async function deleteSelectedConversations() { for (const id of ids) { await deleteConversation(id, true); // 跳过内部确认,因为批量删除时已经确认过了 } - closeBatchManageModal(); - loadConversationsWithGroups(); + // 删除后保持弹窗打开,便于继续管理剩余对话 + const selectAll = document.getElementById('batch-select-all'); + if (selectAll) { + selectAll.checked = false; + } } catch (error) { console.error('删除失败:', error); const failedMsg = typeof window.t === 'function' ? window.t('batchManageModal.deleteFailed') : '删除失败'; diff --git a/web/static/js/monitor.js b/web/static/js/monitor.js index ecabf5fd..ab4c296b 100644 --- a/web/static/js/monitor.js +++ b/web/static/js/monitor.js @@ -3887,7 +3887,7 @@ function buildMcpTimelineSvg(points, rangeKey) { const tipTime = formatMcpTimelineLabel(c.p.t, rangeKey, locale); const isPeak = c.i === peakIdx && (c.p.total || 0) > 0; const dotClass = 'mcp-stats-timeline-dot' + (isPeak ? ' mcp-stats-timeline-dot--peak' : ''); - return ``; @@ -3895,7 +3895,7 @@ function buildMcpTimelineSvg(points, rangeKey) { const peakC = coords[peakIdx]; const peakMarker = (peakC.p.total || 0) > 0 - ? `` + ? `` : ''; return `