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