123123
|
After Width: | Height: | Size: 532 KiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 651 B |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
|
@ -0,0 +1,96 @@
|
|||
<!--
|
||||
* @Description: Description
|
||||
* @ComponentName: BFC
|
||||
* @Author: wangzhigang11
|
||||
* @Date: 2023-05-10 18:59
|
||||
-->
|
||||
<template>
|
||||
<div class="BFC">
|
||||
<div v-if="showLeft" class="left" :style="curStyle">
|
||||
<slot name="left"></slot>
|
||||
</div>
|
||||
<div v-if="showRight" class="right" :style="curStyle">
|
||||
<slot name="right"></slot>
|
||||
</div>
|
||||
<div v-if="showCenter" class="center" :style="curStyle">
|
||||
<slot name="center"></slot>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getSize} from "@/utils/tools";
|
||||
|
||||
export default {
|
||||
name: 'BFC',
|
||||
components: {},
|
||||
mixins: [],
|
||||
inject: [],
|
||||
provide() {
|
||||
return {
|
||||
BFC: this
|
||||
}
|
||||
},
|
||||
props: {
|
||||
height: {
|
||||
type: [Number, String],
|
||||
default: '100%'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
computed: {
|
||||
curStyle () {
|
||||
return {
|
||||
height: getSize(this.height)
|
||||
}
|
||||
},
|
||||
showLeft () {
|
||||
const left = this.$slots.left
|
||||
return left && left.length > 0
|
||||
},
|
||||
showRight () {
|
||||
const right = this.$slots.right
|
||||
return right && right.length > 0
|
||||
},
|
||||
showCenter () {
|
||||
const center = this.$slots.center
|
||||
return center && center.length > 0
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
created() {
|
||||
},
|
||||
beforeDestroy() {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "assets/styles/mixin";
|
||||
.BFC {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.clear-fix;
|
||||
pointer-events: none;
|
||||
.left {
|
||||
float: left;
|
||||
.clear-fix;
|
||||
pointer-events: auto;
|
||||
}
|
||||
.right {
|
||||
float: right;
|
||||
.clear-fix;
|
||||
pointer-events: auto;
|
||||
}
|
||||
.center {
|
||||
overflow: hidden;
|
||||
.clear-fix;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
<!--
|
||||
* @Description: Description
|
||||
* @ComponentName: FlexCol
|
||||
* @Author: wangzhigang11
|
||||
* @Date: 2023-05-10 13:42
|
||||
-->
|
||||
<template>
|
||||
<div class="FlexCenter" :style="{height: cHeight}">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getSize} from "@/utils/tools";
|
||||
export default {
|
||||
name: 'FlexCenter',
|
||||
components: {},
|
||||
mixins: [],
|
||||
inject: [],
|
||||
provide() {
|
||||
return {
|
||||
FlexCol: this
|
||||
}
|
||||
},
|
||||
props: {
|
||||
height: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
computed: {
|
||||
cHeight () {
|
||||
return getSize(this.height)
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
created() {
|
||||
},
|
||||
beforeDestroy() {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "assets/styles/mixin";
|
||||
.FlexCenter {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.flex-row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
<!--
|
||||
* @Description: Description
|
||||
* @ComponentName: FlexCol
|
||||
* @Author: wangzhigang11
|
||||
* @Date: 2023-05-10 13:42
|
||||
-->
|
||||
<template>
|
||||
<div class="FlexCol" :style="curStyle">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getSize} from "@/utils/tools";
|
||||
|
||||
export default {
|
||||
name: 'FlexCol',
|
||||
components: {},
|
||||
mixins: [],
|
||||
inject: [],
|
||||
provide() {
|
||||
return {
|
||||
FlexCol: this
|
||||
}
|
||||
},
|
||||
props: {
|
||||
width: {
|
||||
type: [Number, String],
|
||||
default: 'auto'
|
||||
},
|
||||
paddingTop: {
|
||||
type: [Number, String],
|
||||
default: '0'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
computed: {
|
||||
curStyle () {
|
||||
if (this.width === 'auto') {
|
||||
return {
|
||||
flex: 1,
|
||||
paddingTop: getSize(this.paddingTop)
|
||||
}
|
||||
}
|
||||
return {
|
||||
width: getSize(this.width),
|
||||
paddingTop: getSize(this.paddingTop)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
created() {
|
||||
},
|
||||
beforeDestroy() {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.FlexCol {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
<!--
|
||||
* @Description: Description
|
||||
* @ComponentName: FlexCol
|
||||
* @Author: wangzhigang11
|
||||
* @Date: 2023-05-10 13:42
|
||||
-->
|
||||
<template>
|
||||
<div class="FlexRow" :style="{height: cHeight}">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getSize} from "@/utils/tools";
|
||||
export default {
|
||||
name: 'FlexRow',
|
||||
components: {},
|
||||
mixins: [],
|
||||
inject: [],
|
||||
provide() {
|
||||
return {
|
||||
FlexCol: this
|
||||
}
|
||||
},
|
||||
props: {
|
||||
height: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
computed: {
|
||||
cHeight () {
|
||||
return getSize(this.height)
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
created() {
|
||||
},
|
||||
beforeDestroy() {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "assets/styles/mixin";
|
||||
.FlexRow {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.flex-row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -46,6 +46,7 @@ export default {
|
|||
this.$http.get('http://101.43.201.20:5000/api/Home/view').then(({ data }) => {
|
||||
win.document.title = data.home.title
|
||||
this.setTitle(data.home.title)
|
||||
this.setInfo(data)
|
||||
this.initMap(data.home.center)
|
||||
})
|
||||
}
|
||||
|
|
@ -70,7 +71,7 @@ export default {
|
|||
})
|
||||
},
|
||||
methods: {
|
||||
...mapActions('system', ['setTitle']),
|
||||
...mapActions('system', ['setTitle', 'setInfo']),
|
||||
//创建三维地球场景
|
||||
initMap (center) {
|
||||
const { lon, lat } = center
|
||||
|
|
|
|||
|
|
@ -0,0 +1,107 @@
|
|||
<!--
|
||||
* @Description: 内容
|
||||
* @ComponentName: ModuleContent
|
||||
* @Author: wangzhigang11
|
||||
* @Date: 2023-05-06 18:30
|
||||
-->
|
||||
<template>
|
||||
<div class="Content " :style="curStyle">
|
||||
<div class="content-box" :style="{padding}" :class="{ noneEvent }">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getSize} from "@/utils/tools";
|
||||
export default {
|
||||
name: 'ModuleContent',
|
||||
components: {},
|
||||
mixins: [],
|
||||
inject: [],
|
||||
provide() {
|
||||
return {
|
||||
Content: this
|
||||
}
|
||||
},
|
||||
props: {
|
||||
noneEvent: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
height: {
|
||||
type: [Number, String],
|
||||
default: 'auto'
|
||||
},
|
||||
scroll: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
padding: {
|
||||
type: String,
|
||||
default: '20px 50px'
|
||||
},
|
||||
unShowBackground: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
border: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
computed: {
|
||||
curStyle () {
|
||||
if (this.height === 'auto') {
|
||||
return {
|
||||
flex: 1
|
||||
}
|
||||
}
|
||||
return {
|
||||
height: getSize(this.height)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
created() {
|
||||
},
|
||||
beforeDestroy() {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "assets/styles/mixin";
|
||||
.Content {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
pointer-events: none;
|
||||
.content-border {
|
||||
|
||||
}
|
||||
.content-header {
|
||||
}
|
||||
|
||||
.content-body {
|
||||
}
|
||||
.content-box {
|
||||
height: 100%;
|
||||
@include clearfix;
|
||||
position: relative;
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
pointer-events: auto;
|
||||
&.noneEvent {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<!--
|
||||
* @Description: 内容
|
||||
* @ComponentName: ModuleContent
|
||||
* @Author: wangzhigang11
|
||||
* @Date: 2023-05-06 18:30
|
||||
-->
|
||||
<template>
|
||||
<div class="bg">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'NewBg'
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "assets/styles/mixin";
|
||||
.bg {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
background: url('~/assets/images/new/大背景.png') center no-repeat;
|
||||
background-size: 100% 100%;
|
||||
position: relative;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -92,8 +92,8 @@ export default {
|
|||
let option = {
|
||||
color: color,
|
||||
legend: {
|
||||
top: 20,
|
||||
left: '30%',
|
||||
top: 10,
|
||||
left: 'center',
|
||||
itemWidth: 11,
|
||||
itemHeight: 11,
|
||||
icon: 'circle',
|
||||
|
|
@ -105,10 +105,13 @@ export default {
|
|||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
appendToBody: true
|
||||
},
|
||||
grid: {
|
||||
left: 10,
|
||||
right: 5,
|
||||
top: 50,
|
||||
bottom: 10,
|
||||
bottom: 5,
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,136 @@
|
|||
<!--预警类型分布饼图-->
|
||||
<template>
|
||||
<div id="charts" ref="charts">
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from 'echarts'
|
||||
import {EleResize} from '@/utils/esresize';
|
||||
|
||||
export default {
|
||||
name: 'PeakWarningTypeChart2',
|
||||
props: {
|
||||
dataSource: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
color: {
|
||||
type: Array,
|
||||
default: () => [
|
||||
'#F8F661',
|
||||
'#61F8F6',
|
||||
'#1872FF',
|
||||
'rgba(173,122,255,1)',
|
||||
'rgba(253,189,0,1)'
|
||||
]
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
watch: {
|
||||
dataSource: {
|
||||
deep: true,
|
||||
immediate: true,
|
||||
handler(value) {
|
||||
if (value.length) {
|
||||
this.$nextTick(() => {
|
||||
this.init()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
|
||||
methods: {
|
||||
init() {
|
||||
let myCharts = echarts.init(this.$refs.charts)
|
||||
let barCharts = this.$refs.charts
|
||||
// 复制代码
|
||||
let chartData = this.dataSource;
|
||||
const colorList = this.color;
|
||||
const bgColorList = ['rgba(255,221,48,0.2)', 'rgba(84,255,210,0.2)', 'rgba(24,114,255,0.2)','rgba(173,122,255,0.2)','rgba(253,189,0,0.2)']
|
||||
const pieData1 = [];
|
||||
const sum = chartData.reduce((per, cur) => per + cur.value, 0);
|
||||
const gap = (1 * sum) / 100;
|
||||
const gapData = {
|
||||
name: '',
|
||||
value: gap,
|
||||
itemStyle: {
|
||||
color: 'transparent',
|
||||
},
|
||||
};
|
||||
//图标位置显示
|
||||
for (let i = 0; i < chartData.length; i++) {
|
||||
// 第一圈数据
|
||||
pieData1.push({
|
||||
...chartData[i],
|
||||
itemStyle: {
|
||||
borderRadius: 0,
|
||||
},
|
||||
});
|
||||
pieData1.push(gapData);
|
||||
|
||||
}
|
||||
|
||||
let option = {
|
||||
tooltip: {
|
||||
show: false,
|
||||
backgroundColor: 'rgba(0, 0, 0,.8)',
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
},
|
||||
appendToBody: true
|
||||
},
|
||||
legend: {
|
||||
show: false
|
||||
},
|
||||
grid: {
|
||||
top: 10,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
},
|
||||
color: colorList,
|
||||
series: [
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
roundCap: true,
|
||||
radius: ['70%', '90%'],
|
||||
center: ['50%', '50%'],
|
||||
label: {
|
||||
show: false
|
||||
},
|
||||
labelLine: {
|
||||
show: false
|
||||
},
|
||||
itemStyle: {
|
||||
borderRadius: 0,
|
||||
borderWidth: 5
|
||||
},
|
||||
data: pieData1
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
myCharts.setOption(option)
|
||||
let listener = function () {
|
||||
myCharts.resize()
|
||||
}
|
||||
EleResize.on(barCharts, listener)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
#charts {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,258 @@
|
|||
<!--自定义table-->
|
||||
<template>
|
||||
<div class="custom-table">
|
||||
<div class="check-data-info">
|
||||
<div class="table-info">
|
||||
<div class="table-header">
|
||||
<span class="table-header-item" v-for="(item,index) of tableTitle"
|
||||
:style="`width:${item.width};`">
|
||||
{{ item.title }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="table-body" v-if="dataSource.length && tableRoll">
|
||||
<vue-seamless-scroll
|
||||
v-if="dataSource.length && tableRoll"
|
||||
ref="vueSeamless"
|
||||
:data="dataSource"
|
||||
class="seamless-scroll"
|
||||
:class-option="defaultOption"
|
||||
>
|
||||
<div class="table-item-body" v-for="item of dataSource">
|
||||
<span class="data-content" v-for="dataIndex of tableTitle" :style="`width:${dataIndex.width};`">
|
||||
<div class="_content">
|
||||
<div class="point-name">
|
||||
<div class="_value">{{ item[dataIndex.dataIndex] }}</div>
|
||||
<div class="_unit" v-if="dataIndex.dataUnit">{{ item[dataIndex.dataUnit] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</vue-seamless-scroll>
|
||||
</div>
|
||||
<div class="table-body" v-if="dataSource.length && !tableRoll">
|
||||
<div class="table-item-body" v-for="item of dataSource">
|
||||
<span class="data-content" v-for="dataIndex of tableTitle" :style="`width:${dataIndex.width};`">
|
||||
<div class="_content">
|
||||
<div class="point-name">
|
||||
<div class="_value" v-if="dataIndex.dataIndex !== 'operation'">{{ item[dataIndex.dataIndex] }}</div>
|
||||
<div class="_operation" v-else @click="viewDetail(item)">详情</div>
|
||||
<div class="_unit" v-if="dataIndex.dataUnit">{{ item[dataIndex.dataUnit] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import vueSeamlessScroll from 'vue-seamless-scroll'
|
||||
export default {
|
||||
name: "PeakCustomTable",
|
||||
components: {vueSeamlessScroll},
|
||||
props: {
|
||||
tableTitle: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
dataSource: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
tableRoll: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
limitMoveNum: {
|
||||
type: Number,
|
||||
default: 9
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
computed: {
|
||||
defaultOption() {
|
||||
return {
|
||||
step: 0.3, // 数值越大速度滚动越快
|
||||
limitMoveNum: this.limitMoveNum, // 开始无缝滚动的数据量 this.dataList.length
|
||||
hoverStop: true, // 是否开启鼠标悬停stop
|
||||
direction: 1, // 0向下 1向上 2向左 3向右
|
||||
openWatch: true, // 开启数据实时监控刷新dom
|
||||
singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
|
||||
singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
|
||||
waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
viewDetail(val){
|
||||
console.log('val:',val)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "assets/styles/mixin";
|
||||
|
||||
.custom-table {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
overflow: auto;
|
||||
|
||||
.check-data-info {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
.table-info {
|
||||
min-width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
|
||||
.table-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
height: 40px;
|
||||
opacity: 1;
|
||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);
|
||||
line-height: 40px;
|
||||
word-break: keep-all;
|
||||
|
||||
.table-header-item {
|
||||
display: inline-block;
|
||||
font-family: MicrosoftYaHei-Bold;
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 40px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.table-body {
|
||||
height: calc(100% - 30px);
|
||||
|
||||
.seamless-scroll {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.table-item-body {
|
||||
margin-top: 10px;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
height: 30px;
|
||||
opacity: 1;
|
||||
background: rgba(255, 255, 255, 0.01);
|
||||
box-shadow: 0px 1px 0px rgba(29, 198, 247, 0.2);
|
||||
line-height: 48px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.data-content {
|
||||
display: inline-block;
|
||||
height: 30px;
|
||||
background: rgba(21, 77, 160, 0.20);
|
||||
|
||||
._content {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
.flex-row;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.point-name {
|
||||
.text-ellipsis;
|
||||
.flex-row;
|
||||
|
||||
._value {
|
||||
font-family: MicrosoftYaHei-Bold;
|
||||
font-size: 14px;
|
||||
color: #FFFFFF;
|
||||
letter-spacing: 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
._operation{
|
||||
font-family: MicrosoftYaHei-Bold;
|
||||
font-size: 14px;
|
||||
color: #FFFFFF;
|
||||
letter-spacing: 0;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
._unit {
|
||||
font-family: MicrosoftYaHei-Bold;
|
||||
font-size: 12px;
|
||||
color: #FFFFFF;
|
||||
letter-spacing: 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
._icon {
|
||||
}
|
||||
}
|
||||
|
||||
.odds-ratio-up-icon {
|
||||
width: 23px;
|
||||
height: 25px;
|
||||
background: url("assets/peakCoalImages/left/odds-ratio-up-icon.png") no-repeat;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.odds-ratio-reduction-icon {
|
||||
width: 22px;
|
||||
height: 26px;
|
||||
background: url("assets/peakCoalImages/left/odds-ratio-reduction-icon.png") no-repeat;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
|
||||
.data-value {
|
||||
.flex-row;
|
||||
justify-content: center;
|
||||
|
||||
._value {
|
||||
font-family: MicrosoftYaHei-Bold;
|
||||
font-size: 14px;
|
||||
color: #FFFFFF;
|
||||
letter-spacing: 0;
|
||||
text-align: center;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
|
||||
background-color: rgba(21, 77, 160, 0.20);;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
-webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
|
||||
border-radius: 5px;
|
||||
background-color: #d3dce6;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,168 @@
|
|||
<template>
|
||||
<div class="pollution-information">
|
||||
<div class="pollution-content">
|
||||
<div class="pollution-item" v-for="item of dataSource">
|
||||
<div class="pollution-icon" :class="getPollutionIcon(item.state)"></div>
|
||||
<div class="total-info">
|
||||
<div class="title-value">
|
||||
<div class="_value">{{ item.pollutionValue }}</div>
|
||||
<div class="_title">{{ item.pollutionName }}</div>
|
||||
</div>
|
||||
<div class="unit-value">
|
||||
<div class="standard-title">标准:</div>
|
||||
<div class="standard-value">{{ item.standardValue }}{{ item.pollutionUnit }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PeakSecondaryTitle from "@/components/peak-coal-monitoring/PeakSecondaryTitle";
|
||||
import {mapState} from "vuex";
|
||||
|
||||
export default {
|
||||
name: "PollutionInformation2",
|
||||
components: {PeakSecondaryTitle},
|
||||
data() {
|
||||
return {
|
||||
title: '污染物信息总览'
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
dataSource: state => (state.system.info?.ariQuality || []).map(item => {
|
||||
const maplevel = {
|
||||
'优': 1,
|
||||
'持平': 2,
|
||||
'差': 3,
|
||||
}
|
||||
return {
|
||||
pollutionName: item.key,
|
||||
pollutionValue: item.val,
|
||||
pollutionUnit: '',
|
||||
standardValue: item.standard,
|
||||
state: maplevel[item.level]
|
||||
}
|
||||
}).flat(Infinity)
|
||||
})
|
||||
},
|
||||
methods:{
|
||||
getPollutionIcon(val){
|
||||
if(val === 1){
|
||||
return 'you-icon'
|
||||
} else if(val === 2){
|
||||
return 'chi-ping-icon'
|
||||
} else {
|
||||
return 'cha-icon'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "assets/styles/mixin";
|
||||
|
||||
.pollution-information {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
.flex-column;
|
||||
|
||||
.pollution-content {
|
||||
padding-top: 10px;
|
||||
flex: 1;
|
||||
height: 0;
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
justify-content: start;
|
||||
flex-wrap: wrap;
|
||||
.pollution-item {
|
||||
height: 60px;
|
||||
width: 170px;
|
||||
.flex-row;
|
||||
&:nth-child(2n){
|
||||
margin-left: 20px;
|
||||
}
|
||||
.pollution-icon{
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.you-icon{
|
||||
background: url("~/assets/peakCoalMonitoring/left/pollution-you.png") center no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.chi-ping-icon{
|
||||
background: url("~/assets/peakCoalMonitoring/left/pollution-chi-ping.png") center no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.cha-icon{
|
||||
background: url("~/assets/peakCoalMonitoring/left/pollution-cha.png") center no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.total-info{
|
||||
flex: 1;
|
||||
width: 0;
|
||||
.flex-column;
|
||||
justify-content: space-between;
|
||||
.title-value{
|
||||
width: 100%;
|
||||
.flex-row;
|
||||
justify-content: space-between;
|
||||
._value{
|
||||
padding-left: 10px;
|
||||
font-family: YouSheBiaoTiHei;
|
||||
font-size: 16px;
|
||||
color: #24DCF7;
|
||||
letter-spacing: 2px;
|
||||
font-weight: 400;
|
||||
text-align: right;
|
||||
.text-ellipsis;
|
||||
}
|
||||
._title{
|
||||
font-family: MicrosoftYaHei;
|
||||
font-size: 12px;
|
||||
color: #24DCF7;
|
||||
letter-spacing: 2.26px;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
.unit-value{
|
||||
width: 100%;
|
||||
.flex-row;
|
||||
justify-content: space-between;
|
||||
.standard-value{
|
||||
font-family: 思源黑体;
|
||||
font-size: 12px;
|
||||
color: #FFFFFF;
|
||||
letter-spacing: 2px;
|
||||
font-weight: 400;
|
||||
text-align: right;
|
||||
.text-ellipsis;
|
||||
}
|
||||
.standard-title{
|
||||
padding-left: 10px;
|
||||
font-family: 思源黑体;
|
||||
font-size: 12px;
|
||||
color: #FFFFFF;
|
||||
letter-spacing: 2.26px;
|
||||
font-weight: 400;
|
||||
}
|
||||
.standard-unit{
|
||||
font-family: 思源黑体;
|
||||
font-size: 12px;
|
||||
color: #FFFFFF;
|
||||
letter-spacing: 2.26px;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="cusbutton" @click="$emit('click')" :class="{ small, selected }">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "CusButton",
|
||||
props: {
|
||||
small: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
selected: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.cusbutton {
|
||||
display: inline-block;
|
||||
border-radius: 4px;
|
||||
background: linear-gradient(180deg, rgba(26, 94, 232, 0.8) 0%, rgba(61, 198, 239, 0.4) 49.3%, rgba(29, 242, 228, 0.8) 100%);
|
||||
border: 1px solid rgba(29, 228, 242, 0.6);
|
||||
box-shadow: 0px 4px 4px rgba(3, 167, 255, 0.3);
|
||||
padding: 10px 15px;
|
||||
word-break: keep-all;
|
||||
cursor: pointer;
|
||||
|
||||
/** 文本1 */
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0px;
|
||||
line-height: 26.06px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
&.small {
|
||||
padding: 2px 10px;
|
||||
background: linear-gradient(180deg, rgba(188, 216, 247, 0.4) 0%, rgba(152, 217, 237, 0.15) 48.61%, rgba(156, 255, 248, 0.4) 100%);
|
||||
border: 1px solid rgba(29, 228, 242, 0.6);
|
||||
box-shadow: 0px 4px 4px rgba(190, 244, 247, 0.2);
|
||||
color: rgba(255, 255, 255, 1);
|
||||
&:hover {
|
||||
background: linear-gradient(180deg, rgba(26, 94, 232, 0.8) 0%, rgba(61, 198, 239, 0.4) 49.3%, rgba(29, 242, 228, 0.8) 100%);
|
||||
border: 1px solid rgba(29, 228, 242, 0.6);
|
||||
box-shadow: 0px 4px 4px rgba(3, 167, 255, 0.3);
|
||||
}
|
||||
&.selected {
|
||||
background: linear-gradient(180deg, rgba(26, 94, 232, 0.8) 0%, rgba(61, 198, 239, 0.4) 49.3%, rgba(29, 242, 228, 0.8) 100%);
|
||||
border: 1px solid rgba(29, 228, 242, 0.6);
|
||||
box-shadow: 0px 4px 4px rgba(3, 167, 255, 0.3);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="cusbutton" @click="$emit('click')" :class="{ flex, selected }">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "CusButton2",
|
||||
props: {
|
||||
flex: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
selected: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.cusbutton {
|
||||
display: inline-block;
|
||||
background: rgba(19, 66, 97, 1);
|
||||
border: 1px solid rgba(0, 0, 0, 1);
|
||||
padding: 10px 13px;
|
||||
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
cursor: pointer;
|
||||
&.flex {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
background: linear-gradient(180deg, rgba(24, 131, 201, 1) 0%, rgba(10, 64, 99, 1) 100%);
|
||||
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: linear-gradient(180deg, rgba(24, 131, 201, 1) 0%, rgba(10, 64, 99, 1) 100%);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="cusbutton" @click="$emit('click')" :class="{ flex, selected }">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "CusButton3",
|
||||
props: {
|
||||
flex: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
selected: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.cusbutton {
|
||||
display: inline-block;
|
||||
border-radius: 2.56px;
|
||||
border: 1.28px solid rgba(56, 159, 255, 1);
|
||||
padding: 10px 13px;
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
color: rgba(35, 209, 232, 1);
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
cursor: pointer;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
&.flex {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
background: rgba(45, 205, 255, 1);
|
||||
color:rgba(8, 37, 63, 1);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: rgba(45, 205, 255, 1);
|
||||
color:rgba(8, 37, 63, 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="cusbutton" @click="$emit('click')" :class="{ flex, selected }">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "CusButton4",
|
||||
props: {
|
||||
flex: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
selected: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.cusbutton {
|
||||
display: inline-block;
|
||||
border-radius: 2.56px;
|
||||
border: 2px solid rgba(24, 131, 201, 1);
|
||||
padding: 0 20px;
|
||||
/** 文本1 */
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
cursor: pointer;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
|
||||
|
||||
&.flex {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
background: rgba(24, 131, 201, 1);
|
||||
color: #fff;
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: rgba(24, 131, 201, 1);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
<template>
|
||||
<div class="cusdesc">
|
||||
<div class="desc" v-for="(col, index) in columns" :key="index">
|
||||
<div class="desc-title">{{ col.title }}:</div>
|
||||
<div class="desc-value">{{ data[col.key] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "CusDesc",
|
||||
props: {
|
||||
columns: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style scoped lang="less">
|
||||
.cusdesc {
|
||||
width: 100%;
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 23.17px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
.desc {
|
||||
margin-top: 16px;
|
||||
&:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,213 @@
|
|||
<!--
|
||||
* @Description: 内容
|
||||
* @ComponentName: ModuleContent
|
||||
* @Author: wangzhigang11
|
||||
* @Date: 2023-05-06 18:30
|
||||
-->
|
||||
<template>
|
||||
<div class="Content " :style="curStyle">
|
||||
<div class="content-header" :class="{ border }"></div>
|
||||
<div class="content-body" :class="{ border }"></div>
|
||||
<div class="content-box" :style="{padding, ...bgStyle}" :class="{ bg: isBg, bgStr, bgColor }">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getSize} from "@/utils/tools";
|
||||
import checkTypes from "@/utils/checkTypes";
|
||||
export default {
|
||||
name: 'ModuleContent2',
|
||||
components: {},
|
||||
mixins: [],
|
||||
inject: [],
|
||||
provide() {
|
||||
return {
|
||||
Content: this
|
||||
}
|
||||
},
|
||||
props: {
|
||||
height: {
|
||||
type: [Number, String],
|
||||
default: 'auto'
|
||||
},
|
||||
scroll: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
bg: {
|
||||
type: [Boolean, String, Object],
|
||||
default: false
|
||||
},
|
||||
bgStr: {
|
||||
type: [Boolean, String, Object],
|
||||
default: false
|
||||
},
|
||||
bgColor: {
|
||||
type: [Boolean, String, Object],
|
||||
default: false
|
||||
},
|
||||
padding: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
unShowBackground: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
border: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
computed: {
|
||||
isBg () {
|
||||
if (checkTypes.isString(this.bg)) {
|
||||
return false
|
||||
}
|
||||
return this.bg
|
||||
},
|
||||
bgStyle () {
|
||||
if (checkTypes.isString(this.bg)) {
|
||||
return {
|
||||
backgroundSize: '100% 100%',
|
||||
border: '1px solid rgba(0, 64, 152, 1)'
|
||||
}
|
||||
}
|
||||
if (checkTypes.isObject(this.bg)) {
|
||||
return {
|
||||
...this.bg,
|
||||
border: '1px solid rgba(0, 64, 152, 1)'
|
||||
}
|
||||
}
|
||||
return {}
|
||||
},
|
||||
curStyle () {
|
||||
if (this.height === 'auto') {
|
||||
return {
|
||||
flex: 1
|
||||
}
|
||||
}
|
||||
return {
|
||||
height: getSize(this.height)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
created() {
|
||||
},
|
||||
beforeDestroy() {
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "../../assets/styles/mixin";
|
||||
.Content {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
pointer-events: auto;
|
||||
height: 100%;
|
||||
|
||||
.content-border {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
&.border {
|
||||
border: 2px solid rgba(42, 207, 255, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.content-header {
|
||||
&.border {
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
border-top: 2px solid rgba(42, 207, 255, 1);
|
||||
border-left: 2px solid rgba(42, 207, 255, 1);
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
}
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
border-top: 2px solid rgba(42, 207, 255, 1);
|
||||
border-right: 2px solid rgba(42, 207, 255, 1);
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content-body {
|
||||
&.border {
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
border-bottom: 2px solid rgba(42, 207, 255, 1);
|
||||
border-left: 2px solid rgba(42, 207, 255, 1);
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
}
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
border-bottom: 2px solid rgba(42, 207, 255, 1);
|
||||
border-right: 2px solid rgba(42, 207, 255, 1);
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.content-box {
|
||||
height: 100%;
|
||||
.clear-fix;
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
box-sizing: border-box;
|
||||
&.bg {
|
||||
border: 1px solid rgba(0, 64, 152, 1);
|
||||
&.bgStr {
|
||||
background: url("~/assets/images/new/矩形 17.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
&.bgColor {
|
||||
background: linear-gradient(90deg, rgba(0, 107, 207, 0.08) 0%, rgba(0, 107, 207, 0.4) 52.25%, rgba(0, 128, 247, 0.08) 100%);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="progress">
|
||||
<div class="progress-item" v-for="(item, index) in rate" :key="index">
|
||||
<BFC>
|
||||
<div class="percent" slot="right">
|
||||
{{ item.val * 100 }}
|
||||
<div class="unit">%</div>
|
||||
</div>
|
||||
<div class="info" slot="center">
|
||||
<div class="bar">
|
||||
<div class="bar-color">
|
||||
<div class="bf" :style="{ width: item.val * 100 + '%' }"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tit">
|
||||
{{ item.key }}
|
||||
</div>
|
||||
</div>
|
||||
</BFC>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import BFC from "../BFC.vue";
|
||||
import { mapState } from 'vuex'
|
||||
export default {
|
||||
name: "ProgressDesc",
|
||||
components: {BFC},
|
||||
computed: {
|
||||
...mapState({
|
||||
info: state => state.system.info
|
||||
}),
|
||||
rate () {
|
||||
return this.info?.rate || []
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.progress {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
flex-wrap: wrap;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.progress-item {
|
||||
width: 50%;
|
||||
height: 40px;
|
||||
box-sizing: border-box;
|
||||
padding: 0 4px;
|
||||
.percent {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
/** 文本1 */
|
||||
font-size: 28px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
word-break: keep-all;
|
||||
margin-top: -10px;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
.unit {
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 38.42px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
.tit {
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 21.95px;
|
||||
color: rgba(64, 204, 151, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
margin-top: 5px;
|
||||
}
|
||||
.info {
|
||||
height: 40px;
|
||||
padding-right: 10px;
|
||||
padding-top: 10px;
|
||||
.bar {
|
||||
height: 3px;
|
||||
background: rgba(64, 204, 151, 0.3);
|
||||
position: relative;
|
||||
.bf {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: -1px;
|
||||
height: 5px;
|
||||
background: rgba(64, 204, 151, 1); ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<script>
|
||||
import {getSize} from "@/utils/tools";
|
||||
export default {
|
||||
name: "Split",
|
||||
props: {
|
||||
height: {
|
||||
type: [Number, String],
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
sh () {
|
||||
return getSize(this.height)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="split" :style="{ height: sh }"></div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.split {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="system-title">
|
||||
<div class="header-content">
|
||||
<div class="time"><a-icon type="clock-circle" style="margin-right: 10px;" />{{ time }}</div>
|
||||
<div class="tq">{{ tq }}</div>
|
||||
<p class="_title">{{ title }}一体化平台</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {mapState} from "vuex";
|
||||
import moment from "moment";
|
||||
export default {
|
||||
name: "SystemTitle",
|
||||
computed: {
|
||||
...mapState({
|
||||
title: state => state.system.title,
|
||||
info: state => state.system.info,
|
||||
}),
|
||||
tq () {
|
||||
if (this.info) {
|
||||
const weather = this.info?.weather || {}
|
||||
return `${weather.location || ''}: ${weather.windDirection || ''};${weather.temperature || ''}℃`
|
||||
}
|
||||
return ''
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
time: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
setInterval(() => {
|
||||
this.time = moment().format('YYYY-MM-DD HH:mm:ss')
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.system-title {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
justify-content: center;
|
||||
background-size: 100% 100%;
|
||||
pointer-events: auto;
|
||||
z-index: 2;
|
||||
.header-content {
|
||||
width: 100%;
|
||||
background: url("~/assets/images/new/标题.png") center top no-repeat;
|
||||
background-size: 100% 100%;
|
||||
height: 78px;
|
||||
box-sizing: border-box;
|
||||
padding-top: 5px;
|
||||
position: relative;
|
||||
.time {
|
||||
position: absolute;
|
||||
left: 20px;
|
||||
top: 5px;
|
||||
/** 文本1 */
|
||||
font-size: 20px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 23.44px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
.tq {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 5px;
|
||||
/** 文本1 */
|
||||
font-size: 20px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 23.44px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
._title{
|
||||
width: 100%;
|
||||
font-family: AlimamaShuHeiTi-Bold;
|
||||
font-size: 25px;
|
||||
color: #D8F0FF;
|
||||
letter-spacing: 7.68px;
|
||||
text-align: center;
|
||||
text-shadow: 0 0 11px #000000;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
&.sub {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
}
|
||||
.subtitle {
|
||||
width: 100%;
|
||||
font-family: AlimamaShuHeiTi-Bold;
|
||||
font-size: 16px;
|
||||
color: #D8F0FF;
|
||||
letter-spacing: 7.68px;
|
||||
text-align: center;
|
||||
text-shadow: 0 0 11px #000000;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="web2tit">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "Web2Title"
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.web2tit {
|
||||
width: 100%;
|
||||
height: 46px;
|
||||
background: linear-gradient(90deg, rgba(0, 107, 207, 0.4) 0%, rgba(0, 128, 247, 0.08) 100%);
|
||||
border-left: 4px solid rgba(45, 205, 255, 1);
|
||||
/** 文本1 */
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
padding-left: 20px;
|
||||
line-height: 46px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="web2tit">
|
||||
<slot></slot>
|
||||
<div class="action">
|
||||
<slot name="action"></slot>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "Web3Title"
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.web2tit {
|
||||
width: 100%;
|
||||
height: 48px;
|
||||
line-height: 48px;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.4);
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
background: url("~/assets/images/new/标题12.png") no-repeat left center;
|
||||
background-size: 10px 16px;
|
||||
box-sizing: border-box;
|
||||
padding-left: 20px;
|
||||
position: relative;
|
||||
&::after {
|
||||
position: absolute;
|
||||
bottom: -1px;
|
||||
left: 0;
|
||||
display: table;
|
||||
content: ' ';
|
||||
width: 120px;
|
||||
height: 2px;
|
||||
background: rgba(120, 240, 253, 1);
|
||||
|
||||
}
|
||||
|
||||
.action {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
flex-wrap: nowrap;
|
||||
height: 48px;
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="web2tit">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "Web4Title"
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.web2tit {
|
||||
width: 100%;
|
||||
height: 48px;
|
||||
line-height: 48px;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.4);
|
||||
/** 文本1 */
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
background-size: 10px 16px;
|
||||
box-sizing: border-box;
|
||||
padding-left: 20px;
|
||||
position: relative;
|
||||
&::after {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
display: table;
|
||||
content: ' ';
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
opacity: 1;
|
||||
border: 2px solid rgba(255, 255, 255, 1);
|
||||
border-radius: 50%;
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="group" :class="{ bg }">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "butgroup",
|
||||
props: {
|
||||
bg: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.group {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
pointer-events: auto;
|
||||
box-sizing: border-box;
|
||||
> div {
|
||||
margin-left: 24px;
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
&.bg {
|
||||
background: linear-gradient(90deg, rgba(0, 107, 207, 0) 0%, rgba(0, 107, 207, 0.08) 35%, rgba(0, 107, 207, 0.4) 50%, rgba(0, 107, 207, 0.08) 65%, rgba(0, 128, 247, 0) 100%);
|
||||
padding: 16px 0;
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="group">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "butgroup2"
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.group {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-content: center;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="miaoshu">
|
||||
<div class="tit">{{ title }}</div>
|
||||
<div class="value" :style="{ color }">{{ value || 0 }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "miaoshu",
|
||||
props: {
|
||||
title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
value: {
|
||||
type: [String, Number],
|
||||
default: ''
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.miaoshu {
|
||||
text-align: center;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
.tit {
|
||||
/** 文本1 */
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 26.06px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
|
||||
}
|
||||
.value {
|
||||
/** 文本1 */
|
||||
font-size: 40px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0px;
|
||||
line-height: 46.88px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<script>
|
||||
export default {
|
||||
name: "visualTable"
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
</style>
|
||||
|
|
@ -36,9 +36,7 @@ export default {
|
|||
// Global CSS: https://go.nuxtjs.dev/config-css
|
||||
css: [
|
||||
'ant-design-vue/dist/antd.css',
|
||||
|
||||
'@/assets/styles/mixin.less',
|
||||
|
||||
'@/assets/styles/mixin.less'
|
||||
],
|
||||
|
||||
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
|
||||
|
|
|
|||
|
|
@ -0,0 +1,529 @@
|
|||
<!--峰煤监控系统-->
|
||||
<template>
|
||||
<new-bg>
|
||||
<div class="center-panel">
|
||||
<Map type="middle" @pointClick="pointClick" />
|
||||
</div>
|
||||
<flex-col class="main">
|
||||
<system-title/>
|
||||
<ModuleContent none-event padding="0px 20px 20px">
|
||||
<BFC>
|
||||
<flex-col slot="left" width="412">
|
||||
<ModuleContent2 bg bg-color padding="20px">
|
||||
<flex-col>
|
||||
<web3-title>本市空气质量</web3-title>
|
||||
<ModuleContent padding="0" height="210">
|
||||
<pollution-information/>
|
||||
</ModuleContent>
|
||||
<web3-title>治理设备在线率</web3-title>
|
||||
<ModuleContent padding="20px 0" height="180">
|
||||
<ProgressDesc></ProgressDesc>
|
||||
</ModuleContent>
|
||||
<web3-title>厂区环境趋势</web3-title>
|
||||
<ModuleContent padding="0" height="180">
|
||||
<air-quality-trend-charts :data-source="airQualityTrendDataSource"/>
|
||||
</ModuleContent>
|
||||
<web3-title>设备报警信息汇总</web3-title>
|
||||
<ModuleContent padding="0">
|
||||
<peak-custom-table :table-title="columnsForTable" :data-source="dataSource" :limit-move-num="3"/>
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
</ModuleContent2>
|
||||
</flex-col>
|
||||
<flex-col slot="right" width="412">
|
||||
<ModuleContent2 bg bg-color padding="20px">
|
||||
<flex-col>
|
||||
<web3-title>
|
||||
清洁运输比例
|
||||
<template slot="action">
|
||||
<butgroup2 style="height: 20px;line-height: 20px;">
|
||||
<cus-button4 @click="active = 'Yesterday'" :selected="active === 'Yesterday'">昨日</cus-button4>
|
||||
<cus-button4 @click="active = 'LastWeek'" :selected="active === 'LastWeek'">上周</cus-button4>
|
||||
</butgroup2>
|
||||
</template>
|
||||
</web3-title>
|
||||
<ModuleContent padding="0">
|
||||
<PeakWarningTypeChart2 :color="['rgb(0 255, 255)', 'transparent']" :data-source="pieData"></PeakWarningTypeChart2>
|
||||
<div class="c-title">
|
||||
<div class="t">{{ Math.round(pieData[0].value * 100) }}%</div>
|
||||
<div class="t2">运输比例</div>
|
||||
</div>
|
||||
</ModuleContent>
|
||||
<web4-title>日排放量</web4-title>
|
||||
<ModuleContent padding="20px 0 0" height="140">
|
||||
<div class="pf">
|
||||
<div class="t">当前VOC的日排放量</div>
|
||||
<div class="v">{{ todaypf.voc || 0 }}mg/m3</div>
|
||||
</div><div class="pf">
|
||||
<div class="t">当前CEMS的日排放量</div>
|
||||
<div class="v">{{ todaypf.cems || 0 }}mg/m3</div>
|
||||
</div>
|
||||
|
||||
</ModuleContent>
|
||||
<web4-title>周排放量</web4-title>
|
||||
<ModuleContent padding="0 ">
|
||||
<peak-custom-table :table-title="columns2ForTable" :data-source="weekData" :limit-move-num="3"/>
|
||||
</ModuleContent>
|
||||
<web3-title>设备超标报警</web3-title>
|
||||
<ModuleContent padding="0 20px 20px">
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
|
||||
</ModuleContent2>
|
||||
|
||||
</flex-col>
|
||||
<div class="center" slot="center">
|
||||
<butgroup :bg="false">
|
||||
<cus-button small :selected="mapTab==='rl'" @click="mapTab = 'rl'">热力地图</cus-button>
|
||||
<cus-button small :selected="mapTab==='wx'" @click="mapTab = 'wx'">卫星地图</cus-button>
|
||||
</butgroup>
|
||||
|
||||
|
||||
<butgroup class="real-data">
|
||||
<cus-button>有组织</cus-button>
|
||||
<cus-button>无组织</cus-button>
|
||||
<cus-button>清洁运输</cus-button>
|
||||
<cus-button>视频广场</cus-button>
|
||||
</butgroup>
|
||||
</div>
|
||||
</BFC>
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
</new-bg>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AtmosphericModule from "@/components/peak-coal-monitoring/AtmosphericModule";
|
||||
import PollutionInformation from "@/components/peak-coal-monitoring/PollutionInformation2";
|
||||
import MonitorData from "@/components/peak-coal-monitoring/MonitorData";
|
||||
import MonitorData2 from "@/components/peak-coal-monitoring/MonitorData2";
|
||||
import EnergyProfile from "@/components/peak-coal-monitoring/EnergyProfile";
|
||||
import DeviceOverview from "@/components/peak-coal-monitoring/DeviceOverview";
|
||||
import AlarmOverview from "@/components/peak-coal-monitoring/AlarmOverview";
|
||||
import WZDialog from "@/components/WZDialog";
|
||||
import SDJCYDialog from "@/components/SDJCYDialog";
|
||||
import ZKZDialog from "@/components/ZKZDialog";
|
||||
import GBZDialog from "@/components/GBZDialog";
|
||||
import CEMSDialog from "@/components/CEMSDialog";
|
||||
import pointDialog from '@/components/PointDialog'
|
||||
import {mapState} from "vuex";
|
||||
import NewBg from "../../components/NewBg.vue";
|
||||
import BFC from "../../components/BFC.vue";
|
||||
import CusButton3 from "../../components/smallCommon/CusButton3.vue";
|
||||
import Butgroup from "../../components/smallCommon/butgroup.vue";
|
||||
import ModuleContent2 from "../../components/smallCommon/ModuleContent2.vue";
|
||||
import SystemTitle from "../../components/smallCommon/SystemTitle.vue";
|
||||
import ModuleContent from "../../components/ModuleContent.vue";
|
||||
import Split from "../../components/smallCommon/Split.vue";
|
||||
import FlexCol from "../../components/FlexCol.vue";
|
||||
import Web2Title from "../../components/smallCommon/Web2Title.vue";
|
||||
import Web3Title from "../../components/smallCommon/Web3Title.vue";
|
||||
import ProgressDesc from "../../components/smallCommon/ProgressDesc.vue";
|
||||
import Web4Title from "../../components/smallCommon/Web4Title.vue";
|
||||
import CusButton from "../../components/smallCommon/CusButton.vue";
|
||||
import AirQualityTrendCharts from "../../components/charts/AirQualityTrendCharts.vue";
|
||||
import PeakCustomTable from "../../components/peak-coal-monitoring/PeakCustomTable2.vue";
|
||||
import PeakWarningTypeChart2 from "../../components/charts/PeakWarningTypeChart2.vue";
|
||||
import CusButton4 from "../../components/smallCommon/CusButton4.vue";
|
||||
import Butgroup2 from "../../components/smallCommon/butgroup2.vue";
|
||||
export default {
|
||||
name: "PeakCoalMonitoring",
|
||||
components: {
|
||||
Butgroup2,
|
||||
CusButton4,
|
||||
PeakWarningTypeChart2,
|
||||
PeakCustomTable,
|
||||
AirQualityTrendCharts,
|
||||
CusButton,
|
||||
Web4Title,
|
||||
ProgressDesc,
|
||||
Web3Title,
|
||||
Web2Title,
|
||||
FlexCol,
|
||||
Split,
|
||||
ModuleContent,
|
||||
SystemTitle,
|
||||
ModuleContent2,
|
||||
Butgroup,
|
||||
CusButton3,
|
||||
BFC,
|
||||
NewBg,
|
||||
AlarmOverview, DeviceOverview, EnergyProfile, MonitorData, PollutionInformation, AtmosphericModule, MonitorData2},
|
||||
computed: {
|
||||
...mapState({
|
||||
title: state => state.system.title,
|
||||
info: state => state.system.info || {},
|
||||
airQualityTrendDataSource: state => (state.system.info?.trend || []).map(item => {
|
||||
const { date, ...attr } = item
|
||||
const result = []
|
||||
for (const attrKey in attr) {
|
||||
const obj = { name: date }
|
||||
obj.attr = attrKey
|
||||
obj.value = attr[attrKey]
|
||||
result.push(obj)
|
||||
}
|
||||
console.log(result)
|
||||
return result
|
||||
}).flat(Infinity),
|
||||
dataSource: state => state.system.info?.alerts || []
|
||||
}),
|
||||
pieData () {
|
||||
if (this.info.cleanData && this.info.cleanData[this.active]) {
|
||||
return [
|
||||
{
|
||||
attr: '清运',
|
||||
name: '清洁',
|
||||
value: this.info.cleanData[this.active]
|
||||
},
|
||||
{
|
||||
attr: '清运',
|
||||
name: '剩余',
|
||||
value: 1 - this.info.cleanData[this.active]
|
||||
},
|
||||
]
|
||||
}
|
||||
return [
|
||||
{
|
||||
attr: '清运',
|
||||
name: '清洁',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
attr: '清运',
|
||||
name: '剩余',
|
||||
value: 0
|
||||
},
|
||||
]
|
||||
|
||||
},
|
||||
todaypf () {
|
||||
return this.info.today || {}
|
||||
},
|
||||
columns2ForTable () {
|
||||
const week = this.todaypf.week || {}
|
||||
const columns = [
|
||||
{
|
||||
title: '类型',
|
||||
dataIndex: 'deviceName',
|
||||
}
|
||||
]
|
||||
for (const weekKey in week) {
|
||||
if (week[weekKey] && week[weekKey].length > 0) {
|
||||
const data = week[weekKey]
|
||||
columns.push.apply(columns, data.map(item => ({
|
||||
title: item.Key,
|
||||
dataIndex: item.Key
|
||||
})))
|
||||
break
|
||||
}
|
||||
}
|
||||
const len = columns.length
|
||||
const per = 100 / len + '%'
|
||||
return columns.map((item, index) => {
|
||||
if (item === 0) return item
|
||||
return {
|
||||
...item,
|
||||
width: per
|
||||
}
|
||||
})
|
||||
},
|
||||
weekData () {
|
||||
const week = this.todaypf.week || {}
|
||||
const results = []
|
||||
for (const weekKey in week) {
|
||||
const row = {
|
||||
deviceName:weekKey,
|
||||
}
|
||||
if (!week[weekKey].length) continue
|
||||
|
||||
for (const weekElement of week[weekKey]) {
|
||||
console.log(weekElement)
|
||||
row[weekElement.Key] = weekElement.value
|
||||
}
|
||||
results.push(row)
|
||||
}
|
||||
return results
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
mapTab: 'rl',
|
||||
active: 'Yesterday',
|
||||
|
||||
columnsForTable: [
|
||||
{
|
||||
title: '设备名称',
|
||||
dataIndex: 'deviceName',
|
||||
width: '33.333%'
|
||||
},
|
||||
{
|
||||
title: '报警时间',
|
||||
dataIndex: 'CreateDateTime',
|
||||
width: '33.333%'
|
||||
},
|
||||
{
|
||||
title: '报警内容',
|
||||
dataIndex: 'AlertContent',
|
||||
width: '33.333%'
|
||||
},
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 图层构造器
|
||||
* @param { object } props
|
||||
* @param { 'cems' | 'sdjcy' | 'zkz' | 'gbz' | 'ssc' | 'shisc' | 'wz' | 'jkd' } props.layerType 图层类型 jkd(监控点) wz(微站) sdjcy(深度检测仪) zkz(质控站) gbz(国标站) ssc(洒水车) shisc(湿扫车) cems(CEMS)
|
||||
* @param { object } props.data 图层类型
|
||||
*/
|
||||
pointClick ({layerType, data}) {
|
||||
// todo
|
||||
if(layerType == 'wz'){
|
||||
this.$open(WZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'middle',
|
||||
title: '微站',
|
||||
width: 1100,
|
||||
onClose () {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if(layerType === 'sdjcy'){
|
||||
this.$open(SDJCYDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '深度检测仪',
|
||||
width: 1100,
|
||||
onClose () {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
}else if(layerType === 'zkz'){
|
||||
this.$open(ZKZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '质控站',
|
||||
width: 1100,
|
||||
onClose () {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if(layerType === 'gbz'){
|
||||
this.$open(GBZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '国标站',
|
||||
width: 1100,
|
||||
onClose () {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if(layerType === 'cems'){
|
||||
this.$open(CEMSDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: 'CEMS',
|
||||
width: 1100,
|
||||
onClose () {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'jkd'){
|
||||
this.$open(pointDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '监控点',
|
||||
width: 1100,
|
||||
onClose () {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
body, html, #__nuxt, #__layout {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background: #09151F;
|
||||
}
|
||||
|
||||
.list-enter-active, .list-leave-active {
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
.list-enter, .list-leave-to
|
||||
/* .list-leave-active for below version 2.1.8 */
|
||||
{
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
}
|
||||
</style>
|
||||
<style scoped lang="less">
|
||||
@import "../../assets/styles/mixin";
|
||||
.pf {
|
||||
background: rgba(0, 186, 186, 0.08);
|
||||
padding: 15px 17px;
|
||||
border: 0.6px solid rgba(0, 186, 186, 1);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
&:last-child {
|
||||
margin-top: 20px;
|
||||
}
|
||||
.t {
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 16.46px;
|
||||
color: rgba(219, 234, 234, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
.v {
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 16.46px;
|
||||
color: rgba(8, 255, 255, 1);
|
||||
text-align: right;
|
||||
vertical-align: top;
|
||||
|
||||
}
|
||||
}
|
||||
.c-title {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 45%;
|
||||
transform: translate(-50%, -50%);
|
||||
.t {
|
||||
/** 文本1 */
|
||||
font-size: 35.84px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 51.9px;
|
||||
color: rgba(55, 254, 247, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
.t2 {
|
||||
/** 文本1 */
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 20.27px;
|
||||
color: rgba(243, 255, 255, 1);
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
|
||||
}
|
||||
}
|
||||
.center {
|
||||
padding: 0 20px;
|
||||
position: relative;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
.real-data {
|
||||
pointer-events: auto;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: calc(100% - 40px);
|
||||
}
|
||||
}
|
||||
.center-panel{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
}
|
||||
.main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
}
|
||||
.sou-suo-kuang {
|
||||
height: 100%;
|
||||
width: 580px;
|
||||
box-sizing: border-box;
|
||||
padding: 0 32px 0;
|
||||
|
||||
|
||||
.search {
|
||||
/deep/ .ant-input {
|
||||
color: #fff;
|
||||
background: rgba(5, 38, 93, 1);
|
||||
border: 1.28px solid rgba(35, 209, 232, 1);
|
||||
&:hover {
|
||||
color: #fff;
|
||||
background: rgba(5, 38, 93, 1);
|
||||
border: 1.28px solid rgba(35, 209, 232, 1);
|
||||
|
||||
}
|
||||
}
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
box-sizing: border-box;
|
||||
padding: 28px 16px;
|
||||
|
||||
background: rgba(24, 131, 201, 0.2);
|
||||
|
||||
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 23.17px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
line-height: 32px;
|
||||
|
||||
.input {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.liebiao {
|
||||
height: 100%;
|
||||
|
||||
}
|
||||
|
||||
.car-preview {
|
||||
width: 100%;
|
||||
height: 260px;
|
||||
}
|
||||
|
||||
.desc {
|
||||
background: rgba(24, 131, 201, 0.2);
|
||||
border: 1px solid rgba(15, 81, 122, 1);
|
||||
}
|
||||
.table-content{
|
||||
padding-top: 20px;
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.video {
|
||||
height: 178px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
|
@ -0,0 +1,396 @@
|
|||
<!--峰煤监控系统-->
|
||||
<template>
|
||||
<new-bg>
|
||||
<flex-col>
|
||||
<system-title/>
|
||||
<ModuleContent padding="20px">
|
||||
<flex-col>
|
||||
<web2-title>清洁运输</web2-title>
|
||||
<ModuleContent padding="0 20px 20px">
|
||||
<BFC>
|
||||
<div class="sou-suo-kuang" slot="right">
|
||||
<ModuleContent2 bg padding="20px">
|
||||
<flex-col>
|
||||
<div class="search">
|
||||
<BFC>
|
||||
<span slot="left"> 车牌号:</span>
|
||||
<div slot="center" class="input">
|
||||
<a-input placeholder="请输入"/>
|
||||
</div>
|
||||
</BFC>
|
||||
</div>
|
||||
<ModuleContent padding="0">
|
||||
<flex-col>
|
||||
<web3-title>门禁详情</web3-title>
|
||||
<ModuleContent padding="0">
|
||||
<flex-col>
|
||||
<img src="" alt="" class="car-preview">
|
||||
<butgroup2>
|
||||
<cus-button2 flex>进出场抓拍图</cus-button2>
|
||||
<cus-button2>行驶证-正面</cus-button2>
|
||||
<cus-button2>行驶证-反面</cus-button2>
|
||||
<cus-button2>环保清单</cus-button2>
|
||||
</butgroup2>
|
||||
<ModuleContent padding="20px 27px" class="desc">
|
||||
<cus-desc :columns="columns"></cus-desc>
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
</ModuleContent2>
|
||||
</div>
|
||||
<div class="liebiao" slot="center">
|
||||
<flex-col>
|
||||
<div style="height: 144px;width: 100%;">
|
||||
<ModuleContent2 bg bg-str :border="false">
|
||||
<butgroup2 style="height: 100%;">
|
||||
<ModuleContent2 bg bg-color border>
|
||||
<miaoshu title="进场车辆" value="111" color="rgba(42, 207, 255, 1)"></miaoshu>
|
||||
</ModuleContent2>
|
||||
|
||||
<ModuleContent2 bg bg-color border style="margin-left: 16px;">
|
||||
<miaoshu title="出场车辆" value="111" color="rgba(255, 171, 87, 1)"></miaoshu>
|
||||
</ModuleContent2>
|
||||
|
||||
<ModuleContent2 bg bg-color border style="margin-left: 16px;">
|
||||
<miaoshu title="在场车辆" value="111" color="rgba(122, 175, 255, 1)"></miaoshu>
|
||||
</ModuleContent2>
|
||||
|
||||
<ModuleContent2 bg bg-color border style="margin-left: 16px;">
|
||||
<miaoshu title="新增车辆" value="111" color="rgba(76, 243, 129, 1)"></miaoshu>
|
||||
</ModuleContent2>
|
||||
</butgroup2>
|
||||
</ModuleContent2>
|
||||
</div>
|
||||
<web3-title>门禁监控</web3-title>
|
||||
<ModuleContent padding="20px 0" ref="module">
|
||||
<div class="table-content">
|
||||
<peak-custom-table :table-title="columnsForTable" :data-source="dataSource" :limit-move-num="11"/>
|
||||
</div>
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
|
||||
|
||||
</div>
|
||||
</BFC>
|
||||
</ModuleContent>
|
||||
<butgroup>
|
||||
<cus-button>厂区车辆台账</cus-button>
|
||||
<cus-button>清洁运输趋势</cus-button>
|
||||
<cus-button>磅秤台账</cus-button>
|
||||
<cus-button>门禁监控</cus-button>
|
||||
</butgroup>
|
||||
</flex-col>
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
</new-bg>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapActions, mapState} from "vuex";
|
||||
import SystemTitle from "../../components/smallCommon/SystemTitle.vue";
|
||||
import FlexCol from "../../components/FlexCol.vue";
|
||||
import ModuleContent from "../../components/ModuleContent.vue";
|
||||
import Web2Title from "../../components/smallCommon/Web2Title.vue";
|
||||
import NewBg from "../../components/NewBg.vue";
|
||||
import BFC from "../../components/BFC.vue";
|
||||
import Butgroup from "../../components/smallCommon/butgroup.vue";
|
||||
import CusButton from "../../components/smallCommon/CusButton.vue";
|
||||
import Web3Title from "../../components/smallCommon/Web3Title.vue";
|
||||
import CusButton2 from "../../components/smallCommon/CusButton2.vue";
|
||||
import Butgroup2 from "../../components/smallCommon/butgroup2.vue";
|
||||
import CusDesc from "../../components/smallCommon/CusDesc.vue";
|
||||
import ModuleContent2 from "../../components/smallCommon/ModuleContent2.vue";
|
||||
import Miaoshu from "../../components/smallCommon/miaoshu.vue";
|
||||
import bgStr from '../../assets/images/new/矩形 17.png'
|
||||
import PeakCustomTable from "@/components/peak-coal-monitoring/PeakCustomTable2";
|
||||
|
||||
export default {
|
||||
name: "PeakCoalMonitoring",
|
||||
components: {
|
||||
Miaoshu,
|
||||
ModuleContent2,
|
||||
CusDesc,
|
||||
Butgroup2,
|
||||
CusButton2,
|
||||
Web3Title,
|
||||
CusButton,
|
||||
Butgroup,
|
||||
BFC,
|
||||
Web2Title,
|
||||
NewBg,
|
||||
ModuleContent,
|
||||
FlexCol,
|
||||
SystemTitle,
|
||||
PeakCustomTable
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
bgStr,
|
||||
tableH: 513,
|
||||
|
||||
dataSource: [
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
}
|
||||
],
|
||||
columnsForTable: [
|
||||
{
|
||||
title: '设备掉线',
|
||||
dataIndex: 'deviceName',
|
||||
width: '33.333%'
|
||||
},
|
||||
{
|
||||
title: '故障异常',
|
||||
dataIndex: 'errorName',
|
||||
width: '33.333%'
|
||||
},
|
||||
{
|
||||
title: '异常报警',
|
||||
dataIndex: 'errorImg',
|
||||
width: '33.333%'
|
||||
}
|
||||
],
|
||||
columns: [
|
||||
{
|
||||
title: '排放标准',
|
||||
key: 'bz',
|
||||
},
|
||||
{
|
||||
title: 'VIN',
|
||||
key: 'vin',
|
||||
},
|
||||
{
|
||||
title: '发动机号',
|
||||
key: 'fdjh',
|
||||
},
|
||||
{
|
||||
title: '注册日期',
|
||||
key: 'zcr',
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
title: state => state.system.title,
|
||||
})
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
const win = window.top
|
||||
this.$http.get('http://101.43.201.20:5000/api/Home/view').then(({data}) => {
|
||||
win.document.title = data.home.title
|
||||
this.setTitle(data.home.title)
|
||||
this.setInfo(data)
|
||||
})
|
||||
|
||||
if (this.$refs.module) {
|
||||
const offsetHeight = this.$refs.module.$el.offsetHeight - 40
|
||||
this.tableH = offsetHeight
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
...mapActions('system', ['setTitle', 'setInfo']),
|
||||
/**
|
||||
* 图层构造器
|
||||
* @param { object } props
|
||||
* @param { 'cems' | 'sdjcy' | 'zkz' | 'gbz' | 'ssc' | 'shisc' | 'wz' | 'jkd' } props.layerType 图层类型 jkd(监控点) wz(微站) sdjcy(深度检测仪) zkz(质控站) gbz(国标站) ssc(洒水车) shisc(湿扫车) cems(CEMS)
|
||||
* @param { object } props.data 图层类型
|
||||
*/
|
||||
pointClick({layerType, data}) {
|
||||
// todo
|
||||
if (layerType == 'wz') {
|
||||
this.$open(WZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'middle',
|
||||
title: '微站',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'sdjcy') {
|
||||
this.$open(SDJCYDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '深度检测仪',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'zkz') {
|
||||
this.$open(ZKZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '质控站',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'gbz') {
|
||||
this.$open(GBZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '国标站',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'cems') {
|
||||
this.$open(CEMSDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: 'CEMS',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'jkd') {
|
||||
this.$open(pointDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '监控点',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
body, html, #__nuxt, #__layout {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background: #09151F;
|
||||
}
|
||||
|
||||
.list-enter-active, .list-leave-active {
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
.list-enter, .list-leave-to
|
||||
/* .list-leave-active for below version 2.1.8 */
|
||||
{
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
}
|
||||
</style>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "../../assets/styles/mixin";
|
||||
|
||||
.sou-suo-kuang {
|
||||
height: 100%;
|
||||
width: 580px;
|
||||
box-sizing: border-box;
|
||||
padding-left: 20px;
|
||||
|
||||
|
||||
.search {
|
||||
/deep/ .ant-input {
|
||||
color: #fff;
|
||||
background: rgba(5, 38, 93, 1);
|
||||
border: 1.28px solid rgba(35, 209, 232, 1);
|
||||
&:hover {
|
||||
color: #fff;
|
||||
background: rgba(5, 38, 93, 1);
|
||||
border: 1.28px solid rgba(35, 209, 232, 1);
|
||||
|
||||
}
|
||||
}
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
box-sizing: border-box;
|
||||
padding: 28px 16px;
|
||||
|
||||
background: rgba(24, 131, 201, 0.2);
|
||||
|
||||
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 23.17px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
line-height: 32px;
|
||||
|
||||
.input {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.liebiao {
|
||||
height: 100%;
|
||||
|
||||
}
|
||||
|
||||
.car-preview {
|
||||
width: 100%;
|
||||
height: 260px;
|
||||
}
|
||||
|
||||
.desc {
|
||||
background: rgba(24, 131, 201, 0.2);
|
||||
border: 1px solid rgba(15, 81, 122, 1);
|
||||
}
|
||||
.table-content{
|
||||
padding-top: 20px;
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
|
@ -0,0 +1,392 @@
|
|||
<!--峰煤监控系统-->
|
||||
<template>
|
||||
<new-bg>
|
||||
<div class="center-panel">
|
||||
<Map type="middle" @pointClick="pointClick" />
|
||||
</div>
|
||||
<flex-col class="main">
|
||||
<system-title/>
|
||||
<ModuleContent none-event padding="0 20px 20px">
|
||||
<BFC>
|
||||
<flex-col slot="left" width="412">
|
||||
<web2-title>环境治理</web2-title>
|
||||
<ModuleContent padding="20px 0" height="218">
|
||||
<div class="video"></div>
|
||||
</ModuleContent>
|
||||
<ModuleContent2 border bg bg-color padding="0 20px 20px">
|
||||
<flex-col>
|
||||
<web3-title>视频列表</web3-title>
|
||||
<ModuleContent padding="0" height="160"></ModuleContent>
|
||||
<web3-title>日志信息</web3-title>
|
||||
<ModuleContent padding="0"></ModuleContent>
|
||||
</flex-col>
|
||||
</ModuleContent2>
|
||||
</flex-col>
|
||||
<flex-col slot="right" width="412">
|
||||
<ModuleContent2 border bg bg-color padding="0 20px 20px">
|
||||
<web3-title>雾炮</web3-title>
|
||||
</ModuleContent2>
|
||||
<split height="20px"></split>
|
||||
<ModuleContent2 border bg bg-color padding="0 20px 20px">
|
||||
<web3-title>雾帘</web3-title>
|
||||
</ModuleContent2>
|
||||
<split height="20px"></split>
|
||||
<ModuleContent2 border bg bg-color padding="0 20px 20px">
|
||||
<web3-title>天雾</web3-title>
|
||||
</ModuleContent2>
|
||||
</flex-col>
|
||||
<div class="center" slot="center">
|
||||
<butgroup :bg="false">
|
||||
<cus-button3>一号焦炭料棚</cus-button3>
|
||||
<cus-button3>二号焦炭料棚</cus-button3>
|
||||
<cus-button3>三号焦炭料棚</cus-button3>
|
||||
<cus-button3>四号焦炭料棚</cus-button3>
|
||||
<cus-button3>五号焦炭料棚</cus-button3>
|
||||
</butgroup>
|
||||
<ModuleContent2 border bg bg-color padding="0 20px 20px" height="301" class="real-data">
|
||||
<web3-title>实时数据</web3-title>
|
||||
</ModuleContent2>
|
||||
</div>
|
||||
</BFC>
|
||||
</ModuleContent>
|
||||
</flex-col>
|
||||
</new-bg>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapActions, mapState} from "vuex";
|
||||
import SystemTitle from "../../components/smallCommon/SystemTitle.vue";
|
||||
import FlexCol from "../../components/FlexCol.vue";
|
||||
import ModuleContent from "../../components/ModuleContent.vue";
|
||||
import Web2Title from "../../components/smallCommon/Web2Title.vue";
|
||||
import NewBg from "../../components/NewBg.vue";
|
||||
import BFC from "../../components/BFC.vue";
|
||||
import Butgroup from "../../components/smallCommon/butgroup.vue";
|
||||
import CusButton from "../../components/smallCommon/CusButton.vue";
|
||||
import Web3Title from "../../components/smallCommon/Web3Title.vue";
|
||||
import CusButton2 from "../../components/smallCommon/CusButton2.vue";
|
||||
import Butgroup2 from "../../components/smallCommon/butgroup2.vue";
|
||||
import CusDesc from "../../components/smallCommon/CusDesc.vue";
|
||||
import ModuleContent2 from "../../components/smallCommon/ModuleContent2.vue";
|
||||
import Miaoshu from "../../components/smallCommon/miaoshu.vue";
|
||||
import bgStr from '../../assets/images/new/矩形 17.png'
|
||||
import PeakCustomTable from "@/components/peak-coal-monitoring/PeakCustomTable2";
|
||||
import Split from "../../components/smallCommon/Split.vue";
|
||||
import CusButton3 from "../../components/smallCommon/CusButton3.vue";
|
||||
|
||||
export default {
|
||||
name: "PeakCoalMonitoring",
|
||||
components: {
|
||||
CusButton3,
|
||||
Split,
|
||||
Miaoshu,
|
||||
ModuleContent2,
|
||||
CusDesc,
|
||||
Butgroup2,
|
||||
CusButton2,
|
||||
Web3Title,
|
||||
CusButton,
|
||||
Butgroup,
|
||||
BFC,
|
||||
Web2Title,
|
||||
NewBg,
|
||||
ModuleContent,
|
||||
FlexCol,
|
||||
SystemTitle,
|
||||
PeakCustomTable
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
bgStr,
|
||||
tableH: 513,
|
||||
|
||||
dataSource: [
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
},
|
||||
{
|
||||
deviceName: '高炉',
|
||||
errorName: '异常',
|
||||
errorImg: '红灯'
|
||||
}
|
||||
],
|
||||
columnsForTable: [
|
||||
{
|
||||
title: '设备掉线',
|
||||
dataIndex: 'deviceName',
|
||||
width: '33.333%'
|
||||
},
|
||||
{
|
||||
title: '故障异常',
|
||||
dataIndex: 'errorName',
|
||||
width: '33.333%'
|
||||
},
|
||||
{
|
||||
title: '异常报警',
|
||||
dataIndex: 'errorImg',
|
||||
width: '33.333%'
|
||||
}
|
||||
],
|
||||
columns: [
|
||||
{
|
||||
title: '排放标准',
|
||||
key: 'bz',
|
||||
},
|
||||
{
|
||||
title: 'VIN',
|
||||
key: 'vin',
|
||||
},
|
||||
{
|
||||
title: '发动机号',
|
||||
key: 'fdjh',
|
||||
},
|
||||
{
|
||||
title: '注册日期',
|
||||
key: 'zcr',
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
title: state => state.system.title,
|
||||
})
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
const win = window.top
|
||||
this.$http.get('http://101.43.201.20:5000/api/Home/view').then(({data}) => {
|
||||
win.document.title = data.home.title
|
||||
this.setTitle(data.home.title)
|
||||
this.setInfo(data)
|
||||
})
|
||||
|
||||
if (this.$refs.module) {
|
||||
const offsetHeight = this.$refs.module.$el.offsetHeight - 40
|
||||
this.tableH = offsetHeight
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
...mapActions('system', ['setTitle', 'setInfo']),
|
||||
/**
|
||||
* 图层构造器
|
||||
* @param { object } props
|
||||
* @param { 'cems' | 'sdjcy' | 'zkz' | 'gbz' | 'ssc' | 'shisc' | 'wz' | 'jkd' } props.layerType 图层类型 jkd(监控点) wz(微站) sdjcy(深度检测仪) zkz(质控站) gbz(国标站) ssc(洒水车) shisc(湿扫车) cems(CEMS)
|
||||
* @param { object } props.data 图层类型
|
||||
*/
|
||||
pointClick({layerType, data}) {
|
||||
// todo
|
||||
if (layerType == 'wz') {
|
||||
this.$open(WZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'middle',
|
||||
title: '微站',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'sdjcy') {
|
||||
this.$open(SDJCYDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '深度检测仪',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'zkz') {
|
||||
this.$open(ZKZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '质控站',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'gbz') {
|
||||
this.$open(GBZDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '国标站',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'cems') {
|
||||
this.$open(CEMSDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: 'CEMS',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
} else if (layerType === 'jkd') {
|
||||
this.$open(pointDialog, {
|
||||
type: 'middle'
|
||||
}, {
|
||||
screenType: 'custommiddle',
|
||||
title: '监控点',
|
||||
width: 1100,
|
||||
onClose() {
|
||||
console.log(1);
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
body, html, #__nuxt, #__layout {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background: #09151F;
|
||||
}
|
||||
|
||||
.list-enter-active, .list-leave-active {
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
.list-enter, .list-leave-to
|
||||
/* .list-leave-active for below version 2.1.8 */
|
||||
{
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
}
|
||||
</style>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "../../assets/styles/mixin";
|
||||
.center {
|
||||
padding: 0 20px;
|
||||
position: relative;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
.real-data {
|
||||
pointer-events: auto;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: calc(100% - 40px);
|
||||
}
|
||||
}
|
||||
.center-panel{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
}
|
||||
.main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
}
|
||||
.sou-suo-kuang {
|
||||
height: 100%;
|
||||
width: 580px;
|
||||
box-sizing: border-box;
|
||||
padding: 0 32px 0;
|
||||
|
||||
|
||||
.search {
|
||||
/deep/ .ant-input {
|
||||
color: #fff;
|
||||
background: rgba(5, 38, 93, 1);
|
||||
border: 1.28px solid rgba(35, 209, 232, 1);
|
||||
&:hover {
|
||||
color: #fff;
|
||||
background: rgba(5, 38, 93, 1);
|
||||
border: 1.28px solid rgba(35, 209, 232, 1);
|
||||
|
||||
}
|
||||
}
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
box-sizing: border-box;
|
||||
padding: 28px 16px;
|
||||
|
||||
background: rgba(24, 131, 201, 0.2);
|
||||
|
||||
|
||||
/** 文本1 */
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0px;
|
||||
line-height: 23.17px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
line-height: 32px;
|
||||
|
||||
.input {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.liebiao {
|
||||
height: 100%;
|
||||
|
||||
}
|
||||
|
||||
.car-preview {
|
||||
width: 100%;
|
||||
height: 260px;
|
||||
}
|
||||
|
||||
.desc {
|
||||
background: rgba(24, 131, 201, 0.2);
|
||||
border: 1px solid rgba(15, 81, 122, 1);
|
||||
}
|
||||
.table-content{
|
||||
padding-top: 20px;
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.video {
|
||||
height: 178px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
|
@ -3,7 +3,13 @@ module.exports = {
|
|||
plugins: [
|
||||
require('./buildPlugins/pxresize')({
|
||||
scale: 0.5,
|
||||
ignore: ['manager', 'node_modules','peak-coal-monitoring']
|
||||
ignore: [
|
||||
'manager',
|
||||
'node_modules',
|
||||
'peak-coal-monitoring',
|
||||
'web',
|
||||
'smallCommon'
|
||||
]
|
||||
})
|
||||
]
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,15 +1,22 @@
|
|||
export const state = {
|
||||
title: ''
|
||||
title: '',
|
||||
info: {}
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
setTitle (state, title) {
|
||||
state.title = title
|
||||
},
|
||||
setInfo (state, info) {
|
||||
state.info = info
|
||||
}
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
setTitle ({ commit }, title) {
|
||||
commit('setTitle', title)
|
||||
},
|
||||
setInfo ({ commit }, info) {
|
||||
commit('setInfo', info)
|
||||
}
|
||||
}
|
||||
|
|
|
|||