From e934d77f95cb982f65c16410fd7f8ceb4212fd11 Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Tue, 10 Mar 2026 16:28:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?bugfix:=20=E8=BE=93=E5=85=A5=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E4=BC=9A=E6=90=BA=E5=B8=A6=E6=8A=A5=E5=91=8A=E6=A0=87?= =?UTF-8?q?=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/agent.ts | 23 ++++++++------------- src/stores/agent.ts | 25 ++++++++++------------- src/views/home/agent/components/Agent.vue | 16 ++++++++------- src/views/home/components/Input.vue | 11 +++++----- 4 files changed, 35 insertions(+), 40 deletions(-) diff --git a/src/api/agent.ts b/src/api/agent.ts index 5646e63..257e01e 100644 --- a/src/api/agent.ts +++ b/src/api/agent.ts @@ -8,15 +8,10 @@ export interface AgentParamsType { imageUrlList?: string[] // 图片URL列表 configParams: Record // 其他配置参数 token: string + needSuggestion?: boolean + useReport: bolean } -export const fetchAgentReply = (data: AgentParamsType): Promise => { - return request({ - url: '/api/ai-design/chat', - method: 'get', - data, - meta: { responseAll: true } - }) -} +export const chatUrl = '/api/ai-design/chat' export interface CreateProjectParamsType { type: string @@ -33,11 +28,11 @@ export const createProject = (data: CreateProjectParamsType): Promise => { * @param data 获取项目信息参数 * @param data.id 项目id * @returns 获取项目信息 -*/ + */ export const getProjectInfo = (data) => { return request({ url: `/api/project/${data.id}`, - method: 'get', + method: 'get' }) } @@ -47,7 +42,7 @@ export const getProjectInfo = (data) => { * @param params.page 页码 * @param params.size 每页数量 * @returns 获取项目版本列表 -*/ + */ export const getProjectList = (params) => { return request({ url: `/api/project/list`, @@ -66,7 +61,7 @@ export const getProjectList = (params) => { * @param data.style 项目风格 * @param data.temperature 项目温度 * @returns 修改项目信息 -*/ + */ export const updateProject = (id: string, data: Object) => { return request({ url: `/api/project/${id}`, @@ -78,10 +73,10 @@ export const updateProject = (id: string, data: Object) => { * 删除项目 * @param id 项目id * @returns 删除项目 -*/ + */ export const deleteProject = (id: string) => { return request({ url: `/api/project/${id}`, - method: 'delete', + method: 'delete' }) } diff --git a/src/stores/agent.ts b/src/stores/agent.ts index 658e586..34c458e 100644 --- a/src/stores/agent.ts +++ b/src/stores/agent.ts @@ -7,23 +7,20 @@ import MyEvent from '@/utils/myEvent' // Agent 项目初始数据 store +type InitialProjectData = { + text: string + images: Array<{ url: string; name: string }> + type: string + area: string + style: string + useReport:boolean + needSuggestion:boolean +} export const useAgentStore = defineStore('agent', () => { - const initialProjectData = ref<{ - text: string - images: Array<{ url: string; name: string }> - type: string - area: string - style: string - } | null>(null) + const initialProjectData = ref(null) // 保存项目初始数据 - const setInitialProjectData = (data: { - text: string - images: Array<{ url: string; name: string }> - type: string - area: string - style: string - }) => { + const setInitialProjectData = (data: InitialProjectData) => { initialProjectData.value = data } diff --git a/src/views/home/agent/components/Agent.vue b/src/views/home/agent/components/Agent.vue index cfacb7b..733e5c7 100644 --- a/src/views/home/agent/components/Agent.vue +++ b/src/views/home/agent/components/Agent.vue @@ -24,10 +24,9 @@ import { ref, reactive, computed, onUnmounted, onMounted, nextTick, watch } from 'vue' import List from './List.vue' import Input from '../../components/Input.vue' - import { fetchAgentReply } from '@/api/agent' + import { chatUrl } from '@/api/agent' import type { AgentParamsType } from '@/api/agent' - import { useUserInfoStore, useProjectStore } from '@/stores' - import { useAgentStore } from '@/stores/agent' + import { useUserInfoStore, useProjectStore, useAgentStore } from '@/stores' const userStore = useUserInfoStore() const agentStore = useAgentStore() @@ -54,6 +53,8 @@ message: '', token: userStore.state.token, versionID: '', + needSuggestion: false, + useReport: false, configParams: { type: '', region: '', @@ -99,6 +100,8 @@ style: initialData.style, temperature: 0.7 } + params.needSuggestion = initialData.needSuggestion || false + params.useReport = initialData.useReport handleSendMessage({ text: initialData.text, images: initialData.images, @@ -158,7 +161,7 @@ configParams: JSON.stringify(params.configParams) }) const BASEURL = import.meta.env.VITE_APP_URL - const response = await fetch(`${BASEURL}/api/ai-design/chat?${urlParams.toString()}`, { + const response = await fetch(`${BASEURL}${chatUrl}?${urlParams.toString()}`, { method: 'GET', signal: abortController.signal }) @@ -221,7 +224,7 @@ } buffer += decoder.decode(value, { stream: true }) - + // 优先按空行拆分事件块(SSE标准) let events = buffer.split(/\n\n/) buffer = events.pop() // 保留不完整块 @@ -469,11 +472,10 @@ // 延迟设置新数据,确保 UI 有时间响应清空操作 nextTick(() => { - messageList.value = [...ancestorsList, ...currentList] params.versionID = current?.id sketchList.value = imgList - console.log('11111111111111',params.versionID); + console.log('11111111111111', params.versionID) }) } diff --git a/src/views/home/components/Input.vue b/src/views/home/components/Input.vue index 0640ebd..f0529eb 100644 --- a/src/views/home/components/Input.vue +++ b/src/views/home/components/Input.vue @@ -20,7 +20,6 @@
-
{{ $t('Input.placeholder') }}
@@ -506,8 +505,9 @@ let node: Node | null while ((node = walker.nextNode())) { - if (node.parentElement?.classList.contains('custom-placeholder')) continue - if (node.parentElement?.classList.contains('editor-tag')) continue + // 使用 closest() 检查当前节点的祖先元素是否包含需要排除的 class + if (node.parentElement?.closest('.custom-placeholder')) continue + if (node.parentElement?.closest('.editor-tag')) continue text += node.textContent } @@ -732,14 +732,15 @@ ) const handleCreateProject = async () => { - // 这里可以添加创建项目的逻辑 if (!inputValue.value.trim()) { return } + const params = { type: typeValue.value, area: areaValue.value, style: styleValue.value, + useReport: reportTags.value.length > 0, temperature: 0.7 } const projectres = await createProject(params) @@ -1035,7 +1036,7 @@ min-height: 5rem; line-height: 1.4rem; } - .editor-placeholder{ + .editor-placeholder { font-family: 'Regular'; font-size: 1.4rem; padding: 0; From 5a07a6fa9f746e7a176f9eccbca9767115d40aaa Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Tue, 10 Mar 2026 16:57:04 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E4=BC=9A?= =?UTF-8?q?=E8=AF=9D=E5=8E=86=E5=8F=B2=E8=8E=B7=E5=8F=96=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/home/agent/components/Agent.vue | 19 +++++++++-------- src/views/home/agent/components/Preview.vue | 23 ++++++++++++++++----- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/views/home/agent/components/Agent.vue b/src/views/home/agent/components/Agent.vue index 733e5c7..89c9edf 100644 --- a/src/views/home/agent/components/Agent.vue +++ b/src/views/home/agent/components/Agent.vue @@ -374,9 +374,9 @@ while (i < dialogue.length) { const item = dialogue[i] - if (item.image_url) { - existingImgList.push(item.image_url) - } + // if (item.image_url) { + // existingImgList.push(item.image_url) + // } if (item.role === 'user') { // user 角色直接添加 @@ -394,9 +394,9 @@ // 继续往后找连续的 assistant 消息 let j = i + 1 while (j < dialogue.length && dialogue[j].role === 'assistant') { - if (dialogue[j].image_url) { - existingImgList.push(dialogue[j].image_url) - } + // if (dialogue[j].image_url) { + // existingImgList.push(dialogue[j].image_url) + // } combinedContent += dialogue[j].content || '' j++ } @@ -428,6 +428,7 @@ const setChatInfo = (info) => { const initialData = agentStore.getInitialProjectData if (isGenerating.value || initialData) return + console.log('info0----', info) const data = info.conversation let project = info.project @@ -451,11 +452,12 @@ const { ancestors, current } = data - const imgList = [] + let imgList = [] const ancestorsList = [] let ancestorsIdCounter = 1 if (ancestors) { ancestors.forEach((item) => { + imgList = imgList.concat(current.sketchIDAndUrl) const list = processDialogue(item.dialogue, 0, imgList) // 重新设置 id list.forEach((el) => { @@ -465,7 +467,7 @@ }) } const currentList = processDialogue(current?.dialogue, 0, imgList) - // 重新设置 id + imgList = imgList.concat(current.sketchIDAndUrl) currentList.forEach((el, index) => { el.id = index + 1 + ancestorsList.length }) @@ -475,7 +477,6 @@ messageList.value = [...ancestorsList, ...currentList] params.versionID = current?.id sketchList.value = imgList - console.log('11111111111111', params.versionID) }) } diff --git a/src/views/home/agent/components/Preview.vue b/src/views/home/agent/components/Preview.vue index 2743d80..628976a 100644 --- a/src/views/home/agent/components/Preview.vue +++ b/src/views/home/agent/components/Preview.vue @@ -10,7 +10,10 @@ :key="'sketch-item-' + index" > -
+
Edit
@@ -124,6 +127,9 @@ import Menu from './Menu.vue' import LoadingImg from '@/assets/images/sketch-loading.gif' import reportNull from '@/assets/images/reportNull.png' + import myEvent from '@/utils/myEvent' + import { useProjectStore } from '@/stores' + const projectStore = useProjectStore() // 存储每个图片的加载状态 const loadedStatus = reactive>({}) @@ -146,12 +152,19 @@ // 获取当前显示的图片源 const getImageSrc = (item: string, index: number) => { - return loadedStatus[index] ? item : LoadingImg + if (typeof item === 'string') { + return loadedStatus[index] ? item : LoadingImg + } + if (typeof item === 'object') { + return Object.values(item)[0] + } } - const handleClickEdit = () => { - // 编辑按钮点击逻辑 - console.log('Edit button clicked') + const handleClickEdit = (item: string) => { + const url = Object.values(item)[0] + const imgId = Object.keys(item)[0] + const nodeId = projectStore.state.nodeId + myEvent.emit('openFlowCanvas', { url, imgId, nodeId }) } const handleClickMenu = () => { // 菜单按钮点击逻辑