From 6a70134a05fffff6abb0ef2e120db2d551894df8 Mon Sep 17 00:00:00 2001 From: dfhfg123 <3247895009@qq.com> Date: Thu, 26 Jun 2025 16:07:42 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E4=B8=8B=E4=BD=BF=E7=94=A8view=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bizyui/js/model_apply.js | 79 ++++++++++++++-------------- src/components/assistant/Sidebar.vue | 28 +++++++--- 2 files changed, 62 insertions(+), 45 deletions(-) diff --git a/bizyui/js/model_apply.js b/bizyui/js/model_apply.js index 4fe7d04e..dcfa85ef 100644 --- a/bizyui/js/model_apply.js +++ b/bizyui/js/model_apply.js @@ -34,53 +34,39 @@ const NodeInfoLogger = (function() { return `${baseUrl}?filename=${filename}&subfolder=&type=${type}&rand=${Math.random()}`; }; - // 获取图片并转换为base64 + // 获取图片并转换为base64(根据 server_mode 判断逻辑) const getImageAsBase64 = async (filename, type) => { try { // 检查服务器模式 const serverModeResponse = await fetch("/bizyair/server_mode"); const serverModeData = await serverModeResponse.json(); - let token = null; - if (serverModeData.data.server_mode) { - // 服务器模式,需要token - token = await new Promise((resolve) => { - const checkToken = () => { - const token = getCookie("bizy_token"); - if (token) { - clearInterval(timer); - resolve(token); - } - }; - - const timer = setInterval(checkToken, 300); - checkToken(); // 立即执行一次检查 - }); + // 非服务器模式下,如果 filename 已经是 base64 数据,直接返回 + if (!serverModeData.data.server_mode && filename.startsWith('data:')) { + console.log('本地模式:filename 已经是 base64 数据,直接返回'); + return filename; } - - const imageUrl = buildImageUrl(filename, type); - const headers = {}; - if (token) { - headers["Authorization"] = token; + + let imageUrl; + let headers = {}; + + if (serverModeData.data.server_mode) { + // 服务器模式,改为请求后端转发接口 + imageUrl = `/bizyair/proxy_view?filename=${encodeURIComponent(filename)}`; + } else { + // 本地模式,使用原有 buildImageUrl + imageUrl = buildImageUrl(filename, type); } - const response = await fetch(imageUrl, { - headers: headers - }); + const response = await fetch(imageUrl, { headers }); if (!response.ok) { throw new Error(`获取图片失败: ${response.status} ${response.statusText}`); } const blob = await response.blob(); - - // 将blob转为File对象 + // 转 base64 const file = new File([blob], filename, { type: blob.type }); - - // 使用formatToWebp进行压缩 const { base64: compressedBase64 } = await formatToWebp(file); - return compressedBase64; - - } catch (error) { console.error('获取图片并转换为base64失败:', error); return null; @@ -121,17 +107,32 @@ const NodeInfoLogger = (function() { const blob = new Blob([byteArray], { type: mimeType || base64.split(':')[1].split(';')[0] }) return new File([blob], filename, { type: blob.type }) } - // 构建图片信息对象 - const buildImageInfo = (imageData) => { + // 构建图片信息对象(根据 server_mode 判断逻辑) + const buildImageInfo = async (imageData) => { if (!imageData?.filename) return null; - - // 根据节点类型确定图片类型 - const type = imageData.type || 'temp'; + // 检查服务器模式 + const serverModeResponse = await fetch("/bizyair/server_mode"); + const serverModeData = await serverModeResponse.json(); + const type = imageData.type || 'temp'; const path = `/${type}/${imageData.filename}`; - + let url; + + if (serverModeData.data.server_mode) { + // 服务器模式,使用 view 接口 + url = `/view?filename=${encodeURIComponent(imageData.filename)}`; + } else { + // 本地模式,如果 filename 是 base64 数据,直接使用 + if (imageData.filename.startsWith('data:')) { + url = imageData.filename; + } else { + // 否则使用 buildImageUrl 构建 URL + url = buildImageUrl(imageData.filename, type); + } + } + return { filename: imageData.filename, - url: buildImageUrl(imageData.filename, type), + url: url, path: path, type: type }; @@ -252,7 +253,7 @@ const NodeInfoLogger = (function() { // 使用异步IIFE处理图片,不阻塞主流程 (async () => { try { - const imageInfo = buildImageInfo(this.images[0]); + const imageInfo = await buildImageInfo(this.images[0]); // 检查是否存在全局bizyAirLib对象及logNodeInfo函数 if (typeof bizyAirLib !== 'undefined' && typeof bizyAirLib.logNodeInfo === 'function') { diff --git a/src/components/assistant/Sidebar.vue b/src/components/assistant/Sidebar.vue index 795e23f7..b23a5b28 100644 --- a/src/components/assistant/Sidebar.vue +++ b/src/components/assistant/Sidebar.vue @@ -53,7 +53,8 @@ v-if=" message.role === 'assistant' && sidebarStore.nodeInfo && - canApplyToNode(sidebarStore.nodeInfo) + canApplyToNode(sidebarStore.nodeInfo) && + !serverMode " class="image-actions" > @@ -261,7 +262,7 @@ // 获取当前时间格式化字符串 const getCurrentTime = () => { - const now = new Date() + const now = new Date() const hours = now.getHours().toString().padStart(2, '0') const minutes = now.getMinutes().toString().padStart(2, '0') return `${hours}:${minutes}` @@ -344,10 +345,13 @@ } } + // 服务端模式 + const serverMode = ref(false) + // 生图功能 const isGeneratingImage = ref(false) - const generateImageAction = () => { + const generateImageAction = async () => { if (isLoading.value) return // 在输入框中添加生成图片前缀 @@ -426,7 +430,8 @@ // 生成成功后,添加带图片的助手消息 const assistantMessage = { role: 'assistant' as const, - content: `已为您生成图片(点击LoadImage节点可以应用)`, + // 服务端模式下只展示"已为您生成图片" + content: serverMode.value ? '已为您生成图片' : '已为您生成图片(点击LoadImage节点可以应用)', time: getCurrentTime(), hasImage: true, image: imageUrl @@ -570,9 +575,9 @@ } ) } catch (error) { - console.error('请求过程出错:', error) + console.error('请求过程出错:', error) - const errorMsgTime = getCurrentTime() + const errorMsgTime = getCurrentTime() // 添加错误消息 chatMessages.value.push({ @@ -835,6 +840,17 @@ } chatMessages.value = [welcomeMessage] + + // 异步获取 server_mode + ;(async () => { + try { + const res = await fetch('/bizyair/server_mode') + const data = await res.json() + serverMode.value = !!data?.data?.server_mode + } catch (e) { + serverMode.value = false + } + })() }) From c2ccfbc2c04e0c62405e7fa55d017916cf5e039d Mon Sep 17 00:00:00 2001 From: dfhfg123 <3247895009@qq.com> Date: Thu, 26 Jun 2025 16:27:13 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index fd9d1a5a..1fc5b820 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.2.14 +1.2.15 From a9af4bef223c2e5e970f0846a2accd743359729d Mon Sep 17 00:00:00 2001 From: dfhfg123 <116055578+dfhfg123@users.noreply.github.com> Date: Thu, 26 Jun 2025 08:29:47 +0000 Subject: [PATCH 3/3] auto prettier format code --- src/components/assistant/Sidebar.vue | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/assistant/Sidebar.vue b/src/components/assistant/Sidebar.vue index b23a5b28..07465b70 100644 --- a/src/components/assistant/Sidebar.vue +++ b/src/components/assistant/Sidebar.vue @@ -262,7 +262,7 @@ // 获取当前时间格式化字符串 const getCurrentTime = () => { - const now = new Date() + const now = new Date() const hours = now.getHours().toString().padStart(2, '0') const minutes = now.getMinutes().toString().padStart(2, '0') return `${hours}:${minutes}` @@ -431,7 +431,9 @@ const assistantMessage = { role: 'assistant' as const, // 服务端模式下只展示"已为您生成图片" - content: serverMode.value ? '已为您生成图片' : '已为您生成图片(点击LoadImage节点可以应用)', + content: serverMode.value + ? '已为您生成图片' + : '已为您生成图片(点击LoadImage节点可以应用)', time: getCurrentTime(), hasImage: true, image: imageUrl @@ -575,9 +577,9 @@ } ) } catch (error) { - console.error('请求过程出错:', error) + console.error('请求过程出错:', error) - const errorMsgTime = getCurrentTime() + const errorMsgTime = getCurrentTime() // 添加错误消息 chatMessages.value.push({