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

This commit is contained in:
2026-02-26 11:46:03 +08:00
12 changed files with 307 additions and 264 deletions

View File

@@ -27,3 +27,16 @@ export interface CreateProjectParamsType {
export const createProject = (data: CreateProjectParamsType): Promise<any> => { export const createProject = (data: CreateProjectParamsType): Promise<any> => {
return request({ url: '/api/project/init', method: 'post', data }) return request({ url: '/api/project/init', method: 'post', data })
} }
/**
* 获取项目信息
* @param data 获取项目信息参数
* @param data.id 项目id
* @returns 获取项目信息
*/
export const getProjectInfo = (data) => {
return request({
url: `/api/project/${data.id}`,
method: 'get',
})
}

View File

@@ -9,7 +9,7 @@ import request from '@/utils/request'
*/ */
export const getChatNodeDetail = (data) => { export const getChatNodeDetail = (data) => {
return request({ return request({
url: `/api/project/${data.projectId}/chat/node/${data.id}`, url: `/api/version/${data.projectId}/chat/node/${data.id}`,
method: 'get', method: 'get',
}) })
} }
@@ -22,7 +22,20 @@ export const getChatNodeDetail = (data) => {
*/ */
export const versionTree = (data) => { export const versionTree = (data) => {
return request({ return request({
url: `/api/project/${data.projectId}/chat/tree`, url: `/api/version/${data.projectId}/chat/tree`,
method: 'get',
})
}
/**
* 获取版本树
* @param data 获取版本树的参数
* @param data.projectId 项目id
* @returns 获取版本树
*/
export const getNodeAncestors = (data) => {
return request({
url: `/api/version/${data.projectId}/chat/node/${data.id}/ancestors`,
method: 'get', method: 'get',
}) })
} }

View File

@@ -3,13 +3,12 @@ import { ref, computed } from 'vue'
export const useProjectStore = defineStore('project', () => { export const useProjectStore = defineStore('project', () => {
const state = ref({// 项目参数 const state = ref({// 项目参数
id: '', id: '',
nodeId: '',
}) })
const setProject = (obj: any) => { const setProject = (obj: any) => {
for (const key in obj) { for (const key in obj) {
if(state.value[key]){ state.value[key] = obj[key]
state.value[key] = obj[key]
}
} }
} }
@@ -23,3 +22,4 @@ export const useProjectStore = defineStore('project', () => {
setId setId
} }
}) })

16
src/stores/versionTree.ts Normal file
View File

@@ -0,0 +1,16 @@
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
export const useVersionTreeStore = defineStore('versionTree', () => {
const state = ref({
nodeDetail: {
},// 节点详情
})
const setNodeDetail = (v: any) => { state.value.nodeDetail = v }
return {
state,
setNodeDetail,
}
})

View File

