From 13ba5dd9395580f1c42071fbd08ca7f41b59ba3b Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Thu, 26 Feb 2026 16:48:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=9B=9E=E8=BD=A6=E6=A3=80?= =?UTF-8?q?=E6=B5=8B&restore=E6=B7=BB=E5=8A=A0=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/restore.png | Bin 0 -> 284 bytes src/assets/images/tag-close.png | Bin 0 -> 154 bytes src/views/home/agent/components/Agent.vue | 26 +++-- src/views/home/agent/components/Item.vue | 20 ++-- .../agent/components/versionTree/index.vue | 9 +- src/views/home/agent/index.vue | 40 ++++--- src/views/home/components/Input.vue | 98 +++++++++++++++--- src/views/home/components/style.ts | 24 +---- 8 files changed, 148 insertions(+), 69 deletions(-) create mode 100644 src/assets/images/restore.png create mode 100644 src/assets/images/tag-close.png diff --git a/src/assets/images/restore.png b/src/assets/images/restore.png new file mode 100644 index 0000000000000000000000000000000000000000..8a19eb27538e15a95777fbecfabcca04ecb02567 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dF8<0HkD{mW+;w(0r%1aer?9eo`c7&i8E|4C#8@;7?AIEGX(_6D5hJ!HV+>$xf{OR1FkMuXrB zwjPG$f@WR;X#=O53d$EatKRm?6rJu*?_8kNcx1AY{qMaI+bS=c?B2DmG;-SH;=Bao zJzL~vC3>wCJUQtv!xm8+exqeEQ-b6s=3mU@t;=IvHQD`)&+J7SehZ`~J}kZWTl(pe z{k={diY*C2UMcScW^N5jubtS*DDdsYl}DFZ|NJx5;r(^oNO}FLtVeU=U$Wdk*Zi)w c=i>*K3}p-VD}9>1K*uw9y85}Sb4q9e0R2yC=l}o! literal 0 HcmV?d00001 diff --git a/src/assets/images/tag-close.png b/src/assets/images/tag-close.png new file mode 100644 index 0000000000000000000000000000000000000000..b89b45b8031765c32f6c91db267f737a0655e75a GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=&H|6fVg?3oVGw3ym^DWND9BhG z*n;kz#8 + + diff --git a/src/views/home/agent/components/versionTree/index.vue b/src/views/home/agent/components/versionTree/index.vue index 6a291ef..e855c5b 100644 --- a/src/views/home/agent/components/versionTree/index.vue +++ b/src/views/home/agent/components/versionTree/index.vue @@ -19,8 +19,9 @@ const props = defineProps({ } }) -//const emit = defineEmits([ -//]) +const emit = defineEmits([ + 'restore' +]) const versionsList = ref([]) @@ -70,7 +71,8 @@ const openTree = (state)=>{ treeState.value = state } -const versionRestore = ()=>{ +const versionRestore = () => { + let id = '' if(selectItem.value?.children?.length > 0){ function findMaxForYourFormat(items) { @@ -99,6 +101,7 @@ const versionRestore = ()=>{ findAndAddChild(versionsList.value, selectItem.value?.versionId, addObj) selectItem.value = {...addObj} treeKey.value++ + emit('restore') } const versionDelete = (versionDetail)=>{ if(!selectItem.value?.versionId)return diff --git a/src/views/home/agent/index.vue b/src/views/home/agent/index.vue index 40b6219..f8408e0 100644 --- a/src/views/home/agent/index.vue +++ b/src/views/home/agent/index.vue @@ -4,12 +4,16 @@
Version Tree
- +
- + @@ -21,12 +25,11 @@ import { useProjectStore } from '@/stores' import { getProjectInfo } from '@/api/agent' - const agentTitle = ref('Retro Sofa Sketch') const previewType = ref<'sketch' | 'report'>('sketch') const VersionTreeIndexRef = ref() - + const agentRef = ref() const sketchList = ref([]) const updateSketchList = (newVal) => { console.log('newVal', newVal) @@ -35,21 +38,30 @@ } const versionTreeData = ref({ - drawer: false, + drawer: false }) + const handleRestore = () => { + console.log('-----------', agentRef.value.inputRef.addReportTag) + + agentRef.value?.inputRef?.addReportTag('Restore') + } + const projectStore = useProjectStore() - watch(()=>projectStore.state.id, (newVal, oldVal) => { - if(newVal){ - getProjectInfo({ id: newVal }).then(res => { - projectStore.setProject(res.project) - }) + watch( + () => projectStore.state.id, + (newVal, oldVal) => { + if (newVal) { + getProjectInfo({ id: newVal }).then((res) => { + projectStore.setProject(res.project) + }) + } } - }) + ) - onMounted(()=>{ - if(projectStore.state.id){ - getProjectInfo({ id: projectStore.state.id }).then(res => { + onMounted(() => { + if (projectStore.state.id) { + getProjectInfo({ id: projectStore.state.id }).then((res) => { projectStore.setProject(res.project) }) } diff --git a/src/views/home/components/Input.vue b/src/views/home/components/Input.vue index 186a483..9802681 100644 --- a/src/views/home/components/Input.vue +++ b/src/views/home/components/Input.vue @@ -22,7 +22,7 @@ :placeholder="$t('Input.placeholder')" @input="handleEditorInput" @paste="handleEditorPaste" - @keypress="handleKeyPress" + @keydown="handleKeyDown" >
@@ -184,6 +184,8 @@ import { useAgentStore, useProjectStore } from '@/stores' import lightIcon from '@/assets/images/light-icon.png' import closeIcon from '@/assets/images/close-icon.png' + import restoreIcon from '@/assets/images/restore.png' + import restoreCloseIcon from '@/assets/images/tag-close.png' import { createProject } from '@/api/agent' import { getStyleImage } from './style' // import Tag from './Tag.vue' @@ -265,22 +267,35 @@ const inputValue = ref('') const reportTags = ref([]) - const addReportTag = () => { + // 导出给父组件调用的方法 + const addReportTag = (text?: string) => { + // 使用传入的文本,如果没有传入则使用默认的翻译文本 + const tagText = text || t('Input.trendingReport') + // create container matching static structure:
... const tag = document.createElement('div') - tag.className = 'editor-tag report-btn flex-center' tag.contentEditable = 'false' - const imgLeft = document.createElement('img') - imgLeft.className = 'light-icon' - imgLeft.src = lightIcon as unknown as string - - const textSpan = document.createElement('span') - textSpan.innerText = t('Input.trendingReport') - const imgClose = document.createElement('img') + const textSpan = document.createElement('span') imgClose.className = 'close-icon' - imgClose.src = closeIcon as unknown as string + if (text) { + tag.className = 'editor-tag restore flex-center' + imgLeft.className = 'restore-icon' + imgLeft.src = restoreIcon as unknown as string + imgClose.src = restoreCloseIcon as unknown as string + imgClose.className = 'close-icon restore' + textSpan.className = 'restore-text' + } else { + tag.className = 'editor-tag report-btn flex-center' + imgLeft.className = 'light-icon' + imgLeft.src = lightIcon as unknown as string + imgClose.src = closeIcon as unknown as string + } + + + textSpan.innerText = tagText + imgClose.addEventListener('click', (ev) => { ev.stopPropagation() // remove tag when close clicked @@ -398,11 +413,17 @@ } } - const handleKeyPress = (e) => { + const handleKeyDown = (e) => { // 检测回车 if (e.key === 'Enter') { + console.log('11111111111') + e.preventDefault() - handleSendAgent() + if (props.isAgentMode) { + handleSendAgent() + } else { + handleCreateProject() + } return } if (e.key === 'Backspace') { @@ -446,12 +467,20 @@ } const handleSendAgent = async () => { + console.log('发送信息--------') + if (props.generating) { emits('pause') return } if (!inputValue.value.trim()) return - emits('send', { text: inputValue.value.trim(), images: uploadedImages.value }) + console.log('222222') + + const payload = { text: inputValue.value.trim(), images: uploadedImages.value } + console.log('准备发送 send 事件', payload) + emits('send', payload) + console.log('send 事件已发送') + // 发送后清空输入框 if (editorRef.value) { editorRef.value.innerHTML = '' @@ -534,7 +563,7 @@ temperature: 0.7 } const projectres = await createProject(params) - console.log('projectres', projectres) + // console.log('projectres', projectres) projectStore.setId(projectres) // 保存初始数据到 store agentStore.setInitialProjectData({ @@ -543,9 +572,14 @@ ...params }) - console.log('Create project with:', params) + // console.log('Create project with:', params) router.push('/home/agent', { query: params }) } + + // 暴露方法给父组件 + defineExpose({ + addReportTag + }) diff --git a/src/views/home/components/style.ts b/src/views/home/components/style.ts index 0e59efb..189ae29 100644 --- a/src/views/home/components/style.ts +++ b/src/views/home/components/style.ts @@ -25,35 +25,15 @@ function slugify(str) { * @returns { string | null } 返回可直接用于 的 URL */ export function getStyleImage(types, style) { - - if (!types) types = 'Sofa' + if (!types) types = 'Sofa' const type = types.toLowerCase() const map = imagesMaps[type] - + const fileName = `${slugify(style)}.png` const key = `/src/assets/images/${type}/${fileName}` - console.log('types',types, 'style',style, 'fileName',fileName, 'key',key); if (map[key]) { return map[key].default } return '' } - -const styleList = [ - 'Venetian Modern', - 'Coastal', - 'Maximalism', - 'Memphis', - 'Verdant', - 'Century Chrome', - 'Modern Revival', - 'Transitional', - "Tuscan 2000's", - 'Kitsch-core', - 'Bauhaus', - 'Constructivism', - 'Nordic Noir', - 'Dopamine', - 'Squiggle' -] From 56c21439a9a793b78ee98419bab799f2193e071c Mon Sep 17 00:00:00 2001 From: "X1627315083@163.com" <1627315083@qq.com> Date: Thu, 26 Feb 2026 16:51:10 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=81=94=E8=B0=83?= =?UTF-8?q?=E6=A0=91=E7=8A=B6=E5=9B=BE=E8=8A=82=E7=82=B9=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/index.ts | 3 +- src/stores/versionTree.ts | 18 ++++- .../versionTree/detail/chatDetail.vue | 23 +++++- .../components/versionTree/detail/index.vue | 81 +++++++++++++------ .../versionTree/detail/versionDetail.vue | 15 ++-- .../agent/components/versionTree/index.vue | 2 +- .../components/versionTree/tree/index.vue | 2 +- .../versionTree/tree/view2/index.vue | 5 +- .../versionTree/tree/view2/secondaryNode.vue | 12 ++- 9 files changed, 122 insertions(+), 39 deletions(-) diff --git a/src/stores/index.ts b/src/stores/index.ts index 897bb4c..f6befa3 100644 --- a/src/stores/index.ts +++ b/src/stores/index.ts @@ -8,4 +8,5 @@ export default store export * from './global' export * from './userInfo' export * from './projectData' -export * from './agent' \ No newline at end of file +export * from './agent' +export * from './versionTree' \ No newline at end of file diff --git a/src/stores/versionTree.ts b/src/stores/versionTree.ts index 11b7089..86600fc 100644 --- a/src/stores/versionTree.ts +++ b/src/stores/versionTree.ts @@ -3,11 +3,25 @@ import { ref, computed } from 'vue' export const useVersionTreeStore = defineStore('versionTree', () => { const state = ref({ nodeDetail: { - + createTime:'', + userEndChat:{ + content:'', + createTime:'', + image_url:'', + }, + generateEndChat:{ + content:'', + createTime:'', + image_url:'', + }, },// 节点详情 }) - const setNodeDetail = (v: any) => { state.value.nodeDetail = v } + const setNodeDetail = (v: any) => { + for(let key in v){ + state.value.nodeDetail[key] = v[key] + } + } return { state, diff --git a/src/views/home/agent/components/versionTree/detail/chatDetail.vue b/src/views/home/agent/components/versionTree/detail/chatDetail.vue index ddda015..0fb6e98 100644 --- a/src/views/home/agent/components/versionTree/detail/chatDetail.vue +++ b/src/views/home/agent/components/versionTree/detail/chatDetail.vue @@ -10,6 +10,14 @@ const props = defineProps({ type: String, default: 'user' }, + chatDetail: { + type: Object, + default: () => ({ + content:'', + creatTime:'', + image_url:'', + }) + }, }) //const emit = defineEmits([ //]) @@ -30,12 +38,13 @@ const {} = toRefs(data); {{ type == 'user'? $t('VersionTree.input'): $t('VersionTree.sketch') }}
- 12:00:00 + {{ new Date(chatDetail.createTime * 1000).toLocaleString() }}
{{ type == 'user'? $t('VersionTree.userRequest'): $t('VersionTree.generateResult') }}
- Design a modern yellow sofa that combines comfort, elegance, and contemporary aesthetics.
 The sofa features a warm, soft yellow tone (mustard or light ochre), with a minimalist silhouette and clean lines.
 Upholstered in high-quality fabric with a subtle texture, offering a cozy and inviting feel.
 The seat is deep and plush, with generous cushioning for relaxation, while the backrest and armrests are softly rounded to enhance comfort. + {{ chatDetail.content }} +
@@ -90,6 +99,16 @@ const {} = toRefs(data); flex: 1; overflow-y: auto; margin-left: 3rem; + > span{ + + } + > img{ + width: 100%; + height: auto; + margin-top: 1.2rem; + border-radius: 1.3rem; + border: 1px solid #C9C9C9; + } &::-webkit-scrollbar { width: 4px; } diff --git a/src/views/home/agent/components/versionTree/detail/index.vue b/src/views/home/agent/components/versionTree/detail/index.vue index 9c66d25..fa611d3 100644 --- a/src/views/home/agent/components/versionTree/detail/index.vue +++ b/src/views/home/agent/components/versionTree/detail/index.vue @@ -1,8 +1,8 @@