2023-02-16 16:33:20 +08:00
|
|
|
<template>
|
2023-03-09 15:20:09 +08:00
|
|
|
<div class="meta2d-box list-page" :class="editFlag ? 'topology-dialog' : ''" v-my-loading="meta2dLoading" ref="meta2dBox" v-clickoutside="showNodeTools">
|
2023-02-23 16:43:15 +08:00
|
|
|
<meta2dHeader
|
|
|
|
|
ref="header"
|
2023-03-23 18:02:03 +08:00
|
|
|
v-if="!isPreview"
|
2023-02-23 16:43:15 +08:00
|
|
|
:meta2dId="meta2dId"
|
|
|
|
|
:isChart="isChart"
|
|
|
|
|
:project="project"
|
|
|
|
|
:editFlag="editFlag"
|
|
|
|
|
@edit="beforeEdit"
|
|
|
|
|
@exitEdit="exitEdit"
|
|
|
|
|
@reload="reload"
|
2023-03-09 15:20:09 +08:00
|
|
|
@getNodesArr="getNodesArr"
|
2023-02-23 16:43:15 +08:00
|
|
|
/>
|
2023-03-09 15:20:09 +08:00
|
|
|
<div class="meta2d-main" :class="isChart ? 'meta2d-chart': 'meta2d-project'" @contextmenu="onContextMenu($event)" style="position: relative">
|
2023-03-23 18:02:03 +08:00
|
|
|
<div v-for="(item,index) in nodesArr" v-if="!editFlag"
|
2023-03-09 15:20:09 +08:00
|
|
|
:key="index"
|
|
|
|
|
v-show="(item.y + offsetY - 48 > -20) && (item.x + item.width/2 + offsetX - 24 > - 20)"
|
|
|
|
|
:style="{position: 'absolute',top:item.y + offsetY - 48 + 'px',left:item.x + item.width/2 + offsetX - 24 +'px', 'z-index': 10}"
|
|
|
|
|
class="network-pop"
|
|
|
|
|
@click="showNodeTools(index,item)"
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
<i
|
|
|
|
|
:ref="'modelTopId'+index"
|
|
|
|
|
:class="{'nz-icon':true, 'nz-icon-shuidi':true,'model-error':item.moduleData.state&&item.moduleData.state.error&&!item.moduleData.show,'model-error-active':item.moduleData.state&&item.moduleData.state.error&&item.moduleData.show}"
|
|
|
|
|
>
|
|
|
|
|
<i style="cursor: pointer" class="nz-icon nz-icon-model"></i>
|
|
|
|
|
</i>
|
|
|
|
|
<!--'selpop':selpopIs(item),'no-selPop':!selpopIs(item),'error-model-stat':modelPopError(item) @click="popClick(item.id)" -->
|
|
|
|
|
<div v-for="(item1, index) in popData" :key="index">
|
|
|
|
|
<transition name="scaleTool">
|
|
|
|
|
<i v-if="item.moduleData.show"
|
|
|
|
|
:class="{'nz-icon':true,'nz-icon-hexagonBorder':true,'error-model-stat':item.moduleData.state[item1.id],'selpop':selpopIs(item,item1),'no-selPop':!selpopIs(item,item1),}"
|
|
|
|
|
:style="{top:item1.top,left:item1.left}"
|
|
|
|
|
:title="item1.title"
|
|
|
|
|
@click.stop="nodeTools(item,item1)"
|
|
|
|
|
>
|
|
|
|
|
<i class="nz-icon nz-icon-liubianxing"></i>
|
|
|
|
|
<i :class="[item1.className,{'nz-icon':item1.className},'noMove']"></i>
|
|
|
|
|
</i>
|
|
|
|
|
</transition>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-02-16 16:33:20 +08:00
|
|
|
<div :id="meta2dId" style="height: 100%;width: 100%"></div>
|
|
|
|
|
</div>
|
2023-02-20 14:25:09 +08:00
|
|
|
<meta2dProps
|
2023-03-23 18:02:03 +08:00
|
|
|
v-if="editFlag"
|
2023-02-20 14:25:09 +08:00
|
|
|
ref="meta2dProps"
|
2023-03-09 15:20:09 +08:00
|
|
|
:modules="modules"
|
2023-02-20 14:25:09 +08:00
|
|
|
:selectPens.sync="selectPens"
|
|
|
|
|
:querysArray="querysArray"
|
2023-02-21 19:05:49 +08:00
|
|
|
:params="params"
|
2023-02-20 14:25:09 +08:00
|
|
|
:meta2dId="meta2dId"
|
|
|
|
|
@updatePens="updatePens"
|
|
|
|
|
/>
|
2023-03-23 18:02:03 +08:00
|
|
|
<div class="context-menu" v-if="contextmenu.left && editFlag " :style="this.contextmenu">
|
2023-02-23 16:43:15 +08:00
|
|
|
<CanvasContextMenu :meta2dId="meta2dId" :selectPens.sync="selectPens"></CanvasContextMenu>
|
|
|
|
|
</div>
|
2023-02-22 18:21:39 +08:00
|
|
|
<div
|
2023-03-23 18:02:03 +08:00
|
|
|
v-show="position.show && (!editFlag)"
|
2023-02-22 18:21:39 +08:00
|
|
|
@mouseleave="tooltipOut"
|
|
|
|
|
@mouseenter="tooltipOver"
|
2023-02-22 15:29:17 +08:00
|
|
|
style="position: absolute"
|
|
|
|
|
:style="{
|
|
|
|
|
top: position.top + 'px',
|
2023-02-22 18:21:39 +08:00
|
|
|
left: position.left + 'px',
|
2023-02-22 15:29:17 +08:00
|
|
|
}"
|
2023-02-22 18:21:39 +08:00
|
|
|
>
|
|
|
|
|
<meta2dTooltip
|
2023-03-01 17:21:29 +08:00
|
|
|
ref="meta2dTooltip"
|
2023-02-22 18:21:39 +08:00
|
|
|
:params="chartParams"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
2023-03-09 15:20:09 +08:00
|
|
|
<!--悬浮network部分-->
|
|
|
|
|
<div class="network-info">
|
|
|
|
|
<div v-if="popDataShow.main">
|
|
|
|
|
<popDataMain :moduleId="moduleId" :projectId="project.id"></popDataMain>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="popDataShow.info">
|
|
|
|
|
<popDataInfo :moduleId="moduleId" :projectId="project.id"></popDataInfo>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!--endpoint-->
|
|
|
|
|
<transition name="right-box">
|
|
|
|
|
<endpointTable v-if="popDataShow.endpoint" :moduleId="moduleId" :moduleName="moduleName" :projectId="project.id"
|
|
|
|
|
@close="popDataShowUpdate('',true)">
|
|
|
|
|
</endpointTable>
|
|
|
|
|
</transition>
|
|
|
|
|
<!--asset-->
|
|
|
|
|
<transition name="right-box">
|
|
|
|
|
<assetTable v-if="popDataShow.asset" :moduleId="moduleId" :moduleName="moduleName" :projectId="project.id"
|
|
|
|
|
@close="popDataShowUpdate('',true)">
|
|
|
|
|
</assetTable>
|
|
|
|
|
</transition>
|
|
|
|
|
<!--alert-->
|
|
|
|
|
<transition name="right-box">
|
|
|
|
|
<alertTable v-if="popDataShow.alert" :moduleId="moduleId" :moduleName="moduleName" :projectId="project.id"
|
|
|
|
|
@close="popDataShowUpdate('',true)">
|
|
|
|
|
</alertTable>
|
|
|
|
|
</transition>
|
2023-03-24 15:09:01 +08:00
|
|
|
<div v-if="!editFlag&&showZoom" class="right-bottom-zoom">
|
|
|
|
|
<div class="zoom-option" style="border-bottom: 1px solid #c5c8cb;" @click="zoomMap(0.25)" :title="$t('overall.enlargement')"><span><i class="nz-icon nz-icon-enlarge"></i></span></div>
|
|
|
|
|
<div class="zoom-option" @click="zoomMap(-0.25)" :title="$t('overall.shrink')"><span><i class="nz-icon nz-icon-narrow"></i></span></div>
|
|
|
|
|
</div>
|
2023-02-16 16:33:20 +08:00
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import meta2dHeader from '@/components/common/project/meta2d/meta2dHeader'
|
|
|
|
|
import meta2dProps from '@/components/common/project/meta2d/meta2dProps'
|
|
|
|
|
import meta2dMain from '@/components/common/project/meta2d/js/meta2dMain'
|
2023-02-22 15:29:17 +08:00
|
|
|
import meta2dTooltip from '@/components/common/project/meta2d/meta2dTooltip'
|
2023-02-23 16:43:15 +08:00
|
|
|
import CanvasContextMenu from '@/components/common/project/meta2d/CanvasContextMenu'
|
2023-03-09 15:20:09 +08:00
|
|
|
import popDataMain from '@/components/common/project/popData/Main'
|
|
|
|
|
import popDataInfo from '@/components/common/project/popData/Info'
|
|
|
|
|
import alertTable from '@/components/common/project/popData/alertTable'
|
|
|
|
|
import assetTable from '@/components/common/project/popData/assetTable'
|
|
|
|
|
import endpointTable from '@/components/common/project/popData/endpointTable'
|
2023-02-16 18:13:14 +08:00
|
|
|
import { getTopology, setTopology } from '@/components/common/js/common'
|
2023-02-20 14:25:09 +08:00
|
|
|
import topoUtil from '@/components/common/project/meta2d/js/topoUtil'
|
2023-02-20 19:11:10 +08:00
|
|
|
import bus from '@/libs/bus'
|
2023-04-03 17:03:47 +08:00
|
|
|
import { globalStore } from '@meta2d/core'
|
2023-02-16 16:33:20 +08:00
|
|
|
export default {
|
|
|
|
|
name: 'meta2dMain',
|
2023-02-20 14:25:09 +08:00
|
|
|
mixins: [meta2dMain, topoUtil],
|
2023-02-16 16:33:20 +08:00
|
|
|
props: {
|
|
|
|
|
meta2dId: {}, // 唯一id 不可重复
|
|
|
|
|
topoData: {}, // topo图数据
|
|
|
|
|
isChart: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false
|
|
|
|
|
},
|
|
|
|
|
querysArray: {},
|
2023-02-21 19:05:49 +08:00
|
|
|
params: {},
|
2023-03-09 15:20:09 +08:00
|
|
|
project: {},
|
2023-03-23 18:02:03 +08:00
|
|
|
isPreview: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false
|
2023-03-24 15:09:01 +08:00
|
|
|
},
|
|
|
|
|
showZoom: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: true
|
2023-03-23 18:02:03 +08:00
|
|
|
}
|
2023-02-16 16:33:20 +08:00
|
|
|
},
|
2023-02-23 16:43:15 +08:00
|
|
|
computed: {
|
|
|
|
|
},
|
2023-02-16 16:33:20 +08:00
|
|
|
components: {
|
|
|
|
|
meta2dHeader,
|
2023-02-22 15:29:17 +08:00
|
|
|
meta2dProps,
|
2023-02-23 16:43:15 +08:00
|
|
|
meta2dTooltip,
|
2023-03-09 15:20:09 +08:00
|
|
|
CanvasContextMenu,
|
|
|
|
|
popDataMain,
|
|
|
|
|
popDataInfo,
|
|
|
|
|
alertTable,
|
|
|
|
|
assetTable,
|
|
|
|
|
endpointTable
|
2023-02-16 16:33:20 +08:00
|
|
|
},
|
|
|
|
|
watch: {
|
|
|
|
|
topoData: {
|
2023-03-24 16:58:08 +08:00
|
|
|
immediate: false,
|
2023-02-16 16:33:20 +08:00
|
|
|
handler () {
|
2023-03-24 16:58:08 +08:00
|
|
|
if (!this.isChart) {
|
|
|
|
|
this.reload()
|
|
|
|
|
}
|
2023-02-16 16:33:20 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mounted () {
|
2023-03-24 16:58:08 +08:00
|
|
|
setTimeout(() => {
|
|
|
|
|
this.init()
|
|
|
|
|
})
|
2023-02-20 19:11:10 +08:00
|
|
|
bus.$on('changeSelectPens', this.pensActive)
|
2023-02-22 18:21:39 +08:00
|
|
|
this.$refs.meta2dBox.addEventListener('mousemove', this.mousemove)
|
2023-02-23 16:43:15 +08:00
|
|
|
// this.$refs.meta2dBox.addEventListener('mousedown', this.mousedown)
|
|
|
|
|
this.$refs.meta2dBox.addEventListener('mouseup', this.mouseup)
|
|
|
|
|
window.addEventListener('click', this.contextmenuNone)
|
2023-02-16 16:33:20 +08:00
|
|
|
},
|
|
|
|
|
methods: {
|
2023-02-22 18:21:39 +08:00
|
|
|
mousemove (e) {
|
|
|
|
|
window.ePosition = e
|
2023-02-23 16:43:15 +08:00
|
|
|
},
|
|
|
|
|
mouseup () {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.setContextmenu = true
|
|
|
|
|
}, 100)
|
2023-03-24 15:09:01 +08:00
|
|
|
},
|
|
|
|
|
zoomMap (num) {
|
|
|
|
|
getTopology(this.meta2dId).scale(getTopology(this.meta2dId).store.data.scale + num)
|
2023-03-24 16:58:08 +08:00
|
|
|
}
|
2023-02-16 18:13:14 +08:00
|
|
|
},
|
|
|
|
|
beforeDestroy () {
|
2023-03-24 16:58:08 +08:00
|
|
|
if (getTopology(this.meta2dId)) {
|
2023-04-03 16:30:49 +08:00
|
|
|
getTopology(this.meta2dId).off('translate', this.topTranslate) // 平移·
|
|
|
|
|
getTopology(this.meta2dId).off('scale', this.topoScale) // 缩放·
|
|
|
|
|
getTopology(this.meta2dId).off('active', this.pensActive) // 选中·
|
|
|
|
|
getTopology(this.meta2dId).off('translatePens', () => {}) // 移动画笔结束·
|
|
|
|
|
getTopology(this.meta2dId).off('translatingPens', () => {}) // 移动画笔进行中·
|
|
|
|
|
getTopology(this.meta2dId).off('enter', this.penEnter) // 移入画笔·
|
|
|
|
|
getTopology(this.meta2dId).off('leave', this.penLeave) // 移出画笔·
|
|
|
|
|
getTopology(this.meta2dId).off('add', this.appPen) // 添加新画笔·
|
|
|
|
|
getTopology(this.meta2dId).off('click', this.topoClick) // click画笔·
|
2023-04-03 17:03:47 +08:00
|
|
|
getTopology(this.meta2dId).destroy(true)
|
|
|
|
|
for (const k in globalStore) {
|
|
|
|
|
if (!globalStore[k]) {
|
|
|
|
|
delete globalStore[k]
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-03-24 16:58:08 +08:00
|
|
|
setTopology(this.meta2dId, null)
|
|
|
|
|
}
|
2023-02-20 19:11:10 +08:00
|
|
|
bus.$off('changeSelectPens', this.pensActive)
|
2023-02-22 18:21:39 +08:00
|
|
|
this.$refs.meta2dBox.removeEventListener('mousemove', this.mousemove)
|
2023-02-23 16:43:15 +08:00
|
|
|
this.$refs.meta2dBox.removeEventListener('mouseup', this.mouseup)
|
2023-04-03 16:30:49 +08:00
|
|
|
window.removeEventListener('click', this.contextmenuNone)
|
2023-02-16 16:33:20 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
</script>
|