From b7f9a7818ca7e6470b45134d6dada054d913bc74 Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Tue, 24 Mar 2026 15:45:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20sketch=E5=8D=A1=E7=89=87=E5=9B=BA?= =?UTF-8?q?=E5=AE=9A=E5=87=BA=E7=8E=B0=E5=9C=A8=E5=AF=B9=E8=AF=9D=E5=BA=95?= =?UTF-8?q?=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/home/agent/components/Agent.vue | 50 ++++++++++++----------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/src/views/home/agent/components/Agent.vue b/src/views/home/agent/components/Agent.vue index 76b7ae1..c3ad3d2 100644 --- a/src/views/home/agent/components/Agent.vue +++ b/src/views/home/agent/components/Agent.vue @@ -221,12 +221,17 @@ const decoder = new TextDecoder() let previousEventName = '' // 记录上一个事件名称 let hasReportStarted = false // 标记 report 是否已经开始 + + let hasSketchEvent = false try { let flag = true while (flag) { const { done, value } = await reader.read() if (done) { - // console.log('传输结束 end---', contentBody) + if (hasSketchEvent) { + aiMessage.text += `` + } + aiMessage.streaming = false aiMessage.loading = false isGenerating.value = false @@ -251,7 +256,7 @@ if (!hasReportStarted && eventName === 'report') { isGeneratingReport.value = true - contentBody += `123` + contentBody += `` hasReportStarted = true } @@ -319,20 +324,21 @@ // console.log('jsonData', jsonData) if (jsonData.webAddress) { aiMessage.webAddress = JSON.parse(jsonData.webAddress) - contentBody += `123` + contentBody += `` } if (jsonData.title) { emits('setTitle', jsonData.title) } if (hasSketch) { + hasSketchEvent = true sketchList.value.push({ [Object.keys(jsonData)[0]]: jsonData[Object.keys(jsonData)[0]] }) // 通知 Preview 有新 sketch 正在加载,传入 sketch 索引 MyEvent.emit('loading-sketch', sketchList.value.length - 1) MyEvent.emit('OpenSketch') - contentBody += `` + // contentBody += `` } if (eventName === 'report') { reportsContent.value += jsonData.report @@ -355,6 +361,7 @@ } } if (jsonData.type === 'end') { + console.log('end------hasSketch', hasSketch) aiMessage.streaming = false aiMessage.loading = false isGenerating.value = false @@ -364,7 +371,10 @@ } catch (e) { // 检查是否为纯文本 [DONE] if (jsonText.trim() === '[DONE]') { + console.log('done-----------hasSketch', hasSketch) + console.log('结束-----------------------') + aiMessage.text = contentBody aiMessage.streaming = false aiMessage.loading = false isGenerating.value = false @@ -463,11 +473,16 @@ // assistant 角色,拼接直到下一个 user let combinedContent = item.content || '' let combinedThinkingText = item.reasoning || '' + let combinedImageUrl = item.image_url || null // 继续往后找连续的 assistant 消息 let j = i + 1 while (j < dialogue.length && dialogue[j].role === 'assistant') { combinedContent += dialogue[j].content || '' combinedThinkingText += dialogue[j].reasoning || '' + // 如果有 image_url 则保留 + if (dialogue[j].image_url) { + combinedImageUrl = dialogue[j].image_url + } j++ } @@ -476,6 +491,7 @@ content: combinedContent, thinkingText: combinedThinkingText, text: combinedContent, + image_url: combinedImageUrl, isUser: false, id: result.length + 1, sessionId: sessionId @@ -512,7 +528,7 @@ } } - // 2. 收集 report 内容并保存到 localStorage + // 2. 收集 report 内容并保存到 sessionStorage let reportStr = '' session.dialogue?.forEach((item) => { if (item.report) { @@ -536,9 +552,7 @@ ancestorsList.push(...list) } -const setChatInfo = (info) => { - console.log('11111111111',info); - + const setChatInfo = (info) => { const initialData = agentStore.getInitialProjectData if (isGenerating.value || initialData) return @@ -556,39 +570,27 @@ const setChatInfo = (info) => { params.configParams.style = project.style params.configParams.temperature = project.temperature } - // 如果没有数据,直接返回 if (!data) { messageList.value = [] return } const { ancestors, current } = data - // 处理单个会话(ancestor 或 current) - const imgList = [] const ancestorsList = [] const idCounterRef = { value: 1 } - // 处理所有 ancestors ancestors?.forEach((item) => { processSession(item, imgList, ancestorsList, idCounterRef) }) - // 处理 current processSession(current, imgList, ancestorsList, idCounterRef) - // 延迟设置新数据,确保 UI 有时间响应清空操作 nextTick(() => { - // 找到每个 sessionId 对应的最后一项,插入sketch卡片 - const sessionLastIndexMap = new Map() - ancestorsList.forEach((item, index) => { - console.log('item', item) - // if (item.image_url) { - sessionLastIndexMap.set(item.sessionId, index) - // } - }) - sessionLastIndexMap.forEach((lastIndex) => { - ancestorsList[lastIndex].text += '' + ancestorsList.forEach((item) => { + if (item.image_url) { + item.text += `` + } }) messageList.value = [...ancestorsList]