1
0
Просмотр исходного кода

[Mod 0000]修复AI助手在计划模式下部分情况下思考时间显示的问题

wangkeyi 3 недель назад
Родитель
Сommit
0c102b6829

+ 11 - 6
src/views/ventAI/manageAssistent/components/AiAssistantModal.vue

@@ -743,6 +743,7 @@
         console.error('提交答案失败:', error);
         message.error('提交失败,请重试');
         lastMsg.isLoading = false;
+        lastMsg.durationMs = (lastMsg.baseDurationMs || 0) + (lastMsg.generateStartTime ? Date.now() - lastMsg.generateStartTime : 0);
         if (!lastMsg.content) {
           lastMsg.content = '抱歉,提交请求失败,请稍后重试。';
         }
@@ -772,6 +773,8 @@
     const lastMsg = taskMessages[taskMessages.length - 1];
     if (!lastMsg || !lastMsg.isPendingApproval) return;
 
+    // 冻结累计耗时到 durationMs,避免取消后计时消失
+    lastMsg.durationMs = (lastMsg.baseDurationMs || 0) + (lastMsg.generateStartTime ? Date.now() - lastMsg.generateStartTime : 0);
     lastMsg.isPendingApproval = false;
     lastMsg.pendingApprovalData = undefined;
     lastMsg.isLoading = false;
@@ -1110,7 +1113,7 @@
         currentTask.messages = [...messages.value];
       }
     } finally {
-      await scrollToBottom();
+      await scrollToBottom(true);
     }
   };
 
@@ -1450,7 +1453,8 @@
       createdAt: now.toISOString(),
     };
     messages.value.push(userMsg);
-    await scrollToBottom();
+    await nextTick();
+    chatMessagesRef.value?.forceScrollToBottom();
 
     const aiMsgIndex = messages.value.length;
     const aiMsg: Message = {
@@ -1558,7 +1562,8 @@
       attachedFile: file,
     };
     messages.value.push(userMsg);
-    await scrollToBottom();
+    await nextTick();
+    chatMessagesRef.value?.forceScrollToBottom();
 
     const aiMsgIndex = messages.value.length;
     const aiMsg: Message = {
@@ -1653,12 +1658,12 @@
     }
   };
 
-  const scrollToBottom = async () => {
+  const scrollToBottom = async (force = false) => {
     await nextTick();
-    if (!chatMessagesRef.value?.isAtBottom) return;
+    if (!force && !chatMessagesRef.value?.isAtBottom) return;
     const el = chatMessagesRef.value?.messagesRef;
     if (el) {
-      el.scrollTop = el.scrollHeight;
+      el.scrollTop = el.scrollHeight - el.clientHeight;
     }
   };
 

+ 8 - 3
src/views/ventAI/manageAssistent/components/chatModal/ChatMessages.vue

@@ -177,7 +177,7 @@
                 </div>
               </div>
             </div>
-            <div v-if="message.isLoading" class="loading-dots">
+            <div v-show="message.isLoading" class="loading-dots">
               <span class="dot"></span>
               <span class="dot"></span>
               <span class="dot"></span>
@@ -642,14 +642,18 @@
   const scrollToBottom = () => {
     const el = messagesRef.value;
     if (el) {
-      el.scrollTop = el.scrollHeight;
+      el.scrollTop = el.scrollHeight - el.clientHeight;
     }
   };
 
   const forceScrollToBottom = () => {
     const el = messagesRef.value;
     if (el) {
-      el.scrollTop = el.scrollHeight;
+      el.scrollTop = el.scrollHeight - el.clientHeight;
+      // 使用 requestAnimationFrame 确保 DOM 渲染完成后再滚动一次
+      requestAnimationFrame(() => {
+        el.scrollTop = el.scrollHeight - el.clientHeight;
+      });
     }
     isAtBottom.value = true;
   };
@@ -1175,6 +1179,7 @@
           align-items: center;
           gap: 6px;
           padding: 4px 0;
+          min-height: 16px;
 
           .dot {
             width: 8px;