Merge remote-tracking branch 'origin/master'
@ -1,27 +1,73 @@
|
|||||||
package com.ruoyi.dataprocess.service.impl;
|
package com.ruoyi.dataprocess.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.ruoyi.common.core.constant.TdEngineConstants;
|
||||||
|
import com.ruoyi.dataprocess.domain.HwDevice;
|
||||||
|
import com.ruoyi.dataprocess.mapper.HwDeviceMapper;
|
||||||
import com.ruoyi.dataprocess.service.IDeviceStatusService;
|
import com.ruoyi.dataprocess.service.IDeviceStatusService;
|
||||||
import com.ruoyi.tdengine.api.RemoteTdEngineService;
|
import com.ruoyi.tdengine.api.RemoteTdEngineService;
|
||||||
|
import com.ruoyi.tdengine.api.domain.TdField;
|
||||||
|
import com.ruoyi.tdengine.api.domain.TdTableVo;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 设备状态处理服务
|
* @Description: 设备状态处理服务
|
||||||
* @ClassName: DeviceStatusServiceImpl
|
* @ClassName: DeviceStatusServiceImpl
|
||||||
* @Author : xins
|
* @Author : xins
|
||||||
* @Date :2023-09-04 15:31
|
* @Date :2023-09-04 15:31
|
||||||
* @Version :1.0
|
* @Version :1.0
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class DeviceStatusServiceImpl implements IDeviceStatusService {
|
public class DeviceStatusServiceImpl implements IDeviceStatusService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private HwDeviceMapper hwDeviceMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RemoteTdEngineService remoteTdEngineService;
|
private RemoteTdEngineService remoteTdEngineService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleDeviceStatus(){
|
public void handleDeviceStatus(String payloadString, String clientId) {
|
||||||
|
System.out.println("ddd:" + payloadString);
|
||||||
|
// ddd:{"msg":"设备设备连接状态信息","deviceType":"edge","connectStatus":1,
|
||||||
|
// "statusTime":1694506127199,"deviceCode":"hw-data-process-1"}
|
||||||
|
JSONObject json = JSON.parseObject(payloadString);
|
||||||
|
String deviceCode = json.getString("deviceCode");
|
||||||
|
if (clientId.equals(deviceCode)) { //校验是不是自己,如果是自己则不记录状态,返回即可。
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
HwDevice hwDevice = hwDeviceMapper.selectHwDeviceByDeviceCode(deviceCode);
|
||||||
|
if (hwDevice != null) {
|
||||||
|
Long deviceId = hwDevice.getDeviceId();
|
||||||
|
TdTableVo tdTableVo = new TdTableVo();
|
||||||
|
tdTableVo.setDatabaseName(TdEngineConstants.PLATFORM_DB_NAME);
|
||||||
|
tdTableVo.setTableName(TdEngineConstants.DEFAULT_DEVICE_STATUS_TABLE_NAME_PREFIX + deviceId);
|
||||||
|
|
||||||
System.out.println("handleDeviceStatus");
|
List<TdField> schemaFields = new ArrayList<>();
|
||||||
|
TdField onlineStatusField = new TdField();
|
||||||
|
onlineStatusField.setFieldName("onlineStatus");
|
||||||
|
onlineStatusField.setFieldValue(json.getInteger("connectStatus"));
|
||||||
|
schemaFields.add(onlineStatusField);
|
||||||
|
|
||||||
|
TdField deviceTypeField = new TdField();
|
||||||
|
deviceTypeField.setFieldName("deviceType");
|
||||||
|
deviceTypeField.setFieldValue(json.getString("deviceType"));
|
||||||
|
schemaFields.add(deviceTypeField);
|
||||||
|
|
||||||
|
TdField tsField = new TdField();
|
||||||
|
tsField.setFieldName(TdEngineConstants.DEFAULT_FIRST_FIELD_NAME);
|
||||||
|
tsField.setFieldValue(json.getLong("statusTime"));
|
||||||
|
schemaFields.add(tsField);
|
||||||
|
|
||||||
|
tdTableVo.setSchemaFields(schemaFields);
|
||||||
|
|
||||||
|
this.remoteTdEngineService.insertTable(tdTableVo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
After Width: | Height: | Size: 254 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 611 B |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 993 B |
After Width: | Height: | Size: 262 KiB |
After Width: | Height: | Size: 490 KiB |
After Width: | Height: | Size: 121 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 611 B |
After Width: | Height: | Size: 9.8 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 305 KiB |
After Width: | Height: | Size: 490 KiB |
@ -0,0 +1,80 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<div :class="`menu ${nowMenu==='1'? 'menuClick' :''}`" style="left: 2%">
|
||||||
|
<span>
|
||||||
|
监控主页
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div :class="`menu ${nowMenu==='2'? 'menuClick' :''}`" style="left: 9%">
|
||||||
|
<el-dropdown trigger="click">
|
||||||
|
<span class="el-dropdown-link">
|
||||||
|
智慧场景 <i class="el-icon-arrow-down el-icon--right"></i>
|
||||||
|
</span>
|
||||||
|
<el-dropdown-menu slot="dropdown">
|
||||||
|
<el-dropdown-item>黄金糕</el-dropdown-item>
|
||||||
|
<el-dropdown-item>狮子头</el-dropdown-item>
|
||||||
|
<el-dropdown-item>螺蛳粉</el-dropdown-item>
|
||||||
|
<el-dropdown-item>双皮奶</el-dropdown-item>
|
||||||
|
<el-dropdown-item>蚵仔煎</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
|
<div :class="`menu ${nowMenu==='3'? 'menuClick' :''}`" style="left: 16%">
|
||||||
|
<span>
|
||||||
|
设备监测
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div :class="`menu ${nowMenu==='4'? 'menuClick' :''}`" style="left: 23%">
|
||||||
|
<span>
|
||||||
|
传感器汇总
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
nowMenu: {
|
||||||
|
type: String,
|
||||||
|
default: '1'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
methods: {}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
|
||||||
|
.menu {
|
||||||
|
background-image: url("~@/assets/board/common/subheadClick1.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
position: absolute;
|
||||||
|
width: 8vw;
|
||||||
|
height: 1.66vw;
|
||||||
|
top: 3.8%;
|
||||||
|
line-height: 1.66vw;
|
||||||
|
font-size: 0.8vw;
|
||||||
|
color: #d4d4d4;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu .el-dropdown {
|
||||||
|
font-size: 0.8vw;
|
||||||
|
color: #d4d4d4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menuClick {
|
||||||
|
background-image: url("~@/assets/board/common/subheadClick.png");
|
||||||
|
color: #f3f3f3;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,35 @@
|
|||||||
|
<template>
|
||||||
|
<div />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
expose: ['setData'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chart: null,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
if (!this.chart) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.chart.dispose()
|
||||||
|
this.chart = null
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setData(option) {
|
||||||
|
this.initChart(option)
|
||||||
|
},
|
||||||
|
initChart(option) {
|
||||||
|
this.chart = echarts.init(this.$el, 'macarons')
|
||||||
|
|
||||||
|
this.chart.setOption(option)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -0,0 +1,385 @@
|
|||||||
|
<template>
|
||||||
|
<div class="container">
|
||||||
|
<div class="centerImg"></div>
|
||||||
|
<BoardTopNav nowMenu="2"></BoardTopNav>
|
||||||
|
<Chart ref="chart1" class="chart1"></Chart>
|
||||||
|
<div class="table1">
|
||||||
|
<div style="background-color: #094170">
|
||||||
|
<div class="scrollTable" style="font-weight: bold;">
|
||||||
|
告警编号
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;">
|
||||||
|
告警类型
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;">
|
||||||
|
告警位置
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;">
|
||||||
|
操作
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<vue-seamless-scroll
|
||||||
|
:class-option="table1Data"
|
||||||
|
:data="table1Data"
|
||||||
|
class="case-item"
|
||||||
|
style="height: 84%;overflow: hidden;"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in table1Data"
|
||||||
|
:key="index"
|
||||||
|
|
||||||
|
>
|
||||||
|
<div :style='"background-color:" + ((index % 2 === 0)? "#053460":"#032d57") '>
|
||||||
|
<div
|
||||||
|
class="scrollTable">
|
||||||
|
{{ item.value1 }}
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="scrollTable">
|
||||||
|
{{ item.value2 }}
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="scrollTable">
|
||||||
|
{{ item.value3 }}
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable">
|
||||||
|
<el-button size="mini" type="primary">处理</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</vue-seamless-scroll>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="title1">监控单元报警统计</div>
|
||||||
|
<div class="title2">告警信息</div>
|
||||||
|
<div class="info1">监控单元数量</div>
|
||||||
|
<div class="info2">设备数量</div>
|
||||||
|
<div class="info3">在线设备数量</div>
|
||||||
|
<div class="num1">20</div>
|
||||||
|
<div class="num2">20</div>
|
||||||
|
<div class="num3">20</div>
|
||||||
|
</div>
|
||||||
|
<div class="map" id="map"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Chart from "@/components/Charts/Chart";
|
||||||
|
import BoardTopNav from '@/components/BoardTopNav'
|
||||||
|
import vueSeamlessScroll from "vue-seamless-scroll";
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
|
||||||
|
let map = null
|
||||||
|
import red from '@/assets/board/GPS/red.png'
|
||||||
|
import green from '@/assets/board/GPS/green.png'
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Chart,
|
||||||
|
vueSeamlessScroll,
|
||||||
|
BoardTopNav
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chart1Data: [
|
||||||
|
{
|
||||||
|
value: 12,
|
||||||
|
name: '监控单元1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 23,
|
||||||
|
name: '监控单元2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 34,
|
||||||
|
name: '监控单元3',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 45,
|
||||||
|
name: '监控单元4',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 55,
|
||||||
|
name: '监控单元5',
|
||||||
|
}
|
||||||
|
],
|
||||||
|
chart1Option: {
|
||||||
|
grid: {
|
||||||
|
left: "0%",
|
||||||
|
right: "5%",
|
||||||
|
top: "0%",
|
||||||
|
bottom: "0%",
|
||||||
|
containLabel: true,
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "axis",
|
||||||
|
axisPointer: {
|
||||||
|
type: "shadow",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: "value",
|
||||||
|
axisLine: {
|
||||||
|
show: true,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fffa",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
show: true,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fff4",
|
||||||
|
type: 'dashed'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
boundaryGap: [0, 0.01],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
table1Data: [
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value1: '001',
|
||||||
|
value2: '高温预警',
|
||||||
|
value3: '车间',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
let option1 = {
|
||||||
|
...this.chart1Option,
|
||||||
|
yAxis: {
|
||||||
|
axisLine: {
|
||||||
|
show: true,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fffa",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
show: true,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#fff4",
|
||||||
|
type: 'dashed'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
type: "category",
|
||||||
|
data: this.chart1Data.map(e => e.name),
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: "数量",
|
||||||
|
type: "bar",
|
||||||
|
yAxisIndex: 0,
|
||||||
|
data: this.chart1Data.map(e => e.value),
|
||||||
|
barWidth: '60%',
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
show: true,
|
||||||
|
color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
||||||
|
{
|
||||||
|
offset: 0,
|
||||||
|
color: "#00faff",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: "#1eadf1",
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
this.$refs.chart1.setData(option1)
|
||||||
|
this.createMap()
|
||||||
|
this.setMarker()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
createMap(){
|
||||||
|
map = new AMap.Map('map', {
|
||||||
|
zoom: 11,
|
||||||
|
zooms: [8, 20],
|
||||||
|
center: [113.4, 23.35],
|
||||||
|
});
|
||||||
|
},
|
||||||
|
setMarker(){
|
||||||
|
var marker = new AMap.Marker({
|
||||||
|
position: [113.2, 23.35],
|
||||||
|
icon: red,
|
||||||
|
});
|
||||||
|
var marker1 = new AMap.Marker({
|
||||||
|
position: [113.6, 23.35],
|
||||||
|
icon: green,
|
||||||
|
});
|
||||||
|
map.add(marker)
|
||||||
|
map.add(marker1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.container {
|
||||||
|
background-image: url("~@/assets/board/GPS/bg.jpg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100vh);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chart1 {
|
||||||
|
position: absolute;
|
||||||
|
width: 25%;
|
||||||
|
height: 21%;
|
||||||
|
top: 16%;
|
||||||
|
left: 3%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table1 {
|
||||||
|
position: absolute;
|
||||||
|
top: 48%;
|
||||||
|
left: 2.5%;
|
||||||
|
width: 26%;
|
||||||
|
height: 48%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrollTable {
|
||||||
|
color: rgb(185, 186, 192);
|
||||||
|
margin: auto 0px;
|
||||||
|
padding: 4px 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
text-align: center;
|
||||||
|
display: inline-block;
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title1 {
|
||||||
|
position: absolute;
|
||||||
|
top: 13%;
|
||||||
|
left: 15.5%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title2 {
|
||||||
|
position: absolute;
|
||||||
|
top: 45.4%;
|
||||||
|
left: 15.6%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info1 {
|
||||||
|
position: absolute;
|
||||||
|
top: 18%;
|
||||||
|
left: 39%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #179ce1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info2 {
|
||||||
|
position: absolute;
|
||||||
|
top: 18%;
|
||||||
|
left: 62%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #179ce1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info3 {
|
||||||
|
position: absolute;
|
||||||
|
top: 18%;
|
||||||
|
left: 83%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #179ce1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num1 {
|
||||||
|
position: absolute;
|
||||||
|
top: 18%;
|
||||||
|
left: 47%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1.4vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num2 {
|
||||||
|
position: absolute;
|
||||||
|
top: 18%;
|
||||||
|
left: 69%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1.4vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num3 {
|
||||||
|
position: absolute;
|
||||||
|
top: 18%;
|
||||||
|
left: 91%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1.4vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.map{
|
||||||
|
position: absolute;
|
||||||
|
top: 28%;
|
||||||
|
left: 31%;
|
||||||
|
width: 67%;
|
||||||
|
height: 69%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,35 @@
|
|||||||
|
<template>
|
||||||
|
<div class="container">
|
||||||
|
<div class="centerImg"></div>
|
||||||
|
<BoardTopNav nowMenu="3"></BoardTopNav>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import BoardTopNav from '@/components/BoardTopNav'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
BoardTopNav
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.container {
|
||||||
|
background-image: url("~@/assets/board/GPS/bg.jpg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100vh);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,509 @@
|
|||||||
|
<template>
|
||||||
|
<div class="container">
|
||||||
|
<BoardTopNav nowMenu="2"></BoardTopNav>
|
||||||
|
<div class="num1">30</div>
|
||||||
|
<div class="num2">216</div>
|
||||||
|
<div class="num3">0</div>
|
||||||
|
<div class="num4">0</div>
|
||||||
|
<div class="num5">0</div>
|
||||||
|
<div class="num6">0</div>
|
||||||
|
<div class="num7">0</div>
|
||||||
|
<div class="num8">0</div>
|
||||||
|
<div class="title1">监控单元</div>
|
||||||
|
<div class="title2">传感器</div>
|
||||||
|
<div class="title3">设备高温</div>
|
||||||
|
<div class="title4">设备振动</div>
|
||||||
|
<div class="title5">烟雾火情</div>
|
||||||
|
<div class="title6">环境大风</div>
|
||||||
|
<div class="title7">柜内温度</div>
|
||||||
|
<div class="title8">柜内冰浸</div>
|
||||||
|
<div class="title9">告警信息</div>
|
||||||
|
<div class="title10">监控单元</div>
|
||||||
|
|
||||||
|
<div class="table1">
|
||||||
|
<div style="background-color: #094170">
|
||||||
|
<div class="scrollTable" style="font-weight: bold;width: 8%">
|
||||||
|
告警编号
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;width: 8%">
|
||||||
|
告警类型
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;width: 15%">
|
||||||
|
告警单元
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;width: 30%">
|
||||||
|
告警信息
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;width: 11%">
|
||||||
|
告警位置
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;width: 20%">
|
||||||
|
告警时间
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="font-weight: bold;width: 8%">
|
||||||
|
处理情况
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<vue-seamless-scroll :class-option="chart1TableOption" :data="table1Data" class="case-item"
|
||||||
|
style="height: calc(100% - 33px);overflow: hidden;">
|
||||||
|
<div v-for="(item, index) in table1Data" :key="index">
|
||||||
|
<div :style='"background-color:" + ((index % 2 === 0) ? "#053460" : "#032d57")'>
|
||||||
|
<div class="scrollTable" style="width: 8%">
|
||||||
|
{{ item.data1 }}
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="width: 8%">
|
||||||
|
{{ item.data2 }}
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="width: 15%">
|
||||||
|
{{ item.data3 }}
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="width: 30%">
|
||||||
|
{{ item.data4 }}
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="width: 11%">
|
||||||
|
{{ item.data5 }}
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="width: 20%">
|
||||||
|
{{ item.data6 }}
|
||||||
|
</div>
|
||||||
|
<div class="scrollTable" style="width: 8%">
|
||||||
|
<span style="color: #67C23A;">已处理</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</vue-seamless-scroll>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="item">
|
||||||
|
<div class="titleBg"></div>
|
||||||
|
<div class="title">
|
||||||
|
<span style="margin-right: 28px;"> 变压器 </span>
|
||||||
|
<el-tag type="success">正常</el-tag>
|
||||||
|
</div>
|
||||||
|
<div class="img"></div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="item">
|
||||||
|
<div class="titleBg"></div>
|
||||||
|
<div class="title">
|
||||||
|
<span style="margin-right: 28px;"> 变压器 </span>
|
||||||
|
<el-tag type="success">正常</el-tag>
|
||||||
|
</div>
|
||||||
|
<div class="img"></div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="item">
|
||||||
|
<div class="titleBg"></div>
|
||||||
|
<div class="title">
|
||||||
|
<span style="margin-right: 28px;"> 变压器 </span>
|
||||||
|
<el-tag type="success">正常</el-tag>
|
||||||
|
</div>
|
||||||
|
<div class="img"></div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="item">
|
||||||
|
<div class="titleBg"></div>
|
||||||
|
<div class="title">
|
||||||
|
<span style="margin-right: 28px;"> 变压器 </span>
|
||||||
|
<el-tag type="success">正常</el-tag>
|
||||||
|
</div>
|
||||||
|
<div class="img"></div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<div class="pagination">
|
||||||
|
<el-pagination :page-size="20" :pager-count="11" layout="prev, pager, next" :total="1000">
|
||||||
|
</el-pagination>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import vueSeamlessScroll from "vue-seamless-scroll";
|
||||||
|
import BoardTopNav from '@/components/BoardTopNav'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
vueSeamlessScroll,
|
||||||
|
BoardTopNav
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
table1Data: [
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data1: '001',
|
||||||
|
data2: '越限',
|
||||||
|
data3: '123123',
|
||||||
|
data4: '无线检测 检测值为 21° - 25°',
|
||||||
|
data5: '设备11233',
|
||||||
|
data6: '2021.01.01 00:00:00',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
methods: {}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.container {
|
||||||
|
background-image: url("~@/assets/board/smartScene/bg.jpg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100vh);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu {
|
||||||
|
background-image: url("~@/assets/board/common/subheadClick1.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
position: absolute;
|
||||||
|
width: 8vw;
|
||||||
|
height: 1.66vw;
|
||||||
|
top: 3.8%;
|
||||||
|
line-height: 1.66vw;
|
||||||
|
font-size: 0.8vw;
|
||||||
|
color: #d4d4d4;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu .el-dropdown {
|
||||||
|
font-size: 0.8vw;
|
||||||
|
color: #d4d4d4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menuClick {
|
||||||
|
background-image: url("~@/assets/board/common/subheadClick.png");
|
||||||
|
color: #f3f3f3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num1 {
|
||||||
|
position: absolute;
|
||||||
|
top: 21%;
|
||||||
|
left: 18%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 3vw;
|
||||||
|
color: #15d654;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num2 {
|
||||||
|
position: absolute;
|
||||||
|
top: 21%;
|
||||||
|
left: 33%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 3vw;
|
||||||
|
color: #00fff0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num3 {
|
||||||
|
position: absolute;
|
||||||
|
top: 52%;
|
||||||
|
left: 7.5%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 2vw;
|
||||||
|
color: #d73827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num4 {
|
||||||
|
position: absolute;
|
||||||
|
top: 52%;
|
||||||
|
left: 15%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 2vw;
|
||||||
|
color: #1ef16d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num5 {
|
||||||
|
position: absolute;
|
||||||
|
top: 52%;
|
||||||
|
left: 22.5%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 2vw;
|
||||||
|
color: #f2711f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num6 {
|
||||||
|
position: absolute;
|
||||||
|
top: 52%;
|
||||||
|
left: 30%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 2vw;
|
||||||
|
color: #2a46f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num7 {
|
||||||
|
position: absolute;
|
||||||
|
top: 52%;
|
||||||
|
left: 37.5%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 2vw;
|
||||||
|
color: #00a3fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.num8 {
|
||||||
|
position: absolute;
|
||||||
|
top: 52%;
|
||||||
|
left: 45%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 2vw;
|
||||||
|
color: #eff721;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title1 {
|
||||||
|
position: absolute;
|
||||||
|
top: 28%;
|
||||||
|
left: 18%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 2vw;
|
||||||
|
color: #62bff2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title2 {
|
||||||
|
position: absolute;
|
||||||
|
top: 28%;
|
||||||
|
left: 33%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 2vw;
|
||||||
|
color: #62bff2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title3 {
|
||||||
|
position: absolute;
|
||||||
|
top: 48%;
|
||||||
|
left: 7.5%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title4 {
|
||||||
|
position: absolute;
|
||||||
|
top: 48%;
|
||||||
|
left: 15%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title5 {
|
||||||
|
position: absolute;
|
||||||
|
top: 48%;
|
||||||
|
left: 22.5%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title6 {
|
||||||
|
position: absolute;
|
||||||
|
top: 48%;
|
||||||
|
left: 30%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title7 {
|
||||||
|
position: absolute;
|
||||||
|
top: 48%;
|
||||||
|
left: 37.5%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title8 {
|
||||||
|
position: absolute;
|
||||||
|
top: 48%;
|
||||||
|
left: 45%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title9 {
|
||||||
|
position: absolute;
|
||||||
|
top: 61%;
|
||||||
|
left: 26.1%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title10 {
|
||||||
|
position: absolute;
|
||||||
|
top: 13%;
|
||||||
|
left: 74.3%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-size: 1vw;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table1 {
|
||||||
|
position: absolute;
|
||||||
|
top: 63%;
|
||||||
|
left: 3.5%;
|
||||||
|
width: 45.4%;
|
||||||
|
height: 32%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrollTable {
|
||||||
|
color: rgb(185, 186, 192);
|
||||||
|
margin: auto 0px;
|
||||||
|
padding: 4px 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
text-align: center;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
position: absolute;
|
||||||
|
top: 16%;
|
||||||
|
left: 52%;
|
||||||
|
width: 44.8%;
|
||||||
|
height: 80%;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
width: 22vw;
|
||||||
|
height: 37vh;
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid #1ea6ec;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
|
||||||
|
.titleBg {
|
||||||
|
position: absolute;
|
||||||
|
top: 0%;
|
||||||
|
left: 0%;
|
||||||
|
width: 100%;
|
||||||
|
height: 10%;
|
||||||
|
background-color: #063b5a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
position: absolute;
|
||||||
|
top: 5%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
color: #fff9f6;
|
||||||
|
font-size: 0.9vw;
|
||||||
|
|
||||||
|
.el-tag.el-tag--success {
|
||||||
|
vertical-align: top !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.img {
|
||||||
|
background-image: url("~@/assets/board/smartScene/device.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 90%;
|
||||||
|
top: 10%;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
.pagination{
|
||||||
|
position: relative;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
display: inline-block;
|
||||||
|
.el-pagination{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|