|
|
|
<template>
|
|
|
|
<div class='statisticAnalysis'>
|
|
|
|
<el-tabs class="saContent" v-model="activeName" @tab-click="changeTabs">
|
|
|
|
<el-tab-pane label="设备分析" name="first" class="deviceAnalysis">
|
|
|
|
<DeviceSummary class="deviceSummary" :dataList="equipments"></DeviceSummary>
|
|
|
|
<div class="bottomTabs">
|
|
|
|
<DeviceUptime :dataList="equipments" class="tabs-lo" />
|
|
|
|
<MonthlyEquipment class="tabs-mo" :dataList="equipments" />
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</el-tab-pane>
|
|
|
|
<el-tab-pane label="设备查询" name="second">
|
|
|
|
<div class="topdiv">
|
|
|
|
<div class="left-div">
|
|
|
|
<el-button size="mini" icon="el-icon-refresh-left" class="btnSearch">刷新</el-button>
|
|
|
|
<el-button size="mini" icon="el-icon-download" class="btnSearch"
|
|
|
|
@click="SystemStatusExport">导出Excel</el-button>
|
|
|
|
</div>
|
|
|
|
<div class="right-div">
|
|
|
|
<InputSearch style="width: 402px;" :formList="searchFormList" @handleSearch="handleSearch" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="middleDiv">
|
|
|
|
<div ref="queryChart" class="keep-ratio">
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<el-table :border="false" :data="tableData" height="480" style="width: 100%">
|
|
|
|
<el-table-column prop="order" label="序号" width="80">
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="deviceName" label="设备名称"></el-table-column>
|
|
|
|
<el-table-column prop="deviceNo" label="设备桩号" width="">
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="direction" label="方向" class-name="showClass" width="">
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="deviceIp" label="设备IP" width="">
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="production" label="厂家" width="">
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="type" label="型号" width="">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.type == 1">高清网络枪型固定摄像机</div>
|
|
|
|
<div v-if="scope.row.type == 2">高清网络球形摄像机</div>
|
|
|
|
<div v-if="scope.row.type == 3">桥下高清网络球形摄像机</div>
|
|
|
|
<div v-if="scope.row.type == 4">360°全景摄像机</div>
|
|
|
|
<div v-if="scope.row.type == 5">180°全景摄像机</div>
|
|
|
|
<div v-if="scope.row.type == 6">门架式可变信息标志</div>
|
|
|
|
<div v-if="scope.row.type == 7">雨棚可变信息标志</div>
|
|
|
|
<div v-if="scope.row.type == 8">站前悬臂式可变信息标志</div>
|
|
|
|
<div v-if="scope.row.type == 9">气象检测器</div>
|
|
|
|
<div v-if="scope.row.type == 10">路段语音广播系统</div>
|
|
|
|
<div v-if="scope.row.type == 11">护栏碰撞预警系统</div>
|
|
|
|
<div v-if="scope.row.type == 12">毫米波雷达</div>
|
|
|
|
<div v-if="scope.row.type == 13">合流区预警系统</div>
|
|
|
|
<div v-if="scope.row.type == 14">激光疲劳唤醒</div>
|
|
|
|
<div v-if="scope.row.type == 15">一类交通量调查站</div>
|
|
|
|
<div v-if="scope.row.type == 16">智能行车诱导系统</div>
|
|
|
|
<div v-if="scope.row.type == 17">智能设备箱</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="network" label="网段" width="">
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="time" label="监测时间" width="">
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column prop="deviceStatus" label="操作" width="">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.deviceStatus == 1">在线</div>
|
|
|
|
<div v-if="scope.row.deviceStatus == 0">离线</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table>
|
|
|
|
<div class="foot">
|
|
|
|
<Pagination @current-change="changePage" width="'100%'" :page-size="pageSize" :current-page.sync="pageIndex"
|
|
|
|
layout="total, sizes, prev, pager, next" :total="pageTotal">
|
|
|
|
</Pagination>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-tab-pane>
|
|
|
|
</el-tabs>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
|
|
import * as echarts from "echarts";
|
|
|
|
import chartsStatistics from "./assets/charts";
|
|
|
|
import DeviceUptime from './components/deviceUptime';
|
|
|
|
import MonthlyEquipment from './components/monthlyEquipment';
|
|
|
|
import DeviceSummary from './components/deviceSummary';
|
|
|
|
import { getSystemStatusList, getSystemStatusTabList, getSystemStatusType, getSystemStatusExport } from "../../../../../api/MonthlyEquipment";
|
|
|
|
import { download } from '../../../../../utils/request.js';
|
|
|
|
import Pagination from '@screen/components/Pagination.vue';
|
|
|
|
import InputSearch from '@screen/components/InputSearch/index.vue';
|
|
|
|
import { searchFormList } from "./data";
|
|
|
|
import { Loading } from 'element-ui';
|
|
|
|
import { first } from "lodash";
|
|
|
|
|
|
|
|
export default {
|
|
|
|
name: 'publicService',
|
|
|
|
components: {
|
|
|
|
DeviceUptime,
|
|
|
|
MonthlyEquipment,
|
|
|
|
Pagination,
|
|
|
|
InputSearch,
|
|
|
|
DeviceSummary
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
startTime: "2024-01-01 00:00:00",
|
|
|
|
time: "2024-01-31 00:00:00",
|
|
|
|
typeQuery: 1, //高清网络枪型固定摄像机
|
|
|
|
pageTotal: 0,
|
|
|
|
pageIndex: 1,
|
|
|
|
pageSize: 10,
|
|
|
|
searchFormList,
|
|
|
|
equipSeries: [
|
|
|
|
"高清网络球形摄像机",
|
|
|
|
"360°全景摄像机",
|
|
|
|
"门架式可变信息标志",
|
|
|
|
"站前悬臂式可变信息标志",
|
|
|
|
"气象检测器",
|
|
|
|
"合流区预警系统",
|
|
|
|
"高清网络枪型固定摄像机",
|
|
|
|
"智能设备箱",
|
|
|
|
"毫米波雷达",
|
|
|
|
"路段语音广播系统",
|
|
|
|
"护碰撞预警系统",
|
|
|
|
"激光疲劳唤醒系统",
|
|
|
|
"180°全景摄像机",
|
|
|
|
"一类交通量调音站",
|
|
|
|
"雨棚可变信息标志",
|
|
|
|
"智能行车诱导系统",
|
|
|
|
],
|
|
|
|
equipments: [],
|
|
|
|
activeName: "second",
|
|
|
|
tableData: [{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
}, {
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
date: '2023-12-31 13:00:00',
|
|
|
|
name: '高清网络球形摄像机',
|
|
|
|
address: 'K234+235',
|
|
|
|
root: "中央分隔带",
|
|
|
|
ip: "10.0.61.43",
|
|
|
|
cj: "海康威视",
|
|
|
|
xh: "XXX",
|
|
|
|
wd: "梁山收费站监控网段",
|
|
|
|
jcsj: "2024-01-17",
|
|
|
|
cz: "在线",
|
|
|
|
}
|
|
|
|
],
|
|
|
|
interval: null
|
|
|
|
}
|
|
|
|
},
|
|
|
|
destroyed() {
|
|
|
|
clearInterval(this.interval);
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
initData() {
|
|
|
|
|
|
|
|
clearInterval(this.interval);
|
|
|
|
if (this.activeName == "first") {
|
|
|
|
this.initDevice();
|
|
|
|
} else if (this.activeName == 'second') {
|
|
|
|
this.queryChart = echarts.init(this.$refs["queryChart"]);
|
|
|
|
this.queryChart.setOption(chartsStatistics);
|
|
|
|
|
|
|
|
// this.initQueryTable(1);
|
|
|
|
// this.initQueryChart();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
this.interval = setInterval(() => {
|
|
|
|
if (this.activeName == "first") {
|
|
|
|
this.initDevice();
|
|
|
|
}
|
|
|
|
}, 30000)
|
|
|
|
|
|
|
|
},
|
|
|
|
changePage(page) {
|
|
|
|
|
|
|
|
this.initQueryTable(page);
|
|
|
|
},
|
|
|
|
formatDate(val) {
|
|
|
|
let year = val.getFullYear();
|
|
|
|
var m = val.getMonth() + 1;
|
|
|
|
var day = val.getDate();
|
|
|
|
|
|
|
|
m = m < 10 ? "0" + m : "" + m;
|
|
|
|
day = day < 10 ? "0" + day : "" + day;
|
|
|
|
|
|
|
|
return year + "-" + m + "-" + day + " 00:00:00";
|
|
|
|
},
|
|
|
|
handleSearch(data) {
|
|
|
|
this.typeQuery = data.type;
|
|
|
|
this.startTime = this.formatDate(data.time[0]);
|
|
|
|
this.time = this.formatDate(data.time[1]);
|
|
|
|
this.initQueryChart();
|
|
|
|
this.initQueryTable(1);
|
|
|
|
},
|
|
|
|
changeTabs() {
|
|
|
|
this.initData();
|
|
|
|
console.log("======================", this.queryChart);
|
|
|
|
this.$nextTick(() => {
|
|
|
|
this.queryChart.resize();
|
|
|
|
});
|
|
|
|
},
|
|
|
|
//导出
|
|
|
|
SystemStatusExport() {
|
|
|
|
let loadingInstance = Loading.service({ fullscreen: true, background: "#00000052", text: "文件正在下载..." });
|
|
|
|
getSystemStatusExport({
|
|
|
|
startTime: this.startTime,
|
|
|
|
time: this.time,
|
|
|
|
type: this.typeQuery,
|
|
|
|
}).then((res) => {
|
|
|
|
console.log(res);
|
|
|
|
const url = window.URL.createObjectURL(new Blob([res]))
|
|
|
|
let link = document.createElement('a')
|
|
|
|
link.style.display = 'none'
|
|
|
|
link.href = url
|
|
|
|
link.setAttribute('download', '设备统计信息.xlsx')
|
|
|
|
document.body.appendChild(link)
|
|
|
|
link.click()
|
|
|
|
URL.revokeObjectURL(link.href) // 释放URL 对象
|
|
|
|
document.body.removeChild(link)
|
|
|
|
link = null
|
|
|
|
loadingInstance.close();
|
|
|
|
}).catch(err => {
|
|
|
|
Message.error(err);
|
|
|
|
loadingInstance.close();
|
|
|
|
})
|
|
|
|
},
|
|
|
|
initQueryChart() {
|
|
|
|
|
|
|
|
getSystemStatusList({
|
|
|
|
startTime: this.startTime,
|
|
|
|
time: this.time,
|
|
|
|
type: this.typeQuery,
|
|
|
|
}).then((res) => {
|
|
|
|
if (res.code == 200) {
|
|
|
|
let origin = res.data;
|
|
|
|
|
|
|
|
let startStamp = +moment(this.startTime).startOf('day').format("x");
|
|
|
|
let endStamp = +moment(this.time).endOf('day').format("x");
|
|
|
|
let oneDay = 86400000;
|
|
|
|
let daysTotal = Math.ceil((endStamp - startStamp) / oneDay);
|
|
|
|
let queryChartData = [];
|
|
|
|
let dataX = [];
|
|
|
|
let data0 = [];
|
|
|
|
let data1 = [];
|
|
|
|
for (let i = 0; i < daysTotal; i++) {
|
|
|
|
let ts = startStamp + i * oneDay;
|
|
|
|
let date = moment(ts).format("YYYY-M-D");
|
|
|
|
let val = origin[date] ? +origin[date].replace("%", "") : 0;
|
|
|
|
dataX.push(moment(ts).format("MM月DD日"));
|
|
|
|
data0.push(val);
|
|
|
|
data1.push(100);
|
|
|
|
}
|
|
|
|
chartsStatistics.xAxis.data = dataX;
|
|
|
|
chartsStatistics.series[0].data = data0;
|
|
|
|
chartsStatistics.series[1].data = data1;
|
|
|
|
chartsStatistics.yAxis[0].name = "在线率(%)";
|
|
|
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
this.queryChart.setOption(chartsStatistics);
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
initDevice() { //设备在线离线率接口
|
|
|
|
|
|
|
|
getSystemStatusType().then((res) => {
|
|
|
|
|
|
|
|
if (!res.data || res.msg == "暂无数据") {
|
|
|
|
|
|
|
|
this.equipments = [];
|
|
|
|
this.equipSeries.forEach(item => {
|
|
|
|
this.equipments.push({
|
|
|
|
title: item,
|
|
|
|
total: Math.floor(Math.random() * 600) + 800,
|
|
|
|
pctOnl: Math.floor(100 * Math.random()) + "%",
|
|
|
|
pctOffl: "25%",
|
|
|
|
pctLose: "15%"
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
let allList = [];
|
|
|
|
for (let key in res.data) {
|
|
|
|
let val = res.data[key];
|
|
|
|
let item = {
|
|
|
|
title: key,
|
|
|
|
total: val.sum,
|
|
|
|
pctOnl: val.sucessRate,
|
|
|
|
pctLose: val.failRate,
|
|
|
|
pctOffl: val.lostRate
|
|
|
|
}
|
|
|
|
if (key.includes("全部设备")) {
|
|
|
|
allList.unshift(item);
|
|
|
|
} else {
|
|
|
|
allList.push(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.equipments = allList;
|
|
|
|
})
|
|
|
|
|
|
|
|
},
|
|
|
|
//查询列表
|
|
|
|
initQueryTable(pageIndex, pageSize = 30) {
|
|
|
|
getSystemStatusTabList({
|
|
|
|
startTime: this.startTime,
|
|
|
|
time: this.time,
|
|
|
|
type: this.typeQuery,
|
|
|
|
pageNum: pageIndex,
|
|
|
|
pageSize: pageSize,
|
|
|
|
}).then((res) => {
|
|
|
|
if (res.code == 200) {
|
|
|
|
this.pageIndex = pageIndex;
|
|
|
|
this.pageSize = pageSize;
|
|
|
|
this.pageTotal = res.total;
|
|
|
|
this.tableData = res.rows;
|
|
|
|
this.tableData.forEach((it, index) => {
|
|
|
|
it.order = (pageIndex - 1) * (pageSize) + index + 1;
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
},
|
|
|
|
mounted() {
|
|
|
|
|
|
|
|
this.initData();
|
|
|
|
|
|
|
|
},
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang='scss' scoped>
|
|
|
|
.bottomTabs {
|
|
|
|
position: relative;
|
|
|
|
display: inline-flex;
|
|
|
|
width: 100%;
|
|
|
|
flex-direction: row;
|
|
|
|
height: 100%;
|
|
|
|
|
|
|
|
.tabs-lo {
|
|
|
|
display: inline-flex;
|
|
|
|
width: 670px;
|
|
|
|
margin-right: 15px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.tabs-mo {
|
|
|
|
display: inline-flex;
|
|
|
|
flex: 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.deviceSummary {
|
|
|
|
height: 390px;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.btnSearch {
|
|
|
|
background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
|
|
|
|
margin-left: 10px;
|
|
|
|
border-color: transparent;
|
|
|
|
color: #fff;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table .cell {
|
|
|
|
padding-left: 0px !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table .el-table__header-wrapper th {
|
|
|
|
background-color: #064258 !important;
|
|
|
|
color: #00D1FF;
|
|
|
|
border-color: #064258 !important;
|
|
|
|
border: 0px !important;
|
|
|
|
font-size: 14px;
|
|
|
|
font-family: PingFang SC, PingFang SC;
|
|
|
|
font-weight: 500;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table {
|
|
|
|
border: 0px !important;
|
|
|
|
background-color: transparent;
|
|
|
|
font-size: 12px !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table__body-wrapper {
|
|
|
|
background-color: #064258;
|
|
|
|
color: #fff;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table .el-table__cell {
|
|
|
|
height: 47px;
|
|
|
|
font-size: 14px;
|
|
|
|
font-family: PingFang SC, PingFang SC;
|
|
|
|
font-weight: 500;
|
|
|
|
color: #FFFFFF;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table tr:hover td {
|
|
|
|
background: #1b2528 !important;
|
|
|
|
color: #00D1FF;
|
|
|
|
height: 47px;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table tr:nth-child(odd) td {
|
|
|
|
background-color: #13272F;
|
|
|
|
border: 0px !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table tr:nth-child(even) td {
|
|
|
|
border: 0px !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-table tr {
|
|
|
|
background-color: #133242 !important;
|
|
|
|
border-collapse: 0;
|
|
|
|
border: 0px !important;
|
|
|
|
background-color: transparent !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-tabs__item {
|
|
|
|
display: inline-flex;
|
|
|
|
justify-content: center;
|
|
|
|
font-size: 16px;
|
|
|
|
font-family: PingFang SC, PingFang SC;
|
|
|
|
font-weight: 500;
|
|
|
|
color: #FFFFFF;
|
|
|
|
min-width: 128px;
|
|
|
|
position: relative;
|
|
|
|
left: 10px;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-tabs__active-bar {
|
|
|
|
min-width: 128px;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep .el-tabs__nav-wrap::after {
|
|
|
|
background-color: #133242;
|
|
|
|
opacity: 0.1;
|
|
|
|
}
|
|
|
|
|
|
|
|
.saContent {
|
|
|
|
width: 100%;
|
|
|
|
height: 100%;
|
|
|
|
|
|
|
|
.deviceAnalysis {}
|
|
|
|
}
|
|
|
|
|
|
|
|
.topdiv {
|
|
|
|
display: inline-flex;
|
|
|
|
position: relative;
|
|
|
|
width: 100%;
|
|
|
|
height: 40px;
|
|
|
|
justify-content: space-between;
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
.right-div {
|
|
|
|
display: inline;
|
|
|
|
width: 450px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.statisticAnalysis {
|
|
|
|
padding: 8px 20px;
|
|
|
|
|
|
|
|
.header-shot {
|
|
|
|
width: 98%;
|
|
|
|
margin: auto;
|
|
|
|
margin-top: 15px;
|
|
|
|
height: 160px;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
.middleDiv {
|
|
|
|
display: inline-flex;
|
|
|
|
width: 100%;
|
|
|
|
height: 343px;
|
|
|
|
background: linear-gradient(180deg, rgba(6, 66, 88, 0) 0%, #06425860 100%);
|
|
|
|
margin-bottom: 30px;
|
|
|
|
|
|
|
|
>div {
|
|
|
|
display: inline-flex;
|
|
|
|
width: 100%;
|
|
|
|
height: 100%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.content {
|
|
|
|
width: 100%;
|
|
|
|
margin: auto;
|
|
|
|
display: flex;
|
|
|
|
flex: 1;
|
|
|
|
pointer-events: none;
|
|
|
|
margin-top: 19px;
|
|
|
|
|
|
|
|
>div {
|
|
|
|
pointer-events: auto;
|
|
|
|
}
|
|
|
|
|
|
|
|
.content-l {
|
|
|
|
width: calc(25%);
|
|
|
|
|
|
|
|
margin-right: 20px;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
.content-mi {
|
|
|
|
width: calc(50%);
|
|
|
|
|
|
|
|
margin-right: 20px;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.content-m {
|
|
|
|
display: inline-flex;
|
|
|
|
flex-direction: column;
|
|
|
|
width: calc(100% / 4);
|
|
|
|
margin-right: 20px;
|
|
|
|
|
|
|
|
.content-m-t {
|
|
|
|
width: 100%;
|
|
|
|
height: 240px;
|
|
|
|
margin-bottom: 20px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.content-r {
|
|
|
|
width: 49.4%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
|