123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633 |
- <template>
- <div style="width:100%;height:100%;position:relative">
- <headerdiv ref="headerDiv" :currentindexP = currentindexNew ></headerdiv>
- <div style="display: inline-flex;width:100%">
- <div style="width:15%;height:100%;">
- <div style="width:100%">
- <div class='droneleftTree'>
- <!-- <el-input
- placeholder="输入关键字进行过滤"
- v-model="filterText"
- style="margin-top:1rem">
- </el-input> -->
- <div style="height:83vh;margin-top:2rem">
- <!-- <el-scrollbar style="height:110%;"> -->
- <el-tree
- icon-class='iconClass'
- :data="treeData"
- lazy
- :expand-on-click-node="false"
- node-key="id"
- :props="defaultProps"
- :default-expand-all= isExpand
- ref="tree"
- @node-click = 'treeChange'
- style="background-color:#04283C;color:#C5D0D4"
- >
- </el-tree>
- <!-- </el-scrollbar> -->
- </div>
- </div>
- </div>
- </div>
- <div style="width:50%;height:95vh">
- <mapdiv ref="mapdiv" style=""></mapdiv>
- </div>
- <div style="width:35%;height:100%;">
- <div style="width:100%;padding-left:1rem">
- <div class="publicTitle" style="margin-top:1.5rem">
- <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
- <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">巡逻记录</div>
- </div>
- <div>
- <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="4.5rem">
- <el-form-item label="时间" prop="time" style="margin-top:0.1rem">
- <el-date-picker
- v-model="dateRange"
- size="small"
- style="width: 24rem"
- value-format="yyyy-MM-dd"
- type="daterange"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- ></el-date-picker>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
- <el-button type="primary" icon="el-icon-search" size="mini" @click="exportQuery">导出</el-button>
- </el-form-item>
- <el-form-item label="区域" prop="areaName">
- <el-select v-model="queryParams.areaName" placeholder="请选择区域" clearable size="small" style="width:16rem">
- <!-- <el-option
- key="0"
- label="全部"
- value="0"
- /> -->
- <el-option
- v-for="dict in dict.type.tl_xun_area"
- :key="dict.value"
- :label="dict.label"
- :value="dict.label"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="巡逻车" prop="imei" label-width="6rem">
- <el-select v-model="queryParams.imei" placeholder="请选择巡逻车" clearable size="small" style="width:16rem">
- <!-- <el-option
- key="0"
- label="全部"
- value="0"
- /> -->
- <el-option
- v-for="obj in treeData"
- :key="obj.imei"
- :label="obj.deviceName"
- :value="obj.imei"
- />
- </el-select>
- </el-form-item>
- </el-form>
- </div>
- <div style='height:38rem'>
- <el-table :data="carRecordList" stripe
- class="my_table"
- max-height=350
- :row-class-name="tableRowClassName"
- :header-cell-style="{background:'#24A3B3 50%',color: '#C5D0D4'}">
- <el-table-column type="index" label="序号" width="55" align="center" />
- <el-table-column label="编号" align="center" prop="imei" />
- <el-table-column label="时间" align="center" prop="gpsTime" />
- <el-table-column label="设备名称" align="center" prop="deviceName" />
- <el-table-column label="累计里程数(KM)" align="center" prop="mileage" />
- <el-table-column label="当天里程数(KM)" align="center" prop="dayMileage" />
- </el-table>
- </div>
- <div class="publicTitle" style="margin-top:1rem">
- <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
- <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">巡逻车统计</div>
- </div>
- <div style="height:25rem;width:100%;margin-top:0.5rem">
- <el-table :data="carList" stripe
- class="my_table"
- max-height=400
- :row-class-name="tableRowClassName"
- :header-cell-style="{background:'#24A3B3 50%',color: '#C5D0D4'}">
- <el-table-column type="index" label="序号" width="55" align="center" />
- <el-table-column label="地点" align="center" prop="areaName" />
- <el-table-column label="巡逻车总数" align="center" prop="totalCar" />
- <el-table-column label="使用中" align="center" prop="onlineCar" />
- </el-table>
- </div>
- </div>
- </div>
- </div>
- <div class="bottombg">
- <div class="item item2" @click="changeMapTab(1)"><div class="num">{{staticCount}}</div><div>静态资源</div></div>
- <div class="item item1 item2" @click="changeMapTab(2)"><div class="num">{{dynamicCount}}</div><div>动态资源</div></div>
- <div class="item item1 " @click="changeMapTab(3)"><div class="num">{{areaCount}}</div><div>行政区划</div></div>
- <!-- <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div> -->
- </div>
- .
- <div class="topbg">
- <div style='display: flex;
- flex-direction: row;
- margin-left:3rem'>
- <div style="">
- <div><img style='width:2.2rem;height:2.2rem' src='../../assets/images/elertic/巡逻车.png' /></div>
- </div>
- <div style='margin-left:1.5rem'>
- <div style="font-size: 1.6rem;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #D6DEE7;">巡逻车总数</div>
- <div style="width: 134px;
- height: 38px;
- background: rgba(9,36,45,0.4000);
- border: 1px solid #30FFE7;
- margin-top:1rem">
- <div style="padding-top:0.1rem;
- padding-left:0.8rem;
- font-size: 2.4rem;
- font-family: Myriad Pro;
- font-weight: 400;
- color: #44D5FF;">
- {{carStaticCount.totalCar}}
- </div>
- </div>
- </div>
- </div>
- <div style='display: flex;
- flex-direction: row;
- margin-left:10rem'>
- <div style="">
- <div><img style='width:2.2rem;height:2.2rem' src='../../assets/images/elertic/卡口在线率.png' /></div>
- </div>
- <div style='margin-left:1.5rem'>
- <div style="font-size: 1.6rem;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #D6DEE7;">巡逻车在线率</div>
- <div style="width: 134px;
- height: 38px;
- background: rgba(9,36,45,0.4000);
- border: 1px solid #30FFE7;
- margin-top:1rem">
- <div style="padding-top:0.1rem;
- padding-left:0.8rem;
- font-size: 2.4rem;
- font-family: Myriad Pro;
- font-weight: 400;
- color: #38FFC6;">
- {{carStaticCount.onlinePercent}}
- </div>
- </div>
- </div>
- </div>
- <!-- <div style='display: flex;
- flex-direction: row;
- margin-left:10rem'>
- <div style="">
- <div><img style='width:2.2rem;height:2.2rem' src='../../assets/images/elertic/故障状态 (1).png' /></div>
- </div>
- <div style='margin-left:1.5rem'>
- <div style="font-size: 1.6rem;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #D6DEE7;">巡逻车故障</div>
- <div style="width: 134px;
- height: 38px;
- background: rgba(9,36,45,0.4000);
- border: 1px solid #30FFE7;
- margin-top:1rem">
- <div style="padding-top:0.1rem;
- padding-left:0.8rem;
- font-size: 2.4rem;
- font-family: Myriad Pro;
- font-weight: 400;
- color: #44D5FF;">
- {{}}
- </div>
- </div>
- </div>
- </div> -->
- </div>
- <!-- <videodiv :cameracode="ccode" style="width:700px;height:300px;position:absolute;top:100px;left:100px"></videodiv> -->
- </div>
- </template>
- <script>
- import moment from "moment";
- import mapdiv from "../../components/map/index.vue"
- import headerdiv from '@/components/HeaderDiv/index.vue'
- import { httpRequest } from "@/api/data/http";
- import { getLineData,getResource,getgovern } from "@/api/qdtl/data";
- import { queryAllList,queryCarStaticByArea,queryLocationRecord,getAllElectricDetail } from "@/api/qdtl/electri";
- import videodiv from "../../components/Videoplayer/index.vue"
- export default {
- dicts: ['tl_area_type','tl_device_type','tl_xun_area'],
- name: "big",
- data() {
- return {
- isExpand:true,
- userList:[],
- areaList:[],
- tdxjCount:111,
- tdcsCount:152,
- currentindexNew:12,
- ccode:"32068166001320000235",
- videoParams:{
- url:'http://2.90.220.252:9017/artemis-web/debug',
- params:'{"httpMethod":"POST","path":"/api/resource/v1/cameras","headers":{},"query":{},"parameter":{},"body":{"pageNo": 1,"pageSize": 5000,"treeCode": "0"},"contentType":"application/json;charset=UTF-8","mock":false,"appKey":"27794545","appSecret":"5Xi27Gl7JrbHHF1MpdaB"}'
- },
- lcChartData:{},
- videoChartDate:{},
- staticCount:0,
- dynamicCount:2,
- areaCount:0,
- menuNameNew:'设置监测',
- lcData:{
- weeks:[],
- counts:[]
- },
- treeData:[],
- carStaticCount:{},
- carList:[],
- dateRange:'',
- queryParams:{},
- carRecordList:[],
- defaultProps: {
- children: 'children',
- label: 'label'
- },
- carArryData:[],
- };
- },
- components:{
- mapdiv,
- headerdiv,
- videodiv,
- },
- mounted() {
- console.log(111)
- this.getResource();
- this.getvideoList();
- // this.getGovern();
- this.queryAllList();
- this.queryCarStaticByArea();
- this.getAllElectricDetail();
- this.getDateRange();
- // this.queryLocationRecord()();
- },
- methods:{
- exportQuery(){
- this.download('/qdtl/electricLocation/export', {
- ...this.queryParams
- }, `巡逻车_${new Date().getTime()}.xlsx`)
- },
- getAllElectricDetail(){
- getAllElectricDetail().then(response =>{
- this.carStaticCount.totalCar = response.data.totalCar
- this.carStaticCount.onlinePercent = response.data.onlinePercent
- var carArry = response.data.detail;
- for(var index in carArry){
- carArry[index].fence = carArry[index].lng +","+carArry[index].lat
- }
- this.carArryData = carArry
- this.$refs.mapdiv.addPoints(carArry,'police.png',0.6,'car');
- })
-
- },
- queryLocationRecord(){
- queryLocationRecord(this.queryParams).then(response =>{
- console.log(response);
- this.carRecordList = response.data
- ; })
- },
- queryCarStaticByArea(){
- queryCarStaticByArea().then(response =>{
- this.carList = response.data
- ; })
- },
- queryAllList(){
- queryAllList().then(response=>{
- console.log(response);
- for(var index in response.data){
- var obj = response.data[index]
- // obj.id = obj.indexCode;
- obj.label = obj.deviceName;
- obj.data = obj;
- // console.log(obj);
- this.treeData.push(obj);
- }
- })
- console.log(this.treeData);
- },
- tableRowClassName({ row, rowIndex }) {
- if ((rowIndex + 1) % 2 === 0) {
- return "warning-row";
- } else {
- return "success-row";
- }
- },
- changeMapTab(index){
- this.$refs.mapdiv.iconSelect = index
- },
-
- getResource(){
- getResource().then(response =>{
- var trainArry = [];
- var bridgeArry = [];
- var railArry = [];
- var stationLocation = [];
- var areaList = [];
- for(var index in response.data.staticLocation){
- var obj = response.data.staticLocation[index]
- obj.fence = obj.lnglat
- obj.name = obj.locationName
- stationLocation.push(obj)
- }
- for(var index in response.data.area){
- var obj = response.data.area[index]
- if(obj.areaType == '1'){
- areaList.push(obj);
- }else if(obj.areaType == '2'){
- obj.name = obj.areaName
- trainArry.push(obj);
- }else if(obj.areaType == '3'){
- obj.name = obj.areaName
- bridgeArry.push(obj);
- }else if(obj.areaType == '4'){
- obj.name = obj.areaName
- railArry.push(obj);
- }
- }
- for(var index in areaList){
- var json = JSON.parse(areaList[index].fence)
- this.$refs.mapdiv.addPolygon(json);
- }
- for(var key in response.data.deviceTrail){
- var jsonStr = '['
- for(var index in response.data.deviceTrail[key]){
- var obj = response.data.deviceTrail[key][index]
- if(index == response.data.deviceTrail[key].length - 1){
- var location = '['+obj.fence.split(',')[0]+','+obj.fence.split(',')[1]+']'
- }else{
- var location = '['+obj.fence.split(',')[0]+','+obj.fence.split(',')[1]+'],'
- }
- jsonStr += location
- // deviceArry.push(obj.fence.split(','));
- }
- jsonStr += ']'
- var json = JSON.parse(jsonStr);
- this.$refs.mapdiv.addPoints(response.data.deviceTrail[key],'device.png',0.6,'device');
- this.$refs.mapdiv.addline(json,'device');
- }
- this.$refs.mapdiv.addPoints(trainArry,'train.png',0.6,'train');
- this.$refs.mapdiv.addPoints(bridgeArry,'bridge.png',0.6,'bridge');
- this.$refs.mapdiv.addPoints(railArry,'rail.png',0.6,'rail');
- this.$refs.mapdiv.addPoints(stationLocation,'location.png',0.6,'location');
- this.areaCount += response.data.area.length
- this.staticCount += response.data.drone.length + stationLocation.length;
- // this.dynamicCount += response.data.deviceTrail.length
- this.dynamicCount += Object.getOwnPropertyNames(response.data.deviceTrail).length
- })
- },
- getvideoList(){
- httpRequest(this.videoParams).then(data =>{
- var json = JSON.parse(data.data);
- this.staticCount += json.data.list.length
- this.$refs.mapdiv.addPoints(json.data.list,'video.png',0.6,'video');
- });
- },
- treeChange(data, node){
- var view = this.$refs.mapdiv.map.getView();
- console.log(view.getCenter());
- for(var index in this.carArryData){
- if(this.carArryData[index].deviceName == data.deviceName){
- console.log(this.carArryData[index].fence);
- // var lngArry = [];
- // lngArry.push();
- // lngArry.push();
- view.setCenter(this.carArryData[index].fence.split(','));
- this.$refs.mapdiv.clickObj = this.carArryData[index]
- this.$refs.mapdiv.isShowCar = true
- this.$refs.mapdiv.carStyle = 'left:80rem;top:35rem'
- }
- }
- },
- handleQuery(){
- console.log(this.queryParams);
- // console.log(this.dateRange);
- this.queryParams.startDate = this.dateRange[0]
- this.queryParams.endDate = this.dateRange[1]
- queryLocationRecord(this.queryParams).then(response =>{
- console.log(response);
- this.carRecordList = response.data
- for(var index in this.carRecordList){
- var obj = this.carRecordList[index]
- // console.log(obj.mileage);
- if(obj.mileage != null){
- obj.mileage = (obj.mileage/1000).toFixed(2)
- // console.log(obj.mileage);
- }
- if(obj.dayMileage != null){
- obj.dayMileage = (obj.dayMileage/1000).toFixed(2)
- }
- }
- })
- },
- resetQuery(){
- this.queryParams = [];
- },
- getDateRange(){
- var endDate = new Date().toLocaleDateString().split('/').map(item=>{if (item<10){return '0'+ item}else {return item}}).join('-')
- var startDaate = new Date(new Date().getTime()-3600*24*1000)
- var startDate = startDaate.toLocaleDateString().split('/').map(item=>{if (item<10){return '0'+ item}else {return item}}).join('-')
- this.dateRange = [];
- this.dateRange.push(startDate);
- this.dateRange.push(endDate);
- this.handleQuery();
- },
- }
- };
- </script>
- <style rel="stylesheet/scss" lang="scss" scoped>
- .publicTitle{
- background: url("~@/assets/images/title@2x.png") no-repeat;
- background-size: 100% 100%;
- width:95%;
- height:3.9rem;
- padding-left:1.5rem;
- padding-top:0.7rem;
- display: inline-flex;
- }
- .prcentClass{
- background: url("~@/assets/images/goverce/prcent.png") no-repeat;
- background-size: 100% 100%;
- width:95%;
- height:28rem;
- padding-left:25rem
- }
- .tdgove{
- background: url("~@/assets/images/goverce/态势1@2x.png") no-repeat;
- background-size: 100% 100%;
- width:32rem;
- height:9.6rem;
- margin-left:3.5rem;
- margin-top:1rem;
- display: inline-flex;
- // display: inline-flex;
- }
- .tdgove2{
- background: url("~@/assets/images/goverce/态势2@2x.png") no-repeat;
- background-size: 100% 100%;
- width:37.2rem;
- height:9.9rem;
- margin-left:3.5rem;
- display: inline-flex;
- // display: inline-flex;
- }
- .fontClass{
- font-size: 1.5rem;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #FFFFFF;
- line-height: 2.6rem;
- }
- .EngClass{
- font-size: 1.2rem;
- font-family: AlibabaSans;
- font-weight: 400;
- color: #B7D0FA;
- line-height: 1.1rem;
- opacity: 0.4;
- }
- .countClass{
- font-size: 2.1rem;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #25FFDE;
- line-height: 2rem;
- }
- .countClass2{
- font-size: 1.5rem;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #FFFFFF;
- line-height: 2.6rem;
- }
- .isTop{
- margin-top:1.5rem
- }
- .droneleftTree{
- /* float:left; */
- width:100%;
- background-color:#04283C;
- padding: 1rem;
- padding-top:0 ;
- min-height: 95vh;
- z-index:1001;
- }
- .bottombg{
- background: url("../../assets/images/底部菜单bg@2x.png");
- position: absolute;
- background-size: 100% 100%;
- z-index: 1;
- width: 85.1rem;
- height: 16.3rem;
- bottom: 0;
- left: 40%;
- transform: translate(-50%,-0%);
- display: flex;
- flex-direction: row;
- align-items: center;
- color:#fff;
- font-size:1.6rem;
- .item:hover{
- cursor: pointer;
- }
- .item{
- width: 33%;
- text-align: center;
- justify-content: center;
- position: relative;
- .num{
- font-size:3rem;
- color:#25f8bd;
- }
- }
- .item1{
- width: 33%;
- }
- .item2::after{
- content: "";
- background: url("../../assets/images/图层\ 2@2x.png");
- background-size: 100% 100%;
- width: 0.2rem;
- height: 7.3rem;
- position: absolute;
- top: 0;
- right: 0;
- }
- }
- .topbg{
- position: absolute;
- background-size: 100% 100%;
- z-index: 1;
- width: 50%;
- height: 16.3rem;
- top:8rem;
- left: 15%;
- background-color: rgba(0, 0, 0, 0.47);
- // transform: translate(-50%,-0%);
- display: flex;
- flex-direction: row;
- // align-items: center;
- color:#fff;
- font-size:1.6rem;
- padding-top:2rem
- }
- .iconClass{
- display: none
- }
- </style>
|