fix: 彻底修复RAG下消息不显示 - 用模块变量替代CSS选择器

根本原因:所有CSS选择器方案都依赖DOM位置关系,
而 appendSystemMessage 在 placeholder 之后插入 div 会破坏这种关系。

解决方案:用模块变量 currentPlaceholder 直接持有 placeholder DOM 引用,
updateLastAssistantMessage 直接读取该引用,完全不依赖选择器。

- appendAssistantPlaceholder: 设置 currentPlaceholder = div
- updateLastAssistantMessage: 使用 currentPlaceholder,首次调用移除 loading
- clearMessages: 清除 currentPlaceholder
This commit is contained in:
Metona
2026-04-05 00:38:35 +08:00
parent 1de1084173
commit 1e3f4d4ba5
+5 -5
View File
@@ -39,6 +39,7 @@ function getFileIcon(filename) {
let chatAreaEl, messagesContainerEl, emptyStateEl, scrollBtnEl;
let autoScroll = true; // 是否自动滚动到底部
let currentPlaceholder = null; // 当前流式消息的 placeholder 引用
export function initChatArea() {
chatAreaEl = document.querySelector('#chatArea');
@@ -221,11 +222,8 @@ export function appendMessageDOM(msg, index) {
/** 更新最后一条 assistant 消息(流式输出) */
export function updateLastAssistantMessage(content, think, stats, model) {
let lastMsg = messagesContainerEl.querySelector('.message.assistant.loading');
if (!lastMsg) {
// loading class 已在首次调用时移除,用 last-of-type 回退
lastMsg = messagesContainerEl.querySelector('.message.assistant:last-of-type');
}
// 使用 placeholder 引用,完全不依赖 CSS 选择器
const lastMsg = currentPlaceholder;
if (!lastMsg) return;
// 仅首次调用时移除 loading 指示器
@@ -306,6 +304,7 @@ export function appendAssistantPlaceholder() {
</div>
`;
messagesContainerEl.appendChild(div);
currentPlaceholder = div;
scrollToBottom();
}
@@ -328,6 +327,7 @@ export function getMessagesContainer() {
/** 清空消息 DOM */
export function clearMessages() {
messagesContainerEl.innerHTML = '';
currentPlaceholder = null;
}
/** 重置自动滚动(用户发送消息、新建会话时调用) */