Browse Source

大屏

master
xuhuajiao 2 months ago
parent
commit
0c5b4ca32e
  1. BIN
      src/assets/fonts/DingTalk_JinBuTi_Regular.ttf
  2. BIN
      src/assets/fonts/LianMengQiYiLuShuaiZhengRuiHei.ttf
  3. 6
      src/assets/fonts/fonts.css
  4. 20
      src/assets/icons/svg/lixian.svg
  5. 18
      src/assets/icons/svg/zaixian.svg
  6. BIN
      src/assets/images/logo-2.png
  7. 2
      src/main.js
  8. 6
      src/views/components/AccessDoor.vue
  9. 6
      src/views/components/WarehouseWarning.vue
  10. 2
      src/views/components/echarts/lendAcross.vue
  11. 1605
      src/views/environmentalScreen/index-1219.vue
  12. 2
      src/views/environmentalScreen/index.js
  13. 470
      src/views/environmentalScreen/index.vue
  14. 2
      src/views/environmentalScreen/module/catePie.vue

BIN
src/assets/fonts/DingTalk_JinBuTi_Regular.ttf

BIN
src/assets/fonts/LianMengQiYiLuShuaiZhengRuiHei.ttf

6
src/assets/fonts/fonts.css

@ -0,0 +1,6 @@
@font-face {
font-family: "LianMengQiYiLuShuaiZhengRuiHei";
src: url('LianMengQiYiLuShuaiZhengRuiHei.ttf');
font-weight: normal;
font-style: normal;
}

20
src/assets/icons/svg/lixian.svg

@ -0,0 +1,20 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg class="icon" width="256px" height="249.19px" viewBox="0 0 1052 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
<!-- 定义渐变:和湿度图标一致的浅蓝到深蓝渐变 -->
<defs>
<linearGradient id="mainGradient" gradientUnits="userSpaceOnUse" x1="200" y1="800" x2="800" y2="200">
<stop offset="0" style="stop-color:#C8E4FF"/>
<stop offset="0.632" style="stop-color:#339CFF"/>
<stop offset="1" style="stop-color:#339CFF"/>
</linearGradient>
</defs>
<!-- 原绿色路径替换为渐变填充 -->
<path d="M125.866667 510.008889v249.713778a28.444444 28.444444 0 0 0 28.444444 28.444444h418.616889v70.428445H140.8a85.333333 85.333333 0 0 1-85.333333-85.333334V208.384a85.333333 85.333333 0 0 1 85.333333-85.333333h732.046222a85.333333 85.333333 0 0 1 85.333334 85.333333v231.224889a70.428444 70.428444 0 0 1-70.428445 70.428444l3.185778-0.113777 0.028444 0.113777H125.866667z m156.871111 92.842667v64.028444H218.737778v-64h64z m291.328 0v64.028444h-192.085334v-64h192.085334zM859.306667 193.479111H154.339556a28.444444 28.444444 0 0 0-28.444445 28.444445l-0.028444 220.871111H887.751111V221.923556a28.444444 28.444444 0 0 0-25.116444-28.245334l-3.328-0.199111zM279.552 311.552v64.028444H215.523556v-64h64z m483.356444 0v64.028444H378.794667v-64H762.88z"
fill="url(#mainGradient)"/>
<!-- 原黄色路径替换为相同渐变(也可调整渐变参数区分) -->
<path d="M858.965333 570.851556a192.056889 192.056889 0 1 1 0 384.142222 192.056889 192.056889 0 0 1 0-384.142222z m0 70.428444a121.656889 121.656889 0 1 0 0 243.285333 121.656889 121.656889 0 0 0 0-243.285333z m0 153.656889a32 32 0 1 1 0 64 32 32 0 0 1 0-64z m32-128.056889v96.028444h-64v-96.028444h64z"
fill="url(#mainGradient)"/>
</svg>

18
src/assets/icons/svg/zaixian.svg

