Sfoglia il codice sorgente

[Bugfix 0000] 修复AI智能助手在对话完成时仍然在loading状态的bug

wangkeyi 4 settimane fa
parent
commit
bc9dfb4652

+ 12 - 8
src/views/ventAI/manageAssistent/components/AiAssistantModal.vue

@@ -231,12 +231,11 @@
 
           const existing = taskList.value.find((t) => t.id === apiTask.id);
           if (existing) {
-            mergedTasks.push({
-              ...apiTask,
-              messages: existing.messages,
-              attachedFiles: existing.attachedFiles,
-              wordUrl: existing.wordUrl,
-            });
+            // 原地更新以保持对象引用,避免流式回调持有的任务引用失效(isStreaming 等状态丢失)
+            existing.name = apiTask.name;
+            existing.updatedAt = apiTask.updatedAt;
+            existing.sortOrder = apiTask.sortOrder;
+            mergedTasks.push(existing);
           } else {
             mergedTasks.push(apiTask);
           }
@@ -735,6 +734,8 @@
       console.error('拒绝操作失败:', error);
     }
 
+    rejectTask.isStreaming = false;
+
     if (currentTaskId.value === rejectTask.id) {
       messages.value = rejectTask.messages;
       await scrollToBottom();
@@ -1237,6 +1238,7 @@
           timestamp: Date.now(),
         });
         aiMsg.isLoading = false;
+        streamingTask.isStreaming = false;
         // 后端未返回耗时,冻结前端伪计时
         aiMsg.durationMs = (aiMsg.baseDurationMs || 0) + (aiMsg.generateStartTime ? Date.now() - aiMsg.generateStartTime : 0);
         break;
@@ -1271,6 +1273,8 @@
         const elapsedMs = (aiMsg.baseDurationMs || 0) + (aiMsg.generateStartTime ? Date.now() - aiMsg.generateStartTime : 0);
         aiMsg.baseDurationMs = elapsedMs;
         aiMsg.isLoading = false;
+        // 流已结束,等待审批;批准继续时 handleApprove 会重新置为流式中
+        streamingTask.isStreaming = false;
         aiMsg.isPendingApproval = true;
         const interruptSessionId = data.session_id || streamingTask.sessionId;
         aiMsg.pendingApprovalData = {
@@ -1419,7 +1423,7 @@
         activeAbortController.value = null;
       }
       streaming.value = false;
-      const originTask = taskList.value.find((t) => t.id === originTaskId);
+      // 任务在流结束时可能已被改名为后端 session_id,用发送时捕获的对象引用重置状态
       if (originTask) originTask.isStreaming = false;
     }
   };
@@ -1530,7 +1534,7 @@
         activeAbortController.value = null;
       }
       streaming.value = false;
-      const originTask = taskList.value.find((t) => t.id === originTaskId);
+      // 任务在流结束时可能已被改名为后端 session_id,用发送时捕获的对象引用重置状态
       if (originTask) originTask.isStreaming = false;
     }
   };