Merge branch 'main' of ssh://18.167.251.121:10002/aidlab/FiDA_Front

This commit is contained in:
2026-02-23 14:45:37 +08:00
23 changed files with 257 additions and 106 deletions

28
src/api/versitonTree.ts Normal file
View File

@@ -0,0 +1,28 @@
import request from '@/utils/request'
/**
* 获取节点详情
* @param data 获取节点详情的参数
* @param data.projectId 项目id
* @param data.id 节点id
* @returns 获取节点详情
*/
export const getChatNodeDetail = (data) => {
return request({
url: `/api/project/${data.projectId}/chat/node/${data.id}`,
method: 'get',
})
}
/**
* 获取版本树
* @param data 获取版本树的参数
* @param data.projectId 项目id
* @returns 获取版本树
*/
export const versionTree = (data) => {
return request({
url: `/api/project/${data.projectId}/chat/tree`,
method: 'get',
})
}

View File

@@ -0,0 +1,4 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.1384 6.86193C4.87805 6.60158 4.45594 6.60158 4.19559 6.86193C3.93524 7.12228 3.93524 7.54439 4.19559 7.80474L7.52892 11.1381C7.78927 11.3984 8.21138 11.3984 8.47173 11.1381L11.8051 7.80474C12.0654 7.54439 12.0654 7.12228 11.8051 6.86193C11.5447 6.60158 11.1226 6.60158 10.8623 6.86193L8.66699 9.05719L8.66699 2.66667C8.66699 2.29848 8.36852 2 8.00033 2C7.63214 2 7.33366 2.29848 7.33366 2.66667L7.33366 9.05719L5.1384 6.86193Z" fill="white"/>
<path d="M3.33366 12.6667C2.96547 12.6667 2.66699 12.9651 2.66699 13.3333C2.66699 13.7015 2.96547 14 3.33366 14H12.667C13.0352 14 13.3337 13.7015 13.3337 13.3333C13.3337 12.9651 13.0352 12.6667 12.667 12.6667L3.33366 12.6667Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 800 B

View File

@@ -0,0 +1,4 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.669 7.56092C5.37611 7.25718 4.90123 7.25718 4.60834 7.56092C4.31545 7.86466 4.31545 8.35713 4.60834 8.66087L8.35834 12.5498C8.65123 12.8535 9.12611 12.8535 9.419 12.5498L13.169 8.66087C13.4619 8.35712 13.4619 7.86466 13.169 7.56092C12.8761 7.25718 12.4012 7.25718 12.1083 7.56092L9.63867 10.1221L9.63867 2.66645C9.63867 2.23689 9.30289 1.88867 8.88867 1.88867C8.47446 1.88867 8.13867 2.23689 8.13867 2.66645L8.13867 10.1221L5.669 7.56092Z" fill="#5A5A5A"/>
<path d="M3.63867 14.3331C3.22446 14.3331 2.88867 14.6813 2.88867 15.1109C2.88867 15.5404 3.22446 15.8887 3.63867 15.8887H14.1387C14.5529 15.8887 14.8887 15.5404 14.8887 15.1109C14.8887 14.6813 14.5529 14.3331 14.1387 14.3331L3.63867 14.3331Z" fill="#5A5A5A"/>
</svg>

