From 5acd523d1b27476fb1e83883f903b045463402ba Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Mon, 3 Nov 2025 15:46:16 +0800 Subject: [PATCH] =?UTF-8?q?bugfix:=20=20=E5=A4=84=E7=90=86=E6=B5=81?= =?UTF-8?q?=E5=BC=8F=E6=8E=A5=E5=8F=A3token=E8=BF=87=E6=9C=9F=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/asistant/index.vue | 47 ++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/src/views/asistant/index.vue b/src/views/asistant/index.vue index 50bbd83..1f3f9c1 100644 --- a/src/views/asistant/index.vue +++ b/src/views/asistant/index.vue @@ -84,7 +84,7 @@ const handleSendMessage = (message: string): void => { type: 'text', content: message, timestamp: new Date().toISOString(), - sessionId: (userInfoStore.state.userInfo as any).id, + sessionId: Math.floor(Date.now() / 1000).toString(), self: true } messageList.value.push(userMessage) @@ -95,9 +95,11 @@ const handleSendMessage = (message: string): void => { const abort = new AbortController() const handleFetchMessage = (message: string) => { + const sessionId = Math.floor(Date.now() / 1000).toString() + const params = { message: message, - sessionId: (userInfoStore.state.userInfo as any).id, + sessionId: sessionId, gender: 'male' } @@ -107,7 +109,7 @@ const handleFetchMessage = (message: string) => { type: 'text', content: '', timestamp: new Date().toISOString(), - sessionId: (userInfoStore.state.userInfo as any).id + sessionId: sessionId } // 添加到消息列表 @@ -136,16 +138,51 @@ const handleFetchMessage = (message: string) => { credentials: 'include' }) .then(async (response) => { - console.log('response',response) + // 检查响应内容类型,判断是否为流式响应 + const contentType = response.headers.get('content-type') || '' + const isStreamResponse = contentType.includes('text/event-stream') || contentType.includes('stream') + if (!response.ok) { + // 非流式错误响应,使用 text() 读取错误信息 + const errorText = await response.text() + console.error('请求错误:', errorText) showToast({ message: `failed to fetch: ${response.status}`, position: 'top', icon: 'none' }) - throw new Error(`发起对话错误--- ${response.status}`) + throw new Error(`发起对话错误--- ${response.status}: ${errorText}`) } + // 不是流式响应,使用 text()读取错误信息 + if (!isStreamResponse) { + const text = await response.text() + + try { + const errorData = JSON.parse(text) + if (errorData.message || errorData.error) { + showToast({ + message: errorData.message || errorData.error || '请求失败', + position: 'top', + icon: 'none' + }) + } + } catch (e) { + // 如果不是 JSON,直接显示文本内容 + showToast({ + message: text || '请求失败', + position: 'top', + icon: 'none' + }) + throw new Error(text || '请求失败') + } + + isStreaming.value = false + currentStreamingMessage.value = null + return + } + + // 流式响应处理 let contentBody = '' let buffer = '' const reader = response.body?.getReader()