From f3589ae0571fe55c0335f140767bc926a690dc13 Mon Sep 17 00:00:00 2001 From: Metona Date: Sun, 5 Apr 2026 00:22:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20RAG=E5=BC=80=E5=90=AF=E6=97=B6AI?= =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E5=90=8Eloading=E5=8A=A8=E7=94=BB=E4=B8=8D?= =?UTF-8?q?=E6=B6=88=E5=A4=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:appendSystemMessage() 在 assistant placeholder 之后插入了一个无 .message class 的 div, 导致 CSS 选择器 .message.assistant:last-child 无法命中 placeholder(它不再是 :last-child)。 updateLastAssistantMessage() 返回 null,loading 动画永远不会被移除。 修复:将 3 处 :last-child 改为 :last-of-type,使选择器基于元素类型(div)而非精确的最后一个子节点匹配。 --- js/components/chat-area.js | 2 +- js/components/input-area.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/js/components/chat-area.js b/js/components/chat-area.js index 7743af3..b9abb5a 100644 --- a/js/components/chat-area.js +++ b/js/components/chat-area.js @@ -221,7 +221,7 @@ export function appendMessageDOM(msg, index) { /** 更新最后一条 assistant 消息(流式输出) */ export function updateLastAssistantMessage(content, think, stats, model) { - const lastMsg = messagesContainerEl.querySelector('.message.assistant:last-child'); + const lastMsg = messagesContainerEl.querySelector('.message.assistant:last-of-type'); if (!lastMsg) return; const loadingDots = lastMsg.querySelector('.loading-dots'); diff --git a/js/components/input-area.js b/js/components/input-area.js index 436a6a1..7411eae 100644 --- a/js/components/input-area.js +++ b/js/components/input-area.js @@ -511,7 +511,7 @@ ${ragContext} console.error('[InputArea] 流式聊天错误:', err); if (err.name === 'AbortError') { - const placeholder = document.querySelector('#messagesContainer .message.assistant:last-child'); + const placeholder = document.querySelector('#messagesContainer .message.assistant:last-of-type'); const loadingDots = placeholder?.querySelector('.loading-dots'); const loadingText = placeholder?.querySelector('.loading-text'); if (loadingDots) loadingDots.remove(); @@ -547,7 +547,7 @@ ${ragContext} return; } - const placeholder = document.querySelector('#messagesContainer .message.assistant:last-child'); + const placeholder = document.querySelector('#messagesContainer .message.assistant:last-of-type'); const loadingDots = placeholder?.querySelector('.loading-dots'); const loadingText = placeholder?.querySelector('.loading-text'); if (loadingDots) loadingDots.remove();