fayuanjiangbei/src/views/index.vue

1896 lines
52 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="main">
<div class="left">
<div class="leftOne">
<div class="title">智慧法庭</div>
<div class="wisdomContent">
<div class="wisdomTop">
<div
class="wisdomData"
v-for="(item, index) in wisdomList"
:key="index"
>
<div style="color: #fff; font-size: 0.7rem">{{ item.name }}</div>
<div
:class="houseList[index]"
style="
width: 100%;
height: 100%;
color: #fff;
font-size: 0.7rem;
"
>
{{ item.count }}
</div>
</div>
</div>
<div class="wisdomBottom">
<div
class="wisdomCount"
v-for="(item, index) in wisdomMonArr"
:key="index"
>
<div style="width: 100%; font-size: 0.6rem">
<span>{{ item.name }}:</span>
<span style="color: rgb(225, 177, 25); margin-left: 5%">{{
item.count
}}</span>
</div>
</div>
</div>
</div>
</div>
<div class="leftTwo">
<div class="title" style="height: 18%">设备告警</div>
<div class="warning">
<div id="warningOne"></div>
<div id="warningTwo"></div>
</div>
</div>
<div class="leftThree">
<div class="warnListTitle">
<div class="titleTwo">
<span style="margin-left: 5%; font-size: 0.6rem">报警信息列表</span>
</div>
</div>
<div class="warnBtn">
<div
class="btnList"
v-for="(item, index) in warnBtnList"
:key="index"
:class="{ btnListAc: warnBtnAc == index }"
@click="warnSelect(index)"
>
<span>{{ item.name }}</span>
</div>
</div>
<div class="warnList">
<div
class="warnListContent"
v-for="(item, index) in warnList"
:key="index"
>
<div class="warnArray">
<span>{{ item.id }}</span>
<img :src="item.icon" style="width: 7%; margin-left: 3%" />
<div
style="
display: flex;
flex-direction: column;
align-items: flex-start;
margin-left: 3%;
width: 100%;
"
>
<span>报警时间:{{ item.time }}</span>
<div
style="
display: flex;
justify-content: space-between;
margin-top: 2%;
width: 100%;
"
>
<span style="text-align: left">报警原因:{{ item.cause }}</span>
<span style="margin-right: 5%">风险等级:{{ item.risk }}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="right">
<div class="rightOne">
<div class="title" style="height: 13%">运维管理</div>
<div class="maintenance">
<div class="maintenanceCount">
<div class="quantity">
<div
style="
width: 30%;
display: flex;
align-items: center;
justify-content: space-evenly;
"
>
<span>当日</span>
<img src="../assets/images/blueDian.png" style="width: 9%" />
<span style="margin-left: 2%">报警数8</span>
</div>
<div
style="
width: 30%;
display: flex;
align-items: center;
justify-content: space-evenly;
"
>
<img src="../assets/images/blueDian.png" style="width: 9%" />
<span>已完成单数8</span>
</div>
</div>
<div class="quantity">
<div
style="
width: 30%;
display: flex;
align-items: center;
justify-content: space-evenly;
"
>
<span>统计</span>
<img src="../assets/images/blueDian.png" style="width: 9%" />
<span style="margin-left: 2%">派单数8</span>
</div>
<div
style="
width: 30%;
display: flex;
align-items: center;
justify-content: space-evenly;
"
>
<img src="../assets/images/blueDian.png" style="width: 9%" />
<span>未完成单数8</span>
</div>
</div>
</div>
<div class="maintenanceEcharts">
<div id="maintenanceLeft"></div>
<div id="maintenanceRight"></div>
</div>
</div>
</div>
<div class="rightTwo">
<div class="title">智慧节能</div>
<div id="energyEcharts"></div>
<div class="pickerChange">
<el-select
v-model="selectDate"
:popper-append-to-body="false"
clearable
placeholder="请选择"
@change="selectDataList(selectDate)"
>
<el-option
v-for="(item, index) in dateOptions"
:key="index"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="selectChange">
<el-select
v-model="selectValue"
:popper-append-to-body="false"
clearable
placeholder="请选择"
@change="selectMeterType(selectValue)"
>
<el-option
v-for="(item, index) in options"
:key="index"
:label="item.label"
:value="item"
>
</el-option>
</el-select>
</div>
</div>
<div class="rightThree">
<div class="title" style="height: 15%">摄像监控</div>
<div class="camera">
<div
class="cameraList"
v-for="(item, index) in cameraList"
:key="index"
@click="changeCamera(item.video)"
>
<!-- <img :src="item.icon" style="width: 100%; height: 100%" /> -->
<!-- <iframe
:src="item.video"
ref="iframeRef"
frameborder="0"
style="width: 100%; height: 100%"
></iframe> -->
<camera
style="width: 100%; height: 100%"
:videoUrl="item.video"
:id="index"
/>
</div>
</div>
</div>
</div>
<div class="camersBig" v-if="cameraBigShow">
<!-- <img :src="cameraBig" style="width:100%;height:100%"/> -->
<!-- <iframe
:src="cameraBig"
ref="iframeRef"
frameborder="0"
style="width: 100%; height: 100%"
></iframe> -->
<cameraBig
style="width: 100%; height: 100%"
:cameraBig="cameraBigUrl"
ref="camersBig"
/>
<div class="close" @click="closeCamer"></div>
<div class="remoteControl">
<img
src="../assets/images/add.png"
style="width: 20%; height: 24%; cursor: pointer; z-index: 99"
@click="addZoom"
/>
<img
src="../assets/images/reduce.png"
style="width: 20%; height: 24%; cursor: pointer; z-index: 99"
@click="reduceZoom"
/>
</div>
<div class="remoteControl1">
<img
src="../assets/images/leftBtn.png"
style="width: 20%; height: 24%; cursor: pointer"
/>
<img
src="../assets/images/rightBtn.png"
style="width: 20%; height: 24%; cursor: pointer"
/>
</div>
</div>
</div>
<!-- </div> -->
</template>
<script>
import {
GetLevelAlarm,
getAlarmStatistics,
getBuildinginfos,
getAreaList,
} from "../api/index";
import { getHikvision } from "../api/haikang";
import camera from "./camera/camera.vue";
import cameraBig from "./camera/cameraBig.vue";
export default {
data() {
return {
dateData: "", //日期选择
wisdomList: [
{
name: "空闲中",
count: "7",
},
{
name: "已开庭",
count: "15",
},
{
name: "已预约",
count: "17",
},
], // 智慧法庭小房子
wisdomMonArr: [
{
name: "当月收案",
count: "28",
},
{
name: "当月结案",
count: "16",
},
{
name: "当月存案",
count: "12",
},
], //智慧法庭当月
houseList: ["blueHouse", "redHouse", "yellowHouse"],
warnBtnList: [
{
name: "全部",
},
{
name: "安防设备",
},
{
name: "建筑设备",
},
], //报警按钮
warnBtnAc: 0, //报警选中按钮
warnList: [
{
id: "1",
icon: require("../assets/images/warnBlue.png"),
time: "2023年03月18日 15:26:08",
cause: "<空调设备>发生事故",
risk: "三级",
},
{
id: "2",
icon: require("../assets/images/warnRed.png"),
time: "2023年03月18日 15:26:08",
cause: "<空调设备>发生事故",
risk: "三级",
},
{
id: "3",
icon: require("../assets/images/warnOrange.png"),
time: "2023年03月18日 15:26:08",
cause: "<空调设备>发生事故",
risk: "三级",
},
], //报警数组
selectValue: {
value: "79",
parentId: "-1",
label: "江北新区法院",
},
options: [
{
label: "A-VZCP1-1",
value: "1",
},
{
label: "A-VZCP1-2",
value: "2",
},
],
selectDate: "3",
dateOptions: [
{
label: "年",
value: "3",
},
{
label: "月",
value: "2",
},
{
label: "日",
value: "1",
},
],
cameraList: [
{
video: "",
},
{
video: "",
},
{
video: "",
},
{
video: "",
},
], //摄像
cameraBigUrl: "",
cameraBigShow: false,
buildingList: [],
alarmAllLevel: [],
alarmFirstLevel: [],
alarmSecondLevel: [],
alarmThirdLevel: [],
camersCode: "",
};
},
mounted() {
this.getCamera();
//获取建筑id
this.getBuildingData();
let that = this;
window.alarmFirstLevel = this.alarmFirstLevel;
window.alarmSecondLevel = this.alarmSecondLevel;
window.alarmThirdLevel = this.alarmThirdLevel;
window.alarmAllLevel = this.alarmAllLevel;
this.warningOne();
this.warningTwo();
this.maintenanceLeft();
this.maintenanceRight();
// this.energyEcharts();
this.selectDataList(this.selectDate);
// window.createMqtt = this.createMqtt();
// window.addEventListener("message", function (e) {
// let val = e.data.val;
// if (val != null) {
// that.changeCamera("video/video.html?src=" + e.data.val);
// that.camersCode = e.data.code
// }
// });
// let camera = [
// {
// icon: require("../assets/images/camera.png"),
// video: "video/video.html?src=",
// },
// {
// icon: require("../assets/images/camera.png"),
// video: "video/video.html?src=",
// },
// {
// icon: require("../assets/images/camera.png"),
// video: "video/video.html?src=",
// },
// {
// icon: require("../assets/images/camera.png"),
// video: "video/video.html?src=",
// },
// ];
// setTimeout(() => {
// this.cameraList = camera;
// }, 1000);
this.warnSelect(0);
},
watch: {
alarmAllLevel(val) {
// 为了避免频繁触发resize函数导致页面卡顿使用定时器
console.log("alarmAllLevel", val);
this.upmqttData(val);
},
alarmFirstLevel(val) {
// 为了避免频繁触发resize函数导致页面卡顿使用定时器
console.log("alarmFirstLevel", val);
if (val.length != 0) {
this.upmqttData(val);
}
},
alarmSecondLevel(val) {
// 为了避免频繁触发resize函数导致页面卡顿使用定时器
console.log("alarmSecondLevel", val);
this.upmqttData(val);
},
alarmThirdLevel(val) {
// 为了避免频繁触发resize函数导致页面卡顿使用定时器
console.log("alarmThirdLevel", val);
this.upmqttData(val);
},
},
watch: {
alarmAllLevel(val) {
// 为了避免频繁触发resize函数导致页面卡顿使用定时器
console.log("alarmAllLevel",val)
this.upmqttData(val)
},
alarmFirstLevel(val) {
// 为了避免频繁触发resize函数导致页面卡顿使用定时器
console.log("alarmFirstLevel",val)
if(val.length!=0){
this.upmqttData(val)
}
},
alarmSecondLevel(val) {
// 为了避免频繁触发resize函数导致页面卡顿使用定时器
console.log("alarmSecondLevel",val)
this.upmqttData(val)
},
alarmThirdLevel(val) {
// 为了避免频繁触发resize函数导致页面卡顿使用定时器
console.log("alarmThirdLevel",val)
this.upmqttData(val)
},
},
methods: {
//放大变焦
addZoom() {
console.log(this.camersCode, "sssssssssssss");
let dataList = {
path: "/artemis/api/video/v1/ptzs/controlling",
data: {
cameraIndexCode: this.camersCode,
action: "0",
command: "ZOOM_IN",
speed: "50",
},
};
getHikvision(dataList).then((res) => {
console.log(res, "=============");
});
},
//缩小变焦
reduceZoom() {
console.log(this.camersCode, "sssssssssssss");
let dataList = {
path: "/artemis/api/video/v1/ptzs/controlling",
data: {
cameraIndexCode: this.camersCode,
action: "0",
command: "ZOOM_OUT",
speed: "50",
},
};
getHikvision(dataList).then((res) => {
console.log(res, "=============");
});
},
//获取视频流
getCamera() {
this.cameraList[0].video =
"https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8";
this.cameraList[1].video =
"https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8";
this.cameraList[2].video =
"http://playertest.longtailvideo.com/adaptive/bipbop/gear4/prog_index.m3u8";
this.cameraList[3].video =
"http://playertest.longtailvideo.com/adaptive/bipbop/gear4/prog_index.m3u8";
let pathUrl = "/artemis/api/video/v2/cameras/previewURLs";
let dataList = {
path: pathUrl,
data: {
protocol: "hls",
cameraIndexCode: "620804559ecf4ade8f13b17337ea8bfa",
},
};
getHikvision(dataList).then((res) => {
this.cameraList[0].video =
"video/video.html?src=" +
res.data.result.data.url +
"&code=" +
dataList.data.cameraIndexCode;
});
let dataList1 = {
path: pathUrl,
data: {
protocol: "hls",
cameraIndexCode: "3efe8f887f164548a5db4266590a05ca",
},
};
getHikvision(dataList1).then((res) => {
this.cameraList[1].video =
"video/video.html?src=" +
res.data.result.data.url +
"&code=" +
dataList1.data.cameraIndexCode;
});
let dataList2 = {
path: pathUrl,
data: {
protocol: "hls",
cameraIndexCode: "f103ede0eb2b470f84e26ceec42486bc",
},
};
getHikvision(dataList2).then((res) => {
this.cameraList[2].video =
"video/video.html?src=" +
res.data.result.data.url +
"&code=" +
dataList2.data.cameraIndexCode;
});
let dataList3 = {
path: pathUrl,
data: {
protocol: "hls",
cameraIndexCode: "bf16be84f6f8410c8dca2dfc5369a532",
},
};
getHikvision(dataList3).then((res) => {
this.cameraList[3].video =
"video/video.html?src=" +
res.data.result.data.url +
"&code=" +
dataList3.data.cameraIndexCode;
});
},
//获取建筑Id
getBuildingData() {
getBuildinginfos().then((res) => {
// 接口取值
this.buildingList = res.data.dataResults;
let buildArr = [];
// this.options =
Object.keys(this.buildingList).map((item, index) => {
if (this.buildingList[index].name.indexOf("水") == -1) {
buildArr[buildArr.length] = this.buildingList[index];
}
// return {
// label: buildNameList,
// value: this.buildingList[index].id,
// parentId: this.buildingList[index].parentId,
// };
});
this.options = Object.keys(buildArr).map((item, index) => {
return {
label: buildArr[index].name,
value: this.buildingList[index].id,
parentId: this.buildingList[index].parentId,
};
});
});
},
//智慧节能选择时间
selectDataList(val) {
let nowTime = "";
if (val == 1) {
nowTime = this.$moment().format("YYYYMMDD");
} else if (val == 2) {
nowTime = this.$moment().format("YYYYMM");
} else {
nowTime = this.$moment().format("YYYY");
}
let data = {
buildingId: this.selectValue.value, //建筑id
customerId: "12345678",
date: nowTime,
dateType: val,
meterType: "1", //1.电,2.水
pbuildingId: this.selectValue.parentId, //建组父id
};
//接口获取区域
getAreaList(data).then((res) => {
this.energyEcharts(res.data.data);
});
},
//智慧节能选择类型
selectMeterType(event) {
let nowTime = "";
if (this.selectDate == 1) {
nowTime = this.$moment().format("YYYYMMDD");
} else if (this.selectDate == 2) {
nowTime = this.$moment().format("YYYYMM");
} else {
nowTime = this.$moment().format("YYYY");
}
let data = {
buildingId: event.value, //建筑id
customerId: "12345678",
date: nowTime,
dateType: this.selectDate,
meterType: "1", //1.电,2.水
pbuildingId: event.parentId, //建组父id
};
//接口获取区域
getAreaList(data).then((res) => {
console.log(res.data.data, "sssssssssssssss");
this.energyEcharts(res.data.data);
});
},
//选中图片
changeCamera(path) {
this.cameraBigUrl = path;
this.cameraBigShow = true;
},
closeCamer() {
this.cameraBigShow = false;
this.$refs.camersBig.closeVideo();
},
//报警选中
warnSelect(index) {
this.warnBtnAc = index;
if (index == 0) {
let params = {
AlarmLevel: "",
DeviceTypes: "",
};
GetLevelAlarm(params).then((res) => {
this.upWainData(res.data.data);
});
} else if (index == 1) {
let params = {
AlarmLevel: "",
DeviceTypes: "门禁,视频监控",
};
GetLevelAlarm(params).then((res) => {
this.upWainData(res.data.data);
});
} else {
let params = {
AlarmLevel: "",
DeviceTypes: "VRV,机房,消防,电梯,恒温恒湿,热回收,环境,光伏,能耗",
};
GetLevelAlarm(params).then((res) => {
this.upWainData(res.data.data);
});
}
},
//更新报警信息
upWainData(val) {
let icon = null;
this.warnList = Object.keys(val).map((item, index) => {
if (val[index].AlarmLevel == 1) {
val[index].AlarmLevel = "一级";
icon = require("../assets/images/warnRed.png");
} else if (val[index].AlarmLevel == 2) {
val[index].AlarmLevel = "二级";
icon = require("../assets/images/warnOrange.png");
} else if (val[index].AlarmLevel == 3) {
val[index].AlarmLevel = "三级";
icon = require("../assets/images/warnBlue.png");
}
return {
id: index + 1,
icon: icon,
time: this.$moment(val[index].AlarmTime).format(
"YYYY-MM-DD HH:mm:ss"
),
cause: val[index].AlarmName,
DeviceType: val[index].DeviceType,
risk: val[index].AlarmLevel,
};
});
},
//获取mqtt数据
upmqttData(val) {
let icon = null;
var warnListMqtt = [];
warnListMqtt = Object.keys(val).map((item, index) => {
if (val[index].AlarmLevel == 1) {
val[index].AlarmLevel = "一级";
icon = require("../assets/images/warnRed.png");
} else if (val[index].AlarmLevel == 2) {
val[index].AlarmLevel = "二级";
icon = require("../assets/images/warnOrange.png");
} else if (val[index].AlarmLevel == 3) {
val[index].AlarmLevel = "三级";
icon = require("../assets/images/warnBlue.png");
}
return {
id: index + 1,
icon: icon,
time: this.$moment(val[index].AlarmTime).format(
"YYYY-MM-DD HH:mm:ss"
),
cause: val[index].AlarmName,
DeviceType: val[index].DeviceType,
risk: val[index].AlarmLevel,
};
});
console.log("warnListMqtt", warnListMqtt);
for (let i = 0; i < warnListMqtt.length; i++) {
this.warnList.splice(0, 0, warnListMqtt[i]);
}
},
//设备左
warningOne() {
let data = [];
let dataX = [];
getAlarmStatistics({
Type: "消防",
}).then((res) => {
res.data.data.forEach((item, index) => {
data.push(item.Count);
dataX.push(item.Name);
});
var myChart = this.$echarts.init(document.getElementById("warningOne"));
let option = {
legend: {
show: true,
align: "left",
x: "45%",
orient: "vertical",
textStyle: {
color: "#fff",
fontSize: "0.6rem",
},
data: [
// {
// name: "",
// icon: "",
// },
{
name: "消防报警",
},
],
},
tooltip: {
show: true,
},
grid: {
left: "13%",
right: "4%",
bottom: "15%",
top: "17%",
},
xAxis: {
data: dataX,
axisLine: {
show: true,
lineStyle: {
color: "rgba(66, 164, 255,0.3)",
},
},
axisTick: {
show: false,
},
axisLabel: {
color: "#fff",
fontSize: "0.6rem",
// rotate: "45"
},
},
yAxis: [
{
type: "value",
name: "/次",
minInterval: 1,
nameTextStyle: {
color: "#fff",
fontSize: "0.6rem",
},
// scale: true,
axisLine: {
show: true,
lineStyle: {
color: "rgba(66, 164, 255,0.4)",
},
},
axisTick: {
show: false,
},
axisLabel: {
color: "#fff",
fontSize: "0.6rem",
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(66, 164, 255,0.5)",
},
},
},
],
series: [
{
name: "消防报警",
type: "bar",
barWidth: 20,
zlevel: 2,
itemStyle: {
normal: {
color: this.$echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "#01B1FF",
},
{
offset: 1,
color: "#033BFF",
},
],
false
),
},
},
label: {
normal: {
show: true,
fontSize: "0.6rem",
color: "#fff",
position: "inside",
},
},
data: data,
},
],
};
myChart.setOption(option);
});
},
//设备右
warningTwo() {
let data = [];
let dataX = [];
getAlarmStatistics({
Type: "设备",
}).then((res) => {
res.data.data.forEach((item, index) => {
data.push(item.Count);
dataX.push(item.Name);
});
var myChart = this.$echarts.init(document.getElementById("warningTwo"));
let option = {
legend: {
show: true,
align: "left",
x: "45%",
orient: "vertical",
textStyle: {
color: "#fff",
fontSize: "0.6rem",
},
data: [
// {
// name: "",
// icon: "",
// },
{
name: "设备报警",
},
],
},
tooltip: {
show: true,
},
grid: {
left: "13%",
right: "4%",
bottom: "15%",
top: "17%",
},
xAxis: {
data: dataX,
axisLine: {
show: true,
lineStyle: {
color: "rgba(66, 164, 255,0.3)",
},
},
axisTick: {
show: false,
},
axisLabel: {
color: "#fff",
fontSize: "0.6rem",
// rotate: "45"
},
},
yAxis: [
{
type: "value",
name: "/次",
minInterval: 1,
nameTextStyle: {
color: "#fff",
fontSize: "0.6rem",
},
// scale: true,
axisLine: {
show: true,
lineStyle: {
color: "rgba(66, 164, 255,0.4)",
},
},
axisTick: {
show: false,
},
axisLabel: {
color: "#fff",
fontSize: "0.6rem",
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(66, 164, 255,0.5)",
},
},
},
],
series: [
{
name: "设备报警",
type: "bar",
barWidth: 20,
zlevel: 2,
itemStyle: {
normal: {
color: this.$echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "#01B1FF",
},
{
offset: 1,
color: "#033BFF",
},
],
false
),
},
},
label: {
normal: {
show: true,
fontSize: "0.6rem",
color: "#fff",
position: "inside",
},
},
data: data,
},
],
};
myChart.setOption(option);
});
},
maintenanceLeft() {
var myChart = this.$echarts.init(
document.getElementById("maintenanceLeft")
);
var data = [
{ value: "25", name: "报警" },
{ value: "25", name: "已完成" },
{ value: "25", name: "派单" },
{ value: "25", name: "未完成" },
];
var color = ["#146de0", "#27ef5e", "#ffc140", "#d151d8"];
let option = {
color: color,
title: {
left: "45%",
top: "35%",
textAlign: "center",
text: "当月次数统计",
textStyle: {
fontSize: "0.60rem",
color: "#fff",
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,0.5)",
color: "#ffffff",
formatter: function (params) {
return (
// params.name +
// "<br/>" +
params.marker +
'<span style="color:' +
params.color +
'">' +
params.data["name"] +
"\n" +
params.data["value"] +
"%" +
"</span>"
);
},
},
legend: {
// orient: "vertical",
icon: "rect",
// left: "5%",
// top: "20%",
bottom: "0",
itemWidth: 14,
itemGap: 10,
textStyle: {
rich: {
a: {
color: "#fff",
fontSize: "0.6rem",
padding: [0, 10, 0, 0],
},
b: {
color: "rgba(255,255,255,0)",
fontSize: "0rem",
padding: [0, 10, 0, 15],
},
},
},
formatter: function (name) {
var target, unit;
for (var i = 0, l = data.length; i < l; i++) {
if (data[i].name == name) {
target = data[i].value;
unit = data[i].unit;
}
}
return `{a| ${name}}{b|}`;
},
},
series: [
{
name: "",
type: "pie",
radius: ["45%", "60%"],
center: ["48%", "40%"],
avoidLabelOverlap: true,
label: {
normal: {
show: true,
position: "outside",
formatter: "{d}%",
textStyle: {
align: "center",
baseline: "middle",
fontSize: "0.6rem",
fontWeight: "100",
color: "#fff",
},
},
},
labelLine: {
show: true,
length: 20,
length2: 10,
},
data: data,
},
],
};
myChart.setOption(option);
},
maintenanceRight() {
var myChart = this.$echarts.init(
document.getElementById("maintenanceRight")
);
var data = [
{ value: "25", name: "报警" },
{ value: "25", name: "已完成" },
{ value: "25", name: "派单" },
{ value: "25", name: "未完成" },
];
var color = ["#146de0", "#27ef5e", "#ffc140", "#d151d8"];
let option = {
color: color,
title: {
left: "45%",
top: "35%",
textAlign: "center",
text: "上月次数统计",
textStyle: {
fontSize: "0.6rem",
color: "#fff",
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,0.5)",
color: "#ffffff",
formatter: function (params) {
return (
// params.name +
// "<br/>" +
params.marker +
'<span style="color:' +
params.color +
'">' +
params.data["name"] +
"\n" +
params.data["value"] +
"%" +
"</span>"
);
},
},
legend: {
icon: "rect",
// left: "5%",
// top: "20%",
bottom: "0",
itemWidth: 14,
itemGap: 10,
textStyle: {
rich: {
a: {
color: "#fff",
fontSize: "0.6rem",
padding: [0, 10, 0, 0],
},
b: {
color: "rgba(255,255,255,0)",
fontSize: "0.1rem",
padding: [0, 10, 0, 10],
},
},
},
formatter: function (name) {
var target, unit;
for (var i = 0, l = data.length; i < l; i++) {
if (data[i].name == name) {
target = data[i].value;
unit = data[i].unit;
}
}
return `{a| ${name}}{b|${target}}`;
},
},
series: [
{
name: "",
type: "pie",
radius: ["45%", "60%"],
center: ["48%", "40%"],
avoidLabelOverlap: true,
label: {
normal: {
show: true,
position: "outside",
formatter: "{d}%",
textStyle: {
align: "center",
baseline: "middle",
fontSize: "0.6rem",
fontWeight: "100",
color: "#fff",
},
},
},
labelLine: {
show: true,
length: 20,
length2: 10,
},
data: data,
},
],
};
myChart.setOption(option);
},
energyEcharts(val) {
console.log(val, "节能数据");
let dataX = [];
let dataY = [];
val.values.forEach((item, index) => {
dataX.push(item.dateDetail);
dataY.push(item.val);
});
var myChart = this.$echarts.init(
document.getElementById("energyEcharts")
);
let option = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
},
legend: {
show: false,
data: [
{
name: "用电",
itemStyle: {
color: "rgb(13,219,207)",
},
lineStyle: {
color: "rgb(13,219,207)",
},
},
],
textStyle: {
//文字样式
color: "#b4c9d1",
fontSize: "0.6rem",
},
top: "4%",
// left: "13%",
},
grid: {
left: "3%",
right: "4%",
bottom: "0%",
top: "25%",
containLabel: true,
},
xAxis: [
{
type: "category",
//x轴坐标点
axisTick: {
show: true,
lineStyle: {
color: "#fff",
},
},
//x轴坐标线样式
axisLine: {
show: true,
lineStyle: {
color: "#fff",
},
},
axisLabel: {
color: "#fff",
fontSize: "0.6rem",
},
//x轴线
splitLine: {
show: false,
lineStyle: {
type: [5, 10],
dashOffset: 10,
color: "#1282C8",
},
},
// boundaryGap: false,
data: dataX,
},
],
yAxis: [
{
name: "kWH",
nameTextStyle: {
//y轴上方单位的颜色
color: "#fff",
fontSize: "0.6rem",
},
type: "value",
axisTick: {
show: true,
lineStyle: {
color: "#fff",
},
},
splitLine: {
show: true,
lineStyle: {
color: "rgb(104,106,108)",
},
},
axisLine: {
lineStyle: {
color: "#1282C8",
},
},
axisLabel: {
color: "#fff",
fontSize: "0.6rem",
},
},
],
series: [
{
name: "用电",
type: "line",
smooth: 0.6,
minInterval: 1,
min: 0,
symbol: "circle",
symbolSize: 0,
lineStyle: {
normal: {
// 颜色渐变函数 前四个参数分别表示四个位置依次为
// 右下左上
color: this.$echarts.graphic.LinearGradient(0, 0, 1, 0, [
{
offset: 0,
color: "rgb(55,60,192)",
},
{
offset: 0.3,
color: "rgb(33,151,145)",
},
{
offset: 0.6,
color: "rgb(22,223,107)",
},
{
offset: 1,
color: "rgb(194,72,132)",
},
]), //线条渐变色
width: 4,
// shadowColor: "rgba(70, 55, 88, 0.35)",
// shadowBlur: 10,
// shadowOffsetX: 0,
// shadowOffsetY: 10,
},
},
// areaStyle: {
// color: {
// type: "linear",
// x: 0,
// y: 0,
// x2: 0,
// y2: 1,
// colorStops: [
// {
// offset: 0,
// color: "rgba(58, 46, 73, 0.9)", // 0% 处的颜色
// },
// {
// offset: 0.5,
// color: "rgba(56, 44, 71, 0.5)", // 100% 处的颜色
// },
// {
// offset: 1,
// color: "transparent", //0% 处的颜色
// },
// ],
// global: false, // 缺省为 false
// },
// },
data: dataY,
},
],
};
myChart.setOption(option);
},
createMqtt() {
//创建链接,接收数据
let topicSends = ["/SC/pub/uwb", "/SC/pub/env"];
window.PubScribe(topicSends, this.realInfo);
},
/** 实时数据分类 */
realInfo(topic, message) {
switch (topic) {
// 接收托片
case "/SC/pub/uwb":
try {
const utf8decoder = new TextDecoder();
const u8arr = new Uint8Array(message);
const temp = utf8decoder.decode(u8arr); // 将二进制数据转为字符串
const msg = JSON.parse(temp); //这一步报错则返回的是二进制流图片不报错则返回的是JSON的错误提示数据
console.log("msg", msg);
} catch (error) {}
break;
}
},
},
components: {
camera,
cameraBig,
},
};
</script>
<style lang="less" scoped>
@fontSize: 0.55rem;
.main {
height: 100%;
width: 100%;
display: flex;
justify-content: space-between;
padding: 0 0.3% 0 0.3%;
box-sizing: border-box;
.left {
width: 24.7%;
height: 95%;
padding: 0.5% 0.3% 1% 0.3%;
box-sizing: border-box;
display: flex;
flex-wrap: wrap;
background: url(../assets/images/leftKuang.png) no-repeat;
background-size: 100% 100%;
-webkit-animation-name: leftAnimation;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: 1;
-webkit-animation-duration: 1s;
.leftOne {
height: 22%;
width: 100%;
.wisdomContent {
height: calc(100% - 25%);
width: 100%;
display: flex;
flex-wrap: wrap;
.wisdomTop {
width: 100%;
height: 75%;
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
align-items: center;
.wisdomData {
display: flex;
flex-direction: column;
align-items: center;
height: 70%;
width: 11%;
.blueHouse {
background: url(../assets/images/blueHouse.png) no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
margin-top: 10%;
}
.redHouse {
background: url(../assets/images/redHouse.png) no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
margin-top: 10%;
}
.yellowHouse {
background: url(../assets/images/yellowHouse.png) no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
margin-top: 10%;
}
}
}
.wisdomBottom {
height: calc(100% - 75%);
width: 100%;
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
align-items: center;
.wisdomCount {
height: 100%;
width: 15%;
color: #fff;
font-size: @fontSize;
background: url(../assets/images/flootLine.png) no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
}
}
}
}
.leftTwo {
height: 30%;
width: 100%;
.warning {
height: calc(100% - 25%);
width: 100%;
margin-top: 3%;
display: flex;
flex-wrap: nowrap;
#warningOne {
width: 50%;
height: 100%;
}
#warningTwo {
width: 50%;
height: 100%;
}
}
}
.leftThree {
height: 48%;
width: 100%;
.warnListTitle {
height: 6%;
width: 100%;
position: relative;
.titleTwo {
width: 20%;
height: 100%;
margin-left: 2%;
background: url(../assets/images/flootLine.png) no-repeat;
background-size: 100% 100%;
color: #fff;
font-size: 0.55rem;
position: absolute;
}
}
.warnBtn {
width: 100%;
height: 20%;
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
align-items: center;
.btnList {
// width: 13%;
// height: 38%;
width: 17%;
height: 41%;
background: url(../assets/images/warnBtn.png) no-repeat;
background-size: 100% 100%;
color: #fff;
font-size: @fontSize;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.7rem;
}
.btnListAc {
// width: 13%;
// height: 38%;
width: 17%;
height: 41%;
background: url(../assets/images/warnBtnAc.png) no-repeat;
background-size: 100% 100%;
color: #fff;
font-size: @fontSize;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.7rem;
}
}
.warnList {
height: calc(100% - 31%);
width: 100%;
background: url(../assets/images/warnDottedLine.png) no-repeat;
background-size: 100% 100%;
overflow: auto;
.warnListContent {
height: 27%;
width: 100%;
border: 1px dashed #fff;
color: #fff;
font-size: @fontSize;
display: flex;
flex-wrap: wrap;
align-items: center;
padding-left: 3%;
box-sizing: border-box;
font-size: 0.7rem;
.warnArray {
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: flex-start;
}
}
}
::-webkit-scrollbar {
display: none;
}
}
}
@keyframes leftAnimation {
0% {
position: relative;
left: 38%;
transform: scale(0);
}
100% {
position: relative;
left: 0%;
transform: scale(1);
}
}
.right {
width: 24.7%;
height: 95%;
padding: 0.5% 0.3% 0.3% 0.3%;
box-sizing: border-box;
display: flex;
flex-wrap: wrap;
background: url(../assets/images/leftKuang.png) no-repeat;
background-size: 100% 100%;
-webkit-animation-name: rightAnimation;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: 1;
-webkit-animation-duration: 1s;
.rightOne {
height: 38%;
width: 100%;
.maintenance {
height: calc(100% - 13%);
width: 100%;
padding: 0 2% 0 2%;
box-sizing: border-box;
.maintenanceCount {
width: 100%;
height: 30%;
background: url(../assets/images/maintenance.png) no-repeat;
background-size: 100% 100%;
margin-top: 2%;
.quantity {
color: #fff;
font-size: @fontSize;
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
align-items: center;
width: 100%;
height: 50%;
}
}
.maintenanceEcharts {
width: 100%;
height: calc(100% - 30%);
display: flex;
flex-wrap: nowrap;
#maintenanceLeft {
width: 50%;
height: 100%;
}
#maintenanceRight {
width: 50%;
height: 100%;
}
}
}
}
.rightTwo {
height: 25%;
width: 100%;
position: relative;
#energyEcharts {
width: 100%;
height: calc(100% - 25%);
}
.selectChange {
width: 23%;
height: 10%;
position: absolute;
top: 22%;
right: 5%;
/deep/ .el-select {
width: 100%;
height: 100%;
border-radius: 15px;
}
/deep/ .el-input__inner {
width: 100%;
height: 100%;
background: transparent;
border: 1px solid rgb(1, 176, 202);
border-radius: 15px;
color: #fff;
}
/deep/ .el-select-dropdown {
background: transparent;
border: 1px solid rgb(1, 176, 202);
border-radius: 5px;
left: -30px !important;
}
/deep/ .el-select-dropdown__item {
color: turquoise;
}
/deep/ .el-select .el-input .el-select__caret {
color: rgb(1, 176, 202);
font-size: 0.3rem;
font-weight: 500;
}
/deep/ .el-input__suffix {
display: flex;
align-items: center;
}
/deep/ .el-select-dropdown__wrap {
max-height: 171px;
}
}
.pickerChange {
width: 23%;
height: 10%;
position: absolute;
top: 22%;
right: 35%;
/deep/ .el-select {
width: 100%;
height: 100%;
border-radius: 15px;
}
/deep/ .el-input__inner {
width: 100%;
height: 100%;
background: transparent;
border: 1px solid rgb(1, 176, 202);
border-radius: 15px;
color: #fff;
}
/deep/ .el-select-dropdown {
background: transparent;
border: 1px solid rgb(1, 176, 202);
border-radius: 5px;
// left: -30px !important;
}
/deep/ .el-select-dropdown__item {
color: turquoise;
}
/deep/ .el-select .el-input .el-select__caret {
color: rgb(1, 176, 202);
font-size: 0.3rem;
font-weight: 500;
}
/deep/ .el-input__suffix {
display: flex;
align-items: center;
}
}
}
.rightThree {
height: 34%;
width: 100%;
.camera {
height: calc(100% - 15%);
width: 100%;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-around;
align-content: stretch;
.cameraList {
width: 47%;
height: 44%;
border: 3px solid rgb(1, 176, 202);
}
}
}
}
@keyframes rightAnimation {
0% {
position: relative;
right: 38%;
transform: scale(0);
}
100% {
position: relative;
right: 0%;
transform: scale(1);
}
}
}
.title {
width: 100%;
height: 20%;
background: url("../assets/images/title.png") no-repeat;
background-size: 100% 100%;
color: #fff;
font-size: 0.9rem;
display: flex;
align-items: center;
padding-left: 12%;
box-sizing: border-box;
}
.camersBig {
position: fixed;
top: 21%;
left: 26%;
width: 47.4%;
height: 50%;
border: 5px solid #01b0ca;
.close {
width: 4%;
height: 8%;
z-index: 999;
position: absolute;
top: 1%;
right: 1%;
background: url("../assets/images/close.png") no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
.remoteControl {
width: 15%;
height: 27%;
position: absolute;
bottom: 2%;
right: 2%;
background: url("../assets/images/control.png") no-repeat;
background-size: 100% 100%;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
}
.remoteControl1 {
width: 15%;
height: 27%;
position: absolute;
bottom: 2%;
right: 2%;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
}
}
</style>