diff --git a/nezha-fronted/src/components/common/project/popData/chart.scss b/nezha-fronted/src/components/common/project/popData/chart.scss deleted file mode 100644 index 80e3cee1a..000000000 --- a/nezha-fronted/src/components/common/project/popData/chart.scss +++ /dev/null @@ -1,597 +0,0 @@ -.clearfix:after{ - display: block; - content: ""; - clear: both; -} -.clearfix{ - margin-bottom: 0px; -} -.hidden{ - visibility: hidden; -} -.visible{ - visibility: visible; -} -.legend-shape{ - display:inline-block; - margin-right:5px; - border-radius:10px; - width:15px; - height:5px; - vertical-align: middle; -} -.ft-gr{ - color:lightgray; -} -.legend-container{ - width: calc(100% - 30px); - max-height:40px; - min-height:25px; - font-size:12px; - text-align:left; - left: 10px; - bottom: 0px; - line-height: 18px; - position: absolute; - padding-bottom:3px; -} -.nz-icon-warning{ - color: #e6a23c; -} -.legend-container-screen.legend-container { - max-height: 80px; - min-height:25px; -} -.legend-item{ - text-overflow:ellipsis; - white-space:nowrap; - /*width:100%;*/ - margin-right:10px; - overflow-x:hidden; - cursor:pointer; - display:inline-block; - float:left; - line-height: 20px; -} -.nz-chart-dropdown { - height: 180px; - li { - padding-left:15px !important; - padding-right:0px !important; - width:140px; - text-align: left; - i { - margin-right: 10px; - } - } -} -.nz-chart-dropdown-one { - height: 36px; - li { - padding-left:15px !important; - padding-right:0px !important; - width:140px; - text-align: left; - i { - margin-right: 10px; - } - } -} -.panel-info-corner { - color: #767980; - cursor: pointer; - position: absolute; - display: none; - left: 0; - width: 28px; - height: 28px; - z-index: 2; - top: 0; -} -.panel-info-corner--error { - display: block; - color: #fff; -} -.panel-info-corner .fa { - position: relative; - top: -4px; - left: -6px; - font-size: 75%; - z-index: 3; -} -.panel-info-corner .fa-model { - position: relative; - top: -3px; - left: 4px; - font-size: 75%; - z-index: 3; -} -.fa, .fa-model{ - display: inline-block; - text-rendering: auto; - -webkit-font-smoothing: antialiased; -} - -.panel-info-corner--error .panel-info-corner-inner { - border-left: 28px solid #e02f44; - border-right: none; - border-bottom: 28px solid rgba(0,0,0,0); - } -.panel-info-corner-inner { - width: 0; - height: 0; - position: absolute; - left: 0; - bottom: 0; -} -.chart-error-popper[x-placement^=top] .popper__arrow::after { - border-top-color: #e02f44; - bottom:0px; -} -.chart-error-popper[x-placement^=bottom] .popper__arrow::after { - border-bottom-color: #e02f44; -} -.popper__arrow::after{ - border:solid 3px yellow -} -.chart-error-popper{ - background-color:#e02f44; - color:#FFF; - word-wrap:break-word; - word-break:break-word; - max-width:280px; - border: 1px solid #e02f44; -} -.chart-warring-popper[x-placement^=top] .popper__arrow::after { - border-top-color: #e6a23c; - bottom:0px; -} -.chart-warring-popper[x-placement^=bottom] .popper__arrow::after { - border-bottom-color: #e6a23c; -} -.popper__arrow::after{ - border:solid 3px yellow -} -.chart-warring-popper{ - background-color:#e6a23c; - color:#FFF; - word-wrap:break-word; - word-break:break-word; - max-width:280px; - border: 1px solid #e6a23c; -} -.moreTitle{ - .panel-info-corner--error .panel-info-corner-inner { - border-left: 28px solid #e6a23c; - border-right: none; - border-bottom: 28px solid rgba(0,0,0,0); - } - .panel-info-corner-inner { - width: 0; - height: 0; - position: absolute; - left: 0; - bottom: 0; - } - .nz-icon-warning:before { - color: #fff; - } -} -.nz-chart-resize { - height: 100%; - width: 100%; - position: relative; -} -.resize-box { - border: 1px solid #d8dce1; - position: absolute; - box-sizing: border-box; - width: 100%; - height: 100%; - top: 0; - left: 0; -} -.resize-shadow { - height: 100%; - width: 100%; - position: absolute; - box-sizing: border-box; -} -.resize-shadow-active { - background-color: #f5f9ff; - border: 1px solid #b7d0f7; - box-shadow: 1px 1px 1px #d3e1f8; -} -.drag-disabled .el-dropdown-link { - cursor: default !important; -} -.resize-box { - .pagination { - padding-top: 0; - } - .success { - background-color: #50d050; - color: white; - padding: 2px 5px; - border-radius: 4px; - } - .danger { - background-color: #d64f40; - color: white; - padding:2px 5px; - border-radius: 4px; - } - .chart-table, .chart-alert-info { - width: 100%; - .table-container { - padding: 0 6px; - box-sizing: border-box; - .nz-table { - margin-top: 6px; - box-sizing: border-box; - } - } - } - .chart-single-stat { - width: 100%; - .single-stat-container { - padding-left: 8px; - padding-right: 8px; - display: table; - text-align: center; - width: calc(100% - 16px); - .single-stat-content{ - text-align:center; - vertical-align: middle; - display:table-cell; - font-size:30px; - } - } - } - .chart-container.chart-detail { - height: 100%; - position: relative; - background-color: white; - .chart-title:hover { - background-color:#d8dce1; - } - .chart-title:not(.drag-disabled) { - cursor: move; - } - .chart-title { - text-align: center; - width: 100%; - line-height: 30px; - padding: 1px 3px 0 3px; - box-sizing: border-box; - .nz-chart-top{ - width:100%; - } - .el-dropdown-link { - cursor: move; - } - .nz-icon-arrow-down { - font-size: 12px; - } - .chart-title-text { - font-size: 16px; - line-height: 26px; - color: #52545c; - display:flex; - justify-content:center; - align-items:center; - max-width:calc(100% - 20px); - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - .chart-title-icon{ - display: inline-block; - cursor: pointer; - } - } - } - .chart-info { - padding-top: 6px; - width: 100%; - height: calc(100% - 34px); - } - .active-icon { - margin: 0; - } - .chart-sub { - padding: 0 15px; - margin-bottom: 5px; - :last-of-type { - margin-bottom: 0; - } - } - .chart-sub-title { - background-color: #efefef; - font-size: 13px; - color: #505255; - padding-left: 2px; - height: 25px; - line-height: 25px; - user-select: none; - } - .chart-sub-content, .chart-third-content, .chart-forth-content { - width: 100%; - box-sizing: border-box; - >.content-item>.item-tip { - display: inline-block; - box-sizing: border-box; - } - >.content-item>.item-tip:not(.content-item-value-muti) { - padding: 0 3px 0 13px; - } - >.content-item { - font-size: 13px; - line-height: 26px; - border-top: 1px solid rgb(235, 238, 245); - display: flex; - position: relative; - flex-wrap: wrap; - .item-tip> { - .item-tip-hide { - display: none; - position: absolute; - bottom: 34px; - min-width: 50px; - white-space: normal; - } - .item-tip-key { - left: 17%; - transform: translateX(-50%); - width: 33%; - } - .item-tip-value { - left: 67%; - width: 63%; - transform: translateX(-50%); - } - .item-tip-hide::after { - content: ''; - display: block; - width:0; - height:0; - overflow: hidden; - font-size: 0; - line-height: 0; - border: 5px; - border-style: dashed dashed solid dashed; - border-color: white transparent transparent transparent; - position: absolute; - left: 50%; - bottom: 0; - transform: translate(-50%, 10px); - } - } - .item-tip:hover>.item-tip-show { - display: block; - } - .item-tip.deep { - padding-left: 26px; - box-sizing: border-box; - height: 26px; - } - .item-tip.deepp { - padding-left: 39px; - box-sizing: border-box; - height: 26px; - } - .item-tip.deep:nth-of-type(2) { - padding-left: 13px; - box-sizing: border-box; - height: 26px; - } - .item-tip.deepp:last-of-type { - padding-left: 13px; - box-sizing: border-box; - height: 26px; - } - .tag-value:hover .item-tip-show { - display: block; - } - .tag-value { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - } - .content-item-key { - color: #666; - width: 35%; - height: 26px; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - } - .content-item-key .no-overflow, .content-item-value .no-overflow { - text-overflow: unset; - white-space: normal; - } - .content-item-value { - .item-value-sub { - padding: 0 3px 0 13px; - box-sizing: border-box; - } - .item-value-sub:not(:last-of-type) { - border-bottom: 1px solid rgb(235, 238, 245); - } - .nz-table { - th .cell { - height: 25px; - line-height: 25px; - } - td .cell { - min-height: 26px; - line-height: 26px; - } - .el-table__body { - background-color: white; - } - .el-table__body tr:last-of-type td { - border: none; - } - .el-table__body tr td { - background-color: white; - } - .el-table__body tr:hover>td { - background-color: white; - } - } - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - border-left: 1px solid rgb(235, 238, 245); - color: #1a1a1a; - width: 65%; - height: 99%; - } - } - } - .chart-sub-content { - >.content-item:first-of-type { - border-top: none; - } - >.content-item:last-of-type { - border-bottom: 1px solid rgb(235, 238, 245); - } - } - } - .chart-url { - .url-container { - padding: 0 8px 8px 8px; - box-sizing: border-box; - } - } - .line-chart-block, .chart-table, .chart-single-stat, .chart-url, .chart-asset-info, .chart-alert-info, .chart-project-info, .chart-alert-rule-info ,.vis-network{ - height: 100%; - position: relative; - background-color: white; - .chartTitle:hover { - background-color:#d8dce1; - } - .chartTitle { - text-align: center; - width: 100%; - line-height: 30px; - height: 28px; - padding: 1px 3px 0 3px; - box-sizing: border-box; - .nz-chart-top{ - width:100%; - } - .el-dropdown-link { - cursor: move; - } - .nz-icon-arrow-down { - font-size: 12px; - } - .chart-title { - font-size: 16px; - line-height: 26px; - color: #52545c; - display:flex; - justify-content:center; - align-items:center; - .chart-title-text{ - max-width:calc(100% - 20px); - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - } - .chart-title-icon{ - display: inline-block; - cursor: pointer; - } - } - } - - .line-area { - box-sizing: border-box; - background: #FFF; - min-height: 95px; - padding-left:8px; - padding-right:8px; - } - .button-panel-height{ - height:26px; - } - .button-panel-height button{ - height:26px; - } - .edit { - position: absolute; - right: 20px; - top: 17px; - z-index: 10; - - } - .chart-select { - position: absolute; - left: 40px; - top: 25px; - z-index: 10; - font-size: 14px; - .chart-select-btn { - margin-right: 10px; - cursor: pointer; - &.active { - color: #5aacff; - } - } - } - /*没有数据显示*/ - .null { - position: absolute; - top: 50%; - width: 100%; - text-align: center; - font-size: 24px; - font-weight: 600; - } - } -} -.dialog-tool { - margin-right: 40px; -} -.line-chart-block-modal { - .el-dialog{ - height: 80%; - } - .line-area { - box-sizing: border-box; - background: #FFF; - height: 100%; - span.highcharts-title {/*针对highcharts设置的样式,echarts需要修改??*/ - display: block !important; - width: 50%; - font-size: 14px !important; - overflow: hidden; - word-wrap: break-word !important; - white-space: pre-wrap !important; - } - } - .element-top-border { - padding-bottom: 5px; - border-top: 1px solid #dfe7f2; - margin-top:-25px; - } - - .element-bottom-border { - border-bottom: 1px solid #dfe7f2; - margin-bottom:-20px; - } - .pt10{ - padding-top:10px; - } - .el-dialog__body { - height: calc(100% - 80px); - } - - .el-dialog__header{ - padding: 20px 20px 0px; - } - -} diff --git a/nezha-fronted/src/components/common/project/popData/lineChart.vue b/nezha-fronted/src/components/common/project/popData/lineChart.vue deleted file mode 100644 index 3845c1878..000000000 --- a/nezha-fronted/src/components/common/project/popData/lineChart.vue +++ /dev/null @@ -1,1696 +0,0 @@ - - - - diff --git a/nezha-fronted/src/components/common/project/popData/totalChart.vue b/nezha-fronted/src/components/common/project/popData/totalChart.vue deleted file mode 100644 index 4a487bba2..000000000 --- a/nezha-fronted/src/components/common/project/popData/totalChart.vue +++ /dev/null @@ -1,689 +0,0 @@ - - - - - diff --git a/nezha-fronted/src/components/common/project/topologyL5.vue b/nezha-fronted/src/components/common/project/topologyL5.vue index bf1921fb8..8edc97447 100644 --- a/nezha-fronted/src/components/common/project/topologyL5.vue +++ b/nezha-fronted/src/components/common/project/topologyL5.vue @@ -270,10 +270,6 @@
- -
- -
@@ -340,7 +336,6 @@ import VueDraggableResizable from 'vue-draggable-resizable';//api https://github.com/mauricius/vue-draggable-resizable import popDataMain from './popData/Main' import popDataInfo from './popData/Info' - import TotalChart from "./popData/totalChart"; import alertTable from "./popData/alertTable"; import assetTable from "./popData/assetTable"; import endpointTable from "./popData/endpointTable"; @@ -481,7 +476,6 @@ VueDraggableResizable, popDataMain, popDataInfo, - TotalChart, alertTable, assetTable, endpointTable, @@ -602,81 +596,7 @@ methods:{ init(){ canvasOptions.on=this.onMessage; - this.getTopologyData().then((data)=>{ - this.openTopologyData(data).then(()=>{ - //获取对应的值 给节点 连线添加对应动画 - this.lineName=data.lineName?data.lineName:this.lineName; - this.chartGetData=[]; - let axiosArr=[]; - let promiseArr=[]; - let self=this; - let pensPromise=(pen, arr,index)=>{ - return new Promise(function(resolve, reject) { - Promise.all(arr).then((res)=>{ - self.chartGetData[index].res=self.computeData(res,pen.data.aggregation,pen); - self.setAnimation(pen,self.chartGetData[index].res); - resolve() - }); - }); - }; - let endTime=this.filterTime[1]; - let startTime=this.filterTime[0]; - let step=bus.getStep(startTime,endTime); - data.pens&&data.pens.forEach((item,index)=>{ - this.chartGetData.push({id:item.id,res:[]}); - let arr=item.data.expressArr.map((ele)=>{ - let query=encodeURIComponent(ele); - if(!query){ - return new Promise(resolve=>{ - resolve({data:"",status:'no query'}); - }) - } - query+='&nullType='+'connected'; - return this.$get('/prom/api/v1/query_range?query='+query+"&start="+this.$stringTimeParseToUnix(startTime)+"&end="+this.$stringTimeParseToUnix(endTime)+'&step='+step); - }); - axiosArr.push({item,arr}); - promiseArr.push(pensPromise(item,arr,index)) - }); - Promise.all(promiseArr).then((res)=>{ - getTopology(this.topologyIndex).open(data); - getTopology(this.topologyIndex).lock(1); - this.objChange=false; - let flag=false; - - let position={ - x:this.$refs['topology-canvas'+this.topologyIndexF].offsetWidth, - y:this.$refs['topology-canvas'+this.topologyIndexF].offsetHeight, - } - getTopology(this.topologyIndex).centerView(20); - getTopology(this.topologyIndex).data.pens.forEach(item=>{ - if(flag){ - return - } - if(item.rect.ex>position.x || item.rect.ey>position.y){ - getTopology(this.topologyIndex).fitView(20); - flag=true - } - }); - getTopology(this.topologyIndex).centerView(20); - this.penToolTipScale= getTopology(this.topologyIndex).data.scale; - setTimeout(()=>{ - getTopology(this.topologyIndex).data.pens.forEach(item=>{ - if(item.animatePlay){ - item.stopAnimate(); - setTimeout(()=>{ - item.startAnimate() - }) - } - },100); - }) - // if(this.fromPrev){ - // getTopology(this.topologyIndex).scaleTo(data.scale/2) - // } - // getTopology(this.topologyIndex).fitView(); - this.getNodesArr(); - }); - }) - }); + this.reload(); }, reload(){ @@ -721,12 +641,10 @@ getTopology(this.topologyIndex).lock(1); this.objChange=false; let flag=false; - let position={ x:this.$refs['topology-canvas'+this.topologyIndexF].offsetWidth, y:this.$refs['topology-canvas'+this.topologyIndexF].offsetHeight, } - getTopology(this.topologyIndex).centerView(20); getTopology(this.topologyIndex).data.pens.forEach(item=>{ if(flag){ return @@ -757,6 +675,7 @@ }) }); }, + dateChange() { let nowTimeType = this.$refs.pickTime.$refs.timePicker.nowTimeType; this.setSearchTime(nowTimeType.type,nowTimeType.value); @@ -847,7 +766,7 @@ let self=this; data.pens.forEach((item=>{ if(item.type===0&&item.data.imageId){ - item.image=this.iconArray.find(item1=>item1.id==item.data.imageId).image + item.image=this.iconArray.find(item1=>item1.id==item.data.imageId).image; } if(item.type===0){ promiseArr.push(this.$get('/module/stat',{id:item.data.moduleId})); @@ -1638,6 +1557,8 @@ imgidList.forEach((item,index)=>{ if(item.data.imageId){ promiseArr.push( this.dealImg(`/project/topo/icon/${item.data.imageId}`)); + }else{ + promiseArr.push(''); } }); Promise.all(promiseArr).then(res2=>{ @@ -1647,17 +1568,9 @@ } }); this.iconArray.forEach((item,index)=>{ - if(!item.id){return}; - this.tools[1].children.push({ - ...imageTemp, - data:{ - ...imageTemp.data, - text:item.imageName, - image:res2[index], - imageId:item.id, - } - }) - item.image=res2[index]; + if(item.id){ + item.image=res2[index]; + } }); this.imgInit=true; }) @@ -1862,9 +1775,23 @@ // this.toolShow.attrCord=[domRect.width-350,0]; // this.toolShow.height=domRect.height; getTopology(this.topologyIndex).canvasPos=domRect; - getTopology(this.topologyIndex).centerView(); + let flag=false; + + let position={ + x:this.$refs['topology-canvas'+this.topologyIndexF].offsetWidth, + y:this.$refs['topology-canvas'+this.topologyIndexF].offsetHeight, + } + getTopology(this.topologyIndex).data.pens.forEach(item=>{ + if(flag){ + return + } + if(item.rect.ex>position.x || item.rect.ey>position.y){ + getTopology(this.topologyIndex).fitView(20); + flag=true + } + }); + getTopology(this.topologyIndex).centerView(20); this.getNodesArr(); - console.log(213213123123); }, canvasMove(e){// 画布上的移动 确定tooltip的位置 if(this.tooltipPosition.show){ diff --git a/nezha-fronted/src/components/common/project/topologyPrev.vue b/nezha-fronted/src/components/common/project/topologyPrev.vue index c743818c3..5a3c92be5 100644 --- a/nezha-fronted/src/components/common/project/topologyPrev.vue +++ b/nezha-fronted/src/components/common/project/topologyPrev.vue @@ -63,7 +63,7 @@ :popper-append-to-body="false" @change="changeTopologyOpt(lineName,'lineName')">
-
+
- 默认连线类型 + {{$t('project.topology.defaultLineType')}} -
+
+ {{item.name}}
@@ -97,6 +98,7 @@ ref="topTool" @toolShowChange="toolShowChange" :cachesIndex="cachesIndex" + :redoIndexChange="redoIndexChange" :toolShow="toolShow"> @@ -245,7 +247,9 @@
+ @mouseout="tooltipOut" + ref="topoTooltip" + >
@@ -266,10 +270,6 @@
- -
- -
@@ -336,7 +336,6 @@ import VueDraggableResizable from 'vue-draggable-resizable';//api https://github.com/mauricius/vue-draggable-resizable import popDataMain from './popData/Main' import popDataInfo from './popData/Info' - import TotalChart from "./popData/totalChart"; import alertTable from "./popData/alertTable"; import assetTable from "./popData/assetTable"; import endpointTable from "./popData/endpointTable"; @@ -385,6 +384,7 @@ name:'', }, saveData:{}, + redoIndex:0, dataLength:0, editTopologyFlag:false, searchTime: bus.getTimezontDateRange(), @@ -446,9 +446,9 @@ chartData:{}, chartGetData:[], penLineType:[ - {d:'M5 19 a50,100 0 0,1 40,0',"stroke-dasharray":"",name:'curve'}, - {d:'M5 8 l20 0 l0 12 l20 0',"stroke-dasharray":"",name:'polyline'}, - {d:'M5 14 l40 0',"stroke-dasharray":"",name:'line'}, + {d:'M5 19 a50,100 0 0,1 40,0',"stroke-dasharray":"",name:this.$t('project.topology.curve')}, + {d:'M5 8 l20 0 l0 12 l20 0',"stroke-dasharray":"",name:this.$t('project.topology.polyline')}, + {d:'M5 14 l40 0',"stroke-dasharray":"",name:this.$t('project.topology.line')}, // {d:'M5 20 C0,8 50,0 85,0',"stroke-dasharray":"",name:'mind'}, ], lineName:'curve', @@ -476,7 +476,6 @@ VueDraggableResizable, popDataMain, popDataInfo, - TotalChart, alertTable, assetTable, endpointTable, @@ -597,81 +596,7 @@ methods:{ init(){ canvasOptions.on=this.onMessage; - this.getTopologyData().then((data)=>{ - this.openTopologyData(data).then(()=>{ - //获取对应的值 给节点 连线添加对应动画 - this.lineName=data.lineName?data.lineName:this.lineName; - this.chartGetData=[]; - let axiosArr=[]; - let promiseArr=[]; - let self=this; - let pensPromise=(pen, arr,index)=>{ - return new Promise(function(resolve, reject) { - Promise.all(arr).then((res)=>{ - self.chartGetData[index].res=self.computeData(res,pen.data.aggregation,pen); - self.setAnimation(pen,self.chartGetData[index].res); - resolve() - }); - }); - }; - let endTime=this.filterTime[1]; - let startTime=this.filterTime[0]; - let step=bus.getStep(startTime,endTime); - data.pens&&data.pens.forEach((item,index)=>{ - this.chartGetData.push({id:item.id,res:[]}); - let arr=item.data.expressArr.map((ele)=>{ - let query=encodeURIComponent(ele); - if(!query){ - return new Promise(resolve=>{ - resolve({data:"",status:'no query'}); - }) - } - query+='&nullType='+'connected'; - return this.$get('/prom/api/v1/query_range?query='+query+"&start="+this.$stringTimeParseToUnix(startTime)+"&end="+this.$stringTimeParseToUnix(endTime)+'&step='+step); - }); - axiosArr.push({item,arr}); - promiseArr.push(pensPromise(item,arr,index)) - }); - Promise.all(promiseArr).then((res)=>{ - getTopology(this.topologyIndex).open(data); - getTopology(this.topologyIndex).lock(1); - this.objChange=false; - let flag=false; - - let position={ - x:this.$refs['topology-canvas'+this.topologyIndexF].offsetWidth, - y:this.$refs['topology-canvas'+this.topologyIndexF].offsetHeight, - } - getTopology(this.topologyIndex).centerView(20); - getTopology(this.topologyIndex).data.pens.forEach(item=>{ - if(flag){ - return - } - if(item.rect.ex>position.x || item.rect.ey>position.y){ - getTopology(this.topologyIndex).fitView(20); - flag=true - } - }); - getTopology(this.topologyIndex).centerView(20); - this.penToolTipScale= getTopology(this.topologyIndex).data.scale; - setTimeout(()=>{ - getTopology(this.topologyIndex).data.pens.forEach(item=>{ - if(item.animatePlay){ - item.stopAnimate(); - setTimeout(()=>{ - item.startAnimate() - }) - } - },100); - }) - // if(this.fromPrev){ - // getTopology(this.topologyIndex).scaleTo(data.scale/2) - // } - // getTopology(this.topologyIndex).fitView(); - this.getNodesArr(); - }); - }) - }); + this.reload(); }, reload(){ @@ -716,12 +641,10 @@ getTopology(this.topologyIndex).lock(1); this.objChange=false; let flag=false; - let position={ x:this.$refs['topology-canvas'+this.topologyIndexF].offsetWidth, y:this.$refs['topology-canvas'+this.topologyIndexF].offsetHeight, } - getTopology(this.topologyIndex).centerView(20); getTopology(this.topologyIndex).data.pens.forEach(item=>{ if(flag){ return @@ -752,6 +675,7 @@ }) }); }, + dateChange() { let nowTimeType = this.$refs.pickTime.$refs.timePicker.nowTimeType; this.setSearchTime(nowTimeType.type,nowTimeType.value); @@ -842,7 +766,7 @@ let self=this; data.pens.forEach((item=>{ if(item.type===0&&item.data.imageId){ - item.image=this.iconArray.find(item1=>item1.id==item.data.imageId).image + item.image=this.iconArray.find(item1=>item1.id==item.data.imageId).image; } if(item.type===0){ promiseArr.push(this.$get('/module/stat',{id:item.data.moduleId})); @@ -1161,15 +1085,8 @@ }, onMessage(event,data,e){ - // console.log('onMessage',event,data); + // console.log('onMessage',event); // console.log(getTopology(this.topologyIndex)) - if(getTopology(this.topologyIndex)){ - this.cachesIndex=getTopology(this.topologyIndex).caches.index; - if(this.$refs.topTool){ - this.$refs.topTool.redoFlag=false - } - ; - } if(!Array.isArray(data)&&data){//判断不是数组 提前个data配置好节点属性 // if(data.type===0){ // data.textRect=new Rect(data.rect.ex-10,data.rect.ey-10,data.rect.width,data.rect.height); @@ -1213,13 +1130,14 @@ }else if(data.type==1&& !data.data){ //连线是否自动计算锚点 // data.manualCps=true; + data.animateColor='#FA901C'; data.data={ animatePlay:false, strokeStyle:data.strokeStyle, animateColor:data.animateColor, - arrowColor:data.arrowColor, - fromArrowColor:data.fromArrowColor, - toArrowColor:data.toArrowColor, + arrowColor:"#00000", + fromArrowColor:"#00000", + toArrowColor:"#00000", lineWidth:1, //chart 配置项 valueMapping:[{ @@ -1246,12 +1164,12 @@ moduleName:'', url:'', }; - data.animateColor='#FA901C' } if(data.type===0||data.type===1){ data.lineWidth=data.data.lineWidth; } } + switch(event){ case 'moveInNode': case 'moveInLine': @@ -1263,7 +1181,26 @@ this.tooltipPosition.show=false; setTimeout(()=>{ this.tooltipPosition.show=true; - },50); + let ePosition=window.ePosition; + let boxWidth=document.getElementsByClassName('page')[0].offsetWidth; + let boxHeight=document.getElementsByClassName('page')[0].offsetHeight; + this.tooltipPosition.left=ePosition.layerX+20; + this.tooltipPosition.top=ePosition.layerY; + this.$nextTick(()=>{ + if(this.$refs['topoTooltip']){ + if((boxWidth/2)>ePosition.layerX){ + this.tooltipPosition.left=ePosition.layerX+20; + }else { + this.tooltipPosition.left=ePosition.layerX - 20 - this.$refs['topoTooltip'].offsetWidth; + } + if(boxHeight>(ePosition.layerY+this.$refs['topoTooltip'].offsetHeight)){ + this.tooltipPosition.top=ePosition.layerY; + }else { + this.tooltipPosition.top=ePosition.layerY - this.$refs['topoTooltip'].offsetHeight; + } + } + }) + },100); break; case 'moveOutNode': case 'moveOutLine': @@ -1273,18 +1210,35 @@ this.timer3=setTimeout(()=>{ this.tooltipPosition.show=false; this.timer3=null - },150) + },50) }else{ clearTimeout(this.timer3); this.timer3=setTimeout(()=>{ this.tooltipPosition.show=false; this.timer3=null - },150) + },50) } break; } // 右侧输入框编辑状态时点击编辑区域其他元素,onMessage执行后才执行onUpdateProps方法,通过setTimeout让onUpdateProps先执行 setTimeout(()=>{ + // setTimeout(()=>{ + // if(getTopology(this.topologyIndex)){ + // this.cachesIndex=getTopology(this.topologyIndex).caches.index; + // console.log(this.cachesIndex) + // } + // if(getTopology(this.topologyIndex)&&this.$refs.topTool&&this.$refs.topTool.redoFlag){ + // console.log( this.cachesIndex, this.redoIndex); + // if(event==='redo'){ + // this.redoIndex++; + // }else{ + // this.redoIndex--; + // } + // if(this.$refs.topTool&&(this.redoIndex!==this.cachesIndex)){ + // this.$refs.topTool.redoFlag=false + // }; + // } + // },50); switch(event){ case 'node': case 'addNode': @@ -1603,6 +1557,8 @@ imgidList.forEach((item,index)=>{ if(item.data.imageId){ promiseArr.push( this.dealImg(`/project/topo/icon/${item.data.imageId}`)); + }else{ + promiseArr.push(''); } }); Promise.all(promiseArr).then(res2=>{ @@ -1612,17 +1568,9 @@ } }); this.iconArray.forEach((item,index)=>{ - if(!item.id){return}; - this.tools[1].children.push({ - ...imageTemp, - data:{ - ...imageTemp.data, - text:item.imageName, - image:res2[index], - imageId:item.id, - } - }) - item.image=res2[index]; + if(item.id){ + item.image=res2[index]; + } }); this.imgInit=true; }) @@ -1681,8 +1629,8 @@ item.animateColor=item.data.animateColor; item.strokeStyle=item.data.strokeStyle; item.arrowColor=item.data.arrowColor; - item.fromArrowColor=item.data.fromArrowColor; - item.toArrowColor=item.data.toArrowColor; + item.fromArrowColor=item.data.arrowColor; + item.toArrowColor=item.data.arrowColor; item.animatePlay=false; item.font.color="#000000"; } @@ -1691,6 +1639,10 @@ this.toolShow.attrCord=[domRect.width-350,0]; this.toolShow.height=domRect.height; getTopology(this.topologyIndex).canvasPos=domRect; + getTopology(this.topologyIndex).caches={ + index:0, + list:[JSON.parse(JSON.stringify(getTopology(this.topologyIndex).data))] + } }) }, @@ -1819,19 +1771,33 @@ /*tools 方法*/ winResize(){ - let domRect=document.getElementById('topology-canvas'+this.topologyIndexF).getBoundingClientRect(); - this.toolShow.attrCord=[domRect.width-350,0]; - this.toolShow.height=domRect.height; + let domRect=document.getElementById('topology-canvas'+this.topologyIndex).getBoundingClientRect(); + // this.toolShow.attrCord=[domRect.width-350,0]; + // this.toolShow.height=domRect.height; getTopology(this.topologyIndex).canvasPos=domRect; - getTopology(this.topologyIndex).centerView(); + let flag=false; + + let position={ + x:this.$refs['topology-canvas'+this.topologyIndexF].offsetWidth, + y:this.$refs['topology-canvas'+this.topologyIndexF].offsetHeight, + } + getTopology(this.topologyIndex).data.pens.forEach(item=>{ + if(flag){ + return + } + if(item.rect.ex>position.x || item.rect.ey>position.y){ + getTopology(this.topologyIndex).fitView(20); + flag=true + } + }); + getTopology(this.topologyIndex).centerView(20); this.getNodesArr(); }, canvasMove(e){// 画布上的移动 确定tooltip的位置 if(this.tooltipPosition.show){ return } - this.tooltipPosition.top=e.offsetY; - this.tooltipPosition.left=e.offsetX+20; + window.ePosition=e }, tooltipOver(){ clearTimeout(this.timer3); @@ -1841,7 +1807,7 @@ this.timer3=setTimeout(()=>{ this.tooltipPosition.show=false; this.timer3=null - },150) + },50) }, nodeDefaultWidth(nodeName){ switch(nodeName){ @@ -1879,6 +1845,9 @@ } return false; }, + redoIndexChange(index){ + this.redoIndex=index + } }, destroyed(){ getTopology(this.topologyIndex).destroy();