@ -0,0 +1,18 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg class="icon" width="256px" height="238.96px" viewBox="0 0 1097 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
<!-- 定义渐变:与湿度图标一致的浅蓝到深蓝渐变 -->
<defs>
<linearGradient id="mainGradient" gradientUnits="userSpaceOnUse" x1="100" y1="900" x2="900" y2="100">
<stop offset="0" style="stop-color:#C8E4FF"/>
<stop offset="0.632" style="stop-color:#339CFF"/>
<stop offset="1" style="stop-color:#339CFF"/>
</linearGradient>
</defs>
<!-- 第一个路径:替换原灰色#707070为渐变填充 -->
<path fill="url(#mainGradient)" d="M1003.300571 316.123429V69.485714H69.266286v246.637715h934.034285zM16.603429 654.336C9.581714 643.657143 9.581714 633.124571 6.070857 622.592V376.027429c0-10.605714 3.510857-21.211429 7.021714-31.744-3.510857-7.021714-3.510857-17.554286-7.021714-28.16V69.485714A59.245714 59.245714 0 0 1 65.828571 9.654857h934.034286a59.245714 59.245714 0 0 1 59.684572 59.830857v246.637715c0 10.605714-3.510857 21.138286-7.021715 31.744 7.021714 10.532571 7.021714 21.138286 7.021715 31.670857v246.637714c0 10.532571-3.510857 21.138286-7.021715 31.670857 7.021714 10.605714 7.021714 21.211429 7.021715 31.744v246.564572a59.245714 59.245714 0 0 1-59.684572 59.904H69.266286a59.245714 59.245714 0 0 1-59.684572-59.904V689.590857c-3.510857-17.627429 0-24.722286 7.021715-35.254857z m986.697142 278.308571V686.006857H69.266286v246.637714h934.034285z m0-310.052571V376.027429H69.266286v246.564571h934.034285z"/>
<!-- 第二个路径:替换原灰色#707070为渐变填充 -->
<path fill="url(#mainGradient)" d="M160.548571 192.804571c17.554286 0 31.597714-14.043429 31.597715-31.670857a31.524571 31.524571 0 0 0-31.597715-31.744 31.524571 31.524571 0 0 0-31.597714 31.744c0 17.554286 14.043429 31.670857 31.597714 31.670857z m122.88 0c17.554286 0 31.670857-14.043429 31.670858-31.670857a31.524571 31.524571 0 0 0-31.597715-31.744 31.524571 31.524571 0 0 0-31.597714 31.744c0 17.554286 14.043429 31.670857 31.597714 31.670857z m291.474286-31.670857c0-17.627429 14.043429-31.744 31.597714-31.744h309.028572c17.554286 0 31.597714 14.116571 31.597714 31.744 0 17.554286-14.043429 31.670857-31.597714 31.670857H606.500571c-21.065143 0-31.597714-14.043429-31.597714-31.670857zM160.548571 499.346286c17.554286 0 31.597714-14.116571 31.597715-31.744a31.524571 31.524571 0 0 0-31.597715-31.670857 31.524571 31.524571 0 0 0-31.597714 31.670857c0 17.627429 14.043429 31.744 31.597714 31.744z m122.88 0c17.554286 0 31.670857-14.116571 31.670858-31.744a31.524571 31.524571 0 0 0-31.597715-31.670857 31.524571 31.524571 0 0 0-31.597714 31.670857c0 17.627429 14.043429 31.744 31.597714 31.744zM574.902857 471.04c0-17.554286 14.043429-31.670857 31.597714-31.670857h309.028572c17.554286 0 31.597714 14.043429 31.597714 31.670857s-14.043429 31.744-31.597714 31.744H606.500571c-21.065143-3.510857-31.597714-17.627429-31.597714-31.744z m-414.354286 338.212571c17.554286 0 31.597714-14.043429 31.597715-31.670857a31.524571 31.524571 0 0 0-31.597715-31.744 31.524571 31.524571 0 0 0-31.597714 31.744c0 17.554286 14.043429 31.670857 31.597714 31.670857z m122.88 0c17.554286 0 31.670857-14.043429 31.670858-31.670857a31.524571 31.524571 0 0 0-31.597715-31.744 31.524571 31.524571 0 0 0-31.597714 31.744c0 17.554286 14.043429 31.670857 31.597714 31.670857z m291.474286-31.670857c0-17.627429 14.043429-31.744 31.597714-31.744h309.028572c17.554286 0 31.597714 14.116571 31.597714 31.744 0 17.554286-14.043429 31.670857-31.597714 31.670857H606.500571c-21.065143 0-31.597714-14.043429-31.597714-31.670857z"/>
</svg>

BIN
src/assets/images/logo-2.png

After

Width: 1024  |  Height: 1024  |  Size: 288 KiB

2
src/main.js