After

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -103,11 +103,12 @@ export default {
france: 'France',
japan: 'Japan',
canada: 'Canada',
germany: 'Germany'
germany: 'Germany',
},
agent: {
copySuccess: 'Text copied to clipboard',
copyFaild: 'Copy failed. Your browser may be restricting clipboard access. Please try copying manually.'
copyFaild: 'Copy failed. Your browser may be restricting clipboard access. Please try copying manually.',
Download: 'Download'
},
// Version Tree
@@ -128,6 +129,7 @@ export default {
restoreHint:'Once deleted, you wont be able to view this conversation again.',
cancel: 'cancel',
Confirm: 'Confirm',
export: 'Export',
},
//generateSketch
generateSketch: {

View File

@@ -97,12 +97,13 @@ export default {
france: '法国',
japan: '日本',
canada: '加拿大',
germany: '德国'
germany: '德国',
},
agent: {
copySuccess: '文本已复制到剪贴板',
copyFaild:
'复制失败。您的浏览器可能限制了剪贴板访问,请允许浏览器访问剪贴板或尝试手动复制。'
'复制失败。您的浏览器可能限制了剪贴板访问,请允许浏览器访问剪贴板或尝试手动复制。',
Download: '下载'
},
// Version Tree
@@ -123,6 +124,7 @@ export default {
restoreHint:'恢复后将显示该对话。',
cancel: '取消',
Confirm: '确认',
export: '导出',
},
//generateSketch
generateSketch: {

View File

@@ -1,6 +1,7 @@
<script setup lang="ts">
import { ref, onMounted, onUnmounted, reactive, toRefs, computed } from "vue";
import VersionTreeIndex from './versionTree/index.vue'
import VersionTreeIndex from '@/views/home/agent/components/versionTree/index.vue'
import GenerateSketch from './generateSketch/index.vue'
//const props = defineProps({
//})
@@ -73,14 +74,25 @@ const generateSketch = ()=>{
sketchRestore('2')
}
const sketchRestore = (id)=>{
generateData.value.list.forEach((item)=>{
if(item.id == id){
item.type = 'waiting'
const sketchRestore = (item)=>{
generateData.value.list.forEach((generateDataItem)=>{
if(item.id == generateDataItem.id){
generateDataItem.type = 'waiting'
}
})
}
const sketchDelete = (item)=>{
console.log(item)
generateData.value.list.forEach((generateDataItem,index)=>{
if(item.id == generateDataItem.id){
generateData.value.list.splice(index,1)
}
})
}
onMounted(()=>{
})
onUnmounted(()=>{
@@ -99,7 +111,7 @@ const {} = toRefs(data);
</div>
<VersionTreeIndex v-model:versionTreeData="versionTreeData" />
<div class="generateSketchBox">
<GenerateSketch v-model:generateData="generateData"></GenerateSketch>
<GenerateSketch v-model:generateData="generateData" @sketchRestore="sketchRestore" @sketchDelete="sketchDelete"></GenerateSketch>
</div>
</div>
</template>

View File

@@ -13,6 +13,30 @@
<img :src="LoadingImg" alt="" />
</div>
</template>
<div v-else class="reportBorder">
<div class="report">
<div v-if="false" class="report-content-null">
<img :src="reportNull" alt="" />
</div>
<div v-else class="report-content">
<div class="">
</div>
<div class="downBtnBox">
<div class="downBtn">
<div class="icon">
<SvgIcon name="reportDown" size="16"></SvgIcon>
</div>
<span>{{ $t('agent.Download') }}</span>
</div>
</div>
<div class="content">
# 一级标题
</div>
</div>
</div>
</div>
</div>
</template>
@@ -20,6 +44,7 @@
import { ref } from 'vue'
import Menu from './Menu.vue'
import LoadingImg from '@/assets/images/sketch-loading.gif'
import reportNull from '@/assets/images/reportNull.png'
const props = withDefaults(
defineProps<{
@@ -45,6 +70,8 @@
<style lang="less" scoped>
.preview-container {
width: 100%;
height: 100%;
gap: 1.2rem;
flex-wrap: wrap;
.sketch-item {
@@ -71,12 +98,75 @@
border: 0.2rem solid #e5e5e5;
font-family: 'GeneralMedium';
font-size: 1.4rem;
padding: 0 0.9rem 0 1.4rem;
cursor: pointer;
img{
width: 1.8rem;
height: 1.8rem;
}
padding: 0 0.9rem 0 1.4rem;
cursor: pointer;
img{
width: 1.8rem;
height: 1.8rem;
}
}
}
.reportBorder{
position: relative;
display: flex;
align-items: center;
justify-content: center;
--border-width: 3px;
flex: 1;
&::before {
content: '';
position: absolute;
background: linear-gradient(119.03deg, rgba(233, 121, 60, 0.3) 1.61%, rgba(255, 207, 144, 0.3) 101.01%);
border-radius: 2.3rem;
z-index: -1;
width: 100%;
height: 100%;
left: -50%;
top: -50%;
transform: translate(50%, 50%);
}
.report {
background-color: #fff;
width: calc(100% - var(--border-width) * 2);
height: calc(100% - var(--border-width) * 2);
border-radius: 2rem;
display: flex;
.report-content-null{
flex: 1;
display: flex;
align-items: center;
justify-content: center;
}
.report-content{
flex: 1;
display: flex;
flex-direction: column;
.downBtnBox{
padding: 2.2rem 5.2rem 0;
.downBtn{
display: flex;
width: 11.2rem;
justify-content: center;
margin-left: auto;
line-height: 3.2rem;
border-radius: 5px;
background-color: #ff7a51;
color: #fff;
cursor: pointer;
.icon{
margin-right: .02rem;
}
span{
font-weight: 500;
font-size: 1.2rem;
}
}
}
.content{
word-break: break-word;
white-space: pre-wrap;
}
}
}
}
}

View File

@@ -89,6 +89,14 @@ const {} = toRefs(data)
</div>
</div>
</div>
<div class="expandBtnBox">
<div class="btn" @click="openTree(true)">
<div class="versionExport">
<SvgIcon name="versionExport" size="17" color="rgba(0, 0, 0, 0.6)" />
</div>
<span>{{ $t('VersionTree.export') }}</span>
</div>
</div>
<!-- <div class="expandBtnBox">
<div class="btn" @click="openTree(true)">
<div class="bg left" :class="{'active':treeState}"></div>
@@ -135,96 +143,47 @@ const {} = toRefs(data)
display: flex;
flex-direction: column;
}
.versionTreeTitle {
.versionTreeTitle{
width: 100%;
height: 8rem;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 0.8rem 0 2.4rem;
border-bottom: 1px solid #c9c9c9;
> span {
padding: 0 .8rem 0 2.4rem;
border-bottom: 1px solid #C9C9C9;
> span{
font-size: 2rem;
font-weight: 600;
font-family: 'SemiBold';
}
.versionTreeTitle{
width: 100%;
height: 8rem;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 .8rem 0 2.4rem;
border-bottom: 1px solid #C9C9C9;
> span{
font-size: 2rem;
font-weight: 600;
font-family: 'SemiBold';
}
> .closeBtn{
width: 2.4rem;
height: 2.4rem;
cursor: pointer;
}
}
.expandBtnBox{
padding: .4rem .7rem;
border-radius: 1.1rem;
background-color: #f3f3f3;
display: flex;
margin-left: auto;
margin-top: 2.1rem;
margin-right: 3rem;
> .btn{
padding: .6rem .5rem;
position: relative;
cursor: pointer;
> .bg{
position: absolute;
background-color: #fff;
border-radius: .6rem;
width: 0;
height: 100%;
transition: all .3s;
top: 0;
&.active{
width: 100%;
}
&.left{
right: 0;
}
&.right{
left: 0;
}
}
> span{
position: relative;
font-size: 1.3rem;
line-height: 1.8rem;
font-weight: 500;
letter-spacing: -0.08px;
}
}
}
.versionTreeBox{
flex: 1;
display: flex;
overflow: hidden;
> .tree{
flex: 1;
height: 100%;
overflow: hidden;
padding: 2.1rem 0 5.4rem 2.2rem;
}
> .detail{
width: 35rem;
margin: 2.1rem 3rem 5.4rem 3.4rem;
height: calc(100% - 2.1rem - 5.4rem);
overflow: hidden;
}
> .closeBtn{
width: 2.4rem;
height: 2.4rem;
cursor: pointer;
}
}
.expandBtnBox {
.expandBtnBox{
margin-left: auto;
margin-top: 2.2rem;
margin-right: 3rem;
> .btn{
padding: .6rem 1.8rem;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
border: 1.5px solid #D9D9D9;
color: rgba(0, 0, 0, 0.6);
> .versionExport{
margin-right: .6rem;
}
> span{
font-weight: 500;
font-size: 1.4rem;
letter-spacing: Letter Spacing;
}
}
}
.versionTreeBox {
flex: 1;
@@ -234,11 +193,11 @@ const {} = toRefs(data)
flex: 1;
height: 100%;
overflow: hidden;
padding: 2.1rem 0 5.4rem 2.2rem;
padding: 2.5rem 0 5.4rem 2.2rem;
}
> .detail {
width: 35rem;
margin: 2.1rem 3rem 5.4rem 3.4rem;
margin: 2.5rem 3rem 5.4rem 3.4rem;
height: calc(100% - 2.1rem - 5.4rem);
overflow: hidden;
}

View File

@@ -1,19 +1,35 @@
<template>
<div class="agent-wrapper flex space-between">
<Agent :title="agentTitle" />
<div class="preview-wrapper">
<Preview :type="previewType" />
<div class="openVersionTree">
<div class="btn" @click="versionTreeData.drawer = true">
Version Tree
</div>
</div>
<div class="content-wrapper">
<Agent :title="agentTitle" />
<div class="preview-wrapper">
<Preview :type="previewType" />
</div>
</div>
<VersionTreeIndex v-model:versionTreeData="versionTreeData" />
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { ref, computed } from 'vue'
import Agent from './components/Agent.vue'
import Preview from './components/Preview.vue'
import VersionTreeIndex from './components/versionTree/index.vue'
const agentTitle = ref('Retro Sofa Sketch')
const previewType = ref<'sketch' | 'report'>('sketch')
const previewType = ref<'sketch' | 'report'>('report')
const versionTreeData = ref({
drawer:false,
list:computed(()=>{
return []
})
})
</script>
<style lang="less" scoped>
@@ -21,7 +37,39 @@
width: 100%;
height: 100%;
border-top: 0.1rem solid #c9c9c9;
padding: 8rem 2.3rem 6rem 2.8rem;
padding: 0rem 2.3rem 6rem 2.8rem;
flex-direction: column;
.openVersionTree{
padding: 2rem 0rem;
width: 100%;
display: flex;
justify-content: flex-end;
height: min-content;
> .btn{
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;
background: linear-gradient(119.03deg, rgba(233, 121, 60, 0.8) 1.61%, rgba(255, 207, 144, 0.8) 101.01%);
border-radius: 2.2rem;
z-index: -1;
}
}
}
.content-wrapper{
display: flex;
flex: 1;
justify-content: space-between;
// overflow: hidden;
}
.c-svg {
width: initial;

View File

@@ -12,8 +12,10 @@ const props = defineProps({
},
},
})
//const emit = defineEmits([
//])
const emit = defineEmits([
'sketchRestore',
'sketchDelete',
])
let data = reactive({
})
onMounted(()=>{
@@ -26,7 +28,7 @@ const {} = toRefs(data);
<template>
<div class="generateSketch">
<div v-for="item in generateData.list" :key="item.id" class="item">
<GenerateItem :item="item" />
<GenerateItem :item="item" @sketchRestore="()=>emit('sketchRestore',item)" @sketchDelete="()=>emit('sketchDelete',item)" />
</div>
</div>
</template>