2415 lines
75 KiB
Vue
2415 lines
75 KiB
Vue
<template>
|
||
<ScaleBox
|
||
:width="1920"
|
||
:height="1080"
|
||
bgc="transparent"
|
||
:delay="100"
|
||
:isFlat="true"
|
||
@scaleChange="scaleChange"
|
||
>
|
||
<div
|
||
class="main"
|
||
v-loading="loading"
|
||
element-loading-text="加载中"
|
||
element-loading-background="rgba(0, 0, 0, 0.8)"
|
||
>
|
||
<div class="nav">
|
||
<span class="nav_ti nav_mag">武乡县黄河流域农业面源污染平台</span>
|
||
<span class="nav_tit">治理效果评价和监测一张图</span>
|
||
</div>
|
||
<div class="nav_btn">
|
||
<div class="btn_left">
|
||
<span class="btn_left_time"> {{ nowTime }}</span> <span class="btn_left_tianq" style="z-index: 9999;"></span>
|
||
</div>
|
||
<div class="btn_right">
|
||
<hefentianqi/>
|
||
<img src="@/assets/image/quanping.png" class="quanping" v-if="fullscreen==false" @click="screen" alt="">
|
||
<img src="@/assets/image/quanpingtui.png" class="quanping" @click="screen" alt="" v-else>
|
||
<span class="btn_right_time"><img src="@/assets/image/header.png" @click="dialogVisible = true" class="peoimg"
|
||
alt=""></span>
|
||
</div>
|
||
</div>
|
||
<!-- 退出登录弹窗 -->
|
||
<div class="login logintc">
|
||
<el-dialog
|
||
title="退出登录"
|
||
:visible.sync="dialogVisible"
|
||
width="10%"
|
||
>
|
||
<span class="infornameclas">欢迎您,{{ inforname }}!</span>
|
||
<el-button type="primary" @click="handleClosetuichu" class="logintc_tc">
|
||
<img src="@/assets/image/tuichu.png" @click="dialogVisible = true" class="tuichu" alt="">
|
||
退出登录
|
||
</el-button>
|
||
<img src="@/assets/image/sanjiao.png" class="sanjiao" alt="">
|
||
</el-dialog>
|
||
</div>
|
||
|
||
<div class="content">
|
||
<img src="@/assets/image/qiehuan2.png" @click="mapTypeSwitch"
|
||
style="position: fixed;top:5.2vw;right:26%;z-index: 999;width:12vw;cursor: pointer;" alt=""
|
||
v-if="mapTypeFlag==true">
|
||
<img src="@/assets/image/qiehuan.png" @click="mapTypeSwitch"
|
||
style="position: fixed;top:5.2vw;right:3%;z-index: 999;width:12vw;cursor: pointer;" alt="" v-else>
|
||
<div id="container"
|
||
style="width:98%;height:100%;resize:both; position: absolute;z-index:0;top:0px;left: 1%;"></div>
|
||
|
||
<!-- 左上头部 -->
|
||
<transition enter-active-class="animate__animated animate__backInLeft"
|
||
leave-active-class="animate__animated animate__backOutLeft">
|
||
<template v-if="mapTypeFlag">
|
||
<div class="baseBoxLeft left baseBoxHjleft">
|
||
<img src="@/assets/image/kuang_zuoshang.png" class="in2con_zlf" alt="">
|
||
<img src="@/assets/image/kuang_youshang.png" class="in2con_zys" alt="">
|
||
<img src="@/assets/image/kuang_zuoxia.png" class="in2con_zzx" alt="">
|
||
<img src="@/assets/image/kuang_youxia.png" class="in2con_zyx" alt="">
|
||
<img src="@/assets/image/sanguang.png" class="sanguang" alt="">
|
||
<img src="@/assets/image/sanguang.png" class="sanguangbt" alt="">
|
||
<div>
|
||
<div class="in1con_lf_tit ">
|
||
<span class="in1con_lf_titshow1" >{{ briefconCode }}</span>
|
||
<img src="@/assets/image/title_bg.png" class="in1con_lf_titimg" alt="">
|
||
</div>
|
||
<div class="home_lcgk" style="width: 88%;">
|
||
<vue-seamless-scroll :data="briefconValue" class="wp-1 hp-1" :class-option="showOption">
|
||
<p v-for="item in briefconValue" :key="item.id">{{ item.detailValue }}</p>
|
||
</vue-seamless-scroll>
|
||
</div>
|
||
<div class="in1con_lf_img">
|
||
<div
|
||
class="in1con_lf_imglf animate__animated animate__delay-1s animate__infinite animate__slow animate__pulse">
|
||
<img src="@/assets/image/xmgk01.png" class="in1con_lf_imgone" alt="">
|
||
<span class="in1con_lf_imglf_tit">农田污染监测站</span>
|
||
<span class="in1con_lf_imglf_num">
|
||
<animate-number class="in1con_lf_imglf_num_jix" ref="reNum" from="0"
|
||
:to="Number(stationCount0)" :key="stationCount0" duration="3000"></animate-number>个
|
||
</span>
|
||
</div>
|
||
<div
|
||
class="in1con_lf_imglf animate__animated animate__delay-1s animate__infinite animate__slow animate__pulse">
|
||
<img src="@/assets/image/xmgk02.png" class="in1con_lf_imgone" alt="">
|
||
<span class="in1con_lf_imglf_tit">畜禽污染监测站</span>
|
||
<span class="in1con_lf_imglf_num">
|
||
<animate-number class="in1con_lf_imglf_num_jix" ref="reNum" from="0"
|
||
:to="Number(stationCount0)" :key="stationCount0" duration="3000"></animate-number>个
|
||
</span>
|
||
</div>
|
||
<div
|
||
class="in1con_lf_imglf animate__animated animate__delay-1s animate__infinite animate__slow animate__pulse">
|
||
<img src="@/assets/image/xmgk04.png" class="in1con_lf_imgone" alt="">
|
||
<span class="in1con_lf_imglf_tit">小流域污染监测站</span>
|
||
<span class="in1con_lf_imglf_num">
|
||
<animate-number class="in1con_lf_imglf_num_jix" ref="reNum" from="0"
|
||
:to="Number(stationCount0)" :key="stationCount0" duration="3000"></animate-number>个
|
||
</span>
|
||
</div>
|
||
<div
|
||
class="in1con_lf_imglf animate__animated animate__delay-1s animate__infinite animate__slow animate__pulse">
|
||
<img src="@/assets/image/xmgk03.png" class="in1con_lf_imgone" alt="">
|
||
<span class="in1con_lf_imglf_tit">长期定位监测点位</span>
|
||
<span class="in1con_lf_imglf_num">
|
||
<animate-number class="in1con_lf_imglf_num_jix" ref="reNum" from="0"
|
||
:to="Number(stationCount0)" :key="stationCount0" duration="3000"></animate-number>个
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="background: #0d4e62;height: 1px;width: 94%;margin: 0 auto;margin-top: 0.4vw;"></div>
|
||
<div>
|
||
<div class="in1con_lf_tit ">
|
||
<span class="in1con_lf_titshow1">气候环境</span>
|
||
<img src="@/assets/image/title_bg.png" class="in1con_lf_titimg" alt="">
|
||
</div>
|
||
<div class="qhhjcov">
|
||
<div style="width:96%;margin:0 auto;margin-top:12px;">
|
||
<div class="qhhjcov_lf" v-for="item in climate_env" :key="item.id">
|
||
<img :src="urlimg+item.detailPics" class="qhhjcov_lfimg" alt="">
|
||
<span class="qhhjcov_lf_tit">{{ item.detailCode }}</span>
|
||
<span class="qhhjcov_time"> <animate-number class="in1con_lf_imglf_num_jix" ref="reNum" from="0"
|
||
:to="Number(item.detailValue)" :key="item.detailValue"
|
||
duration="3000"></animate-number>{{ item.detailValue2 }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="background: #0d4e62;height: 1px;width: 94%;margin: 0 auto;margin-top: 0.4vw;"></div>
|
||
<div>
|
||
<div class="in1con_lf_tit ">
|
||
<span class="in1con_lf_titshow1">水利情况</span>
|
||
<img src="@/assets/image/title_bg.png" class="in1con_lf_titimg" alt="">
|
||
</div>
|
||
<div class="in1con_lf_img">
|
||
<div
|
||
class="in1con_lf_imglf animate__animated animate__delay-1s animate__infinite animate__slow animate__pulse"
|
||
v-for="legth in water_conser" :key="legth.id">
|
||
<img :src="urlimg+legth.detailPics" class="in1con_lf_imgone" alt="">
|
||
<span class="in1con_lf_imglf_tit">{{ legth.detailCode }}</span>
|
||
<span class="in1con_lf_imglf_num"> <animate-number class="in1con_lf_imglf_num_jix" ref="reNum"
|
||
from="0" :to="Number(legth.detailValue)"
|
||
:key="legth.detailValue"
|
||
duration="3000"></animate-number>{{ legth.detailValue2 }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="home_dlhj">
|
||
<el-carousel arrow="never" height="150px" style=" bottom: 20px;">
|
||
<el-carousel-item v-for="value in roll_info" :key="value.id">
|
||
<div class="sx_cov">
|
||
<span class="sx_covtit">
|
||
{{ value.infoName }}
|
||
</span>
|
||
<ul v-for="ite in value.detailList" :key="ite.id">
|
||
<li class="sx_cov_lt">
|
||
<span class="sx_cov_lt_tit">{{ ite.detailCode }}</span>
|
||
<span class="sx_cov_lt_num">
|
||
<animate-number class="in1con_lf_imglf_num_jix" ref="reNum" from="0" :to="ite.detailValue"
|
||
:key="ite.detailValue" duration="3000"></animate-number>
|
||
{{ ite.detailValue2 }}
|
||
</span>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</el-carousel-item>
|
||
</el-carousel>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
</transition>
|
||
|
||
<!-- 地图左下图例 -->
|
||
<div v-if="mapTypeFlag==true" class="mapTuLi">
|
||
<div class="scdlist" @click="switchIcon('livestock')">
|
||
<img src="@/assets/image/icon-blue.png" class="xcdimg" alt="">
|
||
<span class="scdlist_tit">畜禽污染监测站</span>
|
||
</div>
|
||
<div class="scdlist" @click="switchIcon('orient')">
|
||
<img src="@/assets/image/icon-yellow.png" class="xcdimg" alt="">
|
||
<span class="scdlist_tit">农田污染监测站</span>
|
||
</div>
|
||
<div class="scdlist" @click="switchIcon('watershed')">
|
||
<img src="@/assets/image/waterlive.png" class="xcdimg" alt="">
|
||
<span class="scdlist_tit">小流域监测站</span>
|
||
</div>
|
||
<div class="scdlist" @click="switchIcon('soil')">
|
||
<img src="@/assets/image/soil.png" class="xcdimg" alt="">
|
||
<span class="scdlist_tit">长期定位监测站</span>
|
||
</div>
|
||
<div class="scdlist" @click="switchIcon('flowmeter')">
|
||
<img src="@/assets/image/liuliang.png" class="xcdimg" alt="">
|
||
<span class="scdlist_tit">微功率雷达监测</span>
|
||
</div>
|
||
<div class="scdlist" @click="switchIcon('vehicle')">
|
||
<img src="@/assets/image/vehicle.png" class="xcdimg" alt="">
|
||
<span class="scdlist_tit">危废车辆信息</span>
|
||
</div>
|
||
</div>
|
||
|
||
<transition enter-active-class="animate__animated animate__backInUp"
|
||
leave-active-class="animate__animated animate__backOutDown">
|
||
<template v-if="mapTypeFlag">
|
||
<div class="zlxg_btm">
|
||
<img src="@/assets/image/kuang_zuoshang.png" class="in2con_zlf" alt="">
|
||
<img src="@/assets/image/kuang_youshang.png" class="in2con_zys" alt="">
|
||
<img src="@/assets/image/kuang_zuoxia.png" class="in2con_zzx" alt="">
|
||
<img src="@/assets/image/kuang_youxia.png" class="in2con_zyx" alt="">
|
||
<img src="@/assets/image/sanguang.png" class="sanguang2" alt="">
|
||
<img src="@/assets/image/sanguang.png" class="sanguangbt2" alt="">
|
||
<div v-loading="tabsLoading" element-loading-text=" "
|
||
element-loading-background="rgba(0, 0, 0, 0.8)">
|
||
<span class="zywr_titshow">治理效果分析</span>
|
||
<el-tooltip class="item" effect="dark"
|
||
:content="dataTypeEchart?'监测值为正常历史监测数据。':'对比值为下游监测站数据减去上游监测站数据。'"
|
||
placement="top-start">
|
||
</el-tooltip>
|
||
<el-select class="dataTypeEchart2" v-model="dateType" placeholder="请选择" @change="changeDateType">
|
||
<el-option
|
||
v-for="item in dateTypeOptions"
|
||
:key="item.value"
|
||
:label="item.label"
|
||
:value="item.value">
|
||
</el-option>
|
||
</el-select>
|
||
<el-tabs type="card" @tab-click="doGetIndexSummry" v-show="dataTypeEchart">
|
||
<el-tab-pane v-for="(item,index) in stationInfoList" :label="item.stationShortName?item.stationShortName:item.stationName" lazy>
|
||
<template>
|
||
<div :id="`myChartDiv${index}`" style="height:12vw;width:100%;"></div>
|
||
</template>
|
||
</el-tab-pane>
|
||
</el-tabs>
|
||
<el-tabs type="card" @tab-click="doGetIndexSummry" v-show="!dataTypeEchart">
|
||
<el-tab-pane v-for="(item,index) in riverList" :label="(item.stationShortName?item.stationShortName:item.stationName).split('-')[0]" lazy>
|
||
<template>
|
||
<div :id="`myChartDiv2${index}`" style="height:12vw;width:100%;"></div>
|
||
</template>
|
||
</el-tab-pane>
|
||
</el-tabs>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
</transition>
|
||
|
||
<!-- 右侧展示栏 -->
|
||
<transition enter-active-class="animate__animated animate__backInRight"
|
||
leave-active-class="animate__animated animate__backOutRight">
|
||
<template v-if="mapTypeFlag">
|
||
<div class="leftBox right baseBoxHjleft" style="width:22.5%;overflow: hidden;">
|
||
<img src="@/assets/image/kuang_zuoshang.png" class="in2con_zlf" alt="">
|
||
<img src="@/assets/image/kuang_youshang.png" class="in2con_zys" alt="">
|
||
<img src="@/assets/image/kuang_zuoxia.png" class="in2con_zzx" alt="">
|
||
<img src="@/assets/image/kuang_youxia.png" class="in2con_zyx" alt="">
|
||
<img src="@/assets/image/sanguang.png" class="sanguang" alt="">
|
||
<img src="@/assets/image/sanguang.png" class="sanguangbt" alt="">
|
||
<div>
|
||
<div class="home_dlhj">
|
||
<span class="in1con_lf_titshow12" >监测指标统计</span>
|
||
<el-carousel :autoplay="false" indicator-position="none" arrow="always" height="320px">
|
||
<el-carousel-item v-for="item in stationInfoList" :key="item.id">
|
||
<div class="in1con_lf_tit " >
|
||
<span class="in1con_lf_titshow1 in1con_lf_titshow13" style="cursor: pointer"
|
||
@click="jumpStationPage(item)">{{ item.stationName }}</span>
|
||
<img src="@/assets/image/title_bg.png" class="in1con_lf_titimg" alt="">
|
||
</div>
|
||
<div class="jczcov">
|
||
<viewer :images="item.deviceList" v-for="value in item.deviceList" :key="value.id">
|
||
<div class="jczcov_lf" v-for="(imglist,index) in item.stationPic" :key="index">
|
||
<img :src="urlimg+imglist" class="jczimg" alt="">
|
||
</div>
|
||
</viewer>
|
||
</div>
|
||
<div class="jczbtm" @click="showEchartDialog($event, 1)" >
|
||
<vue-seamless-scroll :data="item.wrwcode" class="wp-1 hp-1" :class-option="classWrwcod">
|
||
<div class="jczbtm_lf" v-for="(valist,index) in item.wrwcode" :key="valist.index"
|
||
:data-item="JSON.stringify(item)" :data-survItem="valist.tylename" >
|
||
<img :src="urlimg + valist.icon" class="tpimg" alt="">
|
||
<div class="jczbtm_lf_rt">
|
||
<span class="jczbtm_lf_rttit">{{ valist.name }}</span>
|
||
<span class="jczbtm_lf_rtnum">
|
||
<span class="in1con_lf_imglf_num_jix">{{valist.code?parseFloat((valist.code-0).toFixed(2)):'--'}}</span>
|
||
{{ valist.unit }}
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</vue-seamless-scroll>
|
||
</div>
|
||
</el-carousel-item>
|
||
</el-carousel>
|
||
</div>
|
||
</div>
|
||
<div style="background: #0d4e62;height: 1px;width: 94%;margin: 0 auto;margin-top: 0.4vw;"></div>
|
||
<div>
|
||
<div class="in1con_lf_tit " style="cursor: pointer;" @click="taizhangDialogShowFlag=true">
|
||
<span class="in1con_lf_titshow1">核算与评估</span>
|
||
<img src="@/assets/image/title_bg.png" class="in1con_lf_titimg" alt="">
|
||
</div>
|
||
<div class="mywrcov">
|
||
<div class="mywrcov_one mywrcov_onehover" @click="showEchartDialog({stationCode: 'S_1'}, 'dataWaterTp')">
|
||
<span class="mywrcov_onetit">{{ effect_assess0.detailCode }}</span>
|
||
<span class="mywrcov_onenum">
|
||
<span class="in1con_lf_imglf_num_jix mywrcov_onenumjx">{{ effect_assess0.detailValue }}</span>
|
||
</span>
|
||
</div>
|
||
<div class="mywrcov_two mywrcov_onehover" @click="showEchartDialog({stationCode: 'S_1'}, 'dataWaterTn')">
|
||
<span class="mywrcov_onetit">{{ effect_assess1.detailCode }}</span>
|
||
<span class="mywrcov_onenum">
|
||
<span class="in1con_lf_imglf_num_jix mywrcov_onenumjx">{{ effect_assess1.detailValue }}</span>
|
||
</span>
|
||
</div>
|
||
<div class="mywrcov_three mywrcov_onehover" @click="showEchartDialog({stationCode: 'S_1'}, 'dataWaterCod')">
|
||
<span class="mywrcov_onenum" style="margin-top: 1vw;">
|
||
<span class="in1con_lf_imglf_num_jix mywrcov_onenumjx">{{ effect_assess2.detailValue }}</span>
|
||
</span>
|
||
<span class="mywrcov_onetit">{{ effect_assess2.detailCode }}</span>
|
||
</div>
|
||
<div class="mywrcov_four mywrcov_onehover" @click="taizhangDialogShowFlag=true">
|
||
<span class="mywrcov_onenum" style="margin-top: 1vw; cursor: pointer">
|
||
<span class="in1con_lf_imglf_num_jix mywrcov_onenumjx">{{ effect_assess3.detailValue }}</span>
|
||
</span>
|
||
<span class="mywrcov_onetit">{{ effect_assess3.detailCode }}</span>
|
||
</div>
|
||
<div class="mywrcovcen">
|
||
<span class="mywrcovcen_tit" v-if="effect_assess4.detailValue=='成功'">优</span>
|
||
<span class="mywrcovcen_tit" v-else>{{ effect_assess4.detailValue }}</span>
|
||
<span class="mywrcovcen_con">{{ effect_assess4.detailCode }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="background: #0d4e62;height: 1px;width: 94%;margin: 0 auto;margin-top: 0.4vw;"></div>
|
||
<div>
|
||
<div class="in1con_lf_tit ">
|
||
<span class="in1con_lf_titshow1">实时数据展示</span>
|
||
<img src="@/assets/image/title_bg.png" class="in1con_lf_titimg" alt="">
|
||
</div>
|
||
<div style="height:280px;overflow: hidden" @click="showEchartDialog($event, 1)">
|
||
<vue-seamless-scroll :data="listData" class="wp-1 hp-1" :class-option="classOption" :step="1">
|
||
<div class="jcsssj" v-for="(item, index) in listData" :key="index" :data-item="JSON.stringify(item)" :data-survItem="item.survItem" >
|
||
<img src="@/assets/image/xian.png" class="jcsssj_xian" alt="">
|
||
<div class="jcsssj_rt">
|
||
<div style="float: left;width: 70%;">
|
||
<span class="jcsssj_rt_tit">{{ item.stationName?item.stationName:item.deployRemark?item.deployRemark:'土壤监测站' }}</span>
|
||
<span class="jcsssj_rtbiao" :style="{background:(item.color)}">{{ item.name }}</span>
|
||
<span class="jcsssj_rt_numsy">
|
||
<animate-number class="in1con_lf_imglf_num_jix" ref="myNum" from="0" :to="Number(item.value)"
|
||
:key="item.value" duration="3000" :formatter="formatter"></animate-number>
|
||
{{ item.unit }}
|
||
</span>
|
||
</div>
|
||
<span class="jcsssj_rt_time">{{ item.dataDateTime?item.dataDateTime.substring(0,16):'--' }}</span>
|
||
</div>
|
||
</div>
|
||
</vue-seamless-scroll>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
</transition>
|
||
</div>
|
||
|
||
<!-- 监测站弹窗 -->
|
||
<el-dialog :visible.sync="qcdtdialogTableVisible">
|
||
<div class="jctc" id="modal1123123">
|
||
<div class="in1con_lf_tit ">
|
||
<img src="@/assets/image/tctiimg.png" class="tctiimg" alt="">
|
||
<span class="in1con_lf_titshow">{{ qcdtinfor.stationName }}</span>
|
||
<img src="@/assets/image/title_bg.png" class="in1con_lf_titimg" alt="">
|
||
</div>
|
||
<div class="jctcvban1">
|
||
<img src="@/assets/image/jctctiao.png" class="jctctiao" alt="">
|
||
</div>
|
||
<div class="jctc_add">
|
||
<img src="@/assets/image/jctcicon1.png" class="jctcicon1" alt="">
|
||
<span class="jctcvban_tit">站点位置:{{ qcdtinfor.stationLocation }}</span>
|
||
</div>
|
||
<div class="jctc_add">
|
||
<img src="@/assets/image/jctcicon2.png" class="jctcicon1" alt="">
|
||
<span class="jctcvban_tit">建站时间:{{ qcdtinfor.buildTime }}</span>
|
||
</div>
|
||
<div class="jctc_add">
|
||
<img src="@/assets/image/jctcicon3.png" class="jctcicon1" alt="">
|
||
<span class="jctcvban_tit">设备数量:<span style="color: #f1ff0d;">{{ qcdtinfor.deviceCount }}</span> </span>
|
||
</div>
|
||
<div class="jctc_add">
|
||
<img src="@/assets/image/jctcicon3.png" class="jctcicon1" alt="">
|
||
<span class="jctcvban_tit">运行状态:<span style="color: #f1ff0d;">正常</span> </span>
|
||
</div>
|
||
<div class="jctc_add">
|
||
<img src="@/assets/image/jctcicon4.png" class="jctcicon1" alt="">
|
||
<span class="jctcvban_tit">监测指标</span>
|
||
</div>
|
||
<div style="margin-left: 3%;">
|
||
<span class="jctc_text" v-for="(item,index) in qcdtinfor.survColorItems" :key="index"
|
||
:style="{background:(item.color)}">{{ item.name }}</span>
|
||
</div>
|
||
<img src="@/assets/image/ljjr.png" class="ljjr" @click="jumpStationPage(qcdtinfor)" alt="">
|
||
</div>
|
||
</el-dialog>
|
||
|
||
<!-- 企业弹窗 -->
|
||
<el-dialog :visible.sync="qyinfordtdialogTableVisible">
|
||
<div class="tz_cov" style="height:25vw;">
|
||
<img src="@/assets/image/guanbi.png" class="guanbiann" @click="qcguanbi" alt="">
|
||
<div class="tz_cov_top">
|
||
<span class="tz_cov_top_tit">企业简介</span>
|
||
</div>
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<div class="grid-content bg-purple" style="width:80%;margin-left:10%;">
|
||
<el-carousel indicator-position="outside">
|
||
<el-carousel-item v-for="(item,index) in qyinformation.extPics" :key="index">
|
||
<viewer :images="qyinformation.extPics">
|
||
<img :src="urlimg + item" alt="" style="width:100%;height:100%;">
|
||
</viewer>
|
||
</el-carousel-item>
|
||
</el-carousel>
|
||
</div>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<div class="grid-content bg-purple-light">
|
||
<span class="tctit">{{ qyinformation.name }}</span>
|
||
<span class="tcgldw">{{ qyinformation.notes }}</span>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
</div>
|
||
</el-dialog>
|
||
|
||
<!-- 危废车辆菜单 - 自定义点击伸缩 -->
|
||
<div class="vehicle-dropdown-wrapper">
|
||
<div class="vehicle-dropdown-btn-dark" @click.stop="toggleVehicleDropdown">
|
||
<span>危废车辆 ({{ vehicleList.length }})</span>
|
||
<i :class="isVehicleDropdownOpen ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" class="el-icon--right"></i>
|
||
</div>
|
||
|
||
<div v-show="isVehicleDropdownOpen" class="vehicle-dropdown-menu-dark">
|
||
<!-- 全部点位选项 -->
|
||
<div class="vehicle-dropdown-item-dark" @click="showAllVehiclePoints">
|
||
<span class="vehicle-dot-dark all-dot">●</span>
|
||
<span style="flex:1; color: #FFD700;">📍 全部点位</span>
|
||
<span style="font-size:12px;color:#4a8ba8;">({{ vehicleList.length }})</span>
|
||
</div>
|
||
|
||
<!-- 关闭点位选项 -->
|
||
<div class="vehicle-dropdown-item-dark" @click="hideAllVehiclePoints">
|
||
<span class="vehicle-dot-dark close-dot">●</span>
|
||
<span style="flex:1; color: #ff6b6b;">✕ 关闭点位</span>
|
||
</div>
|
||
|
||
<div class="vehicle-dropdown-divider"></div>
|
||
|
||
<!-- 车辆列表 -->
|
||
<div
|
||
v-for="(item, index) in vehicleList"
|
||
:key="index"
|
||
class="vehicle-dropdown-item-dark"
|
||
@click="handleVehicleSelect(item)"
|
||
>
|
||
<span class="vehicle-dot-dark">●</span>
|
||
<span style="flex:1;">{{ item.veNotes || '未知车辆' }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<SoilDialog v-if="soidShowFlag" :soilDataId="soilDataId" @close="soidShowFlag=false"/>
|
||
<LiulDialog v-if="liulShowFlag" :liulDataId="liulDataId" @close="liulShowFlag=false"/>
|
||
<SingleEchartDialog v-if="singleEchartDialogShowFlag" :item="singleEchartData" @close="singleEchartDialogShowFlag=false"/>
|
||
<TaizhangDialog v-if="taizhangDialogShowFlag" :resourcedirect="resourcedirect" @close="taizhangDialogShowFlag=false"/>
|
||
<!-- 轨迹弹窗组件 -->
|
||
<zhnjCov
|
||
ref="trajectoryComponent"
|
||
:vehicle-data="selectedVehicle"
|
||
:visible.sync="trajectoryDialogVisible"
|
||
@close="trajectoryDialogVisible = false"
|
||
/>
|
||
</ScaleBox>
|
||
</template>
|
||
|
||
<script>
|
||
import ScaleBox from 'vue2-scale-box'
|
||
import {
|
||
displayInfo,
|
||
getAllstationAndPestLight,
|
||
getIndexSummry,
|
||
getNewestData,
|
||
getPollutionDict,
|
||
stationInfo,
|
||
vehicleList,
|
||
gpsRecordPage,
|
||
} from '@/api';
|
||
import vueSeamlessScroll from 'vue-seamless-scroll'
|
||
import hefentianqi from '@/pages/weather/weather.vue'
|
||
import SoilDialog from '@/components/SoilDialog.vue'
|
||
import LiulDialog from '@/components/LiulDialog.vue'
|
||
import zhnjCov from '@/components/zhnjCov.vue';
|
||
import {_colors} from '@/utils/color.js'
|
||
import SingleEchartDialog from "@/components/SingleEchartDialog.vue";
|
||
import TaizhangDialog from "@/components/TaizhangDialog.vue";
|
||
|
||
export default {
|
||
name: 'mainHome',
|
||
components: {
|
||
TaizhangDialog,
|
||
SingleEchartDialog,
|
||
vueSeamlessScroll,
|
||
hefentianqi,
|
||
ScaleBox,
|
||
SoilDialog,
|
||
LiulDialog,
|
||
zhnjCov,
|
||
},
|
||
data() {
|
||
return {
|
||
taizhangDialogShowFlag: false,
|
||
singleEchartDialogShowFlag: false,
|
||
singleEchartData: null,
|
||
aMap: null,
|
||
dataTypeEchart: true,
|
||
markersOrient: [],
|
||
markersSoil: [],
|
||
markersOther: [],
|
||
markersFlowmeter: [],
|
||
markersVehicle: [],
|
||
vehicleMarkerMap: new Map(), // 存储车辆id和marker的映射
|
||
lastClickIcon: '',
|
||
urlimg: 'https://fxnsp.sxcooh.com/lh-api/sys/common/static/',
|
||
mapTypeFlag: true,
|
||
nowTime: '',
|
||
briefconCode: "",
|
||
briefconValue: [],
|
||
climate_env: [],
|
||
water_conser: [],
|
||
roll_info: [],
|
||
stationInfoList: [],
|
||
wrwcode: [],
|
||
getPollutionDictCover: [],
|
||
effect_assess0: '',
|
||
effect_assess0Value: 0,
|
||
effect_assess1: '',
|
||
effect_assess2: '',
|
||
effect_assess3: '',
|
||
effect_assess4: '',
|
||
pestLightCount: 0,
|
||
stationCount0: 0,
|
||
stationCount1: 0,
|
||
dialogTableVisible: false,
|
||
qcdialogTableVisible: false,
|
||
qcdtdialogTableVisible: false,
|
||
qyinfordtdialogTableVisible: false,
|
||
shipdialogTableVisible: false,
|
||
qyinformation: '',
|
||
listData: [],
|
||
summryAllData: null,
|
||
echartInit: {},
|
||
riverList: [],
|
||
qcdtinfor: '',
|
||
resourcedirect: [],
|
||
dialogVisible: false,
|
||
inforname: '',
|
||
loading: true,
|
||
zoomData: 14,
|
||
isShowLightNumber: '1',
|
||
switchValue: true,
|
||
fullscreen: false,
|
||
echartIndex: 0,
|
||
dateType: 'monthDays',
|
||
dateTypeOptions: [{
|
||
value: 'dayhours',
|
||
label: '24小时'
|
||
}, {
|
||
value: 'monthDays',
|
||
label: '30天'
|
||
}, {
|
||
value: 'yearMonth',
|
||
label: '12个月'
|
||
}],
|
||
soidShowFlag: false,
|
||
liulShowFlag:false,
|
||
soilDataId: '',
|
||
liulDataId:'',
|
||
tabsLoading: false,
|
||
lastZIndex: 1,
|
||
vehicleList: [],
|
||
// 车辆位置相关
|
||
vehicleMarkers: [],
|
||
currentVehicleInfo: null,
|
||
vehicleLocationMarker: null,
|
||
vehicleInfoWindow: null,
|
||
// 轨迹弹窗相关
|
||
selectedVehicle: null,
|
||
trajectoryDialogVisible: false,
|
||
// 下拉菜单控制
|
||
isVehicleDropdownOpen: false,
|
||
};
|
||
},
|
||
created() {
|
||
},
|
||
|
||
computed: {
|
||
classOption() {
|
||
return {
|
||
step: 0.6,
|
||
limitMoveNum: 3,
|
||
hoverStop: true,
|
||
direction: 1,
|
||
openWatch: true,
|
||
singleHeight: 0,
|
||
singleWidth: 0,
|
||
waitTime: 1000,
|
||
};
|
||
},
|
||
classWrwcod() {
|
||
return {
|
||
step: 0.2,
|
||
limitMoveNum: 6,
|
||
hoverStop: true,
|
||
direction: 1,
|
||
openWatch: true,
|
||
singleHeight: 0,
|
||
singleWidth: 0,
|
||
waitTime: 1000,
|
||
};
|
||
},
|
||
showOption() {
|
||
return {
|
||
step: 0.5,
|
||
limitMoveNum: 0,
|
||
hoverStop: true,
|
||
direction: 1,
|
||
openWatch: true,
|
||
singleHeight: 0,
|
||
singleWidth: 0,
|
||
waitTime: 1000,
|
||
};
|
||
},
|
||
},
|
||
mounted() {
|
||
setTimeout(() => {
|
||
this.$nextTick(() => {
|
||
this.initMap(this.zoomData, this.isShowLightNumber);
|
||
})
|
||
}, 2000)
|
||
this.getNowTime();
|
||
this.indexleft();
|
||
this.getNewestDataList();
|
||
this.getPollutionDictList();
|
||
this.infor();
|
||
this.indexinfor();
|
||
this.doGetIndexSummry({index: this.echartIndex});
|
||
this.vehicleListData();
|
||
},
|
||
methods: {
|
||
// ==================== 危废车辆下拉菜单方法 ====================
|
||
|
||
// 切换下拉菜单
|
||
toggleVehicleDropdown() {
|
||
this.isVehicleDropdownOpen = !this.isVehicleDropdownOpen;
|
||
},
|
||
|
||
// 显示全部点位 - 使用veLat和veLong
|
||
showAllVehiclePoints() {
|
||
// 先清除之前的所有车辆标记
|
||
this.markersVehicle.forEach(marker => {
|
||
marker.setMap(null);
|
||
});
|
||
this.markersVehicle = [];
|
||
this.vehicleMarkerMap.clear();
|
||
|
||
// 重新从vehicleList添加所有车辆点位
|
||
let addedCount = 0;
|
||
this.vehicleList.forEach(item => {
|
||
const lat = parseFloat(item.veLat);
|
||
const lng = parseFloat(item.veLong);
|
||
|
||
if (!isNaN(lat) && !isNaN(lng) && lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180) {
|
||
const marker = new AMap.Marker({
|
||
position: [lng, lat],
|
||
icon: new AMap.Icon({
|
||
size: new AMap.Size(30, 42),
|
||
image: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_r.png',
|
||
imageSize: new AMap.Size(30, 42)
|
||
}),
|
||
offset: new AMap.Pixel(-15, -42),
|
||
zIndex: 1002,
|
||
extData: { vehicleInfo: item }
|
||
});
|
||
|
||
// 点击标记弹出信息窗口
|
||
marker.on('click', (e) => {
|
||
const data = e.target.getExtData();
|
||
if (data && data.vehicleInfo) {
|
||
// 先获取车辆位置点
|
||
const point = {
|
||
jingdu: data.vehicleInfo.veLong,
|
||
weidu: data.vehicleInfo.veLat,
|
||
createTime: data.vehicleInfo.updateTime || new Date().toISOString()
|
||
};
|
||
this.showVehicleInfoWindow(point, data.vehicleInfo);
|
||
}
|
||
});
|
||
|
||
marker.setMap(this.aMap);
|
||
this.markersVehicle.push(marker);
|
||
this.vehicleMarkerMap.set(item.id, marker);
|
||
addedCount++;
|
||
}
|
||
});
|
||
|
||
if (addedCount > 0) {
|
||
this.aMap.setFitView(this.markersVehicle, false, [200, 500, 360, 360], 16);
|
||
this.$message.success(`显示全部 ${addedCount} 个危废车辆点位`);
|
||
} else {
|
||
this.$message.warning('暂无有效的危废车辆点位数据');
|
||
}
|
||
this.isVehicleDropdownOpen = false;
|
||
},
|
||
|
||
// 关闭点位显示
|
||
hideAllVehiclePoints() {
|
||
this.markersVehicle.forEach(marker => {
|
||
marker.setMap(null);
|
||
});
|
||
this.markersVehicle = [];
|
||
this.vehicleMarkerMap.clear();
|
||
// 同时清除车辆位置标记
|
||
this.clearVehicleMarker();
|
||
this.$message.info('已关闭危废车辆点位显示');
|
||
this.isVehicleDropdownOpen = false;
|
||
},
|
||
|
||
// ==================== 危废车辆位置相关方法 ====================
|
||
|
||
// 危化车辆点击 - 从下拉列表选择
|
||
handleVehicleSelect(item) {
|
||
this.currentVehicleInfo = item;
|
||
|
||
// 清除之前的标记
|
||
this.clearVehicleMarker();
|
||
|
||
const vehicleName = item.vePlate || item.plateNumber || '车辆';
|
||
|
||
// 如果有经纬度直接定位
|
||
if (item.veLat && item.veLong) {
|
||
const lat = parseFloat(item.veLat);
|
||
const lng = parseFloat(item.veLong);
|
||
if (!isNaN(lat) && !isNaN(lng)) {
|
||
const point = {
|
||
jingdu: item.veLong,
|
||
weidu: item.veLat,
|
||
createTime: item.updateTime || new Date().toISOString()
|
||
};
|
||
this.locateToVehicle(point, item);
|
||
this.$message({
|
||
message: `定位到 ${vehicleName}`,
|
||
type: 'success'
|
||
});
|
||
this.isVehicleDropdownOpen = false;
|
||
return;
|
||
}
|
||
}
|
||
|
||
// 如果没有经纬度,尝试通过gpsRecordPage获取
|
||
if (item.gpsId) {
|
||
gpsRecordPage({
|
||
pageNo: 1,
|
||
pageSize: 1000,
|
||
gpsId: item.gpsId,
|
||
}).then(res => {
|
||
if (res.result && res.result.records && res.result.records.length > 0) {
|
||
let trackData = res.result.records;
|
||
|
||
trackData = trackData.filter(record => {
|
||
const lng = parseFloat(record.jingdu || record.longitude || record.lng || record.lon);
|
||
const lat = parseFloat(record.weidu || record.latitude || record.lat);
|
||
return !isNaN(lng) && !isNaN(lat) &&
|
||
lng >= -180 && lng <= 180 &&
|
||
lat >= -90 && lat <= 90;
|
||
});
|
||
|
||
if (trackData.length === 0) {
|
||
this.$message.warning(`${vehicleName} 的位置数据无效,请检查数据`);
|
||
return;
|
||
}
|
||
|
||
trackData.sort((a, b) => {
|
||
const timeA = a.createTime || a.server_time || a.updateTime || 0;
|
||
const timeB = b.createTime || b.server_time || b.updateTime || 0;
|
||
return new Date(timeA) - new Date(timeB);
|
||
});
|
||
|
||
const latestPoint = trackData[trackData.length - 1];
|
||
this.locateToVehicle(latestPoint, item);
|
||
|
||
this.$message({
|
||
message: `成功加载 ${vehicleName} 的最新位置`,
|
||
type: 'success'
|
||
});
|
||
} else {
|
||
this.$message({
|
||
message: `${vehicleName} 暂无位置数据`,
|
||
type: 'warning'
|
||
});
|
||
}
|
||
}).catch(err => {
|
||
console.error('获取位置数据失败:', err);
|
||
this.$message({
|
||
message: '获取位置数据失败,请稍后重试',
|
||
type: 'error'
|
||
});
|
||
});
|
||
} else {
|
||
this.$message.warning(`${vehicleName} 没有GPS设备ID和位置信息`);
|
||
}
|
||
this.isVehicleDropdownOpen = false;
|
||
},
|
||
|
||
// 定位到车辆位置
|
||
locateToVehicle(point, vehicleInfo) {
|
||
if (!this.aMap) {
|
||
console.error('地图未初始化');
|
||
return;
|
||
}
|
||
|
||
const lng = parseFloat(point.jingdu || point.longitude || point.lng || point.lon);
|
||
const lat = parseFloat(point.weidu || point.latitude || point.lat);
|
||
|
||
if (isNaN(lng) || isNaN(lat) || lng < -180 || lng > 180 || lat < -90 || lat > 90) {
|
||
console.error('无效的经纬度:', lng, lat);
|
||
this.$message.warning('车辆位置数据无效');
|
||
return;
|
||
}
|
||
|
||
this.addVehicleLocationMarker(lng, lat, point, vehicleInfo);
|
||
|
||
this.aMap.panTo([lng, lat]);
|
||
setTimeout(() => {
|
||
this.aMap.setZoomAndCenter(16, [lng, lat]);
|
||
}, 300);
|
||
|
||
console.log(`定位到车辆位置: ${lng}, ${lat}`);
|
||
},
|
||
|
||
// 添加车辆位置标记
|
||
addVehicleLocationMarker(lng, lat, point, vehicleInfo) {
|
||
if (isNaN(lng) || isNaN(lat)) {
|
||
console.error('无效的经纬度:', lng, lat);
|
||
return;
|
||
}
|
||
|
||
this.removeLocationMarker();
|
||
this.closeVehicleInfoWindow();
|
||
|
||
const locationMarker = new AMap.Marker({
|
||
position: [lng, lat],
|
||
icon: new AMap.Icon({
|
||
size: new AMap.Size(30, 42),
|
||
image: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_r.png',
|
||
imageSize: new AMap.Size(30, 42)
|
||
}),
|
||
offset: new AMap.Pixel(-15, -42),
|
||
zIndex: 1002,
|
||
extData: { point: point, vehicleInfo: vehicleInfo }
|
||
});
|
||
|
||
locationMarker.on('click', (e) => {
|
||
const data = e.target.getExtData();
|
||
this.showVehicleInfoWindow(data.point, data.vehicleInfo);
|
||
});
|
||
|
||
locationMarker.setMap(this.aMap);
|
||
this.vehicleLocationMarker = locationMarker;
|
||
this.vehicleMarkers.push(locationMarker);
|
||
},
|
||
|
||
// 显示车辆信息窗口
|
||
showVehicleInfoWindow(point, vehicleInfo) {
|
||
this.closeVehicleInfoWindow();
|
||
|
||
const lng = parseFloat(point.jingdu || point.longitude || point.lng || point.lon);
|
||
const lat = parseFloat(point.weidu || point.latitude || point.lat);
|
||
|
||
const vehicleName = vehicleInfo.veNotes || vehicleInfo.vePlate || vehicleInfo.plateNumber || '车辆';
|
||
|
||
const infoContent = `
|
||
<div style="
|
||
padding: 16px 20px;
|
||
max-width: 360px;
|
||
min-width: 250px;
|
||
background: rgba(0, 20, 40, 0.95) !important;
|
||
border-radius: 8px;
|
||
border: 1px solid rgba(0, 212, 255, 0.3);
|
||
box-shadow: 0 0 40px rgba(0, 212, 255, 0.15);
|
||
backdrop-filter: blur(10px);
|
||
color: #8bb4d0;
|
||
cursor: pointer;
|
||
" class="vehicle-info-window">
|
||
<div style="display: flex; align-items: center; margin-bottom: 12px; border-bottom: 1px solid rgba(0, 212, 255, 0.15); padding-bottom: 10px;">
|
||
<span style="font-size: 28px; margin-right: 12px;">🚛</span>
|
||
<span style="font-size: 18px; font-weight: bold; color: #FFD700;">${vehicleName}</span>
|
||
</div>
|
||
<div style="font-size: 13px; line-height: 2.2;">
|
||
<div style="display: flex; justify-content: space-between; border-bottom: 1px solid rgba(0, 212, 255, 0.05); padding: 3px 0;">
|
||
<span style="color: #4a8ba8;">设备ID:</span>
|
||
<span style="font-weight: 500; color: #ffffff;">${vehicleInfo.gpsDeviceId || vehicleInfo.gpsId || '--'}</span>
|
||
</div>
|
||
<div style="display: flex; justify-content: space-between; border-bottom: 1px solid rgba(0, 212, 255, 0.05); padding: 3px 0;">
|
||
<span style="color: #4a8ba8;">车牌号:</span>
|
||
<span style="font-weight: 500; color: #ffffff;">${vehicleInfo.vePlate || vehicleInfo.plateNumber || '--'}</span>
|
||
</div>
|
||
<div style="display: flex; justify-content: space-between; border-bottom: 1px solid rgba(0, 212, 255, 0.05); padding: 3px 0;">
|
||
<span style="color: #4a8ba8;">最新时间:</span>
|
||
<span style="font-weight: 500; color: #ffffff;">${point.createTime || point.server_time || point.updateTime || '--'}</span>
|
||
</div>
|
||
<div style="display: flex; justify-content: space-between; border-bottom: 1px solid rgba(0, 212, 255, 0.05); padding: 3px 0;">
|
||
<span style="color: #4a8ba8;">经度:</span>
|
||
<span style="font-weight: 500; color: #00d4ff;">${lng.toFixed(6)}</span>
|
||
</div>
|
||
<div style="display: flex; justify-content: space-between; padding: 3px 0;">
|
||
<span style="color: #4a8ba8;">纬度:</span>
|
||
<span style="font-weight: 500; color: #00d4ff;">${lat.toFixed(6)}</span>
|
||
</div>
|
||
</div>
|
||
<div style="margin-top: 10px; text-align: center; font-size: 12px; color: #00d4ff; border-top: 1px solid rgba(0, 212, 255, 0.1); padding-top: 8px; display: flex; align-items: center; justify-content: center; gap: 8px;">
|
||
<span>📍 点击查看车辆轨迹</span>
|
||
<span style="font-size: 16px;">→</span>
|
||
</div>
|
||
</div>
|
||
`;
|
||
|
||
this.vehicleInfoWindow = new AMap.InfoWindow({
|
||
content: infoContent,
|
||
offset: new AMap.Pixel(0, -35),
|
||
autoMove: true,
|
||
closeWhenClickMap: true,
|
||
isCustom: true,
|
||
});
|
||
|
||
if (!isNaN(lng) && !isNaN(lat)) {
|
||
this.vehicleInfoWindow.open(this.aMap, [lng, lat]);
|
||
this.vehicleMarkers.push(this.vehicleInfoWindow);
|
||
|
||
setTimeout(() => {
|
||
const infoWindowEl = document.querySelector('.vehicle-info-window');
|
||
if (infoWindowEl) {
|
||
infoWindowEl.addEventListener('click', (e) => {
|
||
if (e.target.closest('.vehicle-info-window')) {
|
||
// 获取车辆GPS数据
|
||
this.getVehicleGpsData(vehicleInfo);
|
||
}
|
||
});
|
||
}
|
||
|
||
const infoWindowContent = document.querySelector('.amap-info-content');
|
||
if (infoWindowContent) {
|
||
infoWindowContent.style.background = 'transparent !important';
|
||
infoWindowContent.style.padding = '0 !important';
|
||
}
|
||
}, 50);
|
||
}
|
||
},
|
||
|
||
// 获取车辆GPS数据并打开轨迹
|
||
getVehicleGpsData(vehicleInfo) {
|
||
if (!vehicleInfo.gpsId) {
|
||
this.$message.warning('该车辆没有GPS设备ID');
|
||
return;
|
||
}
|
||
|
||
// 构建车辆数据
|
||
const vehicleData = {
|
||
gpsId: vehicleInfo.gpsId,
|
||
veNotes: vehicleInfo.veNotes || vehicleInfo.vePlate || '车辆',
|
||
vePlate: vehicleInfo.vePlate || vehicleInfo.plateNumber || '--',
|
||
veDriver: vehicleInfo.veDriver || vehicleInfo.driverName || '--',
|
||
vehicleName: vehicleInfo.vePlate || vehicleInfo.plateNumber || '车辆',
|
||
deviceId: vehicleInfo.gpsDeviceId || vehicleInfo.gpsId || '',
|
||
};
|
||
|
||
this.closeVehicleInfoWindow();
|
||
this.qcdtdialogTableVisible = false;
|
||
|
||
this.selectedVehicle = vehicleData;
|
||
this.trajectoryDialogVisible = true;
|
||
},
|
||
|
||
// 打开轨迹弹窗
|
||
openTrajectoryDialog(vehicleInfo, point) {
|
||
const vehicleData = {
|
||
gpsId: vehicleInfo.gpsId || vehicleInfo.gpsDeviceId,
|
||
veNotes: vehicleInfo.veNotes || vehicleInfo.vePlate || '车辆',
|
||
vePlate: vehicleInfo.vePlate || vehicleInfo.plateNumber || '--',
|
||
veDriver: vehicleInfo.veDriver || vehicleInfo.driverName || '--',
|
||
vehicleName: vehicleInfo.vePlate || vehicleInfo.plateNumber || '车辆',
|
||
deviceId: vehicleInfo.gpsDeviceId || vehicleInfo.gpsId || '',
|
||
latitude: point.weidu || point.latitude || point.lat || 0,
|
||
longitude: point.jingdu || point.longitude || point.lng || point.lon || 0
|
||
};
|
||
|
||
this.closeVehicleInfoWindow();
|
||
this.qcdtdialogTableVisible = false;
|
||
|
||
this.selectedVehicle = vehicleData;
|
||
this.trajectoryDialogVisible = true;
|
||
|
||
console.log('打开轨迹弹窗,车辆数据:', vehicleData);
|
||
},
|
||
|
||
// 关闭信息窗口
|
||
closeVehicleInfoWindow() {
|
||
if (this.vehicleInfoWindow) {
|
||
this.vehicleInfoWindow.close();
|
||
this.vehicleInfoWindow = null;
|
||
}
|
||
},
|
||
|
||
// 移除位置标记
|
||
removeLocationMarker() {
|
||
if (this.vehicleLocationMarker) {
|
||
this.vehicleLocationMarker.setMap(null);
|
||
this.vehicleLocationMarker = null;
|
||
}
|
||
},
|
||
|
||
// 清除车辆标记
|
||
clearVehicleMarker() {
|
||
this.vehicleMarkers.forEach(marker => {
|
||
if (marker.setMap) {
|
||
marker.setMap(null);
|
||
} else if (marker.close) {
|
||
marker.close();
|
||
}
|
||
});
|
||
this.vehicleMarkers = [];
|
||
|
||
this.removeLocationMarker();
|
||
this.closeVehicleInfoWindow();
|
||
},
|
||
|
||
// 危化车辆列表
|
||
vehicleListData() {
|
||
vehicleList({
|
||
pageNo: 1,
|
||
pageSize: 100,
|
||
}).then(res => {
|
||
if (res.code === 200 && res.result) {
|
||
this.vehicleList = res.result.records || [];
|
||
// 默认显示全部点位
|
||
this.$nextTick(() => {
|
||
this.showAllVehiclePoints();
|
||
});
|
||
} else {
|
||
this.vehicleList = [];
|
||
}
|
||
}).catch(err => {
|
||
this.vehicleList = [];
|
||
});
|
||
},
|
||
|
||
formatter: function (num) {
|
||
return num.toFixed(3)
|
||
},
|
||
sbdscdBtn() {
|
||
var url = 'https://wlw.zklsfk.com/admin/index?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiLmsrPmtKXluILlhpzkuJrlhpzmnZHlsYAiLCJleHAiOjE2ODk2MjU0ODUsImlhdCI6MTY4ODEzMDI1NiwianRpIjoiNTcxMTY5MTAtODczZC00ZjI1LWFkNzItZjA2NWU3NmFkNDIwIn0.52iF21xidGFllgfcsSgN-cLlysI0W7Ad8ie48LsV9x4'
|
||
window.open(url, "_blank");
|
||
},
|
||
mapTypeSwitch() {
|
||
this.mapTypeFlag = !this.mapTypeFlag
|
||
if (this.mapTypeFlag == true) {
|
||
this.zoomData = 14
|
||
if (this.isShowLight == undefined) {
|
||
let isShowLight = '1'
|
||
this.initMap(this.zoomData, isShowLight);
|
||
} else {
|
||
let isShowLight = this.isShowLight
|
||
this.initMap(this.zoomData, isShowLight);
|
||
}
|
||
setTimeout(() => {
|
||
this.$nextTick(() => {
|
||
this.doGetIndexSummry({index: 0});
|
||
})
|
||
}, 1000)
|
||
} else {
|
||
this.zoomData = 15
|
||
if (this.isShowLight == undefined) {
|
||
this.initMap(this.zoomData, '1');
|
||
} else {
|
||
this.initMap(this.zoomData, this.isShowLight);
|
||
}
|
||
}
|
||
},
|
||
indexleft() {
|
||
displayInfo().then(res => {
|
||
setTimeout(() => {
|
||
this.loading = false
|
||
}, 1000)
|
||
this.resourcedirect = res.result.resource_direct
|
||
this.briefconCode = res.result.project_brief.detailList[0].detailCode
|
||
this.briefconValue = res.result.project_brief.detailList
|
||
this.pestLightCount = res.result.pestLightCount
|
||
this.stationCount0 = res.result.stationCount[0].stationCount
|
||
this.climate_env = res.result.climate_env.detailList
|
||
this.water_conser = res.result.water_conser.detailList
|
||
this.roll_info = res.result.roll_info
|
||
this.effect_assess0 = res.result.effect_assess.detailList[0]
|
||
this.effect_assess0Value = res.result.effect_assess.detailList[0].detailValue
|
||
this.effect_assess1 = res.result.effect_assess.detailList[1]
|
||
this.effect_assess2 = res.result.effect_assess.detailList[2]
|
||
this.effect_assess3 = res.result.effect_assess.detailList[3]
|
||
this.effect_assess4 = res.result.effect_assess.detailList[4]
|
||
})
|
||
},
|
||
indexinfor() {
|
||
stationInfo().then(res => {
|
||
this.stationInfoList = res.result
|
||
if (this.stationInfoList) {
|
||
for (var i = 0; i < this.stationInfoList.length; i++) {
|
||
let objlist = this.stationInfoList[i].newestData
|
||
this.stationInfoList[i].wrwcode = []
|
||
objlist.map(item => {
|
||
this.stationInfoList[i].wrwcode.push({
|
||
name: item.name,
|
||
icon: item.icon,
|
||
unit: item.unit,
|
||
color: item.color,
|
||
code: item.value,
|
||
tylename: item.survItem
|
||
})
|
||
});
|
||
}
|
||
}
|
||
})
|
||
},
|
||
switchBtn(value) {
|
||
console.log("value++++++++", value)
|
||
if (value == true) {
|
||
let isShowLight = '1'
|
||
this.isShowLight = isShowLight
|
||
this.initMap(this.zoomData, isShowLight)
|
||
} else {
|
||
let isShowLight = ''
|
||
this.isShowLight = isShowLight
|
||
this.initMap(this.zoomData, isShowLight)
|
||
}
|
||
},
|
||
scaleChange(e) {
|
||
console.log("ee", e)
|
||
},
|
||
showEchartDialog(item, survItem) {
|
||
if(survItem === 1){
|
||
let dom = item.target.closest(".jczbtm_lf");
|
||
if(!dom){
|
||
dom = item.target.closest(".jcsssj");
|
||
}
|
||
if (dom) {
|
||
let item2 = dom.dataset.item
|
||
survItem = dom.dataset.survitem
|
||
if(item2){
|
||
item2=JSON.parse(item2)
|
||
}else{
|
||
item2 = null;
|
||
}
|
||
if(item2 && survItem){
|
||
this.showEchartDialog(item2, survItem)
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
this.singleEchartData = {
|
||
stationCode: item.stationCode,
|
||
deployId: item.deployId,
|
||
survItem: survItem
|
||
}
|
||
setTimeout(() => {
|
||
this.singleEchartDialogShowFlag = true;
|
||
}, 200)
|
||
},
|
||
initMap(zoomnum, isShowLight) {
|
||
let that = this;
|
||
getAllstationAndPestLight(isShowLight).then(res => {
|
||
that.aMap = new AMap.Map('container', {
|
||
viewMode: '3D',
|
||
resizeEnable: true,
|
||
zoom: zoomnum,
|
||
center: [112.83100231396601, 36.872032399813556],
|
||
mapStyle: 'amap://styles/blue',
|
||
dragEnable: true,
|
||
jogEnable: true,
|
||
keyboardEnable: true,
|
||
animateEnable: true,
|
||
defaultCursor: 'pointer',
|
||
turboMode: false,
|
||
showBuildingBlock: true,
|
||
showIndoorMap: false,
|
||
expandZoomRange: true,
|
||
forceVector: true,
|
||
scale: (2 , 2.5)
|
||
});
|
||
that.aMap.on('complete', (e) => {
|
||
var markerData = res.result;
|
||
let Marker = markerData.filter(ele => ele.type != 'light').sort((a,b) => {
|
||
if (b.type=='soil') return 1;
|
||
if (b.type!='soil') return -1;
|
||
return 0;
|
||
});
|
||
console.log(Marker,'Marker')
|
||
Marker.map(item => {
|
||
let marker = new AMap.Marker({
|
||
zIndex: item.type == 'soil' ? that.lastZIndex : (that.lastZIndex+1),
|
||
icon: this.urlimg + item.picUrl,
|
||
position: [item.longitude, item.latitude],
|
||
offset: new AMap.Pixel(item.width, item.height),
|
||
title: item.name,
|
||
extData: {
|
||
ids: item.ids,
|
||
extPics: item.extPics,
|
||
notes: item.notes,
|
||
name: item.name,
|
||
item: item,
|
||
stationType: item.type
|
||
}
|
||
});
|
||
if (item.type == 'orient' || item.type == 'livestock' || item.type == 'watershed') {
|
||
marker.on('click', e => {
|
||
let indexnumb = e.target.getExtData().ids.slice(-1);
|
||
this.qcdtinfor = this.stationInfoList[indexnumb]
|
||
this.qcdtdialogTableVisible = true
|
||
})
|
||
this.markersOrient.push(marker)
|
||
} else if(item.type == 'soil'){
|
||
marker.on('click', e => {
|
||
this.soilDataId = e.target.getExtData()
|
||
this.soidShowFlag = true
|
||
})
|
||
this.markersSoil.push(marker);
|
||
} else if(item.type == '10_flowmeter'){
|
||
marker.on('click', e => {
|
||
this.liulDataId = e.target.getExtData()
|
||
this.liulShowFlag = true
|
||
})
|
||
this.markersFlowmeter.push(marker);
|
||
this.markersSoil.push(marker);
|
||
} else {
|
||
this.markersOther.push(marker)
|
||
}
|
||
marker.setMap(that.aMap);
|
||
})
|
||
this.$forceUpdate();
|
||
that.aMap.setFitView();
|
||
setTimeout(() => {
|
||
that.aMap.setFitView(null, false, [130, 380, 480, 480], 16);
|
||
}, 2000)
|
||
});
|
||
})
|
||
},
|
||
getNewestDataList() {
|
||
getNewestData().then(res => {
|
||
let tempArray = [];
|
||
Object.keys(res.result).map(key => {
|
||
console.log(key)
|
||
tempArray = tempArray.concat(res.result[key])
|
||
})
|
||
tempArray.map(item => {
|
||
if(!item.value){item.value = '0';}
|
||
})
|
||
this.listData = tempArray
|
||
console.log(this.listData)
|
||
})
|
||
},
|
||
getPollutionDictList() {
|
||
getPollutionDict().then(res => {
|
||
this.getPollutionDictCover = res.result
|
||
})
|
||
},
|
||
changeDateType() {
|
||
this.summryAllData = null;
|
||
for (let key in this.echartInit) {
|
||
this.echartInit[key].dispose();
|
||
}
|
||
this.echartInit = {};
|
||
this.doGetIndexSummry({index: this.echartIndex});
|
||
},
|
||
switchEchartType() {
|
||
this.dataTypeEchart = (!this.dataTypeEchart);
|
||
this.echartInit = {};
|
||
setTimeout(() => {
|
||
this.doGetIndexSummry({index: 0});
|
||
}, 300);
|
||
},
|
||
doGetIndexSummry(tab, event) {
|
||
this.tabsLoading = true;
|
||
this.echartIndex = tab.index - 0;
|
||
if (this.summryAllData) {
|
||
this.$nextTick(() => {
|
||
this.initEchartData(this.echartIndex)
|
||
})
|
||
} else {
|
||
getIndexSummry({summrayMode: this.dateType}).then(res => {
|
||
if (res.code === 200) {
|
||
this.summryAllData = res.result;
|
||
let len = this.summryAllData.length;
|
||
this.riverList = [];
|
||
setTimeout(() => {
|
||
this.$nextTick(() => {
|
||
this.initEchartData(this.echartIndex)
|
||
})
|
||
}, 1000);
|
||
}
|
||
})
|
||
}
|
||
},
|
||
initEchartData(index, times) {
|
||
this.$nextTick(() => {
|
||
let domKey = `myChartDiv${index}`;
|
||
let data = this.summryAllData[index];
|
||
if (!this.dataTypeEchart) {
|
||
domKey = `myChartDiv2${index}`;
|
||
data = this.riverList[index];
|
||
}
|
||
if (this.echartInit[domKey]) {
|
||
this.echartInit[domKey].dispose()
|
||
}
|
||
let divDom = document.getElementById(domKey);
|
||
if (!divDom) {
|
||
console.log('没找到dom,两秒后重试:', domKey, divDom)
|
||
if(times!==2){
|
||
setTimeout(()=>{this.initEchartData(index,2)}, 1500);
|
||
}
|
||
return;
|
||
}
|
||
console.log('开始初始化echart:')
|
||
let dataObj = [];
|
||
let i = 0;
|
||
for (let key in data['datas']) {
|
||
if (data['datas'][key] instanceof Array) {
|
||
dataObj[i++] = {
|
||
name: key,
|
||
color: _colors[i],
|
||
value: data['datas'][key]
|
||
}
|
||
}
|
||
}
|
||
this.echartInit[domKey] = this.$echarts.init(divDom);
|
||
let legendData = dataObj.map(item => item.name);
|
||
let xAxisData = data['dateStr']
|
||
let seriesData = dataObj.map(item => {
|
||
return {
|
||
name: item.name,
|
||
data: item.value,
|
||
type: 'line',
|
||
stack: '',
|
||
lineStyle: {
|
||
color: item.color
|
||
},
|
||
itemStyle: {
|
||
color: item.color
|
||
},
|
||
smooth: true,
|
||
}
|
||
});
|
||
var optionLine = {
|
||
tooltip: {
|
||
trigger: 'axis',
|
||
enterable: true,
|
||
confine: true,
|
||
},
|
||
grid: {
|
||
top: '14%',
|
||
left: '3%',
|
||
right: '4%',
|
||
bottom: '9%',
|
||
containLabel: true
|
||
},
|
||
toolbox: {},
|
||
legend: {
|
||
padding: [10, 50, 0, 0],
|
||
x: 'right',
|
||
y: 'top',
|
||
data: legendData,
|
||
textStyle: {
|
||
fontSize: 12,
|
||
color: '#ffffff'
|
||
},
|
||
},
|
||
xAxis: {
|
||
type: 'category',
|
||
boundaryGap: false,
|
||
data: xAxisData,
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: '#2295ee',
|
||
width: 1,
|
||
},
|
||
},
|
||
},
|
||
yAxis: {
|
||
type: 'value',
|
||
splitLine: {
|
||
lineStyle: {
|
||
color: '#2295ee'
|
||
}
|
||
},
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: '#2295ee',
|
||
width: 1,
|
||
},
|
||
},
|
||
},
|
||
series: seriesData,
|
||
};
|
||
this.echartInit[domKey].setOption(optionLine);
|
||
})
|
||
this.tabsLoading = false;
|
||
},
|
||
getNowTime() {
|
||
let speed = 1000
|
||
let that = this
|
||
let theNowTime = function () {
|
||
that.nowTime = that.timeNumber()
|
||
}
|
||
setInterval(theNowTime, speed)
|
||
},
|
||
timeNumber() {
|
||
let today = new Date()
|
||
let date = today.getFullYear() + '年' + this.twoDigits(today.getMonth() + 1) + '月' + this.twoDigits(today.getDate()) + '日'
|
||
let time = this.twoDigits(today.getHours()) + ':' + this.twoDigits(today.getMinutes()) + ':' + this.twoDigits(today.getSeconds())
|
||
let wk = new Date().getDay()
|
||
let weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
|
||
let week = weeks[wk]
|
||
return date + ' ' + week + ' ' + time
|
||
},
|
||
twoDigits(val) {
|
||
if (val < 10) return '0' + val
|
||
return val
|
||
},
|
||
jumpStationPage(e) {
|
||
let stationCode = e.stationCode
|
||
this.$router.push({path: '/MywrList', query: {stationCode: stationCode}})
|
||
},
|
||
handleClosetuichu(done) {
|
||
this.dialogVisible = false
|
||
localStorage.clear()
|
||
this.$router.push({path: '/Login'})
|
||
},
|
||
infor() {
|
||
var onformation = JSON.parse(window.sessionStorage.getItem('password'));
|
||
if (onformation) {
|
||
this.inforname = onformation.realname
|
||
}
|
||
},
|
||
qcguanbi() {
|
||
this.qcdialogTableVisible = false
|
||
this.qyinfordtdialogTableVisible = false
|
||
this.dialogTableVisible = false
|
||
this.singleEchartDialogShowFlag = false
|
||
this.clearVehicleMarker();
|
||
},
|
||
screen() {
|
||
let element = document.documentElement;
|
||
if (this.fullscreen) {
|
||
if (document.exitFullscreen) {
|
||
document.exitFullscreen();
|
||
} else if (document.webkitCancelFullScreen) {
|
||
document.webkitCancelFullScreen();
|
||
} else if (document.mozCancelFullScreen) {
|
||
document.mozCancelFullScreen();
|
||
} else if (document.msExitFullscreen) {
|
||
document.msExitFullscreen();
|
||
}
|
||
} else {
|
||
if (element.requestFullscreen) {
|
||
element.requestFullscreen();
|
||
} else if (element.webkitRequestFullScreen) {
|
||
element.webkitRequestFullScreen();
|
||
} else if (element.mozRequestFullScreen) {
|
||
element.mozRequestFullScreen();
|
||
} else if (element.msRequestFullscreen) {
|
||
element.msRequestFullscreen();
|
||
}
|
||
}
|
||
this.fullscreen = !this.fullscreen;
|
||
},
|
||
switchIcon(flag) {
|
||
let that = this;
|
||
let arr = [];
|
||
if (this.lastClickIcon == flag) {
|
||
this.lastClickIcon = ''
|
||
// 取消选中,恢复视图
|
||
that.aMap.setFitView(null, false, [100, 400, 360, 360], 16);
|
||
return;
|
||
} else {
|
||
this.lastClickIcon = flag;
|
||
if (flag == 'livestock') {
|
||
arr = this.markersOrient.filter(item => item.getExtData().stationType.indexOf("livestock") != -1);
|
||
} else if (flag == 'orient') {
|
||
arr = this.markersOrient.filter(item => item.getExtData().stationType.indexOf("orient") != -1);
|
||
} else if (flag == 'watershed') {
|
||
arr = this.markersOrient.filter(item => item.getExtData().stationType.indexOf("watershed") != -1);
|
||
} else if (flag == 'soil') {
|
||
arr = this.markersSoil;
|
||
} else if (flag == 'flowmeter') {
|
||
arr = this.markersFlowmeter;
|
||
} else if (flag == 'vehicle') {
|
||
arr = this.markersVehicle;
|
||
}
|
||
}
|
||
if (arr && arr.length > 0) {
|
||
arr.map(item => {
|
||
item.setzIndex((that.lastZIndex+=2));
|
||
});
|
||
that.aMap.setFitView(arr, false, [200, 500, 360, 360], 16);
|
||
const typeNames = {
|
||
'livestock': '畜禽污染监测站',
|
||
'orient': '农田污染监测站',
|
||
'watershed': '小流域监测站',
|
||
'soil': '长期定位监测站',
|
||
'flowmeter': '微功率雷达监测点',
|
||
'vehicle': '危废车辆'
|
||
};
|
||
this.$message.success(`找到 ${arr.length} 个${typeNames[flag] || '标记点'}`);
|
||
} else {
|
||
that.aMap.setFitView(null, false, [100, 400, 360, 360], 16);
|
||
const typeNames = {
|
||
'livestock': '畜禽污染监测站',
|
||
'orient': '农田污染监测站',
|
||
'watershed': '小流域监测站',
|
||
'soil': '长期定位监测站',
|
||
'flowmeter': '微功率雷达监测点',
|
||
'vehicle': '危废车辆'
|
||
};
|
||
this.$message.warning(`暂无${typeNames[flag] || '标记点'}数据`);
|
||
}
|
||
},
|
||
},
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
@import '@/assets/css/index.css';
|
||
|
||
.quanping {
|
||
width: 1.6vw;
|
||
margin-right: 3%;
|
||
margin-top: 0.2vw;
|
||
position: absolute;
|
||
right: 1%;
|
||
z-index: 999;
|
||
}
|
||
|
||
/* 台账弹窗 */
|
||
.tzsanguang {
|
||
position: absolute;
|
||
top: -1.5vw;
|
||
right: 38%;
|
||
}
|
||
|
||
.tzsanguangbt {
|
||
position: absolute;
|
||
bottom: -1.5vw;
|
||
right: 38%;
|
||
}
|
||
|
||
.tz_cov_top {
|
||
width: 40%;
|
||
height: 3vw;
|
||
margin: 0 auto;
|
||
background: url(../../assets/image/tz_tltle_bg.png) no-repeat;
|
||
background-size: cover;
|
||
text-align: center;
|
||
line-height: 3vw;
|
||
margin-bottom: 2vw;
|
||
}
|
||
|
||
.tz_cov_top_tit {
|
||
font-size: 1vw;
|
||
color: #fff;
|
||
text-shadow: 0px 2px 0px rgba(4, 49, 52, 0.55);
|
||
font-family: douyuFont;
|
||
}
|
||
|
||
.mywrcov_onehover {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.centerMainBox2 img {
|
||
position: absolute;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.boxLis {
|
||
width: 70%;
|
||
height: 1.5vw;
|
||
margin-left: 3vw;
|
||
margin-top: 1vw;
|
||
border-bottom: .02vw solid rgb(40, 229, 233);
|
||
}
|
||
|
||
.boxLis > li {
|
||
width: 4vw;
|
||
height: 1.4vw;
|
||
display: block;
|
||
background: rgba(40, 229, 233, .5);
|
||
margin-right: .5vw;
|
||
color: #fff;
|
||
line-height: 1.4vw;
|
||
text-align: center;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.active {
|
||
border-bottom: .02vw solid #040A18;
|
||
border-top: .02vw solid rgb(40, 229, 233);
|
||
border-right: .02vw solid rgb(40, 229, 233);
|
||
border-left: .02vw solid rgb(40, 229, 233);
|
||
}
|
||
|
||
.contList {
|
||
position: relative;
|
||
width: 70%;
|
||
height: 7vw;
|
||
margin: 1vw auto 0;
|
||
}
|
||
|
||
.content1 li {
|
||
display: none;
|
||
}
|
||
|
||
.baseBox {
|
||
width: 100%;
|
||
border: none;
|
||
background: none;
|
||
}
|
||
|
||
.boxTitle {
|
||
font-size: .8vw;
|
||
width: 38%;
|
||
margin-top: 1vw;
|
||
text-align: center;
|
||
}
|
||
|
||
.right {
|
||
float: right;
|
||
}
|
||
|
||
.baseBoxLeft {
|
||
width: 22.5%;
|
||
height: 100%;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.baseBoxRight {
|
||
width: 68%;
|
||
height: 100%;
|
||
}
|
||
|
||
.maps {
|
||
width: 100%;
|
||
height: 95%;
|
||
margin-top: 2%;
|
||
background: pink;
|
||
}
|
||
|
||
.baseBox1,
|
||
.baseBox2,
|
||
.baseBox3 {
|
||
position: relative;
|
||
}
|
||
|
||
.baseBox1 img,
|
||
.baseBox2 img,
|
||
.baseBox3 img {
|
||
position: absolute;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.csbaseBox1 {
|
||
position: relative;
|
||
z-index: 999;
|
||
}
|
||
|
||
.liSpan {
|
||
width: 100%;
|
||
margin-top: 3.2%;
|
||
text-align: center;
|
||
color: rgb(40, 229, 233);
|
||
}
|
||
|
||
.liP {
|
||
width: 66%;
|
||
margin: .3vw auto 0;
|
||
text-align: left;
|
||
font-size: .5vw;
|
||
color: rgb(40, 229, 233);
|
||
}
|
||
|
||
a:hover {
|
||
text-decoration: none
|
||
}
|
||
|
||
.titleName {
|
||
color: #0EFCFF;
|
||
}
|
||
|
||
.plant {
|
||
width: 90%;
|
||
height: 5.5vw;
|
||
margin: 2% auto 0;
|
||
display: -webkit-flex;
|
||
display: -moz-flex;
|
||
}
|
||
|
||
.plant > li {
|
||
width: 15%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jumps {
|
||
width: 100%;
|
||
height: 100%;
|
||
background: rgba(0, 235, 255, .08);
|
||
display: -webkit-flex;
|
||
display: -moz-flex;
|
||
}
|
||
|
||
.jumps > div > img {
|
||
width: .88vw;
|
||
height: .88vw;
|
||
float: right;
|
||
}
|
||
|
||
.jumps > p {
|
||
width: 90%;
|
||
font-size: 1.3vw;
|
||
color: #fff;
|
||
margin: auto;
|
||
}
|
||
|
||
.jumps > div {
|
||
width: 90%;
|
||
margin: 5% auto 0;
|
||
}
|
||
|
||
.jumps > div > span {
|
||
font-size: .6vw;
|
||
color: #0efcff;
|
||
float: left;
|
||
}
|
||
|
||
.spans0 {
|
||
width: 80%;
|
||
height: 5%;
|
||
background: #03DA8D;
|
||
}
|
||
|
||
.spans1 {
|
||
width: 80%;
|
||
height: 5%;
|
||
background: #0efcff;
|
||
}
|
||
|
||
.spans2 {
|
||
width: 80%;
|
||
height: 5%;
|
||
background: #FE0000;
|
||
}
|
||
|
||
.spans3 {
|
||
width: 80%;
|
||
height: 5%;
|
||
background: #F78001;
|
||
}
|
||
|
||
.boxVideo {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.boxVideo video {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.baseDatas {
|
||
width: 70%;
|
||
height: 2vw;
|
||
display: -webkit-flex;
|
||
margin: 1vw 0 0 5vw;
|
||
}
|
||
|
||
.baseDatas li {
|
||
width: 10%;
|
||
}
|
||
|
||
.baseDatas li a {
|
||
color: #fff;
|
||
font-size: .8vw;
|
||
}
|
||
|
||
.active2 a > span {
|
||
color: rgb(40, 229, 233);
|
||
}
|
||
|
||
.baseDatas li a:hover > span {
|
||
color: rgb(40, 229, 233);
|
||
}
|
||
|
||
.baseDatas li a:hover > .borderRight {
|
||
border-left-color: rgb(40, 229, 233);
|
||
}
|
||
|
||
.tableDetalis {
|
||
width: 92%;
|
||
color: #fff;
|
||
margin-left: 2vw;
|
||
}
|
||
|
||
.tableDetalis tr {
|
||
height: 1.3vw;
|
||
font-size: .8vw;
|
||
}
|
||
|
||
.tableDetalis tr > td {
|
||
text-align: center;
|
||
}
|
||
|
||
.tableDetalis tr > td:nth-child(7) {
|
||
text-align: right;
|
||
}
|
||
|
||
.borderRight {
|
||
width: 0;
|
||
height: 0;
|
||
float: left;
|
||
border: .4vw solid transparent;
|
||
border-left-color: #fff;
|
||
margin-top: .2vw;
|
||
}
|
||
|
||
.borderActive {
|
||
border-left-color: rgb(40, 229, 233);
|
||
}
|
||
|
||
.equipment_table {
|
||
width: 85%;
|
||
height: 25%;
|
||
margin: auto;
|
||
text-align: center;
|
||
color: #fff;
|
||
font-size: .5vw;
|
||
}
|
||
|
||
.equipment_table tr:nth-child(1) {
|
||
color: #0EFCFF;
|
||
}
|
||
|
||
.equipment_table tr {
|
||
border: 1px solid #0EFCFF;
|
||
}
|
||
|
||
.equipment_table tr:nth-child(1) {
|
||
font-size: .8vw;
|
||
}
|
||
|
||
.equipment_table img {
|
||
width: 1vw;
|
||
}
|
||
|
||
.env_table {
|
||
height: 35%;
|
||
margin-top: 5%;
|
||
}
|
||
|
||
.env_table td {
|
||
border: 1px solid #0EFCFF;
|
||
}
|
||
|
||
.env_table tr:nth-child(1) {
|
||
background: rgba(14, 252, 255, .3);
|
||
}
|
||
|
||
.map img {
|
||
width: 80%;
|
||
margin-left: 10%;
|
||
}
|
||
|
||
.map img {
|
||
width: 80%;
|
||
margin-left: 10%;
|
||
}
|
||
|
||
.mapActived1 {
|
||
position: absolute;
|
||
top: 41.5%;
|
||
left: 61%;
|
||
width: 3.5vw;
|
||
height: 5.5vw;
|
||
border-radius: 90px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.mapActived2 {
|
||
position: absolute;
|
||
top: 60%;
|
||
right: 16%;
|
||
width: 4.5vw;
|
||
height: 2.5vw;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.mapActived3 {
|
||
position: absolute;
|
||
top: 57%;
|
||
right: 9%;
|
||
width: 2.5vw;
|
||
height: 7vw;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.mapContent1 {
|
||
position: absolute;
|
||
height: 6vw;
|
||
width: 8vw;
|
||
left: 65%;
|
||
top: 33%;
|
||
background: rgba(255, 255, 255, .2);
|
||
}
|
||
|
||
.mapContent2 {
|
||
position: absolute;
|
||
height: 6vw;
|
||
width: 8vw;
|
||
left: 70%;
|
||
top: 35%;
|
||
background: rgba(255, 255, 255, .2);
|
||
display: none;
|
||
}
|
||
|
||
.mapContent3 {
|
||
position: absolute;
|
||
height: 6vw;
|
||
width: 8vw;
|
||
right: 1%;
|
||
top: 35%;
|
||
background: rgba(255, 255, 255, .2);
|
||
display: none;
|
||
}
|
||
|
||
.mapContentFont {
|
||
width: 85%;
|
||
margin-left: 12%;
|
||
font-size: .6vw;
|
||
color: #0efcff;
|
||
letter-spacing: .05vw;
|
||
margin-bottom: .3vw;
|
||
}
|
||
|
||
.mapContentFont:nth-child(1) {
|
||
margin-top: .6vw;
|
||
}
|
||
|
||
.mapContentFont span {
|
||
color: white;
|
||
}
|
||
|
||
.video-js {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.video-js:hover .vjs-big-play-button {
|
||
background: none;
|
||
}
|
||
|
||
.video-js .vjs-big-play-button:hover {
|
||
background: none;
|
||
}
|
||
|
||
.video-js .vjs-big-play-button {
|
||
border: none;
|
||
background: none;
|
||
}
|
||
.in1con_lf_titshow12 {
|
||
font-size: 1vw;
|
||
color: #fff;
|
||
text-shadow: 0px 2px 0px rgba(4, 49, 52, 0.55);
|
||
font-family: douyuFont;
|
||
top: 1vw;
|
||
left: 0%;
|
||
display: block;
|
||
width: 100%;
|
||
text-align: center;
|
||
margin: 0;
|
||
margin-top: 15px;
|
||
}
|
||
|
||
.in1con_lf_titshow1 {
|
||
font-size: 1vw;
|
||
color: #fff;
|
||
text-shadow: 0px 2px 0px rgba(4, 49, 52, 0.55);
|
||
font-family: douyuFont;
|
||
position: absolute;
|
||
top: 0.9vw;
|
||
left: 0%;
|
||
display: block;
|
||
width: 100%;
|
||
text-align: center;
|
||
}
|
||
.in1con_lf_titshow13{
|
||
color: #ffa;
|
||
}
|
||
.in1con_lf_titshow2 {
|
||
font-size: 11px;
|
||
color: #fff;
|
||
text-shadow: 0px 2px 0px rgba(4, 49, 52, 0.55);
|
||
position: absolute;
|
||
top: 1.3vw;
|
||
right: 18px;
|
||
display: block;
|
||
width: 100%;
|
||
text-align: right;
|
||
cursor: pointer;
|
||
}
|
||
|
||
/* ========== 危废车辆下拉菜单样式 ========== */
|
||
.vehicle-dropdown-wrapper {
|
||
position: fixed;
|
||
bottom: 2vw;
|
||
right: 2vw;
|
||
z-index: 999;
|
||
width: 220px;
|
||
}
|
||
|
||
.vehicle-dropdown-btn-dark {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding: 10px 16px;
|
||
background: rgba(0, 20, 40, 0.9);
|
||
border: 1px solid rgba(0, 212, 255, 0.3);
|
||
border-radius: 8px;
|
||
color: #fff;
|
||
font-size: 14px;
|
||
cursor: pointer;
|
||
transition: all 0.3s ease;
|
||
backdrop-filter: blur(10px);
|
||
box-shadow: 0 0 30px rgba(0, 212, 255, 0.1);
|
||
}
|
||
|
||
.vehicle-dropdown-btn-dark:hover {
|
||
border-color: rgba(0, 212, 255, 0.6);
|
||
box-shadow: 0 0 40px rgba(0, 212, 255, 0.2);
|
||
}
|
||
|
||
.vehicle-dropdown-btn-dark .el-icon--right {
|
||
margin-left: 8px;
|
||
transition: transform 0.3s ease;
|
||
}
|
||
|
||
.vehicle-dropdown-menu-dark {
|
||
position: absolute;
|
||
bottom: 100%;
|
||
left: 0;
|
||
right: 0;
|
||
margin-bottom: 4px;
|
||
background: rgba(0, 20, 40, 0.95);
|
||
border: 1px solid rgba(0, 212, 255, 0.2);
|
||
border-radius: 8px;
|
||
padding: 6px 0;
|
||
max-height: 300px;
|
||
overflow-y: auto;
|
||
backdrop-filter: blur(10px);
|
||
box-shadow: 0 0 40px rgba(0, 0, 0, 0.5);
|
||
}
|
||
|
||
.vehicle-dropdown-menu-dark::-webkit-scrollbar {
|
||
width: 4px;
|
||
}
|
||
|
||
.vehicle-dropdown-menu-dark::-webkit-scrollbar-track {
|
||
background: rgba(0, 212, 255, 0.05);
|
||
border-radius: 4px;
|
||
}
|
||
|
||
.vehicle-dropdown-menu-dark::-webkit-scrollbar-thumb {
|
||
background: rgba(0, 212, 255, 0.3);
|
||
border-radius: 4px;
|
||
}
|
||
|
||
.vehicle-dropdown-item-dark {
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 8px 16px;
|
||
color: #8bb4d0;
|
||
font-size: 13px;
|
||
cursor: pointer;
|
||
transition: all 0.2s ease;
|
||
gap: 8px;
|
||
}
|
||
|
||
.vehicle-dropdown-item-dark:hover {
|
||
background: rgba(0, 212, 255, 0.1);
|
||
color: #fff;
|
||
}
|
||
|
||
.vehicle-dropdown-item-dark .vehicle-dot-dark {
|
||
color: #00d4ff;
|
||
font-size: 10px;
|
||
margin-right: 4px;
|
||
}
|
||
|
||
.vehicle-dropdown-item-dark .all-dot {
|
||
color: #FFD700;
|
||
}
|
||
|
||
.vehicle-dropdown-item-dark .close-dot {
|
||
color: #ff6b6b;
|
||
}
|
||
|
||
.vehicle-dropdown-divider {
|
||
height: 1px;
|
||
margin: 4px 12px;
|
||
background: rgba(0, 212, 255, 0.1);
|
||
}
|
||
</style>
|
||
|
||
<style>
|
||
.login .el-dialog {
|
||
position: relative;
|
||
margin: 0 auto;
|
||
background: #fff;
|
||
border-radius: 2px;
|
||
box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
|
||
box-sizing: border-box;
|
||
width: 50%;
|
||
}
|
||
|
||
.el-dialog {
|
||
position: relative;
|
||
margin: 0 auto;
|
||
background: none;
|
||
border-radius: 2px;
|
||
box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
|
||
box-sizing: border-box;
|
||
width: 50%;
|
||
}
|
||
|
||
.el-dialog__header {
|
||
display: none;
|
||
}
|
||
|
||
.home_dlhj .el-carousel__arrow {
|
||
top: 9%;
|
||
font-size: 1vw;
|
||
}
|
||
|
||
.home_dlhj .el-carousel__arrow--left {
|
||
left: 0;
|
||
}
|
||
|
||
.home_dlhj .el-carousel__arrow--right {
|
||
right: 0;
|
||
}
|
||
|
||
.el-tabs--card > .el-tabs__header {
|
||
border: none;
|
||
}
|
||
|
||
.el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
|
||
text-align: center;
|
||
height: 1.7vw;
|
||
line-height: 1.7vw;
|
||
margin-left: 1% !important;
|
||
border-radius: 0.4vw;
|
||
background: #0e2c3f;
|
||
color: #fff !important;
|
||
border: 1px solid #2fbdff;
|
||
box-shadow: inset 0px 0px 16px 0px rgba(0, 145, 255, 1);
|
||
margin-top: 8px;
|
||
text-align: center;
|
||
font-size: 12px !important;
|
||
}
|
||
|
||
.el-tabs--card > .el-tabs__header .el-tabs__item {
|
||
text-align: center;
|
||
height: 1.7vw;
|
||
line-height: 1.7vw;
|
||
margin-left: 1% !important;
|
||
border-radius: 0.4vw;
|
||
background: #0e2c3f;
|
||
color: #fff !important;
|
||
font-size: 8px !important;
|
||
border: 1px solid #0e2c3f;
|
||
font-size: 12px !important;
|
||
}
|
||
|
||
.el-tabs--card > .el-tabs__header .el-tabs__nav {
|
||
border: none;
|
||
float: right;
|
||
margin-right: 6%;
|
||
margin-top: 5px;
|
||
}
|
||
|
||
.zlxg_btm .el-tabs__item:hover {
|
||
text-align: center;
|
||
height: 1.7vw;
|
||
line-height: 1.7vw;
|
||
margin-left: 1% !important;
|
||
border-radius: 0.4vw;
|
||
background: #0e2c3f;
|
||
color: #fff !important;
|
||
border: 1px solid #2fbdff;
|
||
box-shadow: inset 0px 0px 16px 0px rgba(0, 145, 255, 1);
|
||
font-size: 12px !important;
|
||
}
|
||
|
||
.v-modal {
|
||
display: none;
|
||
}
|
||
|
||
.jcsssj_rt_num {
|
||
display: inline-block;
|
||
font-size: 0.8vw;
|
||
margin-left: 20%;
|
||
text-align: right;
|
||
margin-top: 0.4vw;
|
||
}
|
||
|
||
|
||
/* 企业弹窗样式 */
|
||
.tctit {
|
||
font-size: 1.2vw;
|
||
color: #fff;
|
||
font-weight: bold;
|
||
display: block;
|
||
margin-bottom: 1.6vw;
|
||
}
|
||
|
||
.tcgldw {
|
||
font-size: 1vw;
|
||
color: #fff;
|
||
line-height: 2vw;
|
||
display: block;
|
||
padding-right: 3%;
|
||
height: 15vw;
|
||
overflow: auto;
|
||
}
|
||
|
||
/* 定义滚动条样式 */
|
||
.tcgldw::-webkit-scrollbar {
|
||
width: 2px;
|
||
height: 2px;
|
||
background-color: rgba(240, 240, 240, 0.1);
|
||
}
|
||
|
||
.tcgldw::-webkit-scrollbar-track {
|
||
box-shadow: inset 0 0 0px rgba(240, 240, 240, .5);
|
||
border-radius: 10px;
|
||
background-color: rgba(240, 240, 240, .5);
|
||
}
|
||
|
||
.tcgldw::-webkit-scrollbar-thumb {
|
||
border-radius: 10px;
|
||
box-shadow: inset 0 0 0px rgba(87, 146, 255, .8);
|
||
background-color: rgba(87, 146, 255, .8);
|
||
}
|
||
|
||
/* 曲线弹窗 */
|
||
.jgdhei {
|
||
margin-top: 2vw;
|
||
}
|
||
|
||
.trwdcov {
|
||
width: 94%;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.trwdcov_top {
|
||
width: 100%;
|
||
height: 5vh;
|
||
line-height: 5vh;
|
||
text-align: left;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.trwdcov_top_tit {
|
||
color: #fff;
|
||
font-size: 0.8vw;
|
||
margin-right: 1%;
|
||
}
|
||
|
||
.trwdcov_top_zcz {
|
||
color: #fff;
|
||
font-size: 0.8vw;
|
||
float: right;
|
||
margin-right: 3%;
|
||
}
|
||
|
||
.trwdcov_top .el-radio__input.is-checked .el-radio__inner {
|
||
border-color: #00ffcd;
|
||
background: #00ffcd;
|
||
}
|
||
|
||
.trwdcov_top .el-radio__input.is-checked + .el-radio__label {
|
||
color: #00ffcd;
|
||
}
|
||
|
||
.trwdcov_top .el-radio {
|
||
color: #fff;
|
||
}
|
||
|
||
.trwdcov_top .el-input__inner {
|
||
background: none;
|
||
}
|
||
|
||
.trwdcov_top .el-date-editor .el-range-input {
|
||
background: none;
|
||
color: #c9c9c9;
|
||
border-color: #c9c9c9;
|
||
}
|
||
|
||
.trwdcov_top .el-date-editor .el-range-separator {
|
||
color: #fff;
|
||
}
|
||
|
||
.trwdcov .el-table__body, .el-table__footer, .el-table__header {
|
||
width: 100% !important;
|
||
}
|
||
|
||
.trwdcov .el-table__body, .el-table__footer, .el-table__header {
|
||
width: 100% !important;
|
||
text-align: center;
|
||
}
|
||
|
||
.trwdcov .el-table tr {
|
||
background: none;
|
||
}
|
||
|
||
.trwdcov .el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf {
|
||
background: none;
|
||
color: #00ffcd;
|
||
border-bottom: 1px solid #747474;
|
||
text-align: center;
|
||
}
|
||
|
||
.trwdcov .el-table--border .el-table__cell, .el-table__body-wrapper .el-table--border.is-scrolling-left ~ .el-table__fixed {
|
||
border-right: 1px solid #747474;
|
||
}
|
||
|
||
.trwdcov .el-table--enable-row-transition .el-table__body td.el-table__cell {
|
||
color: #c9c9c9 !important;
|
||
}
|
||
|
||
.trwdcov .el-table--border, .el-table--group {
|
||
border: 1px solid #747474;
|
||
}
|
||
|
||
.trwdcov .el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell {
|
||
background: rgba(255, 255, 255, 0.2);
|
||
}
|
||
|
||
.trwdcov_top_time {
|
||
margin-right: 3%;
|
||
}
|
||
|
||
.tz_cov_right .el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell {
|
||
background: rgba(255, 255, 255, 0.1);
|
||
cursor: pointer;
|
||
}
|
||
|
||
.el-table .el-table__cell.gutter {
|
||
background: var(--tableHeadBg);
|
||
width: 2px;
|
||
}
|
||
|
||
.el-table__body-wrapper::-webkit-scrollbar {
|
||
width: 2px;
|
||
height: 2px;
|
||
background-color: rgba(240, 240, 240, 0.1);
|
||
}
|
||
|
||
.el-table th.gutter {
|
||
display: none;
|
||
width: 0;
|
||
}
|
||
|
||
.el-table colgroup col[name='gutter'] {
|
||
display: none;
|
||
width: 0;
|
||
}
|
||
|
||
.in1con_lf_img {
|
||
display: flex;
|
||
justify-content: center;
|
||
}
|
||
|
||
.mapTuLi {
|
||
position: absolute;
|
||
bottom: 334px;
|
||
left: 456px;
|
||
}
|
||
|
||
.mywrcov_onenumjx{
|
||
font-size: 1.2vw;
|
||
}
|
||
</style> |