@ -34,6 +34,8 @@ import './assets/icons' // icon
import './router/index' // permission control
import 'echarts-gl'
import './assets/fonts/fonts.css'
// 定义补零工具函数
const padZero = (num) => {
// 先转为数字,防止传入字符串,再补零

6
src/views/components/AccessDoor.vue

@ -8,17 +8,17 @@
</p>
</h3>
<el-table ref="table" style="min-width: 100%;" :height="height" :data="tableData" class="warehose-el-table" stripe @row-click="toPage">
<el-table-column prop="time" label="时间" min-width="70">
<el-table-column prop="time" align="center" label="时间" min-width="80">
<template slot-scope="scope">
<div>{{ scope.row.time | parseTime }}</div>
</template>
</el-table-column>
<el-table-column label="姓名" :show-overflow-tooltip="true" min-width="40">
<el-table-column label="姓名" align="center" :show-overflow-tooltip="true" width="50">
<template slot-scope="scope">
<div>{{ scope.row.name }}</div>
</template>
</el-table-column>
<el-table-column prop="minorName" label="说明" align="center" :show-overflow-tooltip="true" min-width="65" />
<el-table-column prop="minorName" label="说明" align="center" :show-overflow-tooltip="true" min-width="80" />
</el-table>
</div>
</template>

6
src/views/components/WarehouseWarning.vue

@ -9,13 +9,13 @@
</h3>
<!--表格渲染-->
<el-table ref="table" style="min-width: 100%;" :width="width" :height="height" :data="tableData" class="warehose-el-table" :row-class-name="rowBgColor" @row-click="toPage">
<el-table-column prop="TS" label="时间" min-width="70">
<el-table-column prop="TS" label="时间" align="center" min-width="80">
<template slot-scope="scope">
<span v-if="scope.row.TS">{{ scope.row.TS | formatTs }}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="设备" :show-overflow-tooltip="true" min-width="60" />
<el-table-column prop="value" label="警情" align="center" :show-overflow-tooltip="true" min-width="60" />
<el-table-column prop="name" label="设备" align="center" :show-overflow-tooltip="true" width="80" />
<el-table-column prop="value" label="警情" align="center" :show-overflow-tooltip="true" min-width="50" />
</el-table>
</div>
</template>

2
src/views/components/echarts/lendAcross.vue

@ -102,7 +102,7 @@ export default {
show: true,
textStyle: {
color: '#fff',
fontSize: '14'
fontSize: '16'
}
},
axisLine: {// 线

1605
src/views/environmentalScreen/index-1219.vue
File diff suppressed because it is too large
View File

2
src/views/environmentalScreen/index.js

@ -1,4 +1,4 @@
export const allDeviceData = [{ 'id': 1, 'ParentID': 0, 'SubClass': 0, 'IP': '', 'Name': '环境监控', 'NetStatus': 1, 'SUBTYPE': '1' }, { 'id': 11303, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.101:5005', 'Name': '温湿度', 'NetStatus': 1, 'SUBTYPE': '17' }, { 'id': 11355, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.102:5003:3', 'Name': '环境监测3_3', 'NetStatus': 1, 'SUBTYPE': '25' }, { 'id': 11379, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.102:5004:2', 'Name': '环境监测2_2', 'NetStatus': 1, 'SUBTYPE': '25' }, { 'id': 11403, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.102:5005', 'Name': '环境监测1', 'NetStatus': 1, 'SUBTYPE': '25' }, { 'id': 11440, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.101:5004', 'Name': '壁挂升降空气净化机', 'NetStatus': 1, 'SUBTYPE': '11' }, { 'id': 11486, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.101:5003', 'Name': '恒湿净化一体机', 'NetStatus': 1, 'SUBTYPE': '11' }, { 'id': 11519, 'ParentID': 1, 'SubClass': 0, 'IP': '', 'Name': '空调红外控制', 'NetStatus': 1, 'SUBTYPE': '1' }, { 'id': 11520, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.101:6003', 'Name': '开关量', 'NetStatus': 0, 'SUBTYPE': '11' }]
export const allDeviceData = [{ 'id': 1, 'ParentID': 0, 'SubClass': 0, 'IP': '', 'Name': '环境监控', 'NetStatus': 1, 'SUBTYPE': '1' }, { 'id': 11303, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.101:5005', 'Name': '温湿度', 'NetStatus': 1, 'SUBTYPE': '17' }, { 'id': 11355, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.102:5003:3', 'Name': '环境监测3_3', 'NetStatus': 1, 'SUBTYPE': '25' }, { 'id': 11379, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.102:5004:2', 'Name': '环境监测2_2', 'NetStatus': 1, 'SUBTYPE': '25' }, { 'id': 11403, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.102:5005', 'Name': '环境监测1', 'NetStatus': 1, 'SUBTYPE': '25' }, { 'id': 11440, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.101:5004', 'Name': '空气净化机', 'NetStatus': 1, 'SUBTYPE': '11' }, { 'id': 11486, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.101:5003', 'Name': '恒湿净化机', 'NetStatus': 1, 'SUBTYPE': '11' }, { 'id': 11519, 'ParentID': 1, 'SubClass': 0, 'IP': '', 'Name': '空调红外控制', 'NetStatus': 1, 'SUBTYPE': '1' }, { 'id': 11520, 'ParentID': 1, 'SubClass': 0, 'IP': '192.168.99.101:6003', 'Name': '环控设备监测', 'NetStatus': 0, 'SUBTYPE': '11' }]
export const mockIpData = {
// 温湿度

470
src/views/environmentalScreen/index.vue

@ -1,6 +1,9 @@
<template>
<div class="env-container">
<div class="env-top-title" />
<div class="env-top-title">
<img src="@/assets/images/logo-2.png" alt="">
<p>档案库房智能管理系统</p>
</div>
<div class="header-date">
<div class="time">{{ nowDate.split(' ')[1] }}</div>
<div class="time-other">
@ -72,60 +75,47 @@
<svg-icon icon-class="pm25" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ avgData.pm25 }}</span>
<p class="msg-list-unit">PM2.5浓度 {{ avgData.pm25Unit }}</p>
<p class="msg-list-unit">PM2.5浓度 <br>{{ avgData.pm25Unit }}</p>
</div>
</li>
<li>
<svg-icon icon-class="pm10" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ avgData.pm10 }}</span>
<p class="msg-list-unit">PM10浓度 {{ avgData.pm10Unit }}</p>
<p class="msg-list-unit">PM10浓度 <br>{{ avgData.pm10Unit }}</p>
</div>
</li>
<li>
<svg-icon icon-class="voc" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ avgData.tvoc }}</span>
<p class="msg-list-unit">TVOC {{ avgData.tvocUnit }}</p>
<p class="msg-list-unit">TVOC <br>{{ avgData.tvocUnit }}</p>
</div>
</li>
<li>
<svg-icon icon-class="co2" class-name="msg-list-svg" />
<div class="msg-txt">
<span class="msg-list-num">{{ avgData.co2 }}</span>
<p class="msg-list-unit">二氧化碳 {{ avgData.co2Unit }}</p>
<p class="msg-list-unit">二氧化碳 <br>{{ avgData.co2Unit }}</p>
</div>
</li>
<li>
<svg-icon icon-class="jiaquan" class-name="msg-list-svg" style="font-size: 64px; margin-left: 10px;" />
<svg-icon icon-class="jiaquan" class-name="msg-list-svg" style="font-size: 68px;" />
<div class="msg-txt">
<span class="msg-list-num">{{ avgData.formaldehyde }}</span>
<p class="msg-list-unit">甲醛 {{ avgData.formaldehydeUnit }}</p>
<p class="msg-list-unit">甲醛 <br>{{ avgData.formaldehydeUnit }}</p>
</div>
</li>
</ul>
</div>
<!-- <div class="env-item container-wrap left-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3>
<svg-icon icon-class="jiankong" style="font-size: 18px; margin-right: 10px;" />视频监控
</h3>
<div style="height: calc(100% - 40px);">
<video id="video" controls autoplay muted width="100%" height="100%" />
</div>
</div> -->
<div class="env-item container-wrap left-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3>
<i class="iconfont icon-kongqizhiliangshuju" />设备联调状态
</h3>
<!-- :style="{
height: showScroll ? 'calc(100% - 40px)' : 'auto',
overflow: showScroll ? 'auto' : 'hidden'
}" -->
<ul class="leakage-list">
<div style="display: flex; justify-content: space-between; height: calc(100% - 40px);">
<ul v-if="hasValidData" class="leakage-list">
<li :class="alarmStatus.infrared === '告警' ? 'leakage-warn' : ''">
<p><i class="iconfont icon-shebei" />红外</p>
<span class="leakage-state-tip" />
@ -138,14 +128,19 @@
<p><i class="iconfont icon-shebei" />漏水</p>
<span class="leakage-state-tip" />
</li>
<!-- :style="{
width: liWidth,
height: liHeight,
marginRight: '12px',
marginBottom: '12px'
}" -->
</ul>
<ul class="leakage-list">
<li
v-for="item in validDisplayConfigData"
v-for="item in validDisplayConfigData.slice().sort((a, b) => {
//
if (!a.Name) return 1;
if (!b.Name) return -1;
//
if (a.Name.length === b.Name.length) {
return a.Name.localeCompare(b.Name, 'zh-CN', { numeric: true });
}
return a.Name.length - b.Name.length; // b.Name.length - a.Name.length
})"
:key="item.id"
:class="{ 'leakage-warn': item.NetStatus === 0 }"
>
@ -155,13 +150,12 @@
</ul>
</div>
</div>
</div>
<div class="env-main-middle">
<div class="env-3d">
<iframe id="myIframe" ref="myIframe" name="iframeMap" class="iframe_box" src="/web3D/index.html" frameborder="0" scrolling="no" style=" margin: 0 auto; display: block;" />
</div>
<div class="env-alarm-container">
<!-- 温湿度 -->
<ul v-if="hasValidData" class="env-alarm-list env-alarm-list-first">
<li>
<svg-icon icon-class="temperature" class-name="msg-list-svg" />
@ -178,7 +172,32 @@
</div>
</li>
</ul>
<el-row :gutter="20" class="panel-group" type="flex" justify="space-between">
<div
v-if="hasValidData"
class="air-quality"
:class="[
aqiStatus === '优' ? 'air-excellent' : '',
aqiStatus === '良' ? 'air-good' : '',
aqiStatus === '轻度污染' ? 'air-lightPollution' : '',
aqiStatus === '中度污染' ? 'air-mediumPollution' : '',
aqiStatus === '重度污染' ? 'air-heavyPollution' : '',
aqiStatus === '严重污染' ? 'air-severePollution' : ''
]"
>
<h3>空气质量指数</h3>
<div class="air-params">
<div class="air-left">
<span class="air-title">实时AQI</span>
<div class="air-result">{{ aqiValue }}</div>
</div>
<div class="air-right">
<span>空气质量</span>
<!-- <p>{{ aqiStatus }}</p> -->
<p class="air-status-text" v-html="formatAqiStatus" />
</div>
</div>
</div>
<!-- <el-row :gutter="10" class="panel-group" type="flex" justify="space-between">
<el-col class="card-panel-col">
<div class="card-panel zaixianshebei">
<div class="card-panel-icon-wrapper icon-shopping">
@ -207,154 +226,27 @@
</div>
</div>
</el-col>
</el-row>
<!-- 第二行其他指标 -->
<!-- <ul class="env-alarm-list-second">
<li :class="alarmStatus.infrared === '告警' ? 'li-warn' : ''">
<p>红外</p>
<span>{{ alarmStatus.infrared }}</span>
</li>
<li :class="alarmStatus.fire === '告警' ? 'li-warn' : ''">
<p>消防</p>
<span>{{ alarmStatus.fire }}</span>
</li>
<li :class="alarmStatus.waterLeak === '告警' ? 'li-warn' : ''">
<p>漏水</p>
<span>{{ alarmStatus.waterLeak }}</span>
</li>
</el-row> -->
<ul class="env-alarm-list env-alarm-list-first">
<li>
<p>PM2.5浓度</p>
<span>{{ avgData.pm25 }}{{ avgData.pm25Unit }}</span>
</li>
<li>
<p>TVOC</p>
<span>{{ avgData.tvoc }}{{ avgData.tvocUnit }}</span>
</li>
<li>
<p>PM10浓度</p>
<span>{{ avgData.pm10 }}{{ avgData.pm10Unit }}</span>
</li>
<li>
<p>二氧化碳</p>
<span>{{ avgData.co2 }}{{ avgData.co2Unit }}</span>
</li>
<li>
<p>甲醛</p>
<span>{{ avgData.formaldehyde }}{{ avgData.formaldehydeUnit }}</span>
</li>
</ul> -->
</div>
<div
v-if="hasValidData"
class="air-quality"
:class="[
aqiStatus === '优' ? 'air-excellent' : '',
aqiStatus === '良' ? 'air-good' : '',
aqiStatus === '轻度污染' ? 'air-lightPollution' : '',
aqiStatus === '中度污染' ? 'air-mediumPollution' : '',
aqiStatus === '重度污染' ? 'air-heavyPollution' : '',
aqiStatus === '严重污染' ? 'air-severePollution' : ''
]"
>
<h3>实时空气质量指数AQI</h3>
<div class="air-params">
<div class="air-left">
<span class="air-title">实时AQI</span>
<div class="air-result"><p>{{ aqiValue }}</p><span>(AQI-中国标准)</span></div>
</div>
<div class="air-right">
<span>空气质量为</span>
<p>{{ aqiStatus }}</p>
</div>
</div>
</div>
<!-- <ul class="env-alarm-list-second">
<li :class="alarmStatus.infrared === '告警' ? 'li-warn' : ''">
<p><i class="iconfont icon-weihubaojing" />红外</p>
<span>{{ alarmStatus.infrared }}</span>
</li>
<li :class="alarmStatus.fire === '告警' ? 'li-warn' : ''">
<p><i class="iconfont icon-weihubaojing" />消防</p>
<span>{{ alarmStatus.fire }}</span>
</li>
<li :class="alarmStatus.waterLeak === '告警' ? 'li-warn' : ''">
<p><i class="iconfont icon-weihubaojing" />漏水</p>
<span>{{ alarmStatus.waterLeak }}</span>
</li>
<li>
<p><i class="iconfont icon-weihubaojing" />PM2.5浓度</p>
<span>{{ avgData.pm25 }} {{ avgData.pm25Unit }}</span>
</li>
<li>
<p><i class="iconfont icon-weihubaojing" />TVOC</p>
<span>{{ avgData.tvoc }} {{ avgData.tvocUnit }}</span>
</li>
<li>
<p><i class="iconfont icon-weihubaojing" />PM10浓度</p>
<span>{{ avgData.pm10 }} {{ avgData.pm10Unit }}</span>
</li>
<li>
<p><i class="iconfont icon-weihubaojing" />二氧化碳</p>
<span>{{ avgData.co2 }} {{ avgData.co2Unit }}</span>
</li>
<li>
<p><i class="iconfont icon-weihubaojing" />甲醛</p>
<span>{{ avgData.formaldehyde }} {{ avgData.formaldehydeUnit }}</span>
</li>
</ul> -->
<div class="device-container">
<!-- container-wrap -->
<!-- <span class="right-top-line" />
<span class="left-bottom-line" />
<ul class="device-info">
<li>
<div class="row-item">
<div class="svg-box">
<svg-icon icon-class="zaixianshebei" class-name="card-panel-icon" />
</div>
<span>在线设备</span>
</div>
<div class="card-panel-text">
<count-to :start-val="0" :end-val="lineDevNum" :duration="3200" class="row-num" />
<svg-icon icon-class="zaixian" class-name="msg-list-svg" />
<div>
<!-- <span>{{ avgData.temperature }} </span> -->
<count-to v-if="getDeviceFlag" :start-val="0" :end-val="onlineDeviceNum" :duration="3200" class="card-panel-num" />
<div v-if="!getDeviceFlag" class="card-panel-text"><span class="card-panel-num">获取中...</span></div>
<p>在线设备</p>
</div>
</li>
<li>
<div class="row-item">
<div class="svg-box">
<svg-icon icon-class="lixianshebei" class-name="card-panel-icon" />
</div>
<span>离线设备</span>
</div>
<div class="card-panel-text">
<count-to :start-val="0" :end-val="offDevNum" :duration="3200" class="row-num" />
<svg-icon icon-class="lixian" class-name="msg-list-svg" />
<div>
<!-- <span>{{ avgData.humidity }}</span> -->
<count-to v-if="getDeviceFlag" :start-val="0" :end-val="offlineDeviceNum" :duration="3200" class="card-panel-num" />
<div v-if="!getDeviceFlag" class="card-panel-text"><span class="card-panel-num">获取中...</span></div>
<p>离线设备</p>
</div>
</li>
</ul> -->
<!-- <ul v-if="hasValidData" class="leakage-list new-leakage-list">
<li :class="alarmStatus.infrared === '告警' ? 'leakage-warn' : ''">
<p><i class="iconfont icon-shebei" />红外</p>
<span class="leakage-state-tip" />
</li>
<li :class="alarmStatus.fire === '告警' ? 'leakage-warn' : ''">
<p><i class="iconfont icon-shebei" />消防</p>
<span class="leakage-state-tip" />
</li>
<li :class="alarmStatus.waterLeak === '告警' ? 'leakage-warn' : ''">
<p><i class="iconfont icon-shebei" />漏水</p>
<span class="leakage-state-tip" />
</li>
<li
v-for="item in validDisplayConfigData"
:key="item.id"
:class="{ 'leakage-warn': item.NetStatus === 0 }"
>
<p><i class="iconfont icon-shebei" />{{ item.Name }}</p>
<span class="leakage-state-tip" />
</li>
</ul> -->
</ul>
</div>
</div>
<div class="env-main-right">
@ -502,9 +394,16 @@ export default {
}
},
computed: {
// validDisplayConfigData() {
// return this.allDisplayConfigData.filter(item => item && item.Name)
// },
//
formatAqiStatus() {
const status = this.aqiStatus
// 42<br/>
if (status && status.length === 4) {
return status.slice(0, 2) + '<br/>' + status.slice(2)
}
// 2/3
return status || ''
},
validDisplayConfigData() {
return this.allDisplayConfigData.filter(item => {
return item && item.Name && this.targetDeviceIps.includes(item.IP?.trim())
@ -536,10 +435,7 @@ export default {
}, 1000)
this.getDevice()
this.getTodayHikAlarmLog()
// this.alarmRefreshTimer = setInterval(() => {
// this.getTodayHikAlarmLog()
// }, 100000)
//
//
window.getIframeLoading = this.getIframeLoading
// this.allDisplayConfigData = allDeviceData
// this.handleDeviceIpList()
@ -948,6 +844,7 @@ export default {
finalAQI >= grade.aqiMin && finalAQI <= grade.aqiMax
)
this.aqiStatus = matchedGrade ? matchedGrade.level : '严重污染'
// this.aqiStatus = ''
console.log('IAQI-PM2.5:', iaqiPm25, 'IAQI-PM10:', iaqiPm10, '最终AQI:', finalAQI, '| 等级:', this.aqiStatus)
},
@ -967,10 +864,27 @@ export default {
height: calc(100vh);
background-color: #031435;
.env-top-title {
display: flex;
justify-content: center;
align-items: flex-start;
font-size: 44px;
letter-spacing: 0.1em;
text-align: center;
color: #fff;
width: calc(100vw);
height: 130px;
background: url("~@/assets/images/largeScreen/top-title.png") no-repeat 0 -14px;
background: url("~@/assets/images/largeScreen/top.png") no-repeat 0 -14px;
background-size: contain;
font-family: 'LianMengQiYiLuShuaiZhengRuiHei';
img{
display: block;
height: 50px;
margin-right: 10px;
margin-top: 26px;
}
p{
margin-top: 26px;
}
}
.header-date {
position: fixed;
@ -1008,6 +922,14 @@ export default {
height: calc(100vh - 138px);
overflow: hidden;
z-index: 9999;
::v-deep .el-table .el-table__body-wrapper td.el-table__cell,
::v-deep .el-table .el-table__fixed-right td.el-table__cell{
font-size: 15px !important;
}
::v-deep .el-table .el-table__header .el-table__cell .cell,
::v-deep .el-table.warehose-el-table .el-table__header .el-table__cell .cell{
font-size: 16px !important;
}
}
.env-main-middle {
position: relative;
@ -1035,7 +957,7 @@ export default {
position: relative;
display: inline-block;
padding: 10px 70px;
font-size: 16px;
font-size: 20px;
color: #fff;
.iconfont {
margin-right: 10px;
@ -1070,7 +992,7 @@ export default {
.env-3d {
position: fixed;
left: 0;
top: -40px;
top: 10px;
width: 100%;
// height: calc(100%);
height: 100%;
@ -1103,26 +1025,34 @@ export default {
border-radius: 4px;
}
.air-quality{
position: absolute;
bottom: 10px;
right: 20px;
// position: absolute;
// bottom: 10px;
// right: 20px;
// width: calc(100% / 3 - 100px);
width: calc(20% + 100px);
color: #fff;
padding: 20px 20px 10px 20px;
background-image: linear-gradient(to top, rgba(24, 176, 143, .5), rgba(24, 176, 143, 0));
margin: 0 20px 0 0;
padding: 10px;
height: 90px;
background-image: linear-gradient(to bottom, rgba(24, 176, 143, .5), rgba(24, 176, 143, 0));
border-radius: 5px;
z-index: 9999;
h3{
padding: 30px 0;
font-size: 18px;
padding: 0 0 6px 0;
}
.air-params{
display: flex;
justify-content: space-between;
align-items: last baseline;
align-items: center;
.air-left{
display: flex;
justify-content: flex-start;
align-items: center;
.air-title{
position: relative;
padding-left: 12px;
font-size: 14px;
font-size: 12px;
&::before{
content: "";
position: absolute;
@ -1132,82 +1062,112 @@ export default {
height: 6px;
background-color: #18B08F;
border-radius: 50%;
margin-top: -3px;
}
}
.air-result{
display: flex;
justify-content: space-between;
align-items: last baseline;
padding-top: 10px;
p{
font-size: 30px;
font-weight: 600;
padding: 0 6px 0 10px;
}
span{
display: block;
font-size: 12px;
opacity: .6;
}
padding: 0 0 0 10px;
// p{
// font-size: 22px;
// font-weight: 600;
// padding: 0 6px 0 10px;
// }
// span{
// display: block;
// font-size: 11px;
// opacity: .6;
// }
}
}
.air-right{
text-align: center;
display: flex;
justify-content: flex-start;
align-items: center;
span{
display: block;
font-size: 12px;
// padding: 8px 0;
margin-right: 6px;
}
p{
font-size: 18px;
font-size: 24px;
font-weight: 600;
padding: 10px 30px;
margin-top: 10px;
padding: 8px 15px;
background-color: rgba(24, 176, 143, .2);
border-radius: 5px;
margin-top: -4px;
}
}
}
//
&.air-excellent { // - 绿
background-image: linear-gradient(to top, rgba(40, 180, 40, .5), rgba(40, 180, 40, 0));
background-image: linear-gradient(to bottom, rgba(40, 180, 40, .5), rgba(40, 180, 40, 0));
.air-params .air-right p {
background-color: rgba(40, 180, 40, .2);
}
}
&.air-good { // -
background-image: linear-gradient(to top, rgba(255, 200, 0, .5), rgba(255, 200, 0, 0));
background-image: linear-gradient(to bottom, rgba(255, 200, 0, .5), rgba(255, 200, 0, 0));
.air-params .air-right p {
background-color: rgba(255, 200, 0, .2);
}
}
&.air-lightPollution { // -
background-image: linear-gradient(to top, rgba(255, 140, 0, .5), rgba(255, 140, 0, 0));
.air-params .air-right p {
h3{
padding: 0;
}
background-image: linear-gradient(to bottom, rgba(255, 140, 0, .5), rgba(255, 140, 0, 0));
.air-params {
margin-top: -6px;
.air-right p {
background-color: rgba(255, 140, 0, .2);
}
}
}
&.air-mediumPollution { // -
background-image: linear-gradient(to top, rgba(255, 0, 0, .5), rgba(255, 0, 0, 0));
.air-params .air-right p {
h3{
padding: 0;
}
background-image: linear-gradient(to bottom, rgba(255, 0, 0, .5), rgba(255, 0, 0, 0));
.air-params {
margin-top: -6px;
.air-right p {
background-color: rgba(255, 0, 0, .2);
}
}
}
&.air-heavyPollution { // -
background-image: linear-gradient(to top, rgba(150, 0, 200, .5), rgba(150, 0, 200, 0));
.air-params .air-right p {
h3{
padding: 0;
}
background-image: linear-gradient(to bottom, rgba(150, 0, 200, .5), rgba(150, 0, 200, 0));
.air-params {
margin-top: -6px;
.air-right p {
background-color: rgba(150, 0, 200, .2);
}
}
}
&.air-severePollution { // -
background-image: linear-gradient(to top, rgba(120, 0, 0, .5), rgba(120, 0, 0, 0));
.air-params .air-right p {
h3{
padding: 0;
}
background-image: linear-gradient(to bottom, rgba(120, 0, 0, .5), rgba(120, 0, 0, 0));
.air-params {
margin-top: -6px;
.air-right p {
background-color: rgba(120, 0, 0, .2);
}
}
}
}
.air-warn{
background-image: linear-gradient(to top, rgba(246, 81, 99, .5), rgba(24, 176, 143, 0));
background-image: linear-gradient(to bottom, rgba(246, 81, 99, .5), rgba(24, 176, 143, 0));
.air-params{
.air-right{
p{
@ -1218,22 +1178,14 @@ export default {
}
.leakage-list {
display: flex;
justify-content: center;
flex-direction: column;
justify-content: space-between;
flex-wrap: wrap;
// padding: 0 0 0 14px;
text-align: left;
height: calc(100% - 40px);
// &::-webkit-scrollbar {
// width: 4px;
// height: 4px;
// }
// &::-webkit-scrollbar-thumb {
// background-color: #339cff;
// border-radius: 2px;
// }
// &::-webkit-scrollbar-track {
// background-color: #021941;
// }
width: calc(100% / 2 - 14px);
height: calc(100%);
margin: 0 7px;
padding: 20px 0;
li {
position: relative;
display: flex;
@ -1243,9 +1195,9 @@ export default {
border: 1px solid #3581cc;
background-color: #02255f;
border-radius: 2px;
width: calc(100% / 2 - 14px);
height: calc(100% / 4 - 20px);
margin: 20px 7px 0 7px;
width: calc(100%);
height: calc(100% / 4 - 10px);
margin: 10px 0;
&::before {
content: "";
position: absolute;
@ -1258,7 +1210,7 @@ export default {
border-style: solid;
}
p {
font-size: 12px;
font-size: 16px;
color: #fff;
i {
margin-right: 4px;
@ -1303,7 +1255,7 @@ export default {
display: flex;
justify-content: flex-start;
// width: 100%;
width: calc(100% / 2);
width: calc(40%);
li{
display: flex;
flex-direction: column;
@ -1311,7 +1263,7 @@ export default {
align-content: center;
justify-content: center;
height: 66px;
margin-right: 10px;
margin-right: 24px;
background: url('~@/assets/images/data_border_default.png') no-repeat;
background-size: 100% 100%;
position: relative;
@ -1323,6 +1275,7 @@ export default {
}
p{
color: #339CFF;
font-weight: bold;
}
span{
display: block;
@ -1337,7 +1290,7 @@ export default {
position: absolute;
top: 10px;
left: 10px;
width: calc(100% - 20px);
width: calc(100%);
display: flex;
justify-content: flex-start;
@ -1364,14 +1317,7 @@ export default {
}
}
}
// .env-alarm-list-second {
// li{
// width: calc(100% / 10 - 10px);
// }
// }
}
.env-alarm-list-second {
position: absolute;
bottom: 10px;
@ -1424,9 +1370,6 @@ export default {
position: absolute;
bottom: 0;
left: 10px;
// height: 160px;
// padding: 14px 0 10px 14px;
// min-height: auto;
}
.new-leakage-list{
@ -1487,11 +1430,10 @@ export default {
.screen-env-list {
flex-wrap: wrap;
// justify-content: space-between;
// justify-content: center;
height: calc(100% - 54px);
padding: 0 10px;
li {
position: relative;
flex: none;
width: calc(100% / 2 - 22px);
margin: 10px 10px 0 10px;
@ -1501,6 +1443,7 @@ export default {
flex-direction: column;
align-items: center;
justify-content: center;
padding-left: 40px;
height: calc(100%);
.msg-list-num{
font-size: 18px;
@ -1509,12 +1452,15 @@ export default {
.msg-list-unit{
font-size: 12px;
position: static;
margin-top: 4px;
margin-top: 8px;
}
}
.msg-list-svg {
position: absolute;
left: 20px;
top: 0;
font-size: 40px;
margin-left: 20px !important;
margin-left: 0 !important;
}
&.msg-pm {
.msg-list-svg {
@ -1535,7 +1481,8 @@ export default {
}
.panel-group {
width: calc(100% / 2);
// width: calc(100% / 3 + 60px);
width: calc(40% - 100px);
.card-panel-col {
margin-bottom: 20px;
}
@ -1573,25 +1520,25 @@ export default {
}
.card-panel-icon-wrapper {
float: left;
margin: 0 10px 0 12px;
padding: 20px;
margin: 0 8px;
padding: 20px 0;
transition: all 0.38s ease-out;
border-radius: 6px;
}
.card-panel-icon {
float: left;
font-size: 60px;
font-size: 40px;
}
.card-panel-description {
margin: 19px;
margin: 20px 4px;
margin-left: 0px;
.card-panel-text {
line-height: 30px;
color: rgba(0, 0, 0, 0.45);
font-size: 22px;
font-size: 20px;
margin-bottom: 11px;
& span {
-webkit-background-clip: text;
@ -1602,4 +1549,7 @@ export default {
}
}
}
::v-deep .table-title{
font-size: 20px;
}
</style>

2
src/views/environmentalScreen/module/catePie.vue

@ -129,7 +129,7 @@ export default {
itemGap: 15,
textStyle: {
color: '#ffffff',
fontSize: 11
fontSize: 16
},
formatter: function(name) {
if (name.length > 6) {

Loading…
Cancel
Save