@@ -20,7 +20,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onUnmounted, onMounted, nextTick } from 'vue' import { ref, reactive, computed, onUnmounted, onMounted, nextTick,watch } from 'vue'
import List from './List.vue' import List from './List.vue'
import Input from '../../components/Input.vue' import Input from '../../components/Input.vue'
import { fetchAgentReply } from '@/api/agent' import { fetchAgentReply } from '@/api/agent'
@@ -31,6 +31,8 @@
const userStore = useUserInfoStore() const userStore = useUserInfoStore()
const agentStore = useAgentStore() const agentStore = useAgentStore()
const projectStore = useProjectStore() const projectStore = useProjectStore()
const emits = defineEmits(['update:sketchList'])
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
title: string title: string
@@ -41,6 +43,7 @@
) )
const messageList = ref([]) const messageList = ref([])
const listRef = ref() const listRef = ref()
const isGenerating = ref(false) const isGenerating = ref(false)
const isPaused = ref(false) // 标记是否为主动暂停 const isPaused = ref(false) // 标记是否为主动暂停
@@ -58,6 +61,13 @@
imageUrlList: [] imageUrlList: []
}) })
const sketchList = ref([])
watch(sketchList, (newVal) => {
console.log('添加图片链接--------');
emits('update:sketchList', newVal)
}, { deep: true })
// 每次请求时创建新的 AbortController // 每次请求时创建新的 AbortController
let abort: AbortController let abort: AbortController
@@ -81,9 +91,9 @@
if (initialData) { if (initialData) {
// 等待页面渲染完成后自动发送初始消息 // 等待页面渲染完成后自动发送初始消息
params.configParams = { params.configParams = {
type: initialData.type , type: initialData.type,
region: initialData.area, region: initialData.area,
style: initialData.style , style: initialData.style,
temperature: 0.7 temperature: 0.7
} }
handleSendMessage({ handleSendMessage({
@@ -97,10 +107,13 @@
} }
}) })
const handleSendMessage = async (message: { const handleSendMessage = async (
text: string message: {
images: Array<{ url: string; name: string }> text: string
}, skipUserMessage = false) => { images: Array<{ url: string; name: string }>
},
skipUserMessage = false
) => {
console.log('Message sent:', message) console.log('Message sent:', message)
isPaused.value = false isPaused.value = false
isGenerating.value = true isGenerating.value = true
@@ -197,6 +210,7 @@
console.log('传输结束 end---', contentBody) console.log('传输结束 end---', contentBody)
aiMessage.streaming = false aiMessage.streaming = false
aiMessage.loading = false aiMessage.loading = false
isGenerating.value = false
flag = false flag = false
break break
} }
@@ -217,12 +231,21 @@
isNodeIdEvent = true isNodeIdEvent = true
// continue // continue
} }
console.log('event', event)
if (event.includes('error')) {
aiMessage.text = '出现错误,请重试'
aiMessage.streaming = false
aiMessage.loading = false
isGenerating.value = false
flag = false
break
}
const dataLines = event const dataLines = event
.split(/\n/) .split(/\n/)
.filter((line) => line.startsWith('data:')) .filter((line) => line.startsWith('data:'))
.map((line) => line.replace(/^data:\s*/, '').trim()) .map((line) => line.replace(/^data:\s*/, '').trim())
console.log('dataLInes', dataLines) // console.log('dataLInes', dataLines)
if (isNodeIdEvent) { if (isNodeIdEvent) {
params.versionID = dataLines[0] params.versionID = dataLines[0]
} }
@@ -232,10 +255,14 @@
try { try {
const jsonData = JSON.parse(jsonText) const jsonData = JSON.parse(jsonText)
console.log('jsonData', jsonData);
// 赋值 project_id 和 version_id // 赋值 project_id 和 version_id
if (jsonData.project_id) params.projectID = jsonData.project_id // if (jsonData.project_id) params.projectID = jsonData.project_id
if (jsonData.version_id) params.versionID = jsonData.version_id // if (jsonData.version_id) params.versionID = jsonData.version_id
if (jsonData.image_url) {
sketchList.value.push(jsonData.image_url)
}
if ( if (
jsonData.content && jsonData.content &&
jsonData.content.length > 0 && jsonData.content.length > 0 &&
@@ -243,6 +270,7 @@
) { ) {
contentBody += jsonData.content contentBody += jsonData.content
aiMessage.text = contentBody aiMessage.text = contentBody
aiMessage.loading = false
} }
if (jsonData.type === 'end') { if (jsonData.type === 'end') {
aiMessage.streaming = false aiMessage.streaming = false
@@ -334,7 +362,9 @@
} }
.agent-container { .agent-container {
// width: 39%; // width: 39%;
width: 63.4rem; // width: 63.4rem;
flex: 1;
margin-right: 2.7rem;
background-color: #fff; background-color: #fff;
border-radius: 2rem; border-radius: 2rem;
box-shadow: 0px 15px 21px 0px #0000000d; box-shadow: 0px 15px 21px 0px #0000000d;

View File

@@ -4,13 +4,21 @@
:class="type === 'sketch' ? 'sketch-preview' : 'report-preview'" :class="type === 'sketch' ? 'sketch-preview' : 'report-preview'"
> >
<template v-if="type === 'sketch'"> <template v-if="type === 'sketch'">
<div class="sketch-item" v-for="item in 12"> <div
class="sketch-item"
v-for="(item, index) in sketchList"
:key="'sketch-item-' + index"
>
<Menu class="menu-btn" @click="handleClickMenu" /> <Menu class="menu-btn" @click="handleClickMenu" />
<div class="edit-btn flex align-center space-between" @click="handleClickEdit"> <div class="edit-btn flex align-center space-between" @click="handleClickEdit">
<div>Edit</div> <div>Edit</div>
<img src="@/assets/images/arrow-top-right.png" alt="" /> <img src="@/assets/images/arrow-top-right.png" />
</div> </div>
<img :src="LoadingImg" alt="" /> <img
:src="getImageSrc(item, index)"
:alt="'sketch-' + index"
@load="handleImageLoad(index)"
/>
</div> </div>
</template> </template>
<div v-else class="reportBorder"> <div v-else class="reportBorder">
@@ -48,96 +56,107 @@
<br /> <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 <br /> # 一级标题 <br />
# 一级标题 # 一级标题
<br /> <br />
# 一级标题 # 一级标题
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue' import { ref, reactive } from 'vue'
import Menu from './Menu.vue' import Menu from './Menu.vue'
import LoadingImg from '@/assets/images/sketch-loading.gif' import LoadingImg from '@/assets/images/sketch-loading.gif'
import reportNull from '@/assets/images/reportNull.png' import reportNull from '@/assets/images/reportNull.png'
// 存储每个图片的加载状态
const loadedStatus = reactive<Record<number, boolean>>({})
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
type: 'sketch' | 'report' type: 'sketch' | 'report'
sketchList: Array<string>
}>(), }>(),
{ {
type: 'sketch' type: 'sketch',
sketchList: []
} }
) )
// 图片加载完成时触发
const handleImageLoad = (index: number) => {
loadedStatus[index] = true
}
const handleClickEdit = () => { // 获取当前显示的图片源
// 编辑按钮点击逻辑 const getImageSrc = (item: string, index: number) => {
console.log('Edit button clicked') return loadedStatus[index] ? item : LoadingImg
} }
const handleClickMenu = () => {
// 菜单按钮点击逻辑
console.log('Menu button clicked')
}
const handleClickEdit = () => {
// 编辑按钮点击逻辑
console.log('Edit button clicked')
}
const handleClickMenu = () => {
// 菜单按钮点击逻辑
console.log('Menu button clicked')
}
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@@ -172,13 +191,13 @@
font-size: 1.4rem; font-size: 1.4rem;
padding: 0 0.9rem 0 1.4rem; padding: 0 0.9rem 0 1.4rem;
cursor: pointer; cursor: pointer;
img{ img {
width: 1.8rem; width: 1.8rem;
height: 1.8rem; height: 1.8rem;
} }
} }
} }
.reportBorder{ .reportBorder {
position: relative; position: relative;
display: flex; display: flex;
align-items: center; align-items: center;
@@ -190,7 +209,11 @@
&::before { &::before {
content: ''; content: '';
position: absolute; position: absolute;
background: linear-gradient(119.03deg, rgba(233, 121, 60, 0.3) 1.61%, rgba(255, 207, 144, 0.3) 101.01%); 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; border-radius: 2.3rem;
z-index: -1; z-index: -1;
width: 100%; width: 100%;
@@ -205,20 +228,20 @@
height: calc(100% - var(--border-width) * 2); height: calc(100% - var(--border-width) * 2);
border-radius: 2rem; border-radius: 2rem;
display: flex; display: flex;
.report-content-null{ .report-content-null {
flex: 1; flex: 1;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.report-content{ .report-content {
flex: 1; flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
.downBtnBox{ .downBtnBox {
padding: 2.2rem 5.2rem 0; padding: 2.2rem 5.2rem 0;
.downBtn{ .downBtn {
display: flex; display: flex;
width: 11.2rem; width: 11.2rem;
justify-content: center; justify-content: center;
@@ -228,16 +251,16 @@
background-color: #ff7a51; background-color: #ff7a51;
color: #fff; color: #fff;
cursor: pointer; cursor: pointer;
.icon{ .icon {
margin-right: .02rem; margin-right: 0.02rem;
} }
span{ span {
font-weight: 500; font-weight: 500;
font-size: 1.2rem; font-size: 1.2rem;
} }
} }
} }
.content{ .content {
word-break: break-word; word-break: break-word;
white-space: pre-wrap; white-space: pre-wrap;
overflow-y: auto; overflow-y: auto;

View File

@@ -1,11 +1,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, onUnmounted, reactive, toRefs } from "vue"; import { ref, onMounted, onUnmounted, reactive, watch } from "vue";
import VersionDetail from './versionDetail.vue' import VersionDetail from './versionDetail.vue'
import ChatDetail from './chatDetail.vue' import ChatDetail from './chatDetail.vue'
import { useProjectStore } from '@/stores'
import { getChatNodeDetail, getNodeAncestors } from '@/api/versitonTree'
//const props = defineProps({ //const props = defineProps({
//}) //})
const emit = defineEmits([ const emit = defineEmits([
]) ])
const projectStore = useProjectStore()
const detailData = ref({ const detailData = ref({
id:1, id:1,
versionDetail:{ versionDetail:{
@@ -17,9 +23,25 @@ const detailData = ref({
userChatDetail:{ userChatDetail:{
} }
}) })
watch(()=>projectStore.state.nodeId, (newVal, oldVal) => {
console.log(newVal)
if(newVal){
getChatNodeDetail({
projectId: projectStore.state.id,
id: newVal
}).then(res => {
console.log(res)
})
getNodeAncestors({
projectId: projectStore.state.id,
id: newVal
}).then(res => {
console.log(res)
})
}
},{ immediate: true })
onMounted(()=>{ onMounted(()=>{
}) })
onUnmounted(()=>{ onUnmounted(()=>{

View File

@@ -5,7 +5,7 @@ import Detail from './detail/index.vue'
// import { versionsList } from './tools/versionsData' // import { versionsList } from './tools/versionsData'
import { findAndAddChild, findAndRemoveChild } from '../../../../../utils/treeDiagram' import { findAndAddChild, findAndRemoveChild } from '../../../../../utils/treeDiagram'
import { useProjectStore } from '@/stores' import { useProjectStore } from '@/stores'
import { versionTree, getChatNodeDetail } from '@/api/versitonTree' import { versionTree } from '@/api/versitonTree'
const props = defineProps({ const props = defineProps({
versionTreeData: { versionTreeData: {
@@ -25,65 +25,39 @@ const props = defineProps({
const versionsList = ref([]) const versionsList = ref([])
const projectStore = useProjectStore() const projectStore = useProjectStore()
watch(()=>projectStore.state.id, (newVal, oldVal) => { let oldProjectId:any = ''
if(newVal){ watch(()=>props.versionTreeData?.drawer, (newVal, oldVal) => {
versionTree({ console.log(newVal,oldProjectId,projectStore.state.id)
projectId: projectStore.state.id if(newVal && oldProjectId !== projectStore.state.id && projectStore.state.id){
}).then(res => { getVersionTree()
console.log(res) oldProjectId = JSON.parse(JSON.stringify(projectStore.state.id))
// versionsList.value = res.data
})
} }
}) })
const getVersionTree = ()=>{
versionTree({
projectId: projectStore.state.id
}).then(res => {
setVersionsList([res])
})
}
const setVersionsList = (res)=>{ const setVersionsList = (res)=>{
versionsList.value = [{
"id": "node_001",
"url": "https://example.com/images/cover_001.jpg",
"children": [
{
"id": "node_002",
"url": "https://example.com/images/cover_002.jpg",
"children": [
{
"id": "node_003",
"url": "https://example.com/images/cover_003.jpg",
"children": []
},
{
"id": "node_004",
"url": "https://example.com/images/cover_004.jpg",
"children": []
}
]
},
{
"id": "node_005",
"url": "https://example.com/images/cover_005.jpg",
"children": [
{
"id": "node_006",
"url": "https://example.com/images/cover_006.jpg",
"children": []
}
]
}
]
}]
//设置versionId //设置versionId
function traverseArray(items,father, callback) { function traverseArray(items,father, callback) {
for (let i = 0; i < items.length; i++) { for (let i = 0; i < items.length; i++) {
const item = items[i] const item = items[i]
if(!item.url)continue
callback(item, i,father) callback(item, i,father)
if (item.children && Array.isArray(item.children) && item.children.length > 0) { if (item.children && Array.isArray(item.children) && item.children.length > 0) {
traverseArray(item.children, item, callback) traverseArray(item.children, item, callback)
} }
} }
} }
traverseArray(versionsList.value,'',(item,i,father)=>{ traverseArray(res,'',(item,i,father)=>{
item.versionId = father?`${father.versionId}-${i+1}`:'1' item.versionId = father?`${father.versionId}-${i+1}`:'1'
}) })
versionsList.value = res
} }
const treeRef = ref(null) const treeRef = ref(null)
@@ -133,9 +107,9 @@ const versionDelete = (versionDetail)=>{
} }
let data = reactive({}) let data = reactive({})
onMounted(() => {setVersionsList('')}) // onMounted(() => {setVersionsList('')})
onUnmounted(() => {}) onUnmounted(() => {})
defineExpose({}) defineExpose({getVersionTree})
const {} = toRefs(data) const {} = toRefs(data)
</script> </script>
<template> <template>
@@ -177,6 +151,7 @@ const {} = toRefs(data)
<div class="versionTreeBox"> <div class="versionTreeBox">
<div class="tree"> <div class="tree">
<Tree <Tree
v-if="versionsList.length > 0"
ref="treeRef" ref="treeRef"
:versionsList="versionsList" :versionsList="versionsList"
:treeState="treeState" :treeState="treeState"

View File

@@ -2,6 +2,8 @@
import { ref, onMounted, onUnmounted, reactive, toRefs, watch, nextTick } from "vue"; import { ref, onMounted, onUnmounted, reactive, toRefs, watch, nextTick } from "vue";
import view1Item from './view1Item.vue' import view1Item from './view1Item.vue'
import view2 from './view2/index.vue' import view2 from './view2/index.vue'
import { useProjectStore } from '@/stores'
const props = defineProps({ const props = defineProps({
versionsList: { versionsList: {
@@ -28,6 +30,8 @@ const view1Ref = ref(null)
const isLoad = ref(false) const isLoad = ref(false)
const treeStateTime = ref(true) const treeStateTime = ref(true)
const projectStore = useProjectStore()
watch(()=>props.treeState,(newVal,oldVal)=>{ watch(()=>props.treeState,(newVal,oldVal)=>{
treeStateTime.value = false treeStateTime.value = false
@@ -68,6 +72,8 @@ const initialize = ()=>{
const setSelectItem = (item)=>{ const setSelectItem = (item)=>{
if(!item.versionId)return if(!item.versionId)return
console.log(item)
// projectStore.setProject({latestNodeId: item.id})
emit('update:selectItem', {...item}) emit('update:selectItem', {...item})
} }

View File

@@ -47,7 +47,6 @@ const { layout } = useLayout()
async function layoutGraph(direction) { async function layoutGraph(direction) {
setTimeout(() => { setTimeout(() => {
nodes.value = layout(nodes.value, edges.value, direction) nodes.value = layout(nodes.value, edges.value, direction)
console.log(nodes.value)
nextTick(() => { nextTick(() => {
fitView() fitView()
}) })
@@ -196,8 +195,10 @@ defineExpose({push})
cursor: pointer; cursor: pointer;
background-color: var(--treeItem-background); background-color: var(--treeItem-background);
box-sizing: border-box; box-sizing: border-box;
overflow: hidden;
&.active{ &.active{
background-color: var(--treeItem-active-background); // background-color: var(--treeItem-active-background);
border: 2px solid #000;
} }
&.start{ &.start{
background-color: #7A7A7A; background-color: #7A7A7A;

View File

@@ -1,34 +1,58 @@
<template> <template>
<div class="agent-wrapper flex space-between"> <div class="agent-wrapper flex space-between">
<div class="openVersionTree"> <div class="openVersionTree">
<div class="btn" @click="versionTreeData.drawer = true"> <div class="btn" @click="versionTreeData.drawer = true">Version Tree</div>
Version Tree
</div>
</div> </div>
<div class="content-wrapper"> <div class="content-wrapper">
<Agent :title="agentTitle" /> <Agent :title="agentTitle" @update:sketchList="updateSketchList" />
<div class="preview-wrapper"> <div class="preview-wrapper">
<Preview :type="previewType" /> <Preview :type="previewType" :sketchList="sketchList" />
</div> </div>
</div> </div>
<VersionTreeIndex v-model:versionTreeData="versionTreeData" /> <VersionTreeIndex ref="VersionTreeIndexRef" v-model:versionTreeData="versionTreeData" />
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from 'vue' import { ref, watch, onMounted } from 'vue'
import Agent from './components/Agent.vue' import Agent from './components/Agent.vue'
import Preview from './components/Preview.vue' import Preview from './components/Preview.vue'
import VersionTreeIndex from './components/versionTree/index.vue' import VersionTreeIndex from './components/versionTree/index.vue'
import { useProjectStore } from '@/stores'
import { getProjectInfo } from '@/api/agent'
const agentTitle = ref('Retro Sofa Sketch') const agentTitle = ref('Retro Sofa Sketch')
const previewType = ref<'sketch' | 'report'>('report') const previewType = ref<'sketch' | 'report'>('sketch')
const VersionTreeIndexRef = ref()
const sketchList = ref([])
const updateSketchList = (newVal) => {
console.log('newVal', newVal)
sketchList.value = newVal
// VersionTreeIndexRef.value.getVersionTree()
}
const versionTreeData = ref({ const versionTreeData = ref({
drawer:false, drawer: false,
list:computed(()=>{ })
return []
}) const projectStore = useProjectStore()
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 => {
projectStore.setProject(res.project)
})
}
}) })
</script> </script>
@@ -39,13 +63,13 @@
border-top: 0.1rem solid #c9c9c9; border-top: 0.1rem solid #c9c9c9;
padding: 0rem 2.3rem 6rem 2.8rem; padding: 0rem 2.3rem 6rem 2.8rem;
flex-direction: column; flex-direction: column;
.openVersionTree{ .openVersionTree {
padding: 2rem 0rem; padding: 2rem 0rem;
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
height: min-content; height: min-content;
> .btn{ > .btn {
padding: 1.5rem 1.45rem; padding: 1.5rem 1.45rem;
font-weight: 500; font-weight: 500;
font-size: 1.4rem; font-size: 1.4rem;
@@ -57,14 +81,18 @@
content: ''; content: '';
position: absolute; position: absolute;
inset: -1px; inset: -1px;
background: linear-gradient(119.03deg, rgba(233, 121, 60, 0.8) 1.61%, rgba(255, 207, 144, 0.8) 101.01%); 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; border-radius: 2.2rem;
z-index: -1; z-index: -1;
} }
} }
} }
.content-wrapper{ .content-wrapper {
display: flex; display: flex;
flex: 1; flex: 1;
justify-content: space-between; justify-content: space-between;

File diff suppressed because one or more lines are too long