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 @@
-
@@ -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;
}