From d8d9f09bf41ef715d3ac21d648ccb1c96aba55ff Mon Sep 17 00:00:00 2001
From: "X1627315083@163.com" <1627315083@qq.com>
Date: Tue, 24 Mar 2026 13:58:36 +0800
Subject: [PATCH 01/10] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8D=A1=E7=89=87?=
=?UTF-8?q?=E4=BC=9A=E5=88=A0=E9=99=A4=E5=8D=A1=E7=89=87=E9=93=BE=E8=B7=AF?=
=?UTF-8?q?=E6=89=80=E6=9C=89=E7=94=9F=E6=88=90=E8=8A=82=E7=82=B9=EF=BC=8C?=
=?UTF-8?q?=E7=89=88=E6=9C=AC=E6=A0=91=E6=96=B0=E5=A2=9E=E7=82=B9=E5=87=BB?=
=?UTF-8?q?=E9=81=AE=E7=BD=A9=E5=85=B3=E9=97=AD=E7=89=88=E6=9C=AC=E6=A0=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../components/nodes/cards/cards-select.vue | 4 +-
.../components/nodes/cards/fast-mode.vue | 12 +--
.../components/nodes/cards/index.vue | 14 ++--
.../components/nodes/cards/to-3d-model.vue | 6 +-
.../components/nodes/cards/to-3view.vue | 4 +-
.../components/nodes/result-image.vue | 7 --
.../Canvas/FlowCanvas/manager/EventManager.ts | 2 +-
.../Canvas/FlowCanvas/manager/NodeManager.ts | 3 +-
.../Canvas/FlowCanvas/manager/StateManager.ts | 80 +++++++++++++------
src/lang/en.ts | 4 +-
src/lang/zh-cn.ts | 3 +-
.../agent/components/versionTree/index.vue | 1 -
12 files changed, 85 insertions(+), 55 deletions(-)
diff --git a/src/components/Canvas/FlowCanvas/components/nodes/cards/cards-select.vue b/src/components/Canvas/FlowCanvas/components/nodes/cards/cards-select.vue
index 04ba1aa..bdc907b 100644
--- a/src/components/Canvas/FlowCanvas/components/nodes/cards/cards-select.vue
+++ b/src/components/Canvas/FlowCanvas/components/nodes/cards/cards-select.vue
@@ -70,13 +70,13 @@
const id = props.node.id
if (!id) return
const superiorID = props.node.data.superiorID
+ stateManager.deleteNode(id)
if(v.secondaryMenu){
nodeManager.createCardsSelect({
data: {
tier: props.node.data?.tier,
superiorID,
isActive: props.node.data?.isActive,
- originalImage: props.node.data?.originalImage,
secondaryMenu: v.secondaryMenu,
createIndexPosition: props.node.data.createIndexPosition,
}
@@ -89,11 +89,9 @@
superiorID,
isActive: props.node.data?.isActive,
createIndexPosition: props.node.data.createIndexPosition,
- originalImage: props.node.data?.originalImage,
}
})
}
- stateManager.deleteNode(id)
}
defineExpose({})
diff --git a/src/components/Canvas/FlowCanvas/components/nodes/cards/fast-mode.vue b/src/components/Canvas/FlowCanvas/components/nodes/cards/fast-mode.vue
index bdf6c78..949b7ef 100644
--- a/src/components/Canvas/FlowCanvas/components/nodes/cards/fast-mode.vue
+++ b/src/components/Canvas/FlowCanvas/components/nodes/cards/fast-mode.vue
@@ -9,24 +9,26 @@
\ No newline at end of file
+ :deep(.report-card) {
+ width: 52.5rem;
+ height: 8rem;
+ box-sizing: border-box;
+ }
+
diff --git a/src/views/home/components/Input.vue b/src/views/home/components/Input.vue
index f3062d1..02650ff 100644
--- a/src/views/home/components/Input.vue
+++ b/src/views/home/components/Input.vue
@@ -35,7 +35,7 @@
-
+
Date: Tue, 24 Mar 2026 15:34:07 +0800
Subject: [PATCH 05/10] fix
---
.../Canvas/FlowCanvas/manager/StateManager.ts | 10 ++++++----
src/components/Canvas/components/fullscreen-dialog.vue | 4 ++--
src/lang/en.ts | 1 +
src/lang/zh-cn.ts | 1 +
.../agent/components/versionTree/tree/view2/index.vue | 2 +-
5 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/components/Canvas/FlowCanvas/manager/StateManager.ts b/src/components/Canvas/FlowCanvas/manager/StateManager.ts
index 0146a23..5165bb4 100644
--- a/src/components/Canvas/FlowCanvas/manager/StateManager.ts
+++ b/src/components/Canvas/FlowCanvas/manager/StateManager.ts
@@ -93,7 +93,7 @@ export class StateManager {
this.nodes.value.forEach((node, index) => {
const superiorID = node.data.superiorID;
const isSuperior = this.nodes.value.some((v) => v.id === superiorID)
- if (superiorID && isSuperior) {
+ if (isSuperior) {
const source = node.data.superiorID
const target = node.id
arr.push({
@@ -101,7 +101,7 @@ export class StateManager {
source: source,
target: target,
selectable: false,
- visible: (node.data.isActive),
+ visible: (node.data.type == NODE_DATATYPE.RESULT_IMAGE && node.data.isActive) || node.data.type !== NODE_DATATYPE.RESULT_IMAGE,
type: 'default'
})
}
@@ -148,6 +148,7 @@ export class StateManager {
if (node.data.disableDelete) return ElMessage.error(t('flowCanvas.initialNodeProhibited'))
const result = [node]
+
const findChildren = (parentId: string) => {
const children = this.nodes.value.filter(item => item.data.superiorID === parentId)
children.forEach(child => {
@@ -157,11 +158,12 @@ export class StateManager {
findChildren(child.id)
})
}
+ findChildren(id)
let deletePromise: any = true
- if (isElMessageBox && result.length > 1) {
+ if (isElMessageBox) {
deletePromise = await new Promise((resolve, reject) => {
ElMessageBox.confirm(
- t('flowCanvas.deleteSubordinateCard'),
+ result.length > 1 ? t('flowCanvas.deleteSubordinateCard') : t('flowCanvas.deleteCardConfirm'),
'',
{
confirmButtonText: t('flowCanvas.confirm'),
diff --git a/src/components/Canvas/components/fullscreen-dialog.vue b/src/components/Canvas/components/fullscreen-dialog.vue
index 911bb73..f1116dc 100644
--- a/src/components/Canvas/components/fullscreen-dialog.vue
+++ b/src/components/Canvas/components/fullscreen-dialog.vue
@@ -86,8 +86,8 @@
}
}
.fullscreen-dialog {
- --size: 0.25rem;
- --width: 4rem;
+ --size: 0.125rem;
+ --width: 2rem;
--color: #bfbfbf;
background-color: #fffcf4;
background-image: repeating-radial-gradient(
diff --git a/src/lang/en.ts b/src/lang/en.ts
index fa84f6e..f672a9f 100644
--- a/src/lang/en.ts
+++ b/src/lang/en.ts
@@ -178,6 +178,7 @@ export default {
export: 'Export',
},
flowCanvas: {
+ deleteCardConfirm: 'Are you sure you want to delete this function card?',
confirm: 'Confirm',
cancel: 'Cancel',
confirmLeave: 'Are you sure you want to leave? You may have unsaved changes.',
diff --git a/src/lang/zh-cn.ts b/src/lang/zh-cn.ts
index 6ed4825..b5bd8f6 100644
--- a/src/lang/zh-cn.ts
+++ b/src/lang/zh-cn.ts
@@ -179,6 +179,7 @@ export default {
edit: '编辑'
},
flowCanvas: {
+ deleteCardConfirm: '确定要删除该功能卡片吗?',
confirm: '确认',
cancel: '取消',
confirmLeave: '您可能有未保存的更改,确定要离开吗?',
diff --git a/src/views/home/agent/components/versionTree/tree/view2/index.vue b/src/views/home/agent/components/versionTree/tree/view2/index.vue
index 78b80d2..5c45705 100644
--- a/src/views/home/agent/components/versionTree/tree/view2/index.vue
+++ b/src/views/home/agent/components/versionTree/tree/view2/index.vue
@@ -237,7 +237,7 @@ defineExpose({push})
margin-bottom: 0;
}
> .icon{
- margin-right: .4rem;
+ margin-right: .8rem;
color: rgba(0, 0, 0, 0.5);
}
> span{
From b7f9a7818ca7e6470b45134d6dada054d913bc74 Mon Sep 17 00:00:00 2001
From: zhangyahui
Date: Tue, 24 Mar 2026 15:45:28 +0800
Subject: [PATCH 06/10] =?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]
From 4baaa0b0d561caa439fae2b7a9a76c4a280c017b Mon Sep 17 00:00:00 2001
From: "X1627315083@163.com" <1627315083@qq.com>
Date: Tue, 24 Mar 2026 16:05:52 +0800
Subject: [PATCH 07/10] fix
---
.../Canvas/FlowCanvas/components/nodes/cards/cards-select.vue | 2 +-
src/components/Canvas/FlowCanvas/manager/NodeManager.ts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/Canvas/FlowCanvas/components/nodes/cards/cards-select.vue b/src/components/Canvas/FlowCanvas/components/nodes/cards/cards-select.vue
index bdc907b..2a348ca 100644
--- a/src/components/Canvas/FlowCanvas/components/nodes/cards/cards-select.vue
+++ b/src/components/Canvas/FlowCanvas/components/nodes/cards/cards-select.vue
@@ -70,7 +70,6 @@
const id = props.node.id
if (!id) return
const superiorID = props.node.data.superiorID
- stateManager.deleteNode(id)
if(v.secondaryMenu){
nodeManager.createCardsSelect({
data: {
@@ -92,6 +91,7 @@
}
})
}
+ // stateManager.deleteNode(id)
}
defineExpose({})
diff --git a/src/components/Canvas/FlowCanvas/manager/NodeManager.ts b/src/components/Canvas/FlowCanvas/manager/NodeManager.ts
index 6c201fc..ee1298b 100644
--- a/src/components/Canvas/FlowCanvas/manager/NodeManager.ts
+++ b/src/components/Canvas/FlowCanvas/manager/NodeManager.ts
@@ -53,7 +53,6 @@ export class NodeManager {
return current.data.createIndexPosition > max.data.createIndexPosition ? current : max
}, superiorGenerateNodes[0])
const snode = superiorID ? this.stateManager.flowManager.getNodeById(superiorID) : this.stateManager.flowManager.getLastNode();
- console.log(snode)
const id = options.id || createId()
const positionX = options.positionX || 0
const positionY = options.positionY || 0
@@ -82,6 +81,7 @@ export class NodeManager {
position,
data
}
+ if(currentNode)this.stateManager.deleteNode(currentNode.id)
this.addNode(options_)
return options_;
}
From 0428783f5cb3bcb37c9476cedbe29bd84616bfdc Mon Sep 17 00:00:00 2001
From: zhangyahui
Date: Tue, 24 Mar 2026 16:57:40 +0800
Subject: [PATCH 08/10] =?UTF-8?q?feat:=20=E5=9B=BE=E7=89=87=E5=BC=95?=
=?UTF-8?q?=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/lang/en.ts | 3 ++
src/lang/zh-cn.ts | 5 ++-
src/stores/agent.ts | 2 +
src/views/home/agent/components/Agent.vue | 21 +++++++---
src/views/home/agent/components/Item.vue | 8 +++-
src/views/home/agent/components/Preview.vue | 17 ++++++--
.../home/agent/components/ReportCard.vue | 6 ++-
.../home/agent/components/SketchCard.vue | 6 +--
src/views/home/components/Input.vue | 39 ++++++++++++++-----
9 files changed, 79 insertions(+), 28 deletions(-)
diff --git a/src/lang/en.ts b/src/lang/en.ts
index f672a9f..0db9570 100644
--- a/src/lang/en.ts
+++ b/src/lang/en.ts
@@ -155,6 +155,9 @@ export default {
deleteSuccess: 'Successfully deleted',
thinking: 'Thinking...',
thinkComplete: 'Thinking complete.',
+ quote: 'Quote',
+ delete: 'Delete',
+ edit: 'Edit',
},
// Version Tree
diff --git a/src/lang/zh-cn.ts b/src/lang/zh-cn.ts
index b5bd8f6..44e444c 100644
--- a/src/lang/zh-cn.ts
+++ b/src/lang/zh-cn.ts
@@ -149,7 +149,10 @@ export default {
Download: '下载',
deleteSuccess: '删除成功',
thinking:'已思考',
- thinkComplete: '思考完成。'
+ thinkComplete: '思考完成。',
+ quote: '引用',
+ delete: '删除',
+ edit: '编辑',
},
// Version Tree
diff --git a/src/stores/agent.ts b/src/stores/agent.ts
index 34c458e..3fbdfe9 100644
--- a/src/stores/agent.ts
+++ b/src/stores/agent.ts
@@ -15,6 +15,8 @@ type InitialProjectData = {
style: string
useReport:boolean
needSuggestion:boolean
+ quoteList: Array
+ tempImages: any[]
}
export const useAgentStore = defineStore('agent', () => {
const initialProjectData = ref(null)
diff --git a/src/views/home/agent/components/Agent.vue b/src/views/home/agent/components/Agent.vue
index c3ad3d2..8c5fedb 100644
--- a/src/views/home/agent/components/Agent.vue
+++ b/src/views/home/agent/components/Agent.vue
@@ -64,7 +64,8 @@
region: '',
style: ''
},
- imageUrlList: []
+ imageUrlList: [],
+ quotaUrl: []
})
const sketchList = ref([])
@@ -110,7 +111,8 @@
text: initialData.text,
images: initialData.images,
useReport: initialData.useReport,
- tempImages: initialData.tempImages
+ tempImages: initialData.tempImages,
+ quoteList: initialData.quoteList
})
// 更新 configParams
@@ -125,6 +127,7 @@
images: Array<{ url: string; name: string }>
tempImages: any[]
useReport: boolean
+ quoteList: Array
},
skipUserMessage = false
) => {
@@ -136,14 +139,14 @@
}
params.imageUrlList = message.images || []
-
+ params.quotaUrl = message.quoteList || []
// 如果不是重新生成模式,则添加用户消息到列表
if (!skipUserMessage) {
messageList.value.push({
id: messageList.value.length + 1,
text: message.text,
isUser: true,
- imageUrls: message.tempImages
+ imageUrls: message.tempImages.concat(message.quoteList)
})
}
@@ -223,6 +226,8 @@
let hasReportStarted = false // 标记 report 是否已经开始
let hasSketchEvent = false
+ let hasReportEvent = false
+
try {
let flag = true
while (flag) {
@@ -231,6 +236,9 @@
if (hasSketchEvent) {
aiMessage.text += ``
}
+ if (hasReportEvent) {
+ aiMessage.text += ``
+ }
aiMessage.streaming = false
aiMessage.loading = false
@@ -256,7 +264,8 @@
if (!hasReportStarted && eventName === 'report') {
isGeneratingReport.value = true
- contentBody += ``
+ hasReportEvent = true
+ // contentBody += ``
hasReportStarted = true
}
@@ -588,7 +597,7 @@
nextTick(() => {
ancestorsList.forEach((item) => {
- if (item.image_url) {
+ if (item.image_url && item.role !== 'user') {
item.text += ``
}
})
diff --git a/src/views/home/agent/components/Item.vue b/src/views/home/agent/components/Item.vue
index 1597d49..b892d75 100644
--- a/src/views/home/agent/components/Item.vue
+++ b/src/views/home/agent/components/Item.vue
@@ -129,7 +129,7 @@
}>()
// watch(
- // () => props.content,
+ // () => props,
// (newVal) => {
// console.log('newVal-----', newVal)
// },
@@ -139,8 +139,12 @@
const emit = defineEmits(['regenerate'])
const imageList = computed(() => {
- const { imageUrls } = props.content
+ const { imageUrls, role } = props.content
const list = []
+ if (role === 'user') {
+ const quotaList = props.content.image_url ?? []
+ list.push(...quotaList)
+ }
if (!imageUrls || imageUrls.length === 0) return list
imageUrls.forEach((item) => {
if (typeof item === 'string') {
diff --git a/src/views/home/agent/components/Preview.vue b/src/views/home/agent/components/Preview.vue
index e86a782..18d8aab 100644
--- a/src/views/home/agent/components/Preview.vue
+++ b/src/views/home/agent/components/Preview.vue
@@ -13,12 +13,15 @@
-
+
- Quote
+ {{ $t('agent.quote') }}
- Delete
+ {{ $t('agent.delete') }}
@@ -37,7 +40,7 @@
class="edit-btn flex align-center space-between"
@click="handleClickEdit(item)"
>
- Edit
+ {{ $t('agent.edit') }}
@@ -218,6 +221,12 @@
myEvent.emit('openFlowCanvas', { url, imgId, nodeId })
}
+ const handleClickQuote = (item) => {
+ console.log(item)
+ const url = Object.values(item)[0]
+ MyEvent.emit('quote', url)
+ }
+
const handleClickDelete = (item: string | Object) => {
deleteSketchFlowCanvas({
id: Object.keys(item)[0],
diff --git a/src/views/home/agent/components/ReportCard.vue b/src/views/home/agent/components/ReportCard.vue
index b30ba75..6f17ef1 100644
--- a/src/views/home/agent/components/ReportCard.vue
+++ b/src/views/home/agent/components/ReportCard.vue
@@ -48,8 +48,12 @@
}
&.is-sketch {
background: url('@/assets/images/sketch-card.png') no-repeat;
- background-size: contain;
padding: 2rem 3rem;
+ max-width: 52.5rem;
+ height: 8rem;
+ box-sizing: border-box;
+ background-size: 100% 100%;
+ min-height: initial;
.report-card-header {
margin-bottom: 0;
}
diff --git a/src/views/home/agent/components/SketchCard.vue b/src/views/home/agent/components/SketchCard.vue
index a0397df..aa785df 100644
--- a/src/views/home/agent/components/SketchCard.vue
+++ b/src/views/home/agent/components/SketchCard.vue
@@ -7,9 +7,5 @@
diff --git a/src/views/home/components/Input.vue b/src/views/home/components/Input.vue
index 02650ff..e16d797 100644
--- a/src/views/home/components/Input.vue
+++ b/src/views/home/components/Input.vue
@@ -2,15 +2,17 @@