249 lines
6.4 KiB
Vue
249 lines
6.4 KiB
Vue
<template>
|
|
<div class="workflowBox">
|
|
<div class="workflow" v-show="isUpdataPorject || selectObject.id">
|
|
<navList @setSelectKey="setSelectKey" @unfold="unfold" @goHome="goHome" :navListData="navListData" :selectKey="selectKey"></navList>
|
|
<div class="contentBox" :style="[{overflow:selectKey == 'canvas'?'hidden':''}]">
|
|
<div class="homeContent" ref="parent">
|
|
<navListBox
|
|
@setSelectKey=setSelectKey
|
|
:navListData="navListData"
|
|
:selectKey="selectKey"
|
|
:workflowType="workflowType"
|
|
v-model:isShowMark="isShowMark"
|
|
></navListBox>
|
|
</div>
|
|
<div class="content">
|
|
<div class="back">
|
|
<div class="title">
|
|
<i :class="[navListData?.find((item:any) => item.value === selectKey_)?.icon]"></i>
|
|
{{ navListData?.find((item:any) => item.value === selectKey_)?.name }}
|
|
</div>
|
|
<div class="text" @click="setBack()"><i class="fi fi-bs-down-left-and-up-right-to-center"></i></div>
|
|
</div>
|
|
<content ref="content" :selectKey_="selectKey_" :workflowType="workflowType" :httpWorkflowType="httpWorkflowType"></content>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div v-if="!isUpdataPorject && !selectObject.id" class="workflow">
|
|
<workspace :workflowType="workflowType" @setProject="setProject" :httpWorkflowType="httpWorkflowType"></workspace>
|
|
</div>
|
|
<div class="mark_loading" v-show="isShowMark">
|
|
<a-spin size="large" />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script lang="ts">
|
|
import { defineComponent,computed,ref,watch,nextTick,provide,toRefs, reactive, onMounted} from 'vue'
|
|
// import setDesignItem from '@/component/Detail/setDesignItem2.vue'
|
|
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
|
import { Https } from "@/tool/https";
|
|
import { useStore } from "vuex";
|
|
import { useI18n } from 'vue-i18n'
|
|
|
|
import content from './content/index.vue'
|
|
import workspace from './workspace.vue'
|
|
import navList from './nav.vue'
|
|
import navListBox from './navBox.vue'
|
|
|
|
|
|
import { gsap, TweenMax } from "gsap";
|
|
import { ScrollTrigger } from "gsap/ScrollTrigger";
|
|
export default defineComponent({
|
|
components:{
|
|
content,navList,navListBox,workspace
|
|
},
|
|
//props
|
|
props:{
|
|
workflowType:{
|
|
type:String,
|
|
|
|
},
|
|
httpWorkflowType:{
|
|
type:String,
|
|
default:''
|
|
}
|
|
},
|
|
emits:['goHome'],
|
|
setup(props,{emit}) {
|
|
const store = useStore();
|
|
let driver__:any = computed(()=>{
|
|
return store.state.Guide.guide
|
|
})
|
|
provide('driver__',driver__)
|
|
|
|
const data = reactive({
|
|
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
|
|
selectKey:'',
|
|
selectKey_:'',
|
|
isShowMark:false,
|
|
isUpdataPorject:false as any,
|
|
adminData:{
|
|
position:'',
|
|
dom:null as any,
|
|
parentDom:null as any,
|
|
},
|
|
navListData:computed(()=>{
|
|
return store.state.Workspace.projectList
|
|
}),
|
|
})
|
|
const setIsShowMark = (boolean:boolean)=>{
|
|
data.isShowMark = boolean
|
|
}
|
|
provide('setIsShowMark',setIsShowMark)
|
|
const dataTime = reactive({
|
|
selectTime:null as any,
|
|
})
|
|
const dataDom = reactive({
|
|
parent:null as any,
|
|
content:null as any
|
|
})
|
|
const setBack = ()=>{
|
|
data.selectKey = ''
|
|
updataPage()
|
|
}
|
|
const setProject = (value:any)=>{
|
|
// data.isUpdataPorject = data
|
|
if(value == 'set'){
|
|
data.isUpdataPorject = true
|
|
}else{
|
|
data.isUpdataPorject = false
|
|
}
|
|
}
|
|
const setSelectKey = async (value:any)=>{
|
|
let {str,dom,position} = value
|
|
data.adminData.dom = dom
|
|
data.adminData.parentDom = value?.parentDom
|
|
data.adminData.position = position
|
|
data.selectKey = str
|
|
updataPage()
|
|
if(value.str)dataDom.content.setModule(value)
|
|
}
|
|
const updataPage = ()=>{
|
|
let {dom,position} = data.adminData
|
|
let contentDom:any = document.querySelectorAll('.workflow .content')[0]
|
|
clearTimeout(dataTime.selectTime)
|
|
let {top,left,width,height} = dom.getBoundingClientRect()
|
|
let parentPosition = dataDom.parent.getBoundingClientRect()
|
|
let parentTop = parentPosition?.top
|
|
let parentLeft = parentPosition?.left
|
|
if(data.selectKey_ && data.selectKey == ''){
|
|
// let index = data.navListData.findIndex((item:any) => item.value === data.selectKey_);
|
|
let y = top - parentTop + height / 2
|
|
let x = left - parentLeft + width / 2
|
|
if(position == 'nav'){
|
|
x = 0
|
|
y = dom.offsetTop + dom.offsetHeight / 2
|
|
}
|
|
contentDom.style.transformOrigin = `${x}px ${y}px`
|
|
gsap.to(contentDom,.5, {scale:0,opacity:1,ease: "power2.inOut"},);
|
|
dataTime.selectTime = setTimeout(() => {
|
|
data.selectKey_ = data.selectKey
|
|
}, 500);
|
|
}else{
|
|
data.selectKey_ = data.selectKey
|
|
nextTick(()=>{
|
|
// let index = data.navListData.findIndex((item:any) => item.value === str);
|
|
let y = top - parentTop + height / 2
|
|
let x = left - parentLeft + width / 2
|
|
if(position == 'nav'){
|
|
x = 0
|
|
y = dom.offsetTop + dom.offsetHeight / 2
|
|
}
|
|
// dataDom.content.open({selectKey:data.selectKey_,workflowType:props.workflowType})
|
|
contentDom.style.transformOrigin = `${x}px ${y}px`
|
|
gsap.to(contentDom,.5, {scale:1,opacity:1,ease: "power2.inOut"},);
|
|
})
|
|
}
|
|
}
|
|
const goHome = ()=>{
|
|
emit("goHome");
|
|
}
|
|
const unfold = ()=>{
|
|
dataDom.content.unfold()
|
|
}
|
|
return{
|
|
...toRefs(dataDom),
|
|
...toRefs(data),
|
|
setBack,
|
|
setProject,
|
|
setSelectKey,
|
|
unfold,
|
|
goHome,
|
|
}
|
|
},
|
|
|
|
provide() {
|
|
return {
|
|
}
|
|
},
|
|
|
|
})
|
|
</script>
|
|
<style lang="less" scoped>
|
|
.workflowBox{
|
|
display: flex;
|
|
width: 100%;
|
|
height: 100%;
|
|
> .workflow{
|
|
display: flex;
|
|
width: 100%;
|
|
height: 100%;
|
|
> .contentBox{
|
|
position: relative;
|
|
flex: 1;
|
|
overflow: hidden;
|
|
> .content,
|
|
>.homeContent{
|
|
width: 100%;
|
|
height: 100%;
|
|
padding: 4rem;
|
|
padding-top: 3rem;
|
|
// padding: 3rem;
|
|
}
|
|
> .content{
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
transform: scale(0);
|
|
// background: #ff6666;
|
|
background: #fff;
|
|
display: flex;
|
|
flex-direction: column;
|
|
> *{
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
> .back{
|
|
width: auto;
|
|
height: auto;
|
|
display: flex;
|
|
padding-bottom: 1rem;
|
|
> .title{
|
|
font-size: 2.5rem;
|
|
font-weight: 600;
|
|
display: flex;
|
|
align-items: center;
|
|
> i{
|
|
font-size: 2rem;
|
|
display: flex;
|
|
margin-right: 1rem;
|
|
}
|
|
}
|
|
> .text{
|
|
cursor: pointer;
|
|
margin-left: auto;
|
|
> i{
|
|
font-size: 3rem;
|
|
display: flex;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
> .homeContent{
|
|
// background: #91ff66;
|
|
position: absolute;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style> |