<template>
|
<div class="trace-plot">
|
<div class="filter-bar">
|
<el-date-picker
|
size="small"
|
v-model="searchTime"
|
@change="searchData"
|
type="datetimerange"
|
start-placeholder="开始日期"
|
end-placeholder="结束日期"
|
value-format="yyyy-MM-dd HH:mm:ss"
|
:default-time="['00:00:00','23:59:59']"
|
|
></el-date-picker>
|
<el-button @click="searchData" size="small" type="primary" class="btn-search">查 询</el-button>
|
</div>
|
<!-- <p class="p-date" style="width:19%;vertical-align: top;">
|
<el-date-picker
|
size="mini"
|
v-model="searchTime"
|
@change="searchData"
|
type="datetimerange"
|
start-placeholder="开始日期"
|
end-placeholder="结束日期"
|
value-format="yyyy-MM-dd HH:mm:ss"
|
:default-time="['00:00:00','23:59:59']"
|
style="width:99%;min-width:200px"
|
></el-date-picker>
|
</p> -->
|
<canvas ref="trackArea" width="960" height="540" :style="{backgroundImage:`url(${panoramaPath})`}"></canvas>
|
</div>
|
</template>
|
|
<script>
|
import { getSearchList } from '@/api/search';
|
import { getPanoramaPic } from "@/api/panorama";
|
export default {
|
data () {
|
return {
|
panoramaPath:'',
|
trackData: [],
|
activeObjHashMap: {},
|
actObj: {},
|
searchTime: [
|
this.$moment().format("YYYY-MM-DD 00:00:00"),
|
this.$moment().format("YYYY-MM-DD 23:59:59")
|
//this.$moment().format("YYYY-MM-DD HH:mm:ss")
|
],
|
timer: null,
|
}
|
},
|
mounted () {
|
this.searchData();
|
this.getPanoramaPic();
|
this.timer = setInterval(()=>{
|
this.searchData();
|
},7000);
|
},
|
beforeDestroy(){
|
console.log('beforeDestroy')
|
clearInterval(this.timer);
|
},
|
methods: {
|
getPanoramaPic () {
|
let _this = this;
|
getPanoramaPic().then(res=>{
|
_this.panoramaPath = res.data.panoramaPath
|
})
|
},
|
drawTracePath () {
|
//let canvas = document.querySelector('#trackArea');
|
let canvas = this.$refs['trackArea'];
|
let ctx = canvas.getContext('2d');
|
ctx.clearRect(0,0,canvas.width,canvas.height);
|
ctx.strokeStyle = 'yellow';
|
ctx.fillStyle = 'aqua';
|
//ctx.globalAlpha=0.5;
|
ctx.lineWidth = 2;
|
//ctx.lineJoin='round';
|
ctx.lineCap = 'round';
|
for (var target in this.actObj) {
|
ctx.beginPath();
|
ctx.fillStyle = `rgb(${Math.floor(Math.random() * 20 + 220)},${Math.floor(Math.random() * 35 + 200)},${Math.floor(Math.random() * 55 + 200)})`;
|
ctx.strokeStyle = `rgb(${Math.floor(Math.random() * 20 + 220)},${Math.floor(Math.random() * 20 + 210)},${Math.floor(Math.random() * 55 + 200)})`;
|
ctx.fillRect(this.actObj[target][0].globalCoordX, this.actObj[target][0].globalCoordY, 9, 9);
|
ctx.moveTo(this.actObj[target][0].globalCoordX, this.actObj[target][0].globalCoordY);
|
for (var i = 1; i < this.actObj[target].length; i++) {
|
ctx.lineTo(this.actObj[target][i].globalCoordX, this.actObj[target][i].globalCoordY);
|
ctx.fillRect(this.actObj[target][i].globalCoordX, this.actObj[target][i].globalCoordY, 9, 9);
|
}
|
ctx.stroke();
|
}
|
},
|
searchData () {
|
let _this = this;
|
var param = {
|
page: 1,
|
size: 70,
|
searchTime: this.searchTime,
|
alarmlevel: [],
|
inputValue: '',
|
tabs: [],
|
tasks: [],
|
treeNodes: [],
|
isAll: true
|
};
|
getSearchList(param).then(res => {
|
let filterArr = [];
|
res.data.datalist&&res.data.datalist.forEach(obj => {
|
if (_this.activeObjHashMap[obj.activeObject.id] !== 1) {
|
_this.activeObjHashMap[obj.activeObject.id] = 1
|
filterArr.push(obj)
|
}
|
});
|
filterArr.forEach(item => {
|
item.activeObject.targetInfo.forEach(target => {
|
if (target.targetType == 'UniquelID') {
|
let attribute = JSON.parse(target.attribute)
|
if (_this.actObj[target.targetId]) {
|
_this.actObj[target.targetId].push({ globalCoordX: attribute.globalCoordX, globalCoordY: attribute.globalCoordY });
|
} else {
|
_this.actObj[target.targetId] = [{ globalCoordX: attribute.globalCoordX, globalCoordY: attribute.globalCoordY }];
|
}
|
}
|
})
|
});
|
console.log(_this.actObj)
|
_this.drawTracePath()
|
})
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss">
|
.trace-plot {
|
.filter-bar{
|
width: 960px;
|
margin: 20px auto;
|
display: flex;
|
align-items: center;
|
flex-direction: end;
|
.btn-search{
|
margin-left:20px;
|
}
|
}
|
canvas {
|
background: lightsteelblue;
|
background-repeat: no-repeat;
|
|
}
|
}
|
</style>
|