|
@@ -1,36 +1,20 @@
|
|
|
<template>
|
|
|
<div class="home">
|
|
|
- <div class="headerBox">
|
|
|
- <div class="headerLeft">
|
|
|
- <div>{{ dateDay }}</div>
|
|
|
- <div class="time">{{ dataTime }}</div>
|
|
|
- <div class="week">{{ timeWeek }}</div>
|
|
|
- <div class="address">{{$store.state.weaterRes.aqiDetail.area}}</div>
|
|
|
- <div class="weather">
|
|
|
- <img :src="$store.state.weaterRes.weather_pic || ''" alt="" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- {{ $store.state.weaterRes.weather || "" }}
|
|
|
- {{ $store.state.weaterRes.temperature || "" }}℃
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="headerCenter"></div>
|
|
|
- <div class="headerRight">
|
|
|
- <div class="boxBgRight">
|
|
|
- <img src="../../assets/image/headerIcon.png" alt="" />巡检维保
|
|
|
- </div>
|
|
|
- <div>当前待处理:5</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
<div class="contentBox">
|
|
|
<div class="mapBox">
|
|
|
<div class="Amap" id="mapF"></div>
|
|
|
<div class="rightIconBox">
|
|
|
- <div @click="isTypeMap('isNormal')"><img src="../../assets/image/zcIcon.png" alt="" />正常</div>
|
|
|
+ <div @click="isTypeMap('isNormal')">
|
|
|
+ <img src="../../assets/image/zcIcon.png" alt="" />正常
|
|
|
+ </div>
|
|
|
<span></span>
|
|
|
- <div @click="isTypeMap('isWarning')"><img src="../../assets/image/jcIcon.png" alt="" />告警</div>
|
|
|
+ <div @click="isTypeMap('isWarning')">
|
|
|
+ <img src="../../assets/image/jcIcon.png" alt="" />告警
|
|
|
+ </div>
|
|
|
<span></span>
|
|
|
- <div @click="isTypeMap('isLine')"><img src="../../assets/image/lxIcon.png" alt="" />离线</div>
|
|
|
+ <div @click="isTypeMap('isLine')">
|
|
|
+ <img src="../../assets/image/lxIcon.png" alt="" />离线
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="echartsBox">
|
|
@@ -39,20 +23,59 @@
|
|
|
<div class="echartsBoxList box1">
|
|
|
<div class="box1Left">
|
|
|
<img src="../../assets/image/jg.png" alt="" />
|
|
|
- <span>井盖总数(100)</span>
|
|
|
+ <span>井盖总数({{ coverMap.deviceTotalNum }})</span>
|
|
|
</div>
|
|
|
<div class="box1Right">
|
|
|
- <div>井盖在线数:<span class="green">90</span></div>
|
|
|
- <div>在线率:<span class="green">90%</span></div>
|
|
|
- <div>离线告警数:<span class="yellow">5</span></div>
|
|
|
- <div>离线率:<span class="yellow">5%</span></div>
|
|
|
- <div>异常告警数:<span class="red">5</span></div>
|
|
|
- <div>告警率:<span class="red">5%</span></div>
|
|
|
+ <div>
|
|
|
+ 井盖在线数:<span class="green">{{
|
|
|
+ coverMap.deviceTotalNum - coverMap.unOline
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ 在线率:<span class="green"
|
|
|
+ >{{
|
|
|
+ (coverMap.deviceTotalNum &&
|
|
|
+ (
|
|
|
+ (coverMap.deviceTotalNum - coverMap.unOline) /
|
|
|
+ coverMap.deviceTotalNum
|
|
|
+ ).toFixed(2) * 100) ||
|
|
|
+ 0
|
|
|
+ }}%</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ 离线告警数:<span class="yellow">{{ coverMap.unOline }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ 离线率:<span class="yellow"
|
|
|
+ >{{
|
|
|
+ (coverMap.deviceTotalNum &&
|
|
|
+ (coverMap.unOline / coverMap.deviceTotalNum).toFixed(2) *
|
|
|
+ 100) ||
|
|
|
+ 0
|
|
|
+ }}%</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ 异常告警数:<span class="red">{{ coverMap.malfunction }}</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ 告警率:<span class="red"
|
|
|
+ >{{
|
|
|
+ (coverMap.deviceTotalNum &&
|
|
|
+ (coverMap.malfunction / coverMap.deviceTotalNum).toFixed(
|
|
|
+ 2
|
|
|
+ ) * 100) ||
|
|
|
+ 0
|
|
|
+ }}%</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div>
|
|
|
- <div class="titleBox">近7日告警情况统计</div>
|
|
|
+ <div class="titleBox">近期告警情况统计</div>
|
|
|
+ <!-- <div class="titleBox">近7日告警情况统计</div> -->
|
|
|
<div class="echartsBoxList">
|
|
|
<div ref="echartD1" class="echartD"></div>
|
|
|
</div>
|
|
@@ -75,48 +98,54 @@
|
|
|
:highlight-current-row="false"
|
|
|
>
|
|
|
<el-table-column
|
|
|
- prop="name"
|
|
|
+ prop="devId"
|
|
|
label="设备编号"
|
|
|
:min-width="20"
|
|
|
show-overflow-tooltip
|
|
|
>
|
|
|
</el-table-column>
|
|
|
<el-table-column
|
|
|
- prop="dpName"
|
|
|
+ prop="serial"
|
|
|
label="告警类型"
|
|
|
:min-width="20"
|
|
|
show-overflow-tooltip
|
|
|
>
|
|
|
+ <template slot-scope="scope">
|
|
|
+ {{
|
|
|
+ scope.row.serial == 1
|
|
|
+ ? "离线"
|
|
|
+ : scope.row.serial == 2
|
|
|
+ ? "异动"
|
|
|
+ : scope.row.serial == 3
|
|
|
+ ? "液位告警"
|
|
|
+ : scope.row.serial == 32
|
|
|
+ ? "故障"
|
|
|
+ : ""
|
|
|
+ }}
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
<el-table-column
|
|
|
- prop="jf"
|
|
|
- label="负责人"
|
|
|
- :min-width="20"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
- </el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="zl"
|
|
|
- label="联系方式"
|
|
|
+ prop="value"
|
|
|
+ label="告警内容"
|
|
|
:min-width="20"
|
|
|
show-overflow-tooltip
|
|
|
>
|
|
|
</el-table-column>
|
|
|
<el-table-column
|
|
|
- prop="je"
|
|
|
- label="位置"
|
|
|
+ prop="deviceName"
|
|
|
+ label="设备名称"
|
|
|
:min-width="20"
|
|
|
show-overflow-tooltip
|
|
|
>
|
|
|
</el-table-column>
|
|
|
<el-table-column
|
|
|
- prop="time"
|
|
|
+ prop="timeStamp"
|
|
|
label="告警时间"
|
|
|
:min-width="20"
|
|
|
show-overflow-tooltip
|
|
|
>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
+ <!-- <el-table-column
|
|
|
prop="time"
|
|
|
label="处理状态"
|
|
|
:min-width="20"
|
|
@@ -129,7 +158,7 @@
|
|
|
>{{ scope.$index > 2 ? "已处理" : "未处理" }}</el-tag
|
|
|
>
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
+ </el-table-column> -->
|
|
|
</el-table>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -144,92 +173,41 @@ import * as echarts from "echarts";
|
|
|
import getDataE1 from "./echarts1";
|
|
|
import getDataE2 from "./echarts2";
|
|
|
import AMap from "AMap";
|
|
|
-import xh from "../../assets/image/xh.png";
|
|
|
-import dc from "../../assets/image/dc.png";
|
|
|
+// import xh from "../../assets/image/xh.png";
|
|
|
+// import xh0 from "../../assets/image/xh0.png";
|
|
|
+// import xh1 from "../../assets/image/xh1.png";
|
|
|
+// import xh2 from "../../assets/image/xh2.png";
|
|
|
+// import xh3 from "../../assets/image/xh3.png";
|
|
|
+// import xh4 from "../../assets/image/xh4.png";
|
|
|
+// import dc from "../../assets/image/dc.png";
|
|
|
import zcIcon from "../../assets/image/zcIcon.png";
|
|
|
import jcIcon from "../../assets/image/jcIcon.png";
|
|
|
import lxIcon from "../../assets/image/lxIcon.png";
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
- dateDay: "",
|
|
|
- dataTime: "",
|
|
|
- timeArea: "",
|
|
|
- timeWeek: "",
|
|
|
- weatherObj: {},
|
|
|
map: null,
|
|
|
echartsBox1: null,
|
|
|
echartsBox2: null,
|
|
|
- dataWeekList: ["一", "二", "三", "四", "五", "六", "七"],
|
|
|
- tableData: [
|
|
|
- {
|
|
|
- name: "0021",
|
|
|
- dpName: "液位过高",
|
|
|
- jf: "周文斌",
|
|
|
- zl: "13571202367",
|
|
|
- je: "江西省上饶市",
|
|
|
- time: "15:23:26",
|
|
|
- },
|
|
|
- {
|
|
|
- name: "0022",
|
|
|
- dpName: "运行异常",
|
|
|
- jf: "周文斌",
|
|
|
- zl: "13571202367",
|
|
|
- je: "江西省上饶市",
|
|
|
- time: "15:22:00",
|
|
|
- },
|
|
|
- {
|
|
|
- name: "0023",
|
|
|
- dpName: "液位过高",
|
|
|
- jf: "周文斌",
|
|
|
- zl: "13571202367",
|
|
|
- je: "江西省上饶市",
|
|
|
- time: "15:21:00",
|
|
|
- },
|
|
|
- {
|
|
|
- name: "0024",
|
|
|
- dpName: "运行异常",
|
|
|
- jf: "周文斌",
|
|
|
- zl: "13571202367",
|
|
|
- je: "江西省上饶市",
|
|
|
- time: "15:20:00",
|
|
|
- },
|
|
|
- {
|
|
|
- name: "0025",
|
|
|
- dpName: "液位过高",
|
|
|
- jf: "周文斌",
|
|
|
- zl: "13571202367",
|
|
|
- je: "江西省上饶市",
|
|
|
- time: "15:19:00",
|
|
|
- },
|
|
|
- {
|
|
|
- name: "0026",
|
|
|
- dpName: "运行异常",
|
|
|
- jf: "周文斌",
|
|
|
- zl: "13571202367",
|
|
|
- je: "江西省上饶市",
|
|
|
- time: "15:18:00",
|
|
|
- },
|
|
|
- {
|
|
|
- name: "0027",
|
|
|
- dpName: "运行异常",
|
|
|
- jf: "周文斌",
|
|
|
- zl: "13571202367",
|
|
|
- je: "江西省上饶市",
|
|
|
- time: "15:17:00",
|
|
|
- },
|
|
|
- ],
|
|
|
+ tableData: [],
|
|
|
lnglats: [
|
|
|
- { x: 118.004933, y: 28.47108, type: 1 },
|
|
|
- { x: 118.004205, y: 28.470654, type: 2 },
|
|
|
- { x: 118.005709, y: 28.471602, type: 3 },
|
|
|
+ // { x: 118.004933, y: 28.47108, type: 1 },
|
|
|
+ // { x: 118.004205, y: 28.470654, type: 2 },
|
|
|
+ // { x: 118.005709, y: 28.471602, type: 3 },
|
|
|
],
|
|
|
- mapListType:{
|
|
|
+ mapListType: {
|
|
|
isNormal: true,
|
|
|
isWarning: true,
|
|
|
isLine: true,
|
|
|
},
|
|
|
- overlayGroupMap:[]
|
|
|
+ overlayGroupMap: [],
|
|
|
+ coverMap: {
|
|
|
+ unOline: 0,
|
|
|
+ deviceTotalNum: 0,
|
|
|
+ malfunction: 0,
|
|
|
+ },
|
|
|
+ infoWindow: null,
|
|
|
+ ws: "",
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
@@ -242,43 +220,94 @@ export default {
|
|
|
mounted() {
|
|
|
this.getData();
|
|
|
this.initMap();
|
|
|
- setInterval(() => {
|
|
|
- let day = new Date();
|
|
|
- this.dateDay =
|
|
|
- day.getFullYear() +
|
|
|
- "-" +
|
|
|
- (day.getMonth() + 1 < 10
|
|
|
- ? "0" + (day.getMonth() + 1)
|
|
|
- : "" + (day.getMonth() + 1)) +
|
|
|
- "-" +
|
|
|
- (day.getDate() < 10 ? "0" + day.getDate() : day.getDate());
|
|
|
- this.timeWeek = " 星期" + this.dataWeekList[day.getDay()];
|
|
|
- this.dataTime =
|
|
|
- (day.getHours() < 10 ? "0" + day.getHours() : day.getHours()) +
|
|
|
- ":" +
|
|
|
- (day.getMinutes() < 10 ? "0" + day.getMinutes() : day.getMinutes()) +
|
|
|
- ":" +
|
|
|
- (day.getSeconds() < 10 ? "0" + day.getSeconds() : day.getSeconds());
|
|
|
- }, 1000);
|
|
|
},
|
|
|
methods: {
|
|
|
- isTypeMap(val){
|
|
|
- console.log(val)
|
|
|
- this.mapListType[val] = !this.mapListType[val]
|
|
|
+ // 地图标点的设备状态控制显示
|
|
|
+ isTypeMap(val) {
|
|
|
+ this.mapListType[val] = !this.mapListType[val];
|
|
|
let type = val === "isNormal" ? 1 : val === "isWarning" ? 2 : 3;
|
|
|
- let markers = this.lnglats.filter(val=>val.type === type)
|
|
|
- let marksList = this.overlayGroupMap.getOverlays().filter(element => element.getExtData().type === type);
|
|
|
- if(this.mapListType[val]){
|
|
|
+ let markers = this.lnglats.filter((val) => val.type === type);
|
|
|
+ let marksList = this.overlayGroupMap
|
|
|
+ .getOverlays()
|
|
|
+ .filter((element) => element.getExtData().type === type);
|
|
|
+ if (this.mapListType[val]) {
|
|
|
this.overlayGroupMap.addOverlays(this.addMarker(markers));
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
this.overlayGroupMap.removeOverlays(marksList);
|
|
|
+ console.log();
|
|
|
+ this.infoWindow &&
|
|
|
+ this.infoWindow.getIsOpen() &&
|
|
|
+ marksList.some(
|
|
|
+ (val) =>
|
|
|
+ val.getPosition().lng == this.infoWindow.getPosition().lng &&
|
|
|
+ val.getPosition().lat == this.infoWindow.getPosition().lat
|
|
|
+ ) &&
|
|
|
+ this.infoWindow.close();
|
|
|
}
|
|
|
},
|
|
|
+ // 初始加载
|
|
|
async getData() {
|
|
|
this.echartsBox1 = echarts.init(this.$refs.echartD1);
|
|
|
- this.echartsBox1.setOption(getDataE1());
|
|
|
this.echartsBox2 = echarts.init(this.$refs.echartD2);
|
|
|
- this.echartsBox2.setOption(getDataE2());
|
|
|
+ this.getCover();
|
|
|
+ this.getListYw();
|
|
|
+ this.getAlarmsSe();
|
|
|
+ this.getDevcie();
|
|
|
+ this.getDataWs();
|
|
|
+ },
|
|
|
+ // 整体情况
|
|
|
+ async getCover() {
|
|
|
+ let res = await this.$axios.get("/jx/top/listDeviceStatus");
|
|
|
+ if (res.data) {
|
|
|
+ this.coverMap = res.data;
|
|
|
+ this.$emit("coverMapChange", res.data);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 地图标点
|
|
|
+ async getDevcie() {
|
|
|
+ let res = await this.$axios.get("/jx/top/listDevcie");
|
|
|
+ if (res.data) {
|
|
|
+ this.lnglats = res.data.map((val) => {
|
|
|
+ return {
|
|
|
+ ...val,
|
|
|
+ x: val.longitude,
|
|
|
+ y: val.dimension,
|
|
|
+ type:
|
|
|
+ Object.keys(val.data).length === 0 ||
|
|
|
+ val.data.dp.find((value) => value.serial == 1)
|
|
|
+ ? 3
|
|
|
+ : val.data.dp.find(
|
|
|
+ (value) =>
|
|
|
+ value.serial == 2 ||
|
|
|
+ value.serial == 32 ||
|
|
|
+ value.serial == 3
|
|
|
+ )
|
|
|
+ ? 2
|
|
|
+ : 1,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ this.overlayGroupMap = new AMap.OverlayGroup(
|
|
|
+ this.addMarker(this.lnglats)
|
|
|
+ );
|
|
|
+ this.map.add(this.overlayGroupMap);
|
|
|
+ this.map.setFitView(); // 根据所有点自适应
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 告警情况
|
|
|
+ async getAlarmsSe() {
|
|
|
+ let res = await this.$axios.get("/jx/top/listAlarmsSe");
|
|
|
+ if (res.data) {
|
|
|
+ this.echartsBox1.setOption(getDataE1(res.data));
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 液位情况
|
|
|
+ async getListYw(val) {
|
|
|
+ let res = await this.$axios.get(
|
|
|
+ "/jx/top/listYw" + (val ? "?devId=" + val : "")
|
|
|
+ );
|
|
|
+ if (res.data) {
|
|
|
+ this.echartsBox2.setOption(getDataE2(res.data));
|
|
|
+ }
|
|
|
},
|
|
|
async initMap() {
|
|
|
this.map = await new AMap.Map("mapF", {
|
|
@@ -315,73 +344,216 @@ export default {
|
|
|
});
|
|
|
this.map.addControl(geolocation);
|
|
|
});
|
|
|
- this.overlayGroupMap = new AMap.OverlayGroup(this.addMarker())
|
|
|
- this.map.add(this.overlayGroupMap);
|
|
|
- this.map.setFitView(); // 根据所有点自适应
|
|
|
},
|
|
|
- addMarker(lnglats = this.lnglats, type) {
|
|
|
+ // 添加标点
|
|
|
+ addMarker(lnglats = this.lnglats) {
|
|
|
// 创建标点和点击事件
|
|
|
let icon = "";
|
|
|
- return lnglats.map((val, ind) => {
|
|
|
- if (type !== "water") {
|
|
|
- icon =
|
|
|
- val.type == 1
|
|
|
- ? zcIcon
|
|
|
- : val.type == 2
|
|
|
- ? jcIcon
|
|
|
- : val.type == 3
|
|
|
- ? lxIcon
|
|
|
- : zcIcon;
|
|
|
- }
|
|
|
- console.log(icon);
|
|
|
+ return lnglats.map((val) => {
|
|
|
+ icon =
|
|
|
+ val.type == 1
|
|
|
+ ? zcIcon
|
|
|
+ : val.type == 2
|
|
|
+ ? jcIcon
|
|
|
+ : val.type == 3
|
|
|
+ ? lxIcon
|
|
|
+ : zcIcon;
|
|
|
let marker = new AMap.Marker({
|
|
|
position: new AMap.LngLat(val.x, val.y),
|
|
|
icon: icon || "",
|
|
|
zIndex: 9,
|
|
|
extData: {
|
|
|
- id: ind + 1,
|
|
|
- type:val.type
|
|
|
+ id: val.devId,
|
|
|
+ type: val.type,
|
|
|
+ val: val,
|
|
|
},
|
|
|
});
|
|
|
marker.on("click", async () => {
|
|
|
await this.addMarkerInfo([val.x, val.y], val);
|
|
|
+ this.getListYw(val.devId);
|
|
|
});
|
|
|
return marker;
|
|
|
});
|
|
|
},
|
|
|
- // 添加标点
|
|
|
+ // 标点弹窗
|
|
|
addMarkerInfo(position, value) {
|
|
|
// this.map.getIsOpen();
|
|
|
this.map.clearInfoWindow();
|
|
|
- var infoWindow = new AMap.InfoWindow({
|
|
|
+ this.infoWindow = new AMap.InfoWindow({
|
|
|
isCustom: true, //使用自定义窗体
|
|
|
closeWhenClickMap: true,
|
|
|
+ // <img src="${value.data.dp && value.data.dp.find(val=>val.serial == 66) ? value.data.dp.find(val=>val.serial == 67).value + '米' : '---'}" alt="">
|
|
|
+ // <img src="${dc}" alt="">
|
|
|
+ // <div>3.6V</div>
|
|
|
content: `
|
|
|
<div class="mapTab">
|
|
|
- <div class="closeInfo ${value.type === 1 ? 'green' : value.type === 2 ? 'red' : 'gray'}">${value.type === 1 ? '正常' : value.type === 2 ? '告警' : '离线'}</div>
|
|
|
+ <div class="closeInfo ${
|
|
|
+ value.type === 1
|
|
|
+ ? "green"
|
|
|
+ : value.type === 2
|
|
|
+ ? "red"
|
|
|
+ : "gray"
|
|
|
+ }">${
|
|
|
+ value.type === 1 ? "正常" : value.type === 2 ? "告警" : "离线"
|
|
|
+ }</div>
|
|
|
<div class="tableTitle">
|
|
|
- <img src="${xh}" alt="">
|
|
|
- <img src="${dc}" alt="">
|
|
|
- <div>98%</div>
|
|
|
- <div>3.6V</div>
|
|
|
+ <div>信号:${
|
|
|
+ value.data.dp &&
|
|
|
+ value.data.dp.find((val) => val.serial == 66)
|
|
|
+ ? value.data.dp.find((val) => val.serial == 66).value
|
|
|
+ : "---"
|
|
|
+ }</div>
|
|
|
+ <div>电量:${
|
|
|
+ value.data.dp &&
|
|
|
+ value.data.dp.find((val) => val.serial == 65)
|
|
|
+ ? value.data.dp.find((val) => val.serial == 65).value +
|
|
|
+ "%"
|
|
|
+ : "---"
|
|
|
+ }</div>
|
|
|
</div>
|
|
|
<div class="tableContent">
|
|
|
- <div class="yztBox ${value.type === 2 ? 'waning' : 'gray'}"">
|
|
|
- <div class="${value.type === 1 ? 'green' : value.type === 2 ? 'white' : 'gray'}">${value.type === 1 ? '正常' : value.type === 2 ? '水位过高' : '---'}</div>
|
|
|
+ <div class="yztBox ${
|
|
|
+ value.type === 2 &&
|
|
|
+ value.data.dp &&
|
|
|
+ value.data.dp.find((val) => val.serial == 3)
|
|
|
+ ? "waning"
|
|
|
+ : "gray"
|
|
|
+ }"">
|
|
|
+ <div class="${
|
|
|
+ value.type === 3
|
|
|
+ ? "gray"
|
|
|
+ : value.type === 2 &&
|
|
|
+ value.data.dp &&
|
|
|
+ value.data.dp.find((val) => val.serial == 3)
|
|
|
+ ? "white"
|
|
|
+ : "green"
|
|
|
+ }">${
|
|
|
+ value.type === 3
|
|
|
+ ? "---"
|
|
|
+ : value.type === 2 && value.data.dp.find((val) => val.serial == 3)
|
|
|
+ ? "水位过高"
|
|
|
+ : "正常"
|
|
|
+ }</div>
|
|
|
<div>实时水况</div>
|
|
|
</div>
|
|
|
- <div><span>运行状态:</span><b class="${value.type === 1 ? 'green' : value.type === 2 ? 'red' : 'gray'}">${value.type === 1 ? '运行正常' : value.type === 2 ? '井盖打开' : '设备离线'}</b></div>
|
|
|
- <div><span>实时水位:</span>${value.type === 1 ? '1米' : value.type === 2 ? '10米' : '---'}</div>
|
|
|
- <div><span>负责人:</span>张三</div>
|
|
|
- <div><span>联系电话:</span>13666666666</div>
|
|
|
- <div><span>时间:</span>2021-08-19 15:12:12</div>
|
|
|
- <div><span>位置:</span>上海市青浦区徐乐路208号</div>
|
|
|
+ <div><span>运行状态:</span><b class="${
|
|
|
+ value.type === 1
|
|
|
+ ? "green"
|
|
|
+ : value.type === 2
|
|
|
+ ? "red"
|
|
|
+ : "gray"
|
|
|
+ }">${
|
|
|
+ value.type === 1
|
|
|
+ ? "运行正常"
|
|
|
+ : value.type === 2 && value.data.dp.find((val) => val.serial == 2)
|
|
|
+ ? "异动"
|
|
|
+ : value.type === 2 && value.data.dp.find((val) => val.serial == 32)
|
|
|
+ ? "故障"
|
|
|
+ : value.type === 2 && value.data.dp.find((val) => val.serial == 3)
|
|
|
+ ? "液位告警"
|
|
|
+ : "设备离线"
|
|
|
+ }</b></div>
|
|
|
+ <div><span>实时水位:</span>${
|
|
|
+ value.data.dp &&
|
|
|
+ value.data.dp.find((val) => val.serial == 67)
|
|
|
+ ? value.data.dp.find((val) => val.serial == 67).value +
|
|
|
+ "米"
|
|
|
+ : "---"
|
|
|
+ }</div>
|
|
|
+ <div><span>负责人:</span>${value.userName || "---"}</div>
|
|
|
+ <div><span>联系电话:</span>${value.phone || "---"}</div>
|
|
|
+ <div><span>时间:</span>${
|
|
|
+ value.data.timeStamp || "---"
|
|
|
+ }</div>
|
|
|
+ <div><span>位置:</span>${value.addr || "---"}</div>
|
|
|
</div>
|
|
|
- <div class="sbh">设备号:868646515</div>
|
|
|
+ <div class="sbh">设备号:${value.devId || "---"}</div>
|
|
|
</div>`,
|
|
|
offset: new AMap.Pixel(0, -30),
|
|
|
});
|
|
|
- infoWindow.open(this.map, position);
|
|
|
+ this.infoWindow.open(this.map, position);
|
|
|
+ },
|
|
|
+ async getDataWs() {
|
|
|
+ if ("WebSocket" in window) {
|
|
|
+ this.ws = new WebSocket(
|
|
|
+ "ws://" + this.$store.state.wsUrl + "/top/WS/alarmPush"
|
|
|
+ );
|
|
|
+ this.ws.onopen = () => {
|
|
|
+ console.log("websocket连接成功");
|
|
|
+ // this.sendWs({aa:22});
|
|
|
+ };
|
|
|
+
|
|
|
+ this.ws.onmessage = (resJson) => {
|
|
|
+ let res = JSON.parse(resJson.data);
|
|
|
+ let data = res.dp.map((val) => {
|
|
|
+ return {
|
|
|
+ ...val,
|
|
|
+ ...res,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ this.tableData.unshift(...data);
|
|
|
+ this.lnglats.forEach((val) => {
|
|
|
+ if (val.devId === res.devId) {
|
|
|
+ val.data = res;
|
|
|
+ val.type =
|
|
|
+ Object.keys(val.data).length === 0 ||
|
|
|
+ val.data.dp.find((value) => value.serial == 1)
|
|
|
+ ? 3
|
|
|
+ : val.data.dp.find(
|
|
|
+ (value) =>
|
|
|
+ value.serial == 2 ||
|
|
|
+ value.serial == 32 ||
|
|
|
+ value.serial == 3
|
|
|
+ )
|
|
|
+ ? 2
|
|
|
+ : 1;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ let marksList = this.overlayGroupMap
|
|
|
+ .getOverlays()
|
|
|
+ .filter((element) => element.getExtData().id === res.devId);
|
|
|
+ let resData = this.lnglats.find((val) => val.devId == res.devId);
|
|
|
+ // 判断弹窗不为null 判断弹窗是否打开 判断弹窗位置和当前更改位置是否一致 关闭弹窗
|
|
|
+ // this.infoWindow && this.infoWindow.getIsOpen() && marksList.some(val=> val.getPosition().lng == this.infoWindow.getPosition().lng && val.getPosition().lat == this.infoWindow.getPosition().lat) && this.infoWindow.close()
|
|
|
+ this.infoWindow &&
|
|
|
+ this.infoWindow.getIsOpen() &&
|
|
|
+ this.infoWindow.close();
|
|
|
+ marksList.length > 0 &&
|
|
|
+ this.overlayGroupMap.removeOverlays(marksList);
|
|
|
+ resData &&
|
|
|
+ this.overlayGroupMap.addOverlays(this.addMarker([resData]));
|
|
|
+ resData && this.addMarkerInfo([resData.x, resData.y], resData);
|
|
|
+ };
|
|
|
+
|
|
|
+ this.ws.onclose = () => {
|
|
|
+ // 关闭 websocket
|
|
|
+ console.log("连接已关闭...");
|
|
|
+
|
|
|
+ //断线重新连接
|
|
|
+ setTimeout(() => {
|
|
|
+ this.getData();
|
|
|
+ }, 2000);
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ // 浏览器不支持 WebSocket
|
|
|
+ console.log("您的浏览器不支持 WebSocket!");
|
|
|
+ }
|
|
|
+ // let res = await this.$axios.get(this.resInfo.apiAddr + '?' +this.$qs.stringify({
|
|
|
+ // applicationCode: this.resInfo.applicationCode
|
|
|
+ // }))
|
|
|
+ // if(res.success){
|
|
|
+ // this.resList = res.data
|
|
|
+ // }
|
|
|
+ },
|
|
|
+ sendWs(val) {
|
|
|
+ if (this.ws && this.ws.readyState == 1) {
|
|
|
+ this.ws.send(JSON.stringify(val));
|
|
|
+ console.log("发送成功");
|
|
|
+ } else {
|
|
|
+ setTimeout(() => {
|
|
|
+ this.sendWs(val);
|
|
|
+ }, 100);
|
|
|
+ }
|
|
|
},
|
|
|
},
|
|
|
};
|
|
@@ -470,7 +642,7 @@ export default {
|
|
|
line-height: 27px;
|
|
|
}
|
|
|
}
|
|
|
- .waning{
|
|
|
+ .waning {
|
|
|
background: url("../../assets/image/yc.png");
|
|
|
}
|
|
|
}
|
|
@@ -482,8 +654,8 @@ export default {
|
|
|
color: rgba(255, 1, 1, 1);
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
- .white{
|
|
|
- color: #FFF;
|
|
|
+ .white {
|
|
|
+ color: #fff;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
.gray {
|