修改前端
This commit is contained in:
parent
b932bf8ae0
commit
de8b06defe
|
|
@ -4,8 +4,8 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>RAG 聊天助手</title>
|
||||
<link rel="stylesheet" href="/static/chat/style.css?v=202601271553">
|
||||
<script src="/static/chat/script.js?v=202601271553"></script>
|
||||
<link rel="stylesheet" href="/static/chat/style.css?v=202601271705">
|
||||
<script src="/static/chat/script.js?v=202601271705"></script>
|
||||
<script src="/static/chat/marked.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ let currentUser = null; // 当前登录用户对象
|
|||
let isStreaming = false;
|
||||
let currentStreamResponse = null;
|
||||
let currentStreamReader = null;
|
||||
let currentAssistantMessageElement = null; // 保存当前助手消息元素
|
||||
|
||||
// API 基础 URL
|
||||
const API_BASE_URL = '/';
|
||||
|
|
@ -746,6 +747,7 @@ async function handleStreamResponse(response) {
|
|||
// 创建助手消息容器
|
||||
const now = new Date().toISOString();
|
||||
messageElement = createAssistantMessageContainer(now);
|
||||
currentAssistantMessageElement = messageElement; // 保存到全局变量
|
||||
|
||||
try {
|
||||
while (true) {
|
||||
|
|
@ -765,9 +767,16 @@ async function handleStreamResponse(response) {
|
|||
|
||||
} catch (error) {
|
||||
console.error('Error reading stream:', error);
|
||||
updateAssistantMessageContent(messageElement, `流式响应错误: ${error.message}`);
|
||||
// 检查是否是用户主动取消的错误
|
||||
if (error.name === 'AbortError' || error.message.includes('cancel')) {
|
||||
// 用户主动取消,不显示错误消息
|
||||
} else {
|
||||
// 其他错误,显示错误消息
|
||||
updateAssistantMessageContent(messageElement, `流式响应错误: ${error.message}`);
|
||||
}
|
||||
} finally {
|
||||
reader.releaseLock();
|
||||
currentAssistantMessageElement = null; // 重置全局变量
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -782,7 +791,7 @@ function createAssistantMessageContainer(time) {
|
|||
</div>
|
||||
<div class="message-content">
|
||||
<div class="message text">
|
||||
<div class="typing-dots" id="assistantTypingDots" style="display: flex;">
|
||||
<div class="typing-dots" id="assistantTypingDots" style="display: flex; align-items: center;">
|
||||
<div class="dot"></div>
|
||||
<div class="dot"></div>
|
||||
<div class="dot"></div>
|
||||
|
|
@ -835,12 +844,29 @@ async function stopStreamResponse() {
|
|||
currentStreamResponse = null;
|
||||
currentStreamReader = null;
|
||||
|
||||
// 隐藏打字指示器
|
||||
hideTypingIndicator();
|
||||
// 更新助手消息内容,替换打字指示器
|
||||
let assistantMessageElement = currentAssistantMessageElement;
|
||||
// 如果 currentAssistantMessageElement 为 null,尝试查找最新的助手消息元素
|
||||
if (!assistantMessageElement) {
|
||||
const messageElements = elements.messagesContainer.querySelectorAll('.message.assistant');
|
||||
if (messageElements.length > 0) {
|
||||
assistantMessageElement = messageElements[messageElements.length - 1];
|
||||
}
|
||||
}
|
||||
|
||||
if (assistantMessageElement) {
|
||||
updateAssistantMessageContent(assistantMessageElement, '流式响应已中止');
|
||||
}
|
||||
|
||||
// 重置全局变量
|
||||
currentAssistantMessageElement = null;
|
||||
|
||||
// 更新按钮状态
|
||||
updateSendButtonState(false);
|
||||
|
||||
// 滚动到底部
|
||||
scrollToBottom();
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error stopping stream:', error);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -490,6 +490,7 @@ body {
|
|||
|
||||
.message.text .typing-dots .dot:nth-child(3) {
|
||||
animation-delay: 0s;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
@keyframes typing {
|
||||
|
|
|
|||
Loading…
Reference in New Issue