diff --git a/index.html b/index.html index f141c3e..8576aba 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,7 @@ diff --git a/src/common/WebSocketManager.ts b/src/common/WebSocketManager.ts index 95c8259..b082232 100644 --- a/src/common/WebSocketManager.ts +++ b/src/common/WebSocketManager.ts @@ -113,22 +113,46 @@ export class WebSocketManager { await this.connect() } + // 改进方案:让connect()真正等待连接 async connect(): Promise { - if (this.isConnecting || this.connectionState) return - this.isConnecting = true - - try { - this.ws = new WebSocket(this.wsUrl, this.protocols) - console.log('WebSocket connecting to:', this.wsUrl) - this.ws.onopen = this.handleOpen - this.ws.onmessage = this.handleMessage - this.ws.onclose = this.handleClose - this.ws.onerror = this.handleError - } catch (error) { - this.isConnecting = false - this.safeCall('onError', error) - this.scheduleReconnect() + console.log('[WebSocket] connect() called, isConnecting:', this.isConnecting, 'connectionState:', this.connectionState) + if (this.isConnecting || this.connectionState) { + console.log('[WebSocket] Already connecting or connected, returning early') + return } + this.isConnecting = true + console.log('[WebSocket] Starting connection...') + + return new Promise((resolve, reject) => { + try { + console.log('[WebSocket] About to create new WebSocket with URL:', this.wsUrl) + this.ws = new WebSocket(this.wsUrl, this.protocols) + console.log('[WebSocket] WebSocket object created, readyState:', this.ws?.readyState) + + // 包装handleOpen以resolve Promise + this.ws.onopen = (event: Event) => { + console.log('[WebSocket] onopen event fired') + this.handleOpen(event) + resolve() // ← 真正的连接成功 + } + + this.ws.onmessage = this.handleMessage + this.ws.onclose = (event: CloseEvent) => { + console.log('[WebSocket] onclose event fired, code:', event.code, 'reason:', event.reason) + this.handleClose(event) + } + this.ws.onerror = (error: Event) => { + console.log('[WebSocket] onerror event fired', error) + this.handleError(error) + reject(error) // ← Promise拒绝 + } + } catch (error) { + this.isConnecting = false + this.safeCall('onError', error) + this.scheduleReconnect() + reject(error) + } + }) } private handleOpen = (event: Event): void => { diff --git a/src/renderer/views/home/ChatBox.vue b/src/renderer/views/home/ChatBox.vue index 514c792..d1b3a04 100644 --- a/src/renderer/views/home/ChatBox.vue +++ b/src/renderer/views/home/ChatBox.vue @@ -24,12 +24,12 @@ -
+
本回答由 AI 生成
-
@@ -38,7 +38,6 @@
-
@@ -318,6 +317,7 @@ const initWebSocket = async () => { // 处理WebSocket消息 const handleWebSocketMessage = (data: any) => { + console.log("收到WebSocket消息:", data); // 验证关键字段(若服务端传回 conversationId/agentId,则校验是否属于当前会话) if (data.conversationId && data.conversationId !== conversationId.value) { console.warn("收到不属于当前会话的消息,忽略", data.conversationId); @@ -374,6 +374,7 @@ const handleWebSocketMessage = (data: any) => { // 处理完成状态 if (data.finish) { + chatMsgList.value[aiMsgIndex].finished = data.finish; const msg = chatMsgList.value[aiMsgIndex].messageContent; if (!msg || chatMsgList.value[aiMsgIndex].isLoading) { chatMsgList.value[aiMsgIndex].messageContent = "未获取到内容,请重试"; diff --git a/src/renderer/views/home/index.vue b/src/renderer/views/home/index.vue index 75111b1..15de520 100644 --- a/src/renderer/views/home/index.vue +++ b/src/renderer/views/home/index.vue @@ -3,8 +3,8 @@
- - + +
diff --git a/src/renderer/views/home/model/ChatModel.ts b/src/renderer/views/home/model/ChatModel.ts index a123c05..107e976 100644 --- a/src/renderer/views/home/model/ChatModel.ts +++ b/src/renderer/views/home/model/ChatModel.ts @@ -18,6 +18,8 @@ export class ChatMessage { messageContent: string; // 是否加载中 isLoading?: boolean; + // 是否完成 + finished?: boolean; // 工具调用信息 toolCall?: any; // 问题信息 @@ -28,13 +30,15 @@ export class ChatMessage { messageRole: MessageRole, messageContent: string, isLoading: boolean = false, + finished: boolean = false, toolCall?: any, question?: any ) { + this.messageId = messageId; this.messageRole = messageRole; this.messageContent = messageContent; + this.finished = finished; this.isLoading = isLoading; - this.messageId = messageId; this.toolCall = toolCall; this.question = question; }