fix: 用 loading class 精确定位placeholder,修复RAG下loading不消失
上次用 :last-of-type 修复无效(:last-of-type 也是按元素类型div匹配, 系统消息也是div,一样命中不了placeholder)。 改用给 placeholder 加 .loading class 的方案: - appendAssistantPlaceholder 添加 .loading class - updateLastAssistantMessage 用 .message.assistant.loading 选择器 - 成功/失败后移除 .loading class 选择器不再依赖 DOM 位置,彻底不受 appendSystemMessage 影响。
This commit is contained in:
@@ -221,9 +221,10 @@ export function appendMessageDOM(msg, index) {
|
|||||||
|
|
||||||
/** 更新最后一条 assistant 消息(流式输出) */
|
/** 更新最后一条 assistant 消息(流式输出) */
|
||||||
export function updateLastAssistantMessage(content, think, stats, model) {
|
export function updateLastAssistantMessage(content, think, stats, model) {
|
||||||
const lastMsg = messagesContainerEl.querySelector('.message.assistant:last-of-type');
|
const lastMsg = messagesContainerEl.querySelector('.message.assistant.loading');
|
||||||
if (!lastMsg) return;
|
if (!lastMsg) return;
|
||||||
|
|
||||||
|
lastMsg.classList.remove('loading');
|
||||||
const loadingDots = lastMsg.querySelector('.loading-dots');
|
const loadingDots = lastMsg.querySelector('.loading-dots');
|
||||||
const loadingText = lastMsg.querySelector('.loading-text');
|
const loadingText = lastMsg.querySelector('.loading-text');
|
||||||
if (loadingDots) loadingDots.remove();
|
if (loadingDots) loadingDots.remove();
|
||||||
@@ -284,7 +285,7 @@ export function updateLastAssistantMessage(content, think, stats, model) {
|
|||||||
/** 追加临时的 assistant 消息占位 */
|
/** 追加临时的 assistant 消息占位 */
|
||||||
export function appendAssistantPlaceholder() {
|
export function appendAssistantPlaceholder() {
|
||||||
const div = document.createElement('div');
|
const div = document.createElement('div');
|
||||||
div.className = 'message assistant';
|
div.className = 'message assistant loading';
|
||||||
div.innerHTML = `
|
div.innerHTML = `
|
||||||
<div class="msg-avatar">🤖</div>
|
<div class="msg-avatar">🤖</div>
|
||||||
<div class="msg-body">
|
<div class="msg-body">
|
||||||
|
|||||||
@@ -511,11 +511,12 @@ ${ragContext}
|
|||||||
console.error('[InputArea] 流式聊天错误:', err);
|
console.error('[InputArea] 流式聊天错误:', err);
|
||||||
|
|
||||||
if (err.name === 'AbortError') {
|
if (err.name === 'AbortError') {
|
||||||
const placeholder = document.querySelector('#messagesContainer .message.assistant:last-of-type');
|
const placeholder = document.querySelector('#messagesContainer .message.assistant.loading');
|
||||||
const loadingDots = placeholder?.querySelector('.loading-dots');
|
const loadingDots = placeholder?.querySelector('.loading-dots');
|
||||||
const loadingText = placeholder?.querySelector('.loading-text');
|
const loadingText = placeholder?.querySelector('.loading-text');
|
||||||
if (loadingDots) loadingDots.remove();
|
if (loadingDots) loadingDots.remove();
|
||||||
if (loadingText) loadingText.remove();
|
if (loadingText) loadingText.remove();
|
||||||
|
placeholder?.classList.remove('loading');
|
||||||
|
|
||||||
const contentDiv = placeholder?.querySelector('.msg-content');
|
const contentDiv = placeholder?.querySelector('.msg-content');
|
||||||
|
|
||||||
@@ -547,11 +548,12 @@ ${ragContext}
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const placeholder = document.querySelector('#messagesContainer .message.assistant:last-of-type');
|
const placeholder = document.querySelector('#messagesContainer .message.assistant.loading');
|
||||||
const loadingDots = placeholder?.querySelector('.loading-dots');
|
const loadingDots = placeholder?.querySelector('.loading-dots');
|
||||||
const loadingText = placeholder?.querySelector('.loading-text');
|
const loadingText = placeholder?.querySelector('.loading-text');
|
||||||
if (loadingDots) loadingDots.remove();
|
if (loadingDots) loadingDots.remove();
|
||||||
if (loadingText) loadingText.remove();
|
if (loadingText) loadingText.remove();
|
||||||
|
placeholder?.classList.remove('loading');
|
||||||
|
|
||||||
const contentDiv = placeholder?.querySelector('.msg-content');
|
const contentDiv = placeholder?.querySelector('.msg-content');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user