2026-02-03 11:24:47 +08:00
|
|
|
<script setup lang="ts">
|
|
|
|
|
import { ref, onMounted, onUnmounted, reactive, toRefs, watch } from "vue";
|
|
|
|
|
import view1Item from './view1Item.vue'
|
|
|
|
|
import view2 from './view2/index.vue'
|
2026-02-04 10:09:24 +08:00
|
|
|
import { versionsList } from './view2/tools/versionsData'
|
2026-02-03 11:24:47 +08:00
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
treeState:{
|
|
|
|
|
default:false,
|
|
|
|
|
},
|
2026-02-05 10:43:18 +08:00
|
|
|
selectItem: {
|
|
|
|
|
type: Object,
|
|
|
|
|
default: () => ({})
|
|
|
|
|
} as any,
|
2026-02-03 11:24:47 +08:00
|
|
|
})
|
2026-02-05 10:43:18 +08:00
|
|
|
const emit = defineEmits([
|
|
|
|
|
'update:selectItem'
|
|
|
|
|
])
|
2026-02-03 11:24:47 +08:00
|
|
|
let data = reactive({
|
|
|
|
|
})
|
|
|
|
|
|
2026-02-05 10:43:18 +08:00
|
|
|
const isLoad = ref(false)
|
2026-02-03 11:24:47 +08:00
|
|
|
const treeStateTime = ref(true)
|
|
|
|
|
|
|
|
|
|
watch(()=>props.treeState,(newVal,oldVal)=>{
|
|
|
|
|
treeStateTime.value = false
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
treeStateTime.value = true
|
|
|
|
|
},250)
|
|
|
|
|
})
|
|
|
|
|
|
2026-02-04 10:09:24 +08:00
|
|
|
const view2Ref = ref(null)
|
|
|
|
|
const pushView2Item = (item)=>{
|
|
|
|
|
view2Ref.value.push(item)
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-05 10:43:18 +08:00
|
|
|
const treeList = ref([
|
2026-02-03 11:24:47 +08:00
|
|
|
{
|
|
|
|
|
name:'P1',
|
|
|
|
|
},{
|
|
|
|
|
name:'V1',
|
|
|
|
|
},{
|
|
|
|
|
name:'V1-1',
|
|
|
|
|
}
|
|
|
|
|
])
|
2026-02-05 10:43:18 +08:00
|
|
|
|
|
|
|
|
function traverseArray(items, callback) {
|
|
|
|
|
for (let i = 0; i < items.length; i++) {
|
|
|
|
|
const item = items[i]
|
|
|
|
|
callback(item, i)
|
|
|
|
|
if (item.child && Array.isArray(item.child) && item.child.length > 0) {
|
|
|
|
|
traverseArray(item.child, callback)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const initialize = ()=>{
|
|
|
|
|
isLoad.value = false
|
|
|
|
|
setSelectItem(versionsList[0])
|
|
|
|
|
treeList.value = []
|
|
|
|
|
traverseArray(versionsList, (item, index) => {
|
|
|
|
|
treeList.value.push(item)
|
|
|
|
|
})
|
|
|
|
|
isLoad.value = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const setSelectItem = (item)=>{
|
|
|
|
|
console.log(item[0])
|
|
|
|
|
emit('update:selectItem', {...item})
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-03 11:24:47 +08:00
|
|
|
onMounted(()=>{
|
2026-02-05 10:43:18 +08:00
|
|
|
initialize()
|
2026-02-03 11:24:47 +08:00
|
|
|
})
|
|
|
|
|
onUnmounted(()=>{
|
|
|
|
|
})
|
|
|
|
|
defineExpose({})
|
|
|
|
|
const {} = toRefs(data);
|
|
|
|
|
</script>
|
|
|
|
|
<template>
|
2026-02-05 10:43:18 +08:00
|
|
|
<div class="tree" v-show="treeStateTime" v-if="isLoad">
|
2026-02-04 11:13:15 +08:00
|
|
|
<div v-show="!treeState" class="box view1">
|
2026-02-05 10:43:18 +08:00
|
|
|
<view1Item v-for="item in treeList" :key="item.name" :item="item" @click="emit('selectItem', item)"></view1Item>
|
2026-02-03 11:24:47 +08:00
|
|
|
</div>
|
2026-02-04 11:13:15 +08:00
|
|
|
<div v-show="treeState" class="box view2">
|
2026-02-05 10:43:18 +08:00
|
|
|
<view2
|
|
|
|
|
ref="view2Ref"
|
|
|
|
|
@setSelectItem="setSelectItem"
|
|
|
|
|
:treeList="treeList"
|
|
|
|
|
:selectItem="props.selectItem"
|
|
|
|
|
></view2>
|
2026-02-03 11:24:47 +08:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
|
.tree{
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
position: relative;
|
|
|
|
|
.box{
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
&.view1{
|
|
|
|
|
overflow-y: auto;
|
2026-02-05 10:43:18 +08:00
|
|
|
&::-webkit-scrollbar {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
2026-02-03 11:24:47 +08:00
|
|
|
}
|
|
|
|
|
&.view2{
|
|
|
|
|
border: 1px solid #D9D9D9;
|
|
|
|
|
background-color: #f7f7f7;
|
|
|
|
|
border-radius: var(--border-radius, 1rem);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|