Files
FiDA_Front/src/views/home/agent/index.vue

148 lines
3.5 KiB
Vue
Raw Normal View History

2026-02-10 13:05:24 +08:00
<template>
<div class="agent-wrapper flex space-between">
2026-02-23 10:54:17 +08:00
<div class="openVersionTree">
2026-02-25 15:10:03 +08:00
<div class="btn" @click="versionTreeData.drawer = true">Version Tree</div>
2026-02-11 17:27:51 +08:00
</div>
2026-02-23 10:54:17 +08:00
<div class="content-wrapper">
2026-02-26 16:48:08 +08:00
<Agent ref="agentRef" :title="agentTitle" @update:sketchList="updateSketchList" />
2026-02-23 10:54:17 +08:00
<div class="preview-wrapper">
2026-02-25 15:10:03 +08:00
<Preview :type="previewType" :sketchList="sketchList" />
2026-02-23 10:54:17 +08:00
</div>
</div>
2026-02-26 16:48:08 +08:00
<VersionTreeIndex
ref="VersionTreeIndexRef"
v-model:versionTreeData="versionTreeData"
@restore="handleRestore"
2026-03-02 11:29:07 +08:00
@selectNode="handleSelectNode"
2026-02-26 16:48:08 +08:00
/>
2026-02-10 13:05:24 +08:00
</div>
</template>
<script setup lang="ts">
2026-02-27 16:51:58 +08:00
import { ref, watch, onMounted, computed } from 'vue'
2026-02-10 13:05:24 +08:00
import Agent from './components/Agent.vue'
2026-02-11 17:27:51 +08:00
import Preview from './components/Preview.vue'
2026-02-23 13:28:43 +08:00
import VersionTreeIndex from './components/versionTree/index.vue'
2026-02-26 10:19:51 +08:00
import { useProjectStore } from '@/stores'
import { getProjectInfo } from '@/api/agent'
2026-03-02 11:29:07 +08:00
import { clearNodeChat, getNodeAncestors } from '@/api/versitonTree'
2026-02-27 16:51:58 +08:00
import { useRoute } from 'vue-router'
2026-03-02 11:29:07 +08:00
const route = useRoute()
const projectStore = useProjectStore()
2026-02-26 10:19:51 +08:00
2026-02-10 13:05:24 +08:00
const agentTitle = ref('Retro Sofa Sketch')
2026-02-25 15:10:03 +08:00
const previewType = ref<'sketch' | 'report'>('sketch')
2026-02-26 10:19:51 +08:00
const VersionTreeIndexRef = ref()
2026-02-26 16:48:08 +08:00
const agentRef = ref()
2026-02-25 15:10:03 +08:00
const sketchList = ref([])
const updateSketchList = (newVal) => {
console.log('newVal', newVal)
sketchList.value = newVal
2026-02-26 10:19:51 +08:00
// VersionTreeIndexRef.value.getVersionTree()
2026-02-25 15:10:03 +08:00
}
2026-02-23 10:54:17 +08:00
const versionTreeData = ref({
2026-02-26 16:48:08 +08:00
drawer: false
2026-02-26 10:19:51 +08:00
})
2026-02-26 16:48:08 +08:00
const handleRestore = () => {
2026-03-02 11:29:07 +08:00
// agentRef.value?.inputRef?.addReportTag('Restore')
clearNodeChat({ projectId: projectStore.state.id, id: projectStore.state.nodeId }).then(
(res) => {}
)
}
const handleSelectNode = () => {
console.log('handleSelectNode')
getNodeAncestors({ projectId: projectStore.state.id, id: projectStore.state.nodeId }).then(
(res) => {
console.log('res', res)
agentRef.value.setChatInfo(res)
}
)
}
2026-02-26 16:48:08 +08:00
2026-03-02 11:29:07 +08:00
const handleGetProjectInfoAndHistory = () => {
2026-03-02 13:40:17 +08:00
getProjectInfo({ id: route.params.id }).then((res) => {
if(res?.conversation)agentRef.value.setChatInfo(res.conversation)
let data = res?.project || res
if(data?.latestNodeId)data.nodeId = data.latestNodeId
2026-03-02 11:45:40 +08:00
projectStore.setProject({
...data,
})
2026-03-02 11:29:07 +08:00
})
2026-02-26 16:48:08 +08:00
}
2026-02-27 16:51:58 +08:00
const proJectId = computed(() => route.params.id)
2026-03-02 11:29:07 +08:00
2026-02-27 16:51:58 +08:00
watch(
() => proJectId.value,
(newVal, oldVal) => {
2026-03-02 13:40:17 +08:00
projectStore.clearProject()
2026-02-26 16:48:08 +08:00
if (newVal) {
2026-03-02 11:29:07 +08:00
handleGetProjectInfoAndHistory()
2026-02-26 16:48:08 +08:00
}
2026-02-26 10:19:51 +08:00
}
2026-02-26 16:48:08 +08:00
)
2026-02-26 10:19:51 +08:00
2026-02-26 16:48:08 +08:00
onMounted(() => {
2026-03-02 13:40:17 +08:00
projectStore.clearProject()
if (proJectId.value) {
2026-03-02 11:29:07 +08:00
handleGetProjectInfoAndHistory()
2026-02-26 10:19:51 +08:00
}
2026-02-23 10:54:17 +08:00
})
2026-02-10 13:05:24 +08:00
</script>
<style lang="less" scoped>
.agent-wrapper {
width: 100%;
height: 100%;
border-top: 0.1rem solid #c9c9c9;
2026-02-23 10:54:17 +08:00
padding: 0rem 2.3rem 6rem 2.8rem;
flex-direction: column;
2026-02-25 15:10:03 +08:00
.openVersionTree {
2026-02-23 13:28:43 +08:00
padding: 2rem 0rem;
2026-02-23 10:54:17 +08:00
width: 100%;
display: flex;
justify-content: flex-end;
height: min-content;
2026-02-25 15:10:03 +08:00
> .btn {
2026-02-23 10:54:17 +08:00
padding: 1.5rem 1.45rem;
font-weight: 500;
font-size: 1.4rem;
border-radius: 2rem;
position: relative;
background: white;
cursor: pointer;
&::before {
content: '';
position: absolute;
inset: -1px;
2026-02-25 15:10:03 +08:00
background: linear-gradient(
119.03deg,
rgba(233, 121, 60, 0.8) 1.61%,
rgba(255, 207, 144, 0.8) 101.01%
);
2026-02-23 13:28:43 +08:00
border-radius: 2.2rem;
2026-02-23 10:54:17 +08:00
z-index: -1;
}
}
}
2026-02-25 15:10:03 +08:00
.content-wrapper {
2026-02-23 10:54:17 +08:00
display: flex;
flex: 1;
justify-content: space-between;
overflow: hidden;
2026-02-23 10:54:17 +08:00
}
2026-02-10 13:05:24 +08:00
.c-svg {
width: initial;
}
.preview-wrapper {
width: 91.2rem;
}
}
</style>