Pārlūkot izejas kodu

1. 新增煤监局粉尘首页
2. 替换了工作面模型

hongrunxia 5 mēneši atpakaļ
vecāks
revīzija
d18cf6caeb
32 mainītis faili ar 7154 papildinājumiem un 1362 dzēšanām
  1. BIN
      public/model/glft/workFace/workFace_2024-09-20.glb
  2. BIN
      src/assets/images/company/dust/SiO2Content-icon.png
  3. BIN
      src/assets/images/company/dust/bg1.png
  4. BIN
      src/assets/images/company/dust/bg2.png
  5. BIN
      src/assets/images/company/dust/dust-home-file-icon.png
  6. BIN
      src/assets/images/company/dust/dustCon-icon.png
  7. BIN
      src/assets/images/company/dust/react-bg.png
  8. BIN
      src/assets/images/company/dust/respirableDustCon-icon.png
  9. BIN
      src/assets/images/company/dust/respirableDustRatio-icon.png
  10. BIN
      src/assets/images/company/dust/tip-bg-1.png
  11. BIN
      src/assets/images/company/dust/tip-bg-2.png
  12. BIN
      src/assets/images/company/dust/tip-bg-3.png
  13. BIN
      src/assets/images/company/dust/tip-bg-4.png
  14. BIN
      src/assets/images/company/dust/tip-bg1-1.png
  15. BIN
      src/assets/images/company/dust/tip-bg1-2.png
  16. 1 0
      src/layouts/default/header/components/notify/speakVoice.ts
  17. 40 40
      src/views/vent/home/billboard/billboard.data.ts
  18. 1 1
      src/views/vent/home/clique/components/mine-wind.vue
  19. 334 0
      src/views/vent/home/clique/dust-index.vue
  20. 3245 0
      src/views/vent/home/clique/dust.data.ts
  21. 132 0
      src/views/vent/home/clique/dustComponents/billboard.vue
  22. 310 0
      src/views/vent/home/clique/dustComponents/dialog-modal.vue
  23. 253 0
      src/views/vent/home/clique/dustComponents/icon-light.vue
  24. 328 0
      src/views/vent/home/clique/dustComponents/measure-detail.vue
  25. 245 0
      src/views/vent/home/clique/dustComponents/measure-point.vue
  26. 164 0
      src/views/vent/home/clique/dustComponents/mine-wind.vue
  27. 752 0
      src/views/vent/home/clique/dustComponents/risk-warn.vue
  28. 258 258
      src/views/vent/home/colliery/components/wind-monitor.vue
  29. 320 320
      src/views/vent/home/colliery/components/work-monitor.vue
  30. 619 581
      src/views/vent/monitorManager/alarmMonitor/warn/dustWarn.vue
  31. 7 14
      src/views/vent/monitorManager/mainFanMonitor/index.vue
  32. 145 148
      src/views/vent/monitorManager/nitrogen/components/nitrogenEcharts.vue

BIN
public/model/glft/workFace/workFace_2024-09-20.glb


BIN
src/assets/images/company/dust/SiO2Content-icon.png


BIN
src/assets/images/company/dust/bg1.png


BIN
src/assets/images/company/dust/bg2.png


BIN
src/assets/images/company/dust/dust-home-file-icon.png


BIN
src/assets/images/company/dust/dustCon-icon.png


BIN
src/assets/images/company/dust/react-bg.png


BIN
src/assets/images/company/dust/respirableDustCon-icon.png


BIN
src/assets/images/company/dust/respirableDustRatio-icon.png


BIN
src/assets/images/company/dust/tip-bg-1.png


BIN
src/assets/images/company/dust/tip-bg-2.png


BIN
src/assets/images/company/dust/tip-bg-3.png


BIN
src/assets/images/company/dust/tip-bg-4.png


BIN
src/assets/images/company/dust/tip-bg1-1.png


BIN
src/assets/images/company/dust/tip-bg1-2.png


+ 1 - 0
src/layouts/default/header/components/notify/speakVoice.ts

@@ -15,6 +15,7 @@ export default class SpeakVoice {
     this.instance.volume = 1; // 声音音量:1,范围从0到1
     this.instance.rate = 3; // 设置语速:1,范围从0到100
     this.instance.lang = 'zh-CN'; // 使用的语言:中文
+    this.instance.localService = true;
     this.instance.pitch = 0; // 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1
     this.instance.voiceURI = 'Ting-Ting';
     // this.instance.voiceURI = 'Google 普通话(中国大陆)';

+ 40 - 40
src/views/vent/home/billboard/billboard.data.ts

@@ -659,10 +659,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 70,
-      zxcds: 70,
-      cdbjs: 1,
-      jcsbs: 55,
+      cds: 5,
+      zxcds: 5,
+      cdbjs: 0,
+      jcsbs: 12,
     },
   },
   {
@@ -671,10 +671,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 76,
-      zxcds: 70,
-      cdbjs: 5,
-      jcsbs: 54,
+      cds: 7,
+      zxcds: 7,
+      cdbjs: 0,
+      jcsbs: 10,
     },
   },
   {
@@ -683,10 +683,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 55,
-      zxcds: 50,
+      cds: 5,
+      zxcds: 5,
       cdbjs: 0,
-      jcsbs: 32,
+      jcsbs: 10,
     },
   },
   {
@@ -695,9 +695,9 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 32,
-      zxcds: 26,
-      cdbjs: 2,
+      cds: 8,
+      zxcds: 7,
+      cdbjs: 0,
       jcsbs: 15,
     },
   },
@@ -707,10 +707,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 55,
-      zxcds: 40,
-      cdbjs: 12,
-      jcsbs: 33,
+      cds: 10,
+      zxcds: 9,
+      cdbjs: 2,
+      jcsbs: 16,
     },
   },
   {
@@ -719,10 +719,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 67,
-      zxcds: 20,
+      cds: 6,
+      zxcds: 6,
       cdbjs: 0,
-      jcsbs: 22,
+      jcsbs: 12,
     },
   },
   {
@@ -731,10 +731,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 46,
-      zxcds: 32,
-      cdbjs: 2,
-      jcsbs: 56,
+      cds: 9,
+      zxcds: 9,
+      cdbjs: 0,
+      jcsbs: 16,
     },
   },
   {
@@ -743,9 +743,9 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 53,
-      zxcds: 14,
-      cdbjs: 14,
+      cds: 11,
+      zxcds: 10,
+      cdbjs: 0,
       jcsbs: 25,
     },
   },
@@ -755,10 +755,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 32,
-      zxcds: 21,
-      cdbjs: 1,
-      jcsbs: 0,
+      cds: 6,
+      zxcds: 6,
+      cdbjs: 0,
+      jcsbs: 10,
     },
   },
   {
@@ -767,10 +767,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 53,
-      zxcds: 22,
-      cdbjs: 12,
-      jcsbs: 0,
+      cds: 7,
+      zxcds: 7,
+      cdbjs: 0,
+      jcsbs: 10,
     },
   },
   {
@@ -779,10 +779,10 @@ export const mockSHENDONG = [
     ip: '',
     dustRisk: {
       fxdj: '低',
-      cds: 15,
-      zxcds: 15,
-      cdbjs: 0,
-      jcsbs: 20,
+      cds: 4,
+      zxcds: 4,
+      cdbjs: 1,
+      jcsbs: 10,
     },
   },
   {

+ 1 - 1
src/views/vent/home/clique/components/mine-wind.vue

@@ -7,7 +7,7 @@
       </div>
       <div class="content-text">
         <template v-for="(item, index) in mineData" :key="index">
-          <div class="text" :style="{ color: item['isWarning'] ? '#ff5e00' : '#fff' }">
+          <div class="text" :style="{ color: item['isWarning'] ? '#F56731' : '#fff', fontWeight: item['isWarning'] ? '600' : 'normal' }">
             <span>{{ item.deviceName }}</span>
             <span>{{ filterBadValue(item.jf) }}</span>
             <span>{{ filterBadValue(item.hf) }}</span>

+ 334 - 0
src/views/vent/home/clique/dust-index.vue

@@ -0,0 +1,334 @@
+<template>
+  <div class="company-home">
+    <div class="top-bg">
+      <div class="main-title">{{ mainTitle }}</div>
+    </div>
+    <div class="company-content">
+      <div class="area-content">
+        <div class="left-area">
+          <!-- 矿井通风状态监测 -->
+          <div class="area-card">
+            <mineWind :airKjStatus="airKjStatus" />
+          </div>
+          <!-- 一通三防风险分析与预警 -->
+          <div class="area-card1">
+            <riskWarn :earlyWarn="earlyWarn" />
+          </div>
+        </div>
+        <div class="center-area">
+          <!-- 地图底图 -->
+          <div class="center-bg">
+            <div class="bg-map">
+              <iconLight @show-detail="showDetail" :warningList="warningList" />
+            </div>
+          </div>
+          <!-- 粉尘测点统计 -->
+          <div class="area-card3">
+            <measurePoint :measureData="measureData" />
+          </div>
+        </div>
+        <div class="right-area">
+          <!-- 矿端测点监测详情 -->
+          <div class="area-card">
+            <measureDetail :compositeData="compositeData" />
+          </div>
+          <!-- 看板中心 -->
+          <div class="area-card1">
+            <Billboard />
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="area-card2" v-show="isShowDialog">
+      <dialogModal ref="dialogModalRef" @close-dialog="closeDialog" :title="dialogTitle" :centerDetail="centerDetail" />
+    </div>
+  </div>
+</template>
+<script lang="ts" setup>
+  import { ref, reactive, nextTick, onMounted, onUnmounted } from 'vue';
+  import mineWind from './dustComponents/mine-wind.vue';
+  import riskWarn from './dustComponents/risk-warn.vue';
+  // import fileShare from './components/file-share.vue';
+  import Billboard from './dustComponents/billboard.vue';
+  import measurePoint from './dustComponents/measure-point.vue';
+  import measureDetail from './dustComponents/measure-detail.vue';
+  import iconLight from './dustComponents/icon-light.vue';
+  import dialogModal from './dustComponents/dialog-modal.vue';
+  import { getHomeData, getList } from './clique.api';
+  import { dustSysData } from './dust.data';
+  const dialogModalRef = ref();
+  let mainTitle = ref('国能神东粉尘管控平台');
+  // let mainTitle = ref('国家能源神东煤炭集团');
+  // let mainTitle = ref('XXXX集团');
+  const isShowDialog = ref(false);
+  const dialogTitle = ref('');
+
+  //矿井通风状态数据
+  let airKjStatus = reactive<any[]>([]);
+
+  //风险分析与预警数据
+  let earlyWarn = ref<any[]>([]);
+
+  //通防综合监测数据
+  let compositeData = ref<any[]>([]);
+
+  //地图区域详情数据
+  let centerDetail = ref({});
+
+  //文件共享中心数据
+  let shareData = reactive<any[]>([]);
+
+  let warningList = ref<any[]>([]);
+
+  //粉尘测点数据
+  let measureData = ref<any>({});
+
+  let orgcode = ref('');
+
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  function getMonitor() {
+    timer = setTimeout(async () => {
+      await getHomeDataList();
+      await getLists();
+      if (timer) {
+        timer = null;
+      }
+      getMonitor();
+    }, 10000);
+  }
+
+  //获取公司端首页数据
+  async function getHomeDataList() {
+    // let res = await getHomeData();
+    let res = dustSysData();
+    console.log(res, '公司端首页数据----------');
+    if (res && res.length > 0) {
+      earlyWarn.value = res;
+      compositeData.value = res;
+      // measureData.value = {};
+      airKjStatus.length = 0;
+      const warningListTemp: { orgcode: string; isWarning: boolean }[] = [];
+      res.forEach((el) => {
+        airKjStatus.push({
+          orgcode: el.orgcode,
+          deviceName: el.sys_data.deviceName,
+          jf: el.sys_data.zongjinfeng,
+          xf: el.sys_data.xufengliang,
+          hf: el.sys_data.zonghuifeng,
+          isWarning: el.sys_data.zongjinfeng < el.sys_data.xufengliang,
+        });
+
+        //临时添加,前端判断,后期后端加上预警再处理
+        if (el.sys_data.zongjinfeng < el.sys_data.xufengliang) {
+          warningListTemp.push({ orgcode: el.orgcode, isWarning: true });
+        } else {
+          warningListTemp.push({ orgcode: el.orgcode, isWarning: false });
+        }
+      });
+      warningList.value = warningListTemp;
+      centerDetail.value = res.filter((v) => v.orgcode == orgcode.value)[0];
+    }
+  }
+  //获取文件共享中心数据
+  async function getLists() {
+    let res = await getList();
+    if (res.length != 0) {
+      shareData.length = 0;
+      res.forEach((el) => {
+        shareData.push({ title: el.sysOrgName, value: el.tolalNum, value1: el.approveNum });
+      });
+    }
+  }
+
+  function showDetail(code, label, leftV, topV) {
+    if (code) {
+      orgcode.value = code;
+      dialogTitle.value = label;
+      isShowDialog.value = true;
+      getHomeDataList();
+    }
+    nextTick(() => {
+      const tooltipDom = document.getElementById('detailModal') as HTMLElement;
+      tooltipDom.style.left = leftV;
+      tooltipDom.style.top = topV;
+    });
+  }
+  function closeDialog() {
+    isShowDialog.value = false;
+  }
+
+  onMounted(() => {
+    getHomeDataList();
+    getLists();
+    getMonitor();
+  });
+  onUnmounted(() => {
+    if (timer) {
+      clearTimeout(timer);
+      timer = null;
+    }
+  });
+</script>
+<style lang="less" scoped>
+  @font-face {
+    font-family: 'douyuFont';
+    src: url('../../../../assets/font/douyuFont.otf');
+  }
+
+  // @font-face {
+  //   font-family: 'yjsz';
+  //   src: url('../../../../assets/font/yjsz.TTF');
+  // }
+  .company-home {
+    width: 100%;
+    height: 100%;
+    position: relative;
+    background: url('../../../../assets/images/company/home-pageBg.png') no-repeat center;
+    background-size: 100% 100%;
+
+    .top-bg {
+      width: 100%;
+      height: 97px;
+      background: url('../../../../assets/images/company/top-bg.png') no-repeat center;
+      position: absolute;
+      z-index: 1;
+
+      .main-title {
+        height: 96px;
+        color: #fff;
+        font-family: 'douyuFont';
+        font-size: 20px;
+        letter-spacing: 2px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+      }
+    }
+
+    .company-content {
+      position: absolute;
+      left: 0;
+      top: 0;
+      width: 100%;
+      height: 100%;
+      background: url('../../../../assets/images/company/content-bg.png') no-repeat;
+      background-size: 100% 100%;
+
+      .area-content {
+        position: absolute;
+        top: 45px;
+        width: 100%;
+        height: calc(100% - 45px);
+        padding: 0px 20px 20px 20px;
+        box-sizing: border-box;
+        display: flex;
+        justify-content: space-between;
+
+        .left-area {
+          width: 23%;
+          height: 100%;
+          margin-right: 15px;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          align-items: center;
+          position: relative;
+          z-index: 1;
+          .area-card {
+            width: 100%;
+            height: calc(60% - 15px);
+            margin-bottom: 15px;
+            background: url('../../../../assets/images/company/area-card.png') no-repeat;
+            background-size: 100% 100%;
+          }
+
+          .area-card1 {
+            width: 100%;
+            height: 40%;
+            background: url('../../../../assets/images/company/area-card1.png') no-repeat;
+            background-size: 100% 100%;
+          }
+        }
+
+        .center-area {
+          width: 1000px;
+          height: 100%;
+          position: relative;
+          z-index: 0;
+          .center-bg {
+            position: absolute;
+            bottom: 240px;
+            left: 50%;
+            transform: translate(-50%, 0);
+            width: 1128px;
+            height: 630px;
+            background: url('../../../../assets/images/company/home-dz.png') no-repeat center;
+            background-size: contain;
+            background-position: 50% 50px;
+            z-index: 0;
+            .bg-map {
+              width: 1086px;
+              height: 610px;
+              left: 30px;
+              top: 60px;
+              background: url('../../../../assets/images/company/home-map.png') no-repeat center;
+              background-size: contain;
+              // background-position: 0px 70px;
+              position: relative;
+              z-index: 0;
+            }
+          }
+
+          .area-card2 {
+            position: absolute;
+            right: 0;
+            top: 62px;
+            width: 568px;
+            height: 437px;
+            background: url('../../../../assets/images/company/area-card2.png') no-repeat;
+            background-size: 100% 100%;
+            // pointer-events: auto;
+          }
+
+          .area-card3 {
+            position: absolute;
+            right: 0;
+            bottom: 0px;
+            width: 100%;
+            height: 269px;
+            background: url('../../../../assets/images/company/area-card3.png') no-repeat;
+            background-size: 100% 100%;
+          }
+        }
+
+        .right-area {
+          width: 23%;
+          height: 100%;
+          margin-left: 15px;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          align-items: center;
+          position: relative;
+          z-index: 1;
+          // pointer-events: auto;
+          .area-card {
+            width: 100%;
+            height: calc(60% - 15px);
+            margin-bottom: 15px;
+            background: url('../../../../assets/images/company/area-card.png') no-repeat;
+            background-size: 100% 100%;
+          }
+
+          .area-card1 {
+            width: 100%;
+            height: 40%;
+            background: url('../../../../assets/images/company/area-card1.png') no-repeat;
+            background-size: 100% 100%;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 3245 - 0
src/views/vent/home/clique/dust.data.ts

@@ -0,0 +1,3245 @@
+import { title } from 'process';
+
+export const dustSysData = () => [
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '布尔台煤矿',
+    orgcode: 'sdmtjtbetmk',
+    ip: '10.246.95.4',
+    surface_juejin_data: [],
+    sys_data: {
+      coalseam: '',
+      hui1: '12993.17',
+      workingFaceZouxiangLength: '',
+      hui2: '18200.28',
+      workingFaceHeight: '',
+      zongjinfeng: '31193.45',
+      deviceName: '布尔台煤矿',
+      deviceId: 1598283195901042700,
+      jin: '18754.94',
+      linkEmpty: '',
+      totallength: 218356.77,
+      leakagerate: 3,
+      xufengliang: 28280,
+      linkEmptyFlag: '',
+      panel: '',
+      devicePos: '布尔台煤矿',
+      supportNum: '',
+      zongfengliang: '32203.41',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-09 11:03:06',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '32203.41',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:34:59',
+        },
+        jin2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-09 11:03:11',
+          valueName: '进风2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '11344.69',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'jin2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:34:59',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-09 11:03:06',
+          valueName: '风机风量1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '12993.17',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:34:59',
+        },
+        hui2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-09 11:03:06',
+          valueName: '风机风量2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '18200.28',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:34:59',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-09 11:03:06',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '32197.92',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:34:59',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-09 11:03:06',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '31193.45',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:34:59',
+        },
+        jin: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-09 11:03:18',
+          valueName: '进风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '18754.94',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'jin',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:34:59',
+        },
+      },
+      netStatus: 1,
+      deviceID: '1598283195901042690',
+      personCount: 393,
+      coast: null,
+      jin2: '11344.69',
+      vehicleCount: 97,
+      workingFaceQieyanLength: '',
+      workingFaceLengeh: '',
+      useM3Perent: '91.73',
+      coalSeamThickness: '',
+      zonghuifeng: '32197.92',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '1208.00',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '708.00',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '大柳塔井',
+    orgcode: 'sdmtjtdltmk',
+    ip: '10.248.135.10',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '28414.49',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-16 13:28:25',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '28414.49',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        jin2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-16 13:28:25',
+          valueName: '进风2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '17058.27',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'jin2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-16 13:28:30',
+          valueName: '风机风量1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '8485.41',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-16 13:28:30',
+          valueName: '风机风量2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '19929.08',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-16 13:28:25',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '28414.49',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-16 13:28:25',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012566500,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '28080.91',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: '风量报警',
+          hourMax: null,
+          warnRank: '19957.0,',
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        jin: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-16 13:28:25',
+          valueName: '进风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '7380.03',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'jin',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '8485.41',
+      hui2: '19929.08',
+      netStatus: 1,
+      zongjinfeng: '28080.91',
+      deviceID: '1598283195901042690',
+      deviceName: '大柳塔井',
+      deviceId: 1598283195901042700,
+      jin: '7380.03',
+      personCount: 413,
+      coast: null,
+      jin2: '17058.27',
+      vehicleCount: 68,
+      totallength: 180780.22,
+      useM3Perent: '95.08',
+      leakagerate: 1,
+      zonghuifeng: '28414.49',
+      xufengliang: 19957,
+      devicePos: '大柳塔井',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '活鸡兔井',
+    orgcode: 'sdmtjtdltmkhjtj',
+    ip: '10.248.135.121',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '21029.6',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-12 15:02:33',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 0,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21029.6',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-12 15:02:33',
+          valueName: '回风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 0,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21029.6',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-12 15:02:33',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 0,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21029.6',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-12 15:02:33',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 0,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012566500,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '20136.09',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 201,
+          warnInfo: '风量报警',
+          hourMax: null,
+          warnRank: '22808.0,',
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '21029.6',
+      useM3: '',
+      netStatus: 1,
+      zongjinfeng: '20136.09',
+      deviceID: '1749314494788255746',
+      deviceName: '活鸡兔井',
+      deviceId: 1749314494788255700,
+      test1: '',
+      linkEmpty: '',
+      personCount: 404,
+      coast: null,
+      vehicleCount: 48,
+      totallength: 135008.56,
+      useM3Perent: '91.42',
+      leakagerate: 4,
+      zonghuifeng: '21029.6',
+      xufengliang: 22808,
+      linkEmptyFlag: '',
+      devicePos: '活鸡兔井',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '补连塔煤矿',
+    orgcode: 'sdmtjtbltmk',
+    ip: '10.246.175.16',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '30601.69',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-25 15:21:16',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '30601.69',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-25 15:21:16',
+          valueName: '风机风量1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '9648.0',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-25 15:21:16',
+          valueName: '风机风量2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '18283.0',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-25 15:21:16',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '30600.32',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-25 15:21:16',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '30109.61',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '9648.0',
+      hui2: '18283.0',
+      netStatus: 1,
+      zongjinfeng: '30109.61',
+      deviceID: '1598283195901042690',
+      deviceName: '补连塔煤矿',
+      deviceId: 1598283195901042700,
+      linkEmpty: '',
+      personCount: 324,
+      coast: null,
+      vehicleCount: 109,
+      totallength: 210784.13,
+      useM3Perent: '94.9',
+      leakagerate: 1,
+      zonghuifeng: '30600.32',
+      xufengliang: 25639,
+      linkEmptyFlag: '',
+      devicePos: '补连塔煤矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '石圪台煤矿',
+    orgcode: 'sdmtjtsgtmk',
+    ip: '10.246.191.13',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '21902.0',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-17 15:03:55',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21902.0',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-17 15:03:55',
+          valueName: '回风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21902.0',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-17 15:03:55',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21902.0',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-17 15:03:55',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21005.91',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '21902.0',
+      netStatus: null,
+      zongjinfeng: '21005.91',
+      deviceID: '1780137259730907138',
+      deviceName: '石圪台煤矿',
+      deviceId: 1780137259730907100,
+      linkEmpty: '',
+      personCount: 427,
+      coast: null,
+      vehicleCount: 62,
+      totallength: 142507.65,
+      useM3Perent: '93.79',
+      leakagerate: 4,
+      zonghuifeng: '21902.0',
+      xufengliang: 20574,
+      linkEmptyFlag: '',
+      devicePos: '石圪台煤矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '柳塔煤矿',
+    orgcode: 'sdmtjtltmk',
+    ip: '10.246.87.121',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '10941.9',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-08-01 15:55:13',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1775721223506473000,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10941.9',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-08-01 15:55:13',
+          valueName: '回风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1775721223477112800,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10941.9',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-08-01 15:55:13',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1775721223535833000,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10941.9',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-08-01 15:55:13',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1775721223519056000,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10747.59',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '10941.9',
+      dischargeGasEmission: '',
+      useM3: '',
+      netStatus: null,
+      zongjinfeng: '10747.59',
+      deviceID: '1775721223544221697',
+      deviceName: '柳塔煤矿',
+      deviceId: 1775721223544221700,
+      test1: '',
+      linkEmpty: '',
+      personCount: 163,
+      coast: null,
+      vehicleCount: 34,
+      totallength: 54488.7,
+      useM3Perent: '97.82',
+      leakagerate: 1,
+      zonghuifeng: '10941.9',
+      xufengliang: 12903,
+      linkEmptyFlag: '',
+      devicePos: '柳塔煤矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '上湾煤矿',
+    orgcode: 'sdmtjtswmk',
+    ip: '10.246.167.205',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '21340.19',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-20 14:26:08',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21340.19',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-20 14:26:08',
+          valueName: '回风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '9834.27',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-20 14:26:08',
+          valueName: '回风2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '11505.92',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-20 14:26:08',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '21340.19',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-20 14:26:08',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '20441.54',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: '风量报警',
+          hourMax: null,
+          warnRank: '18276.0,',
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '9834.27',
+      hui2: '11505.92',
+      netStatus: 1,
+      zongjinfeng: '20441.54',
+      deviceID: '1598283195901042690',
+      deviceName: '上湾煤矿',
+      deviceId: 1598283195901042700,
+      linkEmpty: '',
+      personCount: 193,
+      coast: 5453,
+      vehicleCount: 64,
+      totallength: 115310.31,
+      useM3Perent: '98.72',
+      leakagerate: 4,
+      zonghuifeng: '21340.19',
+      xufengliang: 18276,
+      linkEmptyFlag: '',
+      devicePos: '上湾煤矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '寸草塔煤矿',
+    orgcode: 'sdmtjtcctmk',
+    ip: '10.246.23.171',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '10551.79',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-08-26 17:04:10',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10551.79',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-08-26 17:04:10',
+          valueName: '回风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10551.79',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-08-26 17:04:10',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10551.79',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-08-26 17:04:10',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012523300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10500.78',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '10551.79',
+      dischargeGasEmission: '',
+      useM3: '',
+      netStatus: 1,
+      zongjinfeng: '10500.78',
+      deviceID: '1778716104681459713',
+      deviceName: '寸草塔矿',
+      deviceId: 1778716104681459700,
+      test1: '',
+      linkEmpty: '',
+      personCount: 146,
+      coast: null,
+      vehicleCount: 19,
+      totallength: 42289.1,
+      useM3Perent: '90.52',
+      leakagerate: 0,
+      zonghuifeng: '10551.79',
+      xufengliang: 8093,
+      linkEmptyFlag: '',
+      devicePos: '寸草塔矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '寸草塔二矿',
+    orgcode: 'sdmtjtcctrk',
+    ip: '10.246.63.5',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '10817.35',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-04 09:48:15',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10817.35',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-04 09:48:15',
+          valueName: '回风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '0.0',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-04 09:48:15',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10819.26',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-04 09:48:15',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '9930.59',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '0.0',
+      useM3: '',
+      netStatus: 1,
+      zongjinfeng: '9930.59',
+      deviceID: '1779760361294282753',
+      deviceName: '寸草塔二矿',
+      deviceId: 1779760361294282800,
+      test1: '',
+      linkEmpty: '',
+      personCount: 177,
+      coast: null,
+      vehicleCount: 23,
+      totallength: 61629.2,
+      useM3Perent: '95.67',
+      leakagerate: 8,
+      zonghuifeng: '10819.26',
+      xufengliang: 9241,
+      linkEmptyFlag: '',
+      devicePos: '寸草塔二矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '乌兰木伦矿',
+    orgcode: 'sdmtjtwlmlmk',
+    ip: '10.246.183.35',
+    surface_juejin_data: [],
+    sys_data: {
+      cuteyeLength: '',
+      hui1: '10246.12',
+      thickness: '',
+      workingFaceZouxiangLength: '',
+      workingFaceHeight: '',
+      zongjinfeng: '9850.55',
+      deviceName: '乌兰木伦煤矿',
+      deviceId: 1782584543021387800,
+      linkEmpty: '',
+      totallength: 87531.24,
+      leakagerate: 3,
+      xufengliang: 11824,
+      linkEmptyFlag: '',
+      devicePos: '乌兰木伦煤矿',
+      supportNum: '',
+      zongfengliang: '10246.12',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-04 09:49:28',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10246.12',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-04 09:49:28',
+          valueName: '回风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10246.12',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-04 09:49:28',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '10246.12',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-04 09:49:28',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '9850.55',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 201,
+          warnInfo: '风量报警',
+          hourMax: null,
+          warnRank: '11824.0,',
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      dischargeGasEmission: '',
+      useM3: '',
+      netStatus: 1,
+      deviceID: '1782584543021387778',
+      strikelength: '',
+      personCount: 203,
+      coast: null,
+      vehicleCount: 30,
+      workingFaceQieyanLength: '',
+      workingFaceLengeh: '',
+      useM3Perent: '99.17',
+      coalSeamThickness: '',
+      zonghuifeng: '10246.12',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '榆家梁煤矿',
+    orgcode: 'sdmtjtyjlmk',
+    ip: '10.248.143.211',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '16353.05',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-26 12:41:53',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '16353.05',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-26 12:41:53',
+          valueName: '回风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '0.0',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-26 12:41:53',
+          valueName: '回风2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '0.0',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-26 12:41:53',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '16340.29',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-06-26 12:41:53',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012523300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '16108.74',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '0.0',
+      hui2: '0.0',
+      dischargeGasEmission: '',
+      useM3: '',
+      netStatus: 1,
+      zongjinfeng: '16108.74',
+      deviceID: '1783328147346612225',
+      deviceName: '榆家梁煤矿',
+      deviceId: 1783328147346612200,
+      test1: '',
+      linkEmpty: '',
+      personCount: 189,
+      coast: null,
+      vehicleCount: 35,
+      totallength: 77821.76,
+      useM3Perent: '95.23',
+      leakagerate: 1,
+      zonghuifeng: '16340.29',
+      xufengliang: 14849,
+      linkEmptyFlag: '',
+      devicePos: '榆家梁煤矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '保德煤矿',
+    orgcode: 'sdmtjtbdmk',
+    ip: '10.248.210.152',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '23837.42',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-27 21:46:42',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '23837.42',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: null,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-27 21:46:42',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012523300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '23838.7',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: null,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-09-27 21:46:42',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: 0,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 4,
+          saveflag: 1,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '22929.79',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: null,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      netStatus: 1,
+      zongjinfeng: '22929.79',
+      deviceID: '1739277643793489922',
+      deviceName: '保德煤矿',
+      deviceId: 1739277643793490000,
+      linkEmpty: '',
+      coast: null,
+      totallength: 934200.01,
+      useM3Perent: '91.28',
+      leakagerate: 3,
+      zonghuifeng: '23838.7',
+      xufengliang: 16480,
+      linkEmptyFlag: '',
+      devicePos: '保德煤矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: null,
+    orgname: '哈拉沟煤矿',
+    orgcode: 'sdmtjthlgmk',
+    ip: '10.248.223.12',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '17295.6',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-29 16:08:12',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '17295.6',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-29 16:08:12',
+          valueName: '风机风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '17295.6',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-29 16:08:12',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '17295.6',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-29 16:08:12',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '16803.33',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '17295.6',
+      useM3: '',
+      netStatus: null,
+      zongjinfeng: '16803.33',
+      deviceID: '1598283195901042690',
+      deviceName: '哈拉沟煤矿',
+      deviceId: 1598283195901042700,
+      test1: '',
+      linkEmpty: '',
+      personCount: 423,
+      coast: null,
+      vehicleCount: 72,
+      totallength: 125401.45,
+      useM3Perent: '89.82',
+      leakagerate: 2,
+      zonghuifeng: '17295.6',
+      xufengliang: 16885,
+      linkEmptyFlag: '',
+      devicePos: '哈拉沟煤矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+  {
+    surface_caimei_data: [],
+    sys_warndata: {},
+    orgname: '锦界煤矿',
+    orgcode: 'sdmtjtjjmk',
+    ip: '10.248.151.42',
+    surface_juejin_data: [],
+    sys_data: {
+      zongfengliang: '33921.14',
+      readData: {
+        zongfengliang: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-08 17:00:30',
+          valueName: '总风量',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '33921.14',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongfengliang',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        jin2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-08 17:00:58',
+          valueName: '进风2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '16016.96',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'jin2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui1: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-08 17:00:30',
+          valueName: '风机风量1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '16051.17',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui1',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        hui2: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-08 17:00:56',
+          valueName: '风机风量2',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '17869.97',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'hui2',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zonghuifeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-08 17:00:30',
+          valueName: '总回风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '33922.14',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zonghuifeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        zongjinfeng: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-08 17:00:30',
+          valueName: '总进风',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526600,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '33258.65',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'zongjinfeng',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+        jin: {
+          dayMaxTime: null,
+          lastSummaryDate: '2024-07-08 17:00:30',
+          valueName: '进风1',
+          spaceSave: null,
+          warnKindType: null,
+          avgflag: null,
+          saveid: null,
+          maxVal: null,
+          hourMinTime: null,
+          minVal: null,
+          limitlevels: [],
+          hourNum: null,
+          valueType: 1,
+          saveflag: null,
+          hourAvg: null,
+          hourMin: null,
+          id: 1591640678012526300,
+          dayMax: null,
+          hourMaxTime: null,
+          value: '17241.69',
+          dayAvg: null,
+          dayMin: null,
+          dictset: null,
+          valueCode: 'jin',
+          summaryDate: null,
+          dayMinTime: null,
+          timelength: null,
+          warnFlag: 0,
+          warnInfo: null,
+          hourMax: null,
+          warnRank: null,
+          dayNum: null,
+          time: '2024-09-29 10:35:00',
+        },
+      },
+      hui1: '16051.17',
+      hui2: '17869.97',
+      netStatus: null,
+      zongjinfeng: '33258.65',
+      deviceID: '1598283195901042690',
+      deviceName: '锦界煤矿',
+      deviceId: 1598283195901042700,
+      jin: '17241.69',
+      linkEmpty: '',
+      personCount: 2531,
+      coast: 5453,
+      jin2: '16016.96',
+      vehicleCount: 272,
+      totallength: 271601.62,
+      useM3Perent: '89.73',
+      leakagerate: 1,
+      zonghuifeng: '33922.14',
+      xufengliang: 32335,
+      linkEmptyFlag: '',
+      devicePos: '锦界煤矿',
+      supportNum: '',
+    },
+    majorpath_data: [],
+    netStatus: 1,
+    surface_juejin_beiyong: [],
+    dust_data: [
+      {
+        devicePos: '22煤主运大巷掘进工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '8.00',
+        respirableDustCon: '3.90',
+        SiO2Content: '28.00',
+        respirableDustRatio: '68.00',
+      },
+      {
+        devicePos: '42205综放工作面',
+        dustType: '煤',
+        fireLen: '',
+        isBlast: '无',
+        airQuantity: '',
+        dustCon: '3.17',
+        respirableDustCon: '1.65',
+        SiO2Content: '18.00',
+        respirableDustRatio: '48.00',
+      },
+    ],
+  },
+];
+
+export const dustMonitorColumnTop = [
+  {
+    title: '粉尘类型',
+    code: 'dustType',
+    value: '',
+  },
+  {
+    title: '火焰长度(mm)',
+    code: 'fireLen',
+    value: '',
+  },
+  {
+    title: '爆炸性',
+    code: 'isBlast',
+    value: '',
+  },
+  {
+    title: '风量(m³/min)',
+    code: 'airQuantity',
+    value: '',
+  },
+];
+
+export const dustMonitorColumnBootom = [
+  {
+    title: '总粉尘浓度 (mg/m³)',
+    code: 'dustCon',
+    value: '',
+  },
+  {
+    title: '呼尘浓度 (mg/m³)',
+    code: 'respirableDustCon',
+    value: '',
+  },
+  {
+    title: '二氧化硅含量 (%)',
+    code: 'SiO2Content',
+    value: '',
+  },
+  {
+    title: '呼尘颗粒占比 (%)',
+    code: 'respirableDustRatio',
+    value: '',
+  },
+];

+ 132 - 0
src/views/vent/home/clique/dustComponents/billboard.vue

@@ -0,0 +1,132 @@
+<template>
+  <div class="billboard-box">
+    <div class="title">{{ title }}</div>
+    <div class="billboard-content">
+      <div class="bg">
+        <div class="dust-item" @click="goDetail('dust')">粉尘看板</div>
+        <div class="file-item" @click="goDetail('file')">文件看板</div>
+      </div>
+    </div>
+  </div>
+</template>
+<script lang="ts" setup>
+  import { getMenus } from '/@/router/menus';
+  import { ref, onMounted } from 'vue';
+  import { Menu } from '/@/router/types';
+  import { useGo } from '/@/hooks/web/usePage';
+  // let props = defineProps({});t
+  const go = useGo();
+  const title = ref('看板汇总台');
+  const buttonConfig = ref<
+    {
+      id: string;
+      text: string;
+      path: string;
+    }[]
+  >([]);
+
+  function goDetail(type) {
+    if (type === 'dust') {
+      go('/warn_billboard/home');
+    } else {
+      go('/fileManager/performance/home');
+    }
+  }
+
+  // 寻找具有指定关键词的菜单,调用前请清空buttonConfig
+  function findBillboardEntry(menus: Menu[]) {
+    const keywords = [
+      // 'vent/home/billboard/dust',
+      // 'vent/home/billboard/file',
+      // 'vent/home/billboard/fire',
+      // 'vent/home/billboard/gas',
+      // 'vent/home/billboard/vent',
+      // 'vent/home/billboard/summary'
+      '看板',
+    ];
+
+    menus.forEach((menu) => {
+      // 如若有子菜单,说明不是叶节点,我们需要找叶节点里匹配关键字的项目
+      if (menu.children) {
+        findBillboardEntry(menu.children);
+        return;
+      }
+      if (
+        keywords.some((w) => {
+          return menu.name.includes(w);
+        })
+      ) {
+        // 如若菜单的名称与关键字匹配,那么记录到buttonConfig里面
+        buttonConfig.value.push({
+          id: menu.path,
+          text: menu.name,
+          path: menu.path,
+        });
+        return;
+      }
+    });
+  }
+
+  onMounted(() => {
+    getMenus().then((menus) => {
+      findBillboardEntry(menus);
+    });
+  });
+</script>
+<style lang="less" scoped>
+  @font-face {
+    font-family: 'douyuFont';
+    src: url('../../../../assets/font/douyuFont.otf');
+  }
+
+  .billboard-box {
+    width: 100%;
+    height: 100%;
+    position: relative;
+
+    .title {
+      position: absolute;
+      left: 50px;
+      top: 10px;
+      color: #fff;
+      font-family: 'douyuFont';
+      font-size: 14px;
+    }
+
+    .billboard-content {
+      position: relative;
+      height: 100%;
+      padding-left: 22px;
+      padding-top: 50px;
+      display: flex;
+      flex-wrap: wrap;
+      justify-content: space-between;
+      align-items: center;
+      .bg {
+        width: 391px;
+        height: 189px;
+        background: url('../../../../../assets/images//company/dust/dust-home-file-icon.png');
+        position: relative;
+        color: #fff;
+        .dust-item {
+          position: absolute;
+          top: 108px;
+          left: 77px;
+          &:hover {
+            color: aqua;
+            cursor: pointer;
+          }
+        }
+        .file-item {
+          position: absolute;
+          top: 108px;
+          left: 260px;
+          &:hover {
+            color: aqua;
+            cursor: pointer;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 310 - 0
src/views/vent/home/clique/dustComponents/dialog-modal.vue

@@ -0,0 +1,310 @@
+<template>
+  <div class="dialogModal" id="detailModal">
+    <div class="modal-top">
+      <span class="pointer-events-auto" @click="redictTo">
+        <i>
+          <SvgIcon class="icon" size="14" name="inner-kd" />
+        </i>
+        <span class="modal-title"> {{ title }}</span>
+      </span>
+      <span class="close" @click="getClose">✕</span>
+    </div>
+    <div class="modal-card">
+      <div class="card-box" v-for="(item, index) in modalCard" :key="index">
+        <div class="card-pic">
+          <img :src="item.imgSrc" alt="" />
+        </div>
+        <div class="card-content">
+          <div class="content-label">{{ item.label }}</div>
+          <div class="content-value">{{ item.value }}</div>
+        </div>
+      </div>
+    </div>
+    <div class="modal-card1">
+      <div class="react-bg modal-card1">
+        <div class="title">总粉尘浓度</div>
+        <div class="card-content">
+          <div class="card-item card-left">
+            <div class="content-title">最大值</div>
+            <div class="value">-</div>
+          </div>
+          <div class="card-item card-right">
+            <div>最大值位置</div>
+            <div>-</div>
+          </div>
+        </div>
+      </div>
+      <div class="react-bg modal-card2">
+        <div class="title">呼尘浓度</div>
+        <div class="card-content">
+          <div class="card-item card-left">
+            <div class="content-title">最大值</div>
+            <div class="value">-</div>
+          </div>
+          <div class="card-item card-right">
+            <div>最大值位置</div>
+            <div>-</div>
+          </div>
+        </div>
+      </div>
+      <div class="modal-card3">
+        <div class="title">报警测点</div>
+        <!-- <div class="empty-content">暂无报警</div> -->
+        <a-empty
+          class="empty-content"
+          image="https://gw.alipayobjects.com/mdn/miniapp_social/afts/img/A*pevERLJC9v0AAAAAAAAAAABjAQAAAQ/original"
+          :image-style="{
+            height: '40px',
+          }"
+        >
+          <template #description>
+            <span> 暂无报警 </span>
+          </template>
+        </a-empty>
+      </div>
+    </div>
+  </div>
+</template>
+<script lang="ts" setup>
+  import { ref, reactive, defineProps, watch } from 'vue';
+  import { SvgIcon } from '/@/components/Icon';
+  import { useAutoLogin } from '/@/hooks/vent/useAutoLogin';
+  import { getAssetURL } from '/@/utils/ui';
+  // const globalConfig = inject('globalConfig');
+
+  let props = defineProps({
+    centerDetail: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    title: {
+      type: String,
+      default: '布尔台矿',
+    },
+  });
+
+  const { open } = useAutoLogin();
+  // let modalTitle = ref('布尔台矿');
+  // let modalTitle = ref('yjl');
+  let modalCard = reactive([
+    { imgSrc: getAssetURL('company/home/hang.png'), label: '巷道长度', value: 0 },
+    { imgSrc: getAssetURL('company/home/people.png'), label: '人员总数', value: 0 },
+    { imgSrc: getAssetURL('company/home/car.png'), label: '车辆总数', value: 0 },
+  ]);
+
+  let windLfList = reactive([
+    { label: '有效风量率', value: '0' },
+    { label: '矿井漏风率', value: '0' },
+  ]);
+
+  // 选取各项数据是引用的索引,有些矿井存在多个关键阻力路线等,需要轮播
+  const pickIndex = ref(0);
+
+  const emit = defineEmits(['closeDialog']);
+
+  function getClose() {
+    emit('closeDialog', false);
+  }
+
+  // 根据新的数据更新依赖数据,核心方法
+  function update(newC) {
+    if (JSON.stringify(newC) != '{}') {
+      modalCard[0]['value'] = newC.sys_data.totallength || 0;
+      modalCard[1]['value'] = newC.sys_data.personCount || 0;
+      modalCard[2]['value'] = newC.sys_data.vehicleCount || 0;
+
+      windLfList[0].value = newC.sys_data.useM3Perent || '0';
+      const base = parseFloat(newC.sys_data.zongfengliang);
+      windLfList[1].value = (((base - parseFloat(newC.sys_data.zongjinfeng)) / base) * 100).toFixed(2);
+    }
+  }
+
+  watch(
+    () => props.centerDetail,
+    (newC) => {
+      // 轮播 index + 1,这样 update 取值是可以根据该 index 取值,对 1000 取余是为了处理 Infinity 后无法轮播的情况(虽然不可能出现)
+      pickIndex.value = (pickIndex.value + 1) % 1000;
+      update(newC);
+    },
+    {
+      immediate: true,
+      deep: true,
+    }
+  );
+
+  // 重新向到新的页面,业务上讲是公司端跳转矿端
+  function redictTo() {
+    if (!props.centerDetail.ip) return;
+    // 这里保德矿由于暂时网络通,无法用单点登录,需要自动登录
+    const url = `http://${props.centerDetail.ip}:8092/micro-vent-3dModal/dashboard/analysis`;
+    open(url);
+  }
+</script>
+<style lang="less" scoped>
+  @font-face {
+    font-family: 'douyuFont';
+    src: url('/@/assets/font/douyuFont.otf');
+  }
+
+  .dialogModal {
+    position: relative;
+    width: 568px;
+    height: 500px;
+    background: url('/@/assets/images/company/area-card2.png') no-repeat;
+    background-size: 100% 100%;
+    pointer-events: none;
+    z-index: 1000;
+
+    .modal-top {
+      position: absolute;
+      left: 32px;
+      top: 15px;
+      height: 30px;
+      line-height: 30px;
+      width: 90%;
+
+      .icon {
+        cursor: pointer;
+      }
+      .modal-title {
+        font-size: 14px;
+        font-family: 'douyuFont';
+        color: #fff;
+        margin-left: 10px;
+      }
+
+      .close {
+        position: absolute;
+        right: 12px;
+        color: #2cb6ff;
+        cursor: pointer;
+        pointer-events: auto;
+      }
+    }
+
+    .modal-card {
+      position: absolute;
+      top: 45px;
+      left: 50%;
+      transform: translate(-50%, 0);
+      height: 46px;
+      width: 90%;
+      margin-top: 15px;
+      display: flex;
+      justify-content: space-between;
+      background: url('../../../../../assets/images/company/modal-card.png') no-repeat center;
+      background-size: 100% 100%;
+
+      .card-box {
+        display: flex;
+        flex: 1;
+        height: 100%;
+        justify-content: center;
+        align-items: center;
+
+        &:first-child {
+          margin-left: 15px;
+        }
+
+        &:last-child {
+          margin-right: 10px;
+        }
+
+        .card-pic {
+          margin-right: 10px;
+        }
+
+        .card-content {
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+
+          .content-label {
+            font-size: 14px;
+            color: #ccd6df;
+          }
+
+          .content-value {
+            font-family: 'douyuFont';
+            font-size: 14px;
+            color: #fff;
+            text-align: center;
+          }
+        }
+      }
+    }
+
+    .react-bg {
+      position: relative;
+      width: 100%;
+      height: 100px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      color: #fff;
+      background: url('../../../../../assets/images/company/dust/react-bg.png') no-repeat;
+      background-size: 500px 80px;
+      background-position-x: center;
+      margin-bottom: 10px;
+      .title {
+        position: absolute;
+        left: 50px;
+        top: 1px;
+      }
+      .card-content {
+        position: relative;
+        display: flex;
+        justify-content: space-between;
+        left: 10px;
+        .card-item {
+          display: flex;
+          justify-content: space-between;
+          padding-left: 42px;
+          padding-right: 30px;
+          padding-top: 5px;
+        }
+        .card-left {
+          width: 180px;
+          height: 34px;
+          background: url('../../../../../assets/images/company/dust/bg1.png');
+          background-size: 100%;
+          margin-left: 0px;
+        }
+        .card-right {
+          width: 310px;
+          height: 34px;
+          background: url('../../../../../assets/images/company/dust/bg2.png');
+          background-size: 100%;
+          margin-right: 15px;
+        }
+      }
+    }
+    .modal-card1 {
+      top: 120px;
+    }
+    .modal-card2 {
+      top: 100px;
+    }
+    .modal-card3 {
+      position: relative;
+      width: 100%;
+      height: 140px;
+      top: 80px;
+      left: 34px;
+      width: 500px;
+      background: url('../../../../../assets/images/company/area3.png') no-repeat center;
+      background-size: 100% 100%;
+      background-position-x: center;
+      color: #fff;
+      .title {
+        margin-left: 15px;
+        padding-top: 8px;
+      }
+      .empty-content {
+        margin-top: 10px;
+      }
+    }
+  }
+</style>

+ 253 - 0
src/views/vent/home/clique/dustComponents/icon-light.vue

@@ -0,0 +1,253 @@
+<template>
+  <div class="icon-light">
+    <template v-for="(item, index) in pointList" :key="index">
+      <div class="icon-point" @click="openModal(item.code, item.label, item.leftV, item.topV)" :style="{ left: item.leftV, top: item.topV }">
+        <img :src="item.imgSrc" alt="" />
+        <span
+          :class="{ 'icon-text-c': item.align == 'center', 'icon-text-l': item.align == 'left', 'icon-text-r': item.align == 'right' }"
+          :style="{ color: item.textColor }"
+          >{{ item.label }}</span
+        >
+      </div>
+    </template>
+  </div>
+</template>
+
+<script setup lang="ts">
+  import { ref, defineEmits, inject, watch, nextTick } from 'vue';
+  import { getAssetURL } from '/@/utils/ui';
+
+  const emit = defineEmits(['showDetail']);
+  const globalConfig = inject('globalConfig');
+  let props = defineProps({
+    warningList: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+  });
+  // const iconWarningList = ref([]);
+  const warningLevel1 = getAssetURL('company/home/point1.png'); // 低风险
+  const warningLevel2 = getAssetURL('company/home/point2.png'); // 中风险
+  const warningLevel3 = getAssetURL('company/home/point3.png'); // 高风险
+  const warningLevel4 = getAssetURL('company/home/point4.png'); // 报警
+  let pointList = ref<any[]>(
+    globalConfig.History_Type == ''
+      ? [
+          { code: 'sdmtjtltmk', imgSrc: warningLevel1, label: 'lt', leftV: '327px', topV: '40px', textColor: '#fff', align: 'left' },
+          { code: 'sdmtjtcctrk', imgSrc: warningLevel1, label: 'cce', leftV: '291px', topV: '69px', textColor: '#fff', align: 'left' },
+          {
+            code: 'sdmtjtbetmk',
+            imgSrc: warningLevel1,
+            label: 'bet',
+            leftV: '286px',
+            topV: '97px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjtwlmlmk', imgSrc: warningLevel1, label: 'wlml', leftV: '327px', topV: '115px', textColor: '#fff', align: 'left' },
+          {
+            code: 'sdmtjtcctmk',
+            imgSrc: warningLevel1,
+            label: 'cc',
+            leftV: '346px',
+            topV: '132px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjtsgtmk', imgSrc: warningLevel1, label: 'skt', leftV: '373px', topV: '149px', textColor: '#fff', align: 'left' },
+          {
+            code: 'sdmtjtbltmk',
+            imgSrc: warningLevel1,
+            label: 'blt',
+            leftV: '408px',
+            topV: '184px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjthlgmk', imgSrc: warningLevel1, label: 'hlg', leftV: '445px', topV: '214px', textColor: '#fff', align: 'left' },
+          {
+            code: 'sdmtjtswmk',
+            imgSrc: warningLevel1,
+            label: 'sw',
+            leftV: '439px',
+            topV: '244px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjtdltmkhjtj', imgSrc: warningLevel1, label: 'hjt', leftV: '398px', topV: '265px', textColor: '#fff', align: 'left' },
+          { code: 'sdmtjtdltmk', imgSrc: warningLevel1, label: 'dlt', leftV: '492px', topV: '260px', textColor: '#fff', align: 'left' },
+          {
+            code: 'sdmtjtjjmk',
+            imgSrc: warningLevel1,
+            label: 'jj',
+            leftV: '565px',
+            topV: '413px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjtyjlmk', imgSrc: warningLevel1, label: 'yjl', leftV: '669px', topV: '308px', textColor: '#fff', align: 'left' },
+          {
+            code: 'sdmtjtbdmk',
+            imgSrc: warningLevel1,
+            label: 'bd',
+            leftV: '862px',
+            topV: '340px',
+            textColor: '#fff',
+            align: 'left',
+          },
+        ]
+      : [
+          { code: 'sdmtjtltmk', imgSrc: warningLevel1, label: '柳塔矿', leftV: '375px', topV: '135px', textColor: '#fff', align: 'right' },
+          { code: 'sdmtjtcctrk', imgSrc: warningLevel1, label: '寸草塔二矿', leftV: '269px', topV: '116px', textColor: '#fff', align: 'left' },
+          {
+            code: 'sdmtjtbetmk',
+            imgSrc: warningLevel1,
+            label: '布尔台矿',
+            leftV: '329px',
+            topV: '177px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjtwlmlmk', imgSrc: warningLevel1, label: '乌兰木伦矿', leftV: '432px', topV: '178px', textColor: '#fff', align: 'right' },
+          {
+            code: 'sdmtjtcctmk',
+            imgSrc: warningLevel1,
+            label: '寸草塔矿',
+            leftV: '396px',
+            topV: '224px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjtsgtmk', imgSrc: warningLevel1, label: '石圪台矿', leftV: '470px', topV: '236px', textColor: '#fff', align: 'right' },
+          {
+            code: 'sdmtjtbltmk',
+            imgSrc: warningLevel1,
+            label: '补连塔矿',
+            leftV: '432px',
+            topV: '282px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjthlgmk', imgSrc: warningLevel1, label: '哈拉沟矿', leftV: '511px', topV: '302px', textColor: '#fff', align: 'right' },
+          {
+            code: 'sdmtjtswmk',
+            imgSrc: warningLevel1,
+            label: '上湾矿',
+            leftV: '381px',
+            topV: '334px',
+            textColor: '#fff',
+            align: 'left',
+          },
+          { code: 'sdmtjtdltmkhjtj', imgSrc: warningLevel1, label: '活鸡兔井', leftV: '518px', topV: '358px', textColor: '#fff', align: 'left' },
+          { code: 'sdmtjtdltmk', imgSrc: warningLevel1, label: '大柳塔井', leftV: '588px', topV: '338px', textColor: '#fff', align: 'right' },
+          {
+            code: 'sdmtjtjjmk',
+            imgSrc: warningLevel1,
+            label: '锦界矿',
+            leftV: '575px',
+            topV: '460px',
+            textColor: '#fff',
+            align: 'center',
+          },
+          { code: 'sdmtjtyjlmk', imgSrc: warningLevel1, label: '榆家梁矿', leftV: '699px', topV: '307px', textColor: '#fff', align: 'center' },
+          {
+            code: 'sdmtjtbdmk',
+            imgSrc: warningLevel1,
+            label: '保德矿',
+            leftV: '892px',
+            topV: '200px',
+            textColor: '#fff',
+            align: 'center',
+          },
+        ]
+  );
+  function openModal(code, label, leftV, topV) {
+    emit('showDetail', code, label, leftV, topV);
+  }
+  watch(
+    () => props.warningList,
+    (newVal: any, oldVal: any) => {
+      let newPointList;
+      if (newVal && oldVal && newVal.length == oldVal.length) {
+        for (let i = 0; i < newVal.length; i++) {
+          if (newVal[i].isWarning !== oldVal[i].isWarning) {
+            if (!newPointList) newPointList = [...pointList.value];
+            const index = (newPointList as []).findIndex((item) => item['code'] === newVal[i]['orgcode']);
+            newPointList[index]['imgSrc'] = newVal[i].isWarning ? warningLevel4 : warningLevel1;
+            newPointList[index]['textColor'] = newVal[i].isWarning ? '#ff5e00' : '#fff';
+          }
+        }
+      } else {
+        newPointList = [...pointList.value];
+        for (let i = 0; i < newVal.length; i++) {
+          const index = (newPointList as []).findIndex((item) => item['code'] === newVal[i]['orgcode']);
+          newPointList[index]['imgSrc'] = newVal[i].isWarning ? warningLevel4 : warningLevel1;
+          newPointList[index]['textColor'] = newVal[i].isWarning ? '#ff5e00' : '#fff';
+        }
+      }
+      if (newPointList) {
+        pointList.value = newPointList;
+      }
+    }
+  );
+</script>
+
+<style lang="less" scoped>
+  .icon-light {
+    position: relative;
+    width: 100%;
+    height: 100%;
+
+    .icon-point {
+      display: flex;
+      align-items: center;
+      position: absolute;
+
+      img {
+        width: 35px;
+        height: 35px;
+        cursor: pointer;
+      }
+
+      span {
+        font-size: 12px;
+        padding: 0px 5px;
+        color: #ffffff;
+        // background-color: rgba(12, 13, 13);
+      }
+      .icon-text-l {
+        position: absolute;
+        font-size: 12px;
+        padding: 0px 5px;
+        // background-color: rgba(12, 13, 13);
+        display: block;
+        width: 100px;
+        text-align: center;
+        // top: -20px;
+        left: -75px;
+      }
+      .icon-text-r {
+        position: absolute;
+        font-size: 12px;
+        padding: 0px 5px;
+        display: block;
+        width: 100px;
+        text-align: center;
+        // top: -20px;
+        left: 12px;
+      }
+      .icon-text-c {
+        position: absolute;
+        font-size: 12px;
+        padding: 0px 5px;
+        display: block;
+        width: 60px;
+        text-align: center;
+        top: -20px;
+        left: -12px;
+      }
+    }
+  }
+</style>

+ 328 - 0
src/views/vent/home/clique/dustComponents/measure-detail.vue

@@ -0,0 +1,328 @@
+<template>
+  <div class="content-box">
+    <div class="title">{{ title }}</div>
+    <div class="risk-select">
+      <a-select style="width: 358px; font-size: 16px" v-model:value="selectVal" allowClear class="code-mode-select" @change="changeSelect">
+        <a-select-option v-for="item in selectList" :key="item.orgname" :value="item.orgcode">{{ item.orgname }} </a-select-option>
+      </a-select>
+      <ArrowRightOutlined class="go-icon" @click="goDetail()" />
+    </div>
+    <div class="dust-content">
+      <div class="dust-scroll-content">
+        <!-- <template v-for="(data, selectIndex) in selectData" :key="selectIndex">
+          <div class="monitor-item">
+            <div class="title-box">{{ data['devicePos'] }}</div>
+            <div class="monitor-content-top">
+              <div v-for="(dustItem, index) in dustMonitorColumnTop" :key="index" class="top-item-box" :class="`top-item-box-${index + 1}`">
+                <div class="item-top-title">{{ dustItem.title }}</div>
+                <div class="item-top-value">{{ data[dustItem.code] }}</div>
+              </div>
+            </div>
+            <div class="monitor-content-bottom">
+              <div v-for="(dustItem, index) in dustMonitorColumnBootom" :key="index" class="bottom-item-box" :class="`bottom-item-box-${index + 1}`">
+                <div class="item-bottom-title">{{ dustItem.title }}</div>
+                <div class="item-bottom-value">{{ data[dustItem.code] }}</div>
+              </div>
+            </div>
+          </div>
+        </template> -->
+        <a-carousel dot-position="left" dotsClass="dots-class" :dots="true" :autoplay="true">
+          <template v-for="(data, selectIndex) in selectData" :key="selectIndex">
+            <div class="monitor-item">
+              <div class="title-box">{{ data['devicePos'] }}</div>
+              <div class="monitor-content-top">
+                <div v-for="(dustItem, index) in dustMonitorColumnTop" :key="index" class="top-item-box" :class="`top-item-box-${index + 1}`">
+                  <div class="item-top-title">{{ dustItem.title }}</div>
+                  <div class="item-top-value">{{ data[dustItem.code] }}</div>
+                </div>
+              </div>
+              <div class="monitor-content-bottom">
+                <div
+                  v-for="(dustItem, index) in dustMonitorColumnBootom"
+                  :key="index"
+                  class="bottom-item-box"
+                  :class="`bottom-item-box-${index + 1}`"
+                >
+                  <div class="item-bottom-title">{{ dustItem.title }}</div>
+                  <div class="item-bottom-value">{{ data[dustItem.code] }}</div>
+                </div>
+              </div>
+            </div>
+          </template>
+        </a-carousel>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+  import { ref, defineProps, watch } from 'vue';
+  import { dustMonitorColumnTop, dustMonitorColumnBootom } from '../dust.data';
+  import { ArrowRightOutlined } from '@ant-design/icons-vue';
+  import { useGo } from '/@/hooks/web/usePage';
+
+  let props = defineProps({
+    compositeData: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+  });
+  const go = useGo();
+  let selectVal = ref('sdmtjtbetmk');
+  let selectList = ref<any>([]);
+  const selectData = ref<any>([]);
+  const title = ref('粉尘测点监测详情');
+
+  function changeSelect(val) {
+    const index = selectList.value.findIndex((item) => item['orgcode'] == val);
+    if (index > -1) {
+      selectData.value = selectList.value[index]['dust_data'];
+    }
+  }
+  function goDetail() {
+    //本地模拟跳转
+    go('/staticSheets/dust');
+  }
+  watch(
+    () => props.compositeData,
+    (newS, oldV) => {
+      if (newS.length != 0) {
+        selectList.value = newS;
+        debugger;
+        if (!oldV || oldV.length == 0) {
+          const index = selectList.value.findIndex((item) => item['orgcode'] == selectVal.value);
+          if (index > -1) {
+            selectData.value = selectList.value[index]['dust_data'];
+          }
+        }
+      }
+    },
+    {
+      immediate: true,
+      deep: true,
+    }
+  );
+</script>
+
+<style lang="less" scoped>
+  @font-face {
+    font-family: 'douyuFont';
+    src: url('../../../../assets/font/douyuFont.otf');
+  }
+
+  .content-box {
+    position: relative;
+    width: 100%;
+    height: 100%;
+
+    .title {
+      position: absolute;
+      left: 50px;
+      top: 12px;
+      color: #fff;
+      font-family: 'douyuFont';
+      font-size: 14px;
+    }
+    .risk-select {
+      position: relative;
+      width: 90%;
+      height: 30px;
+      left: 50%;
+      transform: translate(-50%, 0);
+      top: 45px;
+
+      background: url('../../../../../assets/images/company/content-label.png') no-repeat center;
+      background-size: 100% 100%;
+      z-index: 9999;
+
+      .zxm-select {
+        position: absolute;
+        top: 50%;
+        transform: translate(0, -50%);
+
+        &:nth-child(1) {
+          left: 10px;
+        }
+      }
+      .go-icon {
+        position: absolute;
+        right: 2px;
+        top: 8px;
+        color: #fff;
+        cursor: pointer;
+        &:hover {
+          color: #00d8ff;
+        }
+      }
+    }
+
+    .dust-content {
+      height: 100%;
+      padding-top: 52px;
+      padding-left: 20px;
+      box-sizing: border-box;
+      .dust-scroll-content {
+        width: 100%;
+        height: 420px;
+        overflow-y: auto;
+        overflow-x: hidden;
+        .monitor-item {
+          margin-bottom: 15px;
+          .title-box {
+            color: #fff;
+            width: 100%;
+            height: 40px;
+            margin-left: 5px;
+            margin-top: 00px;
+            margin-bottom: 5px;
+            padding-left: 40px;
+            padding-top: 6px;
+            background: url('../../../../../assets//images//company//lentj.png') no-repeat;
+            background-size: 199px 100%;
+            font-size: 15px;
+            font-weight: 600;
+          }
+          .monitor-content-top {
+            width: 100%;
+            display: flex;
+            flex-direction: row;
+            flex-wrap: wrap;
+            color: #fff;
+            .top-item-box {
+              width: 193px;
+              height: 64px;
+              display: flex;
+              justify-content: space-between;
+              align-items: center;
+              padding: 0 28px;
+            }
+            .top-item-box-1 {
+              background: url('../../../../../assets//images//company//dust//tip-bg-1.png');
+            }
+            .top-item-box-2 {
+              background: url('../../../../../assets//images//company//dust//tip-bg-2.png');
+            }
+            .top-item-box-3 {
+              background: url('../../../../../assets//images//company//dust//tip-bg-3.png');
+            }
+            .top-item-box-4 {
+              background: url('../../../../../assets//images//company//dust//tip-bg-4.png');
+            }
+          }
+          .monitor-content-bottom {
+            padding: 0 20px;
+            color: #fff;
+            .bottom-item-box {
+              width: 358px;
+              height: 43px;
+              display: flex;
+              justify-content: space-between;
+              align-items: center;
+              margin-top: 14px;
+              position: relative;
+              .item-bottom-title {
+                margin-left: 65px;
+              }
+              .item-bottom-value {
+                margin-right: 20px;
+              }
+            }
+            .bottom-item-box-1 {
+              background: url('../../../../../assets//images//company//dust//tip-bg1-1.png');
+              &::after {
+                content: '';
+                width: 25px;
+                height: 25px;
+                position: absolute;
+                left: 13px;
+                top: 7px;
+                background: url('../../../../../assets//images//company//dust//dustCon-icon.png');
+              }
+            }
+            .bottom-item-box-2 {
+              background: url('../../../../../assets//images//company//dust//tip-bg1-2.png');
+              &::after {
+                content: '';
+                width: 25px;
+                height: 25px;
+                position: absolute;
+                left: 12px;
+                top: 6px;
+                background: url('../../../../../assets//images//company//dust//respirableDustCon-icon.png');
+              }
+            }
+            .bottom-item-box-3 {
+              background: url('../../../../../assets//images//company//dust//tip-bg1-1.png');
+              &::after {
+                content: '';
+                width: 28px;
+                height: 22px;
+                position: absolute;
+                left: 10px;
+                top: 7px;
+                background: url('../../../../../assets//images//company//dust//SiO2Content-icon.png');
+              }
+            }
+            .bottom-item-box-4 {
+              background: url('../../../../../assets//images//company//dust//tip-bg1-2.png');
+              &::after {
+                content: '';
+                width: 26px;
+                height: 20px;
+                position: absolute;
+                left: 11px;
+                top: 8px;
+                background: url('../../../../../assets//images//company//dust//respirableDustRatio-icon.png');
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  .dots-class {
+    width: 8px;
+  }
+  ::v-deep .slick-dots-left {
+    left: 0 !important;
+  }
+  ::v-deep .zxm-select-single:not(.zxm-select-customize-input) .zxm-select-selector {
+    height: 24px;
+  }
+
+  ::v-deep .zxm-select-single:not(.zxm-select-customize-input) .zxm-select-selector .zxm-select-selection-search-input {
+    height: 24px;
+  }
+
+  ::v-deep .zxm-select-selection-placeholder {
+    color: #fff !important;
+    line-height: 22px !important;
+  }
+
+  ::v-deep .zxm-select-single:not(.zxm-select-customize-input) .zxm-select-selector::after {
+    line-height: 24px;
+  }
+
+  ::v-deep .zxm-select:not(.zxm-select-customize-input) .zxm-select-selector {
+    background-color: transparent;
+    border-top: 0px;
+    border-bottom: 0px;
+    border-left: 2px solid;
+    border-right: 2px solid;
+    border-image: linear-gradient(to bottom, transparent, rgba(49, 184, 255, 1), transparent) 1 1 1;
+  }
+
+  ::v-deep .zxm-select-arrow {
+    color: #fff !important;
+  }
+
+  ::v-deep .zxm-select-selection-item {
+    color: #fff !important;
+  }
+
+  ::v-deep .zxm-select-single .zxm-select-selector .zxm-select-selection-item {
+    line-height: 24px !important;
+  }
+</style>

+ 245 - 0
src/views/vent/home/clique/dustComponents/measure-point.vue

@@ -0,0 +1,245 @@
+<template>
+  <div class="measure-point">
+    <div class="title">{{ roadTitle }}</div>
+    <div class="measure-content">
+      <div class="echart-box">
+        <div ref="measureRef" class="measure"></div>
+      </div>
+    </div>
+  </div>
+</template>
+<script lang="ts" setup>
+  // 该组件和wind-road组件基本上一摸一样,只不过该组件是适配首页中间的卡片而做的
+  import { ref, reactive, nextTick, defineProps, watch, onMounted } from 'vue';
+  import { SvgIcon } from '/@/components/Icon';
+  import * as echarts from 'echarts';
+
+  let props = defineProps({
+    measureData: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  });
+  const roadTitle = '监测点位统计与分析';
+  const measureRef = ref();
+  // let xData = ref<any[]>([]);
+  // let yData = ref<any[]>([]);
+  // let maxData = reactive<any[]>([]);
+
+  function getOption() {
+    nextTick(() => {
+      const myChart = echarts.init(measureRef.value);
+      // let color = ['#FF9A22', '#FFD56E', '#00EC28', '#5DF076', '#12B9DB', '#6F8EF2'];
+      let option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow',
+          },
+        },
+        legend: {
+          textStyle: {
+            color: '#ffffff', // 字体颜色
+          },
+        },
+        grid: {
+          top: '40',
+          left: '10',
+          bottom: '10',
+          right: '10',
+          containLabel: true,
+        },
+        xAxis: {
+          type: 'category',
+          data: [
+            '柳塔矿',
+            '寸草塔二矿',
+            '布尔台矿',
+            '乌兰木伦矿',
+            '寸草塔矿',
+            '石圪台矿',
+            '补连塔矿',
+            '哈拉沟矿',
+            '上湾矿',
+            '活鸡兔井',
+            '大柳塔井',
+            '锦界矿',
+            '榆家梁矿',
+            '保德矿',
+          ],
+          // data: [5, 7, 5, 8, 10, 6, 9, 11, 6, 7, 4, 8, 9, 7],
+          //data: [0, 1, 0, 0, 2, 0, 1, 0, 0, 0, 0, 1, 2, 0],
+          axisLabel: {
+            show: true,
+            color: '#ffffff',
+            rotate: 0,
+            formatter: function (params) {
+              let newParamsName = '';
+              const paramsNameNumber = params.length;
+              const provideNumber = 3; // 单行显示文字个数
+              const rowNumber = Math.ceil(paramsNameNumber / provideNumber);
+              if (paramsNameNumber > provideNumber) {
+                for (let p = 0; p < rowNumber; p++) {
+                  let tempStr = '';
+                  const start = p * provideNumber;
+                  const end = start + provideNumber;
+                  if (p === rowNumber - 1) {
+                    tempStr = params.substring(start, paramsNameNumber);
+                  } else {
+                    tempStr = params.substring(start, end) + '\n';
+                  }
+                  newParamsName += tempStr;
+                }
+              } else {
+                newParamsName = params;
+              }
+              return newParamsName;
+            },
+          },
+          // data: xData.value,
+        },
+        yAxis: [
+          {
+            type: 'value',
+            splitLine: {
+              lineStyle: {
+                color: 'rgba(21,80,126,.3)',
+                type: 'dashed', //设置网格线类型 dotted:虚线   solid:实线
+              },
+              // show: item.linetype == 'line' ? true : false,
+              show: true,
+            },
+          },
+        ],
+
+        series: [
+          {
+            name: '测点异常数',
+            type: 'bar',
+            stack: 'Ad',
+            barMaxWidth: '24',
+            emphasis: {
+              focus: 'series',
+            },
+            itemStyle: {
+              color: '#F56731',
+            },
+            label: {
+              show: true,
+              formatter: (params) => (params.value > 0 ? params.value : ''),
+            },
+            data: [0, 1, 0, 0, 2, 0, 1, 0, 0, 0, 0, 1, 2, 0],
+          },
+          {
+            name: '测点正常数',
+            type: 'bar',
+            stack: 'Ad',
+            barMaxWidth: '24',
+            emphasis: {
+              focus: 'series',
+            },
+            itemStyle: {
+              color: '#00E8FFBB',
+            },
+
+            label: {
+              show: true,
+              textStyle: {
+                //数值样式
+                color: '#000',
+              },
+            },
+            data: [5, 6, 5, 8, 8, 6, 8, 11, 6, 7, 4, 7, 7, 7],
+          },
+          {
+            name: '',
+            type: 'bar',
+            // stack: 'Ad',
+            barGap: '-100%',
+            barMaxWidth: '24',
+            z: 1,
+            emphasis: {
+              focus: 'series',
+            },
+            itemStyle: {
+              color: '#00E8FF00',
+            },
+            tooltip: {
+              show: false,
+            },
+            label: {
+              show: true,
+              position: 'top', //在上方显示
+              textStyle: {
+                //数值样式
+                color: '#fff',
+                fontSize: 14,
+              },
+            },
+            data: [5, 7, 5, 8, 10, 6, 9, 11, 6, 7, 4, 8, 9, 7],
+          },
+        ],
+      };
+      myChart.setOption(option);
+      window.onresize = function () {
+        myChart.resize();
+      };
+    });
+  }
+
+  watch(
+    () => props.measureData,
+    (newV, oldV) => {
+      if (JSON.stringify(newV) != '{}') {
+        getOption();
+      }
+    },
+    {
+      immediate: true,
+      deep: true,
+    }
+  );
+  onMounted(() => {
+    getOption();
+  });
+</script>
+<style lang="less" scoped>
+  @font-face {
+    font-family: 'douyuFont';
+    src: url('../../../../assets/font/douyuFont.otf');
+  }
+
+  .measure-point {
+    width: 100%;
+    height: 100%;
+    position: relative;
+
+    .title {
+      position: absolute;
+      left: 50px;
+      top: 10px;
+      color: #fff;
+      font-family: 'douyuFont';
+      font-size: 14px;
+    }
+
+    .measure-content {
+      // width: 100%;
+      // position: relative;
+      height: 100%;
+      padding: 42px 40px 15px 40px;
+      box-sizing: border-box;
+      .echart-box {
+        // position: absolute;
+        width: 100%;
+        height: 100%;
+        .measure {
+          width: 100%;
+          height: 100%;
+        }
+      }
+    }
+  }
+</style>

+ 164 - 0
src/views/vent/home/clique/dustComponents/mine-wind.vue

@@ -0,0 +1,164 @@
+<template>
+  <div class="mineWind">
+    <div class="mine-title">{{ mineTitle }}</div>
+    <div class="mine-content">
+      <div class="content-label">
+        <div class="label-t" v-for="(ite, ind) in labelList" :key="ind">{{ ite.name }}</div>
+      </div>
+      <div class="content-text">
+        <template v-for="(item, index) in mineData" :key="index">
+          <div
+            class="text"
+            :style="{ color: item['isWarning'] ? '#F56731' : '#fff', fontWeight: item['isWarning'] ? '600' : 'normal' }"
+            @click="goDetail(item['orgcode'])"
+          >
+            <span>{{ item.deviceName }}</span>
+            <span>{{ filterBadValue(item.jf) }}</span>
+            <span>{{ filterBadValue(item.hf) }}</span>
+            <span>{{ filterBadValue(item.xf) }}</span>
+          </div>
+        </template>
+      </div>
+    </div>
+  </div>
+</template>
+<script lang="ts" setup>
+  import { ref, reactive, watch, defineProps } from 'vue';
+  import { useGo } from '/@/hooks/web/usePage';
+
+  let props = defineProps({
+    airKjStatus: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+  });
+  const go = useGo();
+  let mineTitle = ref('矿井通风状态监测');
+  let labelList = reactive([{ name: '矿井名称' }, { name: '总进风量' }, { name: '总回风量' }, { name: '总需风量' }]);
+  let mineData = ref<any[]>([]);
+
+  // 过滤不合法的值,小于5000的视为传感器出错
+  function filterBadValue(val: number | string) {
+    const valid = parseInt(val) > 5000;
+    return valid ? val : '/';
+  }
+  function goDetail(orgcode: string) {
+    // 跳转实际矿端风量监测页面
+    // 模拟跳转
+    go('/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=windrect');
+  }
+
+  watch(
+    () => props.airKjStatus,
+    (newA, oldA) => {
+      console.log(newA, 'airKjStatus-----------');
+      if (newA.length != 0) {
+        mineData.value = newA;
+      }
+    },
+    {
+      immediate: true,
+      deep: true,
+    }
+  );
+</script>
+<style lang="less" scoped>
+  @font-face {
+    font-family: 'douyuFont';
+    src: url('../../../../assets/font/douyuFont.otf');
+  }
+
+  .mineWind {
+    position: relative;
+    width: 100%;
+    height: 100%;
+
+    .mine-title {
+      position: absolute;
+      left: 50px;
+      top: 12px;
+      color: #fff;
+      font-family: 'douyuFont';
+      font-size: 14px;
+    }
+
+    .mine-content {
+      height: 100%;
+      padding: 62px 0px 28px 0px;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+
+      .content-label {
+        width: 366px;
+        height: 32px;
+        display: flex;
+        justify-content: space-around;
+        align-items: center;
+        background: url('../../../../../assets/images/company/content-label.png') no-repeat;
+        .label-t {
+          color: #3df6ff;
+          text-align: center;
+          font-size: 14px;
+          &:nth-child(1) {
+            width: 31%;
+          }
+          &:nth-child(2) {
+            width: 23%;
+          }
+          &:nth-child(3) {
+            width: 23%;
+          }
+          &:nth-child(4) {
+            width: 23%;
+          }
+        }
+      }
+
+      .content-text {
+        height: calc(100% - 32px);
+        width: 378px;
+        display: flex;
+        flex-direction: column;
+        // justify-content: space-around;
+        justify-content: flex-start;
+        padding: 5px 0px;
+        box-sizing: border-box;
+        overflow-y: auto;
+        .text {
+          width: 100%;
+          height: 28px;
+          display: flex;
+          justify-content: space-around;
+          align-items: flex-start;
+          background: url('../../../../../assets/images/company/content-text.png') no-repeat;
+          color: #fff;
+          margin-bottom: 5px;
+          cursor: pointer;
+          &:hover {
+            opacity: 0.8;
+          }
+          span {
+            display: inline-block;
+            text-align: center;
+            &:nth-child(1) {
+              width: 31%;
+            }
+            &:nth-child(2) {
+              width: 23%;
+            }
+            &:nth-child(3) {
+              width: 23%;
+            }
+            &:nth-child(4) {
+              width: 23%;
+            }
+          }
+        }
+      }
+    }
+  }
+</style>

+ 752 - 0
src/views/vent/home/clique/dustComponents/risk-warn.vue

@@ -0,0 +1,752 @@
+<template>
+  <div class="riskWarn">
+    <div class="risk-title">{{ riskTitle }}</div>
+    <div class="risk-select">
+      <a-select style="width: 358px" v-model:value="selectVal" allowClear class="code-mode-select" @change="changeSelect">
+        <a-select-option v-for="item in selectList" :key="item.orgname" :value="item.orgcode">{{ item.orgname }} </a-select-option>
+      </a-select>
+      <ArrowRightOutlined class="go-icon" @click="goDetail()" />
+    </div>
+    <div class="risk-content">
+      <div class="center-box">
+        <div class="animation-box">
+          <canvas class="rain"></canvas>
+
+          <div
+            class="bottom"
+            :class="{
+              bottom1: centerData.levels == 101,
+              bottom2: centerData.levels == 102,
+              bottom3: centerData.levels == 103,
+              bottom4: centerData.levels == 104,
+              bottom5: centerData.levels == 201,
+            }"
+          >
+            <div class="text-box">
+              <div class="text1">{{ parseLevel(centerData.levels) }}</div>
+              <div class="text2">风险分析</div>
+            </div>
+            <div class="icon-animation"></div>
+          </div>
+
+          <div class="total-item-monitor-box">
+            <div class="item item2">
+              <div class="icon-box">
+                <div class="icon"></div>
+              </div>
+              <div class="item-monitor-box">
+                <span class="title">综采防控</span>
+                <span class="value" :class="`value${centerData.sb}`">低风险</span>
+              </div>
+            </div>
+            <div class="item item3">
+              <div class="icon-box">
+                <div class="icon"></div>
+              </div>
+              <div class="item-monitor-box">
+                <span class="title">防爆防控</span>
+                <span class="value" :class="`value${centerData.ws}`">低风险</span>
+              </div>
+            </div>
+            <div class="item item4">
+              <div class="icon-box">
+                <div class="icon"></div>
+              </div>
+              <div class="item-monitor-box">
+                <span class="title">掘进防控</span>
+                <span class="value" :class="`value${centerData.fc}`">低风险</span>
+              </div>
+            </div>
+            <div class="item item5">
+              <div class="icon-box">
+                <div class="icon"></div>
+              </div>
+              <div class="item-monitor-box">
+                <span class="title">运输防控</span>
+                <span class="value" :class="`value${centerData.tf}`">低风险</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import { ref, reactive, onMounted, defineProps, watch } from 'vue';
+  import { rainBg } from '/@/utils/ui.js';
+  import { ArrowRightOutlined } from '@ant-design/icons-vue';
+  import { useGo } from '/@/hooks/web/usePage';
+
+  let props = defineProps({
+    earlyWarn: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+  });
+  const go = useGo();
+  let selectVal = ref('sdmtjtbetmk');
+  let selectList = ref<any>([]);
+  let warnData = ref<any[]>([]);
+
+  let riskTitle = ref('矿井粉尘分析与预警');
+  let centerData = reactive({
+    levels: 101,
+    fire: '',
+    sb: '',
+    ws: '',
+    fc: '',
+    tf: '',
+  });
+  function goDetail() {
+    //本地模拟跳转
+    go('/dust/warn/home?p=0');
+  }
+  //下拉框选项切换
+  function changeSelect(val) {
+    // selectVal.value = val;
+    // let datas = warnData.value.filter((v) => v.orgname == selectVal.value)[0];
+    // centerData.levels = datas.sys_warndata.info.sysInfo.synthesizeS.maxLevel;
+    // centerData.fire = datas.sys_warndata.info.sysInfo.fireS.maxLevel;
+    // centerData.sb = datas.sys_warndata.info.sysInfo.deviceWarnInfo.maxLevel;
+    // centerData.ws = datas.sys_warndata.info.sysInfo.gasS.maxLevel;
+    // centerData.fc = datas.sys_warndata.info.sysInfo.dustS.maxLevel;
+    // centerData.tf = datas.sys_warndata.info.sysInfo.ventS.maxLevel;
+  }
+
+  watch(
+    () => props.earlyWarn,
+    (newE, oldE) => {
+      console.log(newE, '预警与分析数据------------');
+      if (newE.length != 0) {
+        selectList.value = newE;
+      }
+    },
+    {
+      immediate: true,
+      deep: true,
+    }
+  );
+
+  function parseLevel(lv: string | number) {
+    const l = parseInt(lv);
+    switch (l) {
+      case 0:
+        return '低风险';
+      case 101:
+        return '低风险';
+      case 102:
+        return '一般风险';
+      case 103:
+        return '较大风险';
+      case 104:
+        return '重大风险';
+      case 201:
+        return '报警';
+      default:
+        return '低风险';
+    }
+  }
+
+  onMounted(async () => {
+    rainBg('rain', 'animation-box');
+  });
+</script>
+
+<style lang="less" scoped>
+  @font-face {
+    font-family: 'douyuFont';
+    src: url('../../../../assets/font/douyuFont.otf');
+  }
+
+  .riskWarn {
+    position: relative;
+    width: 100%;
+    height: 100%;
+
+    .risk-title {
+      position: absolute;
+      left: 50px;
+      top: 10px;
+      color: #fff;
+      font-family: 'douyuFont';
+      font-size: 14px;
+    }
+
+    .risk-select {
+      position: absolute;
+      width: 90%;
+      height: 30px;
+      left: 50%;
+      transform: translate(-50%, 0);
+      top: 42px;
+
+      // display: flex;
+      // justify-content: space-between;
+      // align-items: center;
+      background: url('../../../../../assets/images/company/content-label.png') no-repeat center;
+      background-size: 100% 100%;
+      z-index: 9999;
+
+      .zxm-select {
+        position: absolute;
+        top: 50%;
+        transform: translate(0, -50%);
+
+        &:nth-child(1) {
+          left: 10px;
+        }
+      }
+      .go-icon {
+        position: absolute;
+        right: 2px;
+        top: 8px;
+        color: #fff;
+        cursor: pointer;
+        &:hover {
+          color: #00d8ff;
+        }
+      }
+    }
+
+    .risk-content {
+      height: 100%;
+      padding: 55px 0px 20px 0px;
+      box-sizing: border-box;
+
+      .center-box {
+        width: 100%;
+        height: 100%;
+        display: flex;
+        flex-direction: column;
+        justify-content: flex-end;
+
+        .animation-box {
+          height: fit-content;
+          flex: 1;
+          margin-bottom: 10px;
+          background: url('/@/assets/images/vent/alarm/center-bg.png');
+          background-size: contain;
+          background-position: center;
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          position: relative;
+          top: 0px;
+
+          .rain {
+            position: absolute;
+          }
+
+          .bottom {
+            width: 90%;
+            height: 90%;
+            background-repeat: no-repeat;
+            position: absolute;
+            z-index: 999;
+
+            &::before {
+              // content: '';
+              // width: 230px;
+              // height: 234px;
+              // position: absolute;
+              // left: 112px;
+              // top: -19px;
+              // background: url('/@/assets/images/vent/alarm/warning-bg.png') no-repeat;
+              // background-size: 92% 100%;
+
+              content: '';
+              width: 180px;
+              height: 220px;
+              position: absolute;
+              left: 113px;
+              top: 17px;
+              background: url(/src/assets/images/vent/alarm/warning-bg.png) no-repeat;
+              background-size: 90% 100%;
+            }
+
+            .animation1 {
+              width: 320px;
+              height: 78px;
+              position: absolute;
+              top: 4px;
+              left: 31px;
+              z-index: 999;
+
+              .ball {
+                position: absolute;
+                width: 12px;
+                height: 12px;
+                background: radial-gradient(closest-side, #e1f7f8, #e1f7f800);
+                border-radius: 6px;
+                background-size: cover;
+                offset-path: path(
+                  'M186.917-.75c12.711,0,25.415.263,37.757.783,12.03.506,23.863,1.262,35.171,2.245,11.1.966,21.816,2.161,31.835,3.553,9.928,1.379,19.265,2.963,27.751,4.709s16.2,3.668,22.92,5.713A120.653,120.653,0,0,1,359.7,22.825a40.842,40.842,0,0,1,11.018,7.3c2.568,2.581,3.87,5.239,3.87,7.9s-1.3,5.322-3.87,7.9a40.842,40.842,0,0,1-11.018,7.3,120.653,120.653,0,0,1-17.345,6.572c-6.716,2.044-14.428,3.966-22.92,5.713s-17.823,3.329-27.751,4.709c-10.02,1.392-20.731,2.588-31.835,3.553-11.308.984-23.142,1.739-35.171,2.245-12.343.519-25.046.783-37.757.783s-25.415-.263-37.757-.783c-12.03-.506-23.863-1.262-35.171-2.245-11.1-.966-21.816-2.161-31.835-3.553-9.928-1.379-19.265-2.963-27.751-4.709s-16.2-3.668-22.92-5.713a120.652,120.652,0,0,1-17.345-6.572,40.841,40.841,0,0,1-11.018-7.3c-2.568-2.581-3.87-5.239-3.87-7.9s1.3-5.322,3.87-7.9a40.842,40.842,0,0,1,11.018-7.3,120.651,120.651,0,0,1,17.345-6.572C38.2,14.208,45.91,12.286,54.4,10.54S72.225,7.211,82.153,5.831c10.02-1.392,20.731-2.588,31.835-3.553C125.3,1.294,137.13.539,149.16.033,161.5-.487,174.206-.75,186.917-.75Zm0,76.98c49.941,0,96.885-4,132.186-11.257,17.134-3.523,30.578-7.623,39.96-12.184,9.642-4.688,14.53-9.653,14.53-14.759s-4.889-10.072-14.53-14.759c-9.382-4.561-22.826-8.66-39.96-12.184C283.8,3.827,236.858-.171,186.917-.171s-96.885,4-132.186,11.257C37.6,14.61,24.153,18.709,14.771,23.27,5.129,27.958.241,32.923.241,38.029S5.129,48.1,14.771,52.789c9.382,4.561,22.826,8.661,39.96,12.184C90.032,72.232,136.976,76.23,186.917,76.23Z'
+                );
+                animation: 10s linear 0s infinite alternate ball;
+              }
+            }
+
+            .animation2 {
+              width: 340px;
+              height: 92px;
+              position: absolute;
+              top: 36px;
+              left: 12px;
+              z-index: 999;
+
+              // animation: rotate4 3s linear infinite;
+              .ball1 {
+                position: absolute;
+                width: 12px;
+                height: 12px;
+                background: radial-gradient(closest-side, #e1f7f8, #e1f7f800);
+                border-radius: 6px;
+                background-size: cover;
+                offset-path: path(
+                  'M206.689-.75c14.05,0,28.092.311,41.735.925,13.3.6,26.377,1.492,38.877,2.655,12.275,1.142,24.114,2.555,35.189,4.2,10.974,1.631,21.294,3.5,30.674,5.567s17.91,4.337,25.335,6.754a128.134,128.134,0,0,1,19.172,7.771,45.082,45.082,0,0,1,12.178,8.633c2.838,3.051,4.278,6.195,4.278,9.344s-1.439,6.293-4.278,9.344a45.082,45.082,0,0,1-12.178,8.633A128.134,128.134,0,0,1,378.5,70.847c-7.424,2.417-15.948,4.69-25.335,6.754s-19.7,3.936-30.674,5.567c-11.075,1.646-22.915,3.059-35.189,4.2-12.5,1.163-25.58,2.056-38.877,2.655-13.643.614-27.685.925-41.735.925s-28.092-.311-41.735-.925c-13.3-.6-26.377-1.492-38.877-2.655-12.275-1.142-24.114-2.555-35.189-4.2-10.974-1.631-21.294-3.5-30.674-5.567S42.3,73.265,34.879,70.847a128.133,128.133,0,0,1-19.173-7.771A45.082,45.082,0,0,1,3.528,54.444C.689,51.393-.75,48.249-.75,45.1s1.439-6.293,4.278-9.344a45.083,45.083,0,0,1,12.178-8.633,128.133,128.133,0,0,1,19.173-7.771c7.424-2.417,15.948-4.69,25.335-6.754s19.7-3.936,30.674-5.567c11.075-1.646,22.915-3.059,35.189-4.2,12.5-1.163,25.58-2.056,38.877-2.655C178.6-.439,192.639-.75,206.689-.75Zm0,91.015c55.2,0,107.093-4.727,146.113-13.31,18.939-4.166,33.8-9.012,44.17-14.405,10.657-5.542,16.061-11.413,16.061-17.45s-5.4-11.908-16.061-17.45c-10.37-5.393-25.231-10.24-44.17-14.405C313.782,4.662,261.892-.065,206.689-.065S99.6,4.662,60.576,13.244c-18.939,4.166-33.8,9.012-44.17,14.405C5.749,33.192.345,39.063.345,45.1s5.4,11.908,16.061,17.45c10.37,5.393,25.231,10.24,44.17,14.405C99.6,85.538,151.487,90.265,206.689,90.265Z'
+                );
+                animation: 10s linear 0s infinite alternate ball1;
+              }
+            }
+
+            .text-box {
+              width: 100%;
+              display: flex;
+              flex-direction: column;
+              color: #fff;
+              align-items: center;
+              position: absolute;
+              top: 52px;
+
+              .text1 {
+                font-size: 18px;
+                font-weight: 600;
+                letter-spacing: 2px;
+                margin-bottom: 10px;
+              }
+
+              .text2 {
+                font-size: 14px;
+                color: #ffffffdd;
+              }
+            }
+
+            .icon-animation {
+              // width: 118px;
+              // height: 129px;
+              width: 95px;
+              height: 111px;
+              margin: 0 auto;
+              top: 34px;
+              left: 2px;
+              position: relative;
+              animation: 0.5s linear 0s infinite alternate iconMove;
+            }
+          }
+
+          .bottom1 {
+            background-image: url('/@/assets/images/vent/alarm/warning-icon-bg1.png');
+            background-size: 80% 100%;
+            background-position: 50% 0%;
+
+            .icon-animation {
+              background: url('/@/assets/images/vent/alarm/warning-icon-bg-a1.png');
+              background-size: 100% 100%;
+            }
+
+            .text-box {
+              .text1 {
+                color: #00d8ff;
+              }
+            }
+          }
+
+          .bottom2 {
+            background-image: url('/@/assets/images/vent/alarm/warning-icon-bg2.png');
+            background-size: 80% 100%;
+            background-position: 50% 10px;
+
+            .icon-animation {
+              background: url('/@/assets/images/vent/alarm/warning-icon-bg-a2.png');
+              background-size: 100% 100%;
+            }
+
+            .text-box {
+              .text1 {
+                color: #fcfc22;
+              }
+            }
+          }
+
+          .bottom3 {
+            // background-image: url('/@/assets/images/vent/alarm/warning-icon-bg3.png');
+            // background-size: 80% 100%;
+            // background-position: 50% 0%;
+            background-image: url(/src/assets/images/vent/alarm/warning-icon-bg3.png);
+            background-size: 75% 85%;
+            background-position: 50% 10px;
+
+            .icon-animation {
+              background: url('/@/assets/images/vent/alarm/warning-icon-bg-a3.png');
+              background-size: 100% 100%;
+            }
+
+            .text-box {
+              .text1 {
+                color: #ff7010;
+              }
+            }
+          }
+
+          .bottom4 {
+            background-image: url('/@/assets/images/vent/alarm/warning-icon-bg4.png');
+            background-size: 80% 100%;
+            background-position: 50% 10px;
+
+            .icon-animation {
+              background: url('/@/assets/images/vent/alarm/warning-icon-bg-a4.png');
+              background-size: 100% 100%;
+            }
+
+            .text-box {
+              .text1 {
+                color: #df4e43;
+              }
+            }
+          }
+
+          .bottom5 {
+            background-image: url('/@/assets/images/vent/alarm/warning-icon-bg5.png');
+            background-size: 80% 100%;
+            background-position: 50% 10px;
+
+            .icon-animation {
+              background: url('/@/assets/images/vent/alarm/warning-icon-bg-a5.png');
+              background-size: 100% 100%;
+            }
+
+            .text-box {
+              .text1 {
+                color: #ff2313;
+                // animation: color-blink 1s infinite;
+              }
+
+              // @keyframes color-blink {
+              //   0% { color: red; }
+              //   50% { color: blue; }
+              //   100% { color: red; }
+              // }
+            }
+          }
+
+          .total-item-monitor-box {
+            width: 66%;
+            height: 124px;
+            position: relative;
+
+            top: 122px;
+            left: 0;
+            background: url('/@/assets/images/vent/alarm/bottom1.png') no-repeat;
+
+            background-size: 100% 100%;
+
+            &::after {
+              content: '';
+
+              width: 400px;
+              height: 362px;
+              position: absolute;
+              transform-style: preserve-3d;
+              transform: translateX(0%) translateY(0%) rotateX(72deg);
+              background: url('/@/assets/images/vent/alarm/bottom.png');
+              background-size: 100% 100%; //lxh
+              animation: rotate1 3s linear infinite;
+
+              top: -93px;
+              left: -52px;
+            }
+
+            .item {
+              position: absolute;
+
+              // width: 107px;
+              // height: 107px;
+              // left: 120px;
+              // top: 115px;
+              // animation: red-ball 10s linear infinite;
+              .icon-box {
+                width: 60px;
+                height: 60px;
+
+                position: relative;
+                z-index: 0;
+
+                &::before {
+                  position: absolute;
+                  content: '';
+
+                  width: 80px;
+                  height: 42px;
+                  top: 30px;
+                  z-index: -1;
+                  background: url('/@/assets/images/vent/alarm/icon-bg.png') no-repeat;
+                  background-size: 100% 100%;
+                }
+
+                &::after {
+                  position: absolute;
+                  content: '';
+                  width: 48px;
+                  height: 48px;
+                  top: 33px;
+                  left: 14px;
+                  z-index: 1;
+                  background: url(/src/assets/images/vent/alarm/icon-animation.png) no-repeat;
+                  background-size: 100% 100%;
+                  transform: translateX(0%) rotateX(70deg);
+                  animation: rotate2 2s linear infinite;
+                }
+
+                .icon {
+                  width: 32px;
+                  height: 32px;
+                  background-repeat: no-repeat;
+                  background-position: top center;
+                  position: relative;
+                  top: 27px;
+                  left: 24px;
+                }
+              }
+
+              .item-monitor-box {
+                width: 142px;
+                color: #fff;
+                position: relative;
+                top: -58px;
+                left: -21px;
+                font-weight: 600;
+
+                padding: 0px 5px 0px 5px;
+
+                &::before {
+                  position: absolute;
+                  content: '';
+                  width: 112px;
+                  height: 24px;
+                  left: 4px;
+                  top: 0px;
+                  background: url('/@/assets/images/vent/alarm/data-bg.png');
+                  background-size: 100% 100%;
+                }
+
+                .value {
+                  color: #2bdcff;
+                  margin-left: 5px;
+                }
+
+                .value104 {
+                  font-size: 16px;
+                  font-weight: 800;
+                  color: #ff0000;
+                  animation: color-blink 1s infinite;
+                }
+                .value103 {
+                  font-size: 16px;
+                  font-weight: 800;
+                  color: #ff8800;
+                  animation: color-blink 1s infinite;
+                }
+                .value102 {
+                  font-size: 16px;
+                  font-weight: 800;
+                  color: #ffff00;
+                  animation: color-blink 1s infinite;
+                }
+
+                @keyframes color-blink {
+                  0% {
+                    color: red;
+                  }
+
+                  50% {
+                    color: rgb(198, 0, 0);
+                  }
+
+                  100% {
+                    color: rgb(255, 18, 18);
+                  }
+                }
+              }
+            }
+
+            .item1 {
+              top: 85px;
+              left: 100px;
+
+              .icon {
+                background-image: url('/@/assets/images/vent/alarm/icon-fire.svg');
+                background-size: 100% 100%;
+              }
+            }
+
+            .item2 {
+              top: 68px;
+              left: -38px;
+
+              .icon {
+                background-image: url('/@/assets/images/vent/alarm/icon-device.svg');
+                background-size: 100% 100%;
+              }
+            }
+
+            .item3 {
+              top: 68px;
+              left: 247px;
+
+              .icon {
+                background-image: url('/@/assets/images/vent/alarm/icon-gas.svg');
+                background-size: 100% 100%;
+              }
+
+              // .item-monitor-box {
+              //     top: -155px;
+
+              //     &::before {
+              //         top: 10px;
+              //     }
+              // }
+            }
+
+            .item4 {
+              top: -15px;
+              left: 230px;
+
+              .icon {
+                background-image: url('/@/assets/images/vent/alarm/icon-dust.svg');
+                background-size: 100% 100%;
+              }
+            }
+
+            .item5 {
+              top: -15px;
+              left: -20px;
+
+              .icon {
+                background-image: url('/@/assets/images/vent/alarm/icon-vent.svg');
+                background-size: 100% 100%;
+              }
+            }
+          }
+
+          @keyframes iconMove {
+            100% {
+              opacity: 0;
+            }
+          }
+
+          @keyframes rotate1 {
+            0% {
+              transform: translateX(0%) rotateX(72deg) rotateZ(-360deg);
+            }
+
+            100% {
+              transform: translateX(0%) rotateX(72deg) rotateZ(0);
+            }
+          }
+
+          @keyframes rotate2 {
+            0% {
+              transform: translateX(0%) rotateX(70deg) rotateZ(0);
+            }
+
+            100% {
+              transform: translateX(0%) rotateX(70deg) rotateZ(-360deg);
+            }
+          }
+
+          @keyframes rotate3 {
+            0% {
+              transform: translateX(0%) rotateX(80deg) rotateZ(0);
+            }
+
+            100% {
+              transform: translateX(0%) rotateX(80deg) rotateZ(-360deg);
+            }
+          }
+
+          @keyframes rotate4 {
+            100% {
+              transform: translateX(0%) rotateX(80deg) rotateZ(0);
+            }
+
+            0% {
+              transform: translateX(0%) rotateX(80deg) rotateZ(-360deg);
+            }
+          }
+
+          @keyframes ball {
+            100% {
+              offset-distance: 100%;
+            }
+
+            0% {
+              offset-distance: 0%;
+            }
+          }
+
+          @keyframes ball1 {
+            0% {
+              offset-distance: 100%;
+            }
+
+            100% {
+              offset-distance: 0%;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  ::v-deep .zxm-select-single:not(.zxm-select-customize-input) .zxm-select-selector {
+    height: 24px;
+  }
+
+  ::v-deep .zxm-select-single:not(.zxm-select-customize-input) .zxm-select-selector .zxm-select-selection-search-input {
+    height: 24px;
+  }
+
+  ::v-deep .zxm-select-selection-placeholder {
+    color: #fff !important;
+    line-height: 22px !important;
+  }
+
+  ::v-deep .zxm-select-single:not(.zxm-select-customize-input) .zxm-select-selector::after {
+    line-height: 24px;
+  }
+
+  ::v-deep .zxm-select:not(.zxm-select-customize-input) .zxm-select-selector {
+    background-color: transparent;
+    border-top: 0px;
+    border-bottom: 0px;
+    border-left: 2px solid;
+    border-right: 2px solid;
+    border-image: linear-gradient(to bottom, transparent, rgba(49, 184, 255, 1), transparent) 1 1 1;
+  }
+
+  ::v-deep .zxm-select-arrow {
+    color: #fff !important;
+  }
+
+  ::v-deep .zxm-select-selection-item {
+    color: #fff !important;
+  }
+
+  ::v-deep .zxm-select-single .zxm-select-selector .zxm-select-selection-item {
+    line-height: 24px !important;
+  }
+</style>

+ 258 - 258
src/views/vent/home/colliery/components/wind-monitor.vue

@@ -8,292 +8,292 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, reactive, nextTick, onMounted, defineProps, watch } from 'vue';
-import * as echarts from 'echarts';
-const emit = defineEmits(['goDetail']);
+  import { ref, reactive, nextTick, onMounted, defineProps, watch } from 'vue';
+  import * as echarts from 'echarts';
+  const emit = defineEmits(['goDetail']);
 
-let props = defineProps({
-  flList: Array,
-});
+  let props = defineProps({
+    flList: Array,
+  });
 
-//获取dom节点
-let windBar = ref<any>();
-//坐标轴最大值
-let maxY = ref(0);
-//echart数据
-let echartData = reactive<any>({ ydata: [], xdata: [] });
-//跳转详情
-function getDetail() {
-  emit('goDetail', 'windrect');
-}
-function getOption() {
-  nextTick(() => {
-    const myChart = echarts.init(windBar.value);
-    let option = {
-      color: [
-        '#63caff',
-        '#49beff',
-        'rgba(74, 205, 255,.1)',
-        '#03387a',
-        '#03387a',
-        '#6c93ee',
-        '#a9abff',
-        '#f7a23f',
-        '#27bae7',
-        '#ff6d9d',
-        '#cb79ff',
-        '#f95b5a',
-        '#ccaf27',
-        '#38b99c',
-        '#93d0ff',
-        '#bd74e0',
-        '#fd77da',
-        '#dea700',
-      ],
-      grid: {
-        containLabel: true,
-        left: 30,
-        right: 30,
-        bottom: 10,
-        top: 40,
-      },
+  //获取dom节点
+  let windBar = ref<any>();
+  //坐标轴最大值
+  let maxY = ref(0);
+  //echart数据
+  let echartData = reactive<any>({ ydata: [], xdata: [] });
+  //跳转详情
+  function getDetail() {
+    emit('goDetail', 'windrect');
+  }
+  function getOption() {
+    nextTick(() => {
+      const myChart = echarts.init(windBar.value);
+      let option = {
+        color: [
+          '#63caff',
+          '#49beff',
+          'rgba(74, 205, 255,.1)',
+          '#03387a',
+          '#03387a',
+          '#6c93ee',
+          '#a9abff',
+          '#f7a23f',
+          '#27bae7',
+          '#ff6d9d',
+          '#cb79ff',
+          '#f95b5a',
+          '#ccaf27',
+          '#38b99c',
+          '#93d0ff',
+          '#bd74e0',
+          '#fd77da',
+          '#dea700',
+        ],
+        grid: {
+          containLabel: true,
+          left: 30,
+          right: 30,
+          bottom: 10,
+          top: 40,
+        },
 
-      xAxis: {
-        type: 'category',
-        data: echartData.xdata,
-        axisLabel: {
-          formatter: function (params) {
-            var newParamsName = ''; // 最终拼接成的字符串
-            var paramsNameNumber = params.length; // 实际标签的个数
-            var provideNumber = 6; // 每行能显示的字的个数
-            var rowNumber = Math.ceil(paramsNameNumber / provideNumber); // 换行的话,需要显示几行,向上取整
-            /**
-             * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
-             */
-            // 条件等同于rowNumber>1
-            if (paramsNameNumber > provideNumber) {
-              /** 循环每一行,p表示行 */
-              for (var p = 0; p < rowNumber; p++) {
-                var tempStr = ''; // 表示每一次截取的字符串
-                var start = p * provideNumber; // 开始截取的位置
-                var end = start + provideNumber; // 结束截取的位置
-                // 此处特殊处理最后一行的索引值
-                if (p == rowNumber - 1) {
-                  // 最后一次不换行
-                  tempStr = params.substring(start, paramsNameNumber);
-                } else {
-                  // 每一次拼接字符串并换行
-                  tempStr = params.substring(start, end) + '\n';
+        xAxis: {
+          type: 'category',
+          data: echartData.xdata,
+          axisLabel: {
+            formatter: function (params) {
+              var newParamsName = ''; // 最终拼接成的字符串
+              var paramsNameNumber = params.length; // 实际标签的个数
+              var provideNumber = 6; // 每行能显示的字的个数
+              var rowNumber = Math.ceil(paramsNameNumber / provideNumber); // 换行的话,需要显示几行,向上取整
+              /**
+               * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
+               */
+              // 条件等同于rowNumber>1
+              if (paramsNameNumber > provideNumber) {
+                /** 循环每一行,p表示行 */
+                for (var p = 0; p < rowNumber; p++) {
+                  var tempStr = ''; // 表示每一次截取的字符串
+                  var start = p * provideNumber; // 开始截取的位置
+                  var end = start + provideNumber; // 结束截取的位置
+                  // 此处特殊处理最后一行的索引值
+                  if (p == rowNumber - 1) {
+                    // 最后一次不换行
+                    tempStr = params.substring(start, paramsNameNumber);
+                  } else {
+                    // 每一次拼接字符串并换行
+                    tempStr = params.substring(start, end) + '\n';
+                  }
+                  newParamsName += tempStr; // 最终拼成的字符串
                 }
-                newParamsName += tempStr; // 最终拼成的字符串
+              } else {
+                // 将旧标签的值赋给新标签
+                newParamsName = params;
               }
-            } else {
-              // 将旧标签的值赋给新标签
-              newParamsName = params;
-            }
-            //将最终的字符串返回
-            return newParamsName;
+              //将最终的字符串返回
+              return newParamsName;
+            },
+            fontSize: 14,
+            margin: 15,
+            interval: 0,
+            textStyle: {
+              color: '#b3b8cc',
+            },
+          },
+          axisLine: {
+            lineStyle: {
+              color: 'rgba(62, 103, 164)',
+            },
           },
-          fontSize: 14,
-          margin: 15,
-          interval: 0,
-          textStyle: {
-            color: '#b3b8cc',
+          splitLine: {
+            show: false,
           },
-        },
-        axisLine: {
-          lineStyle: {
-            color: 'rgba(62, 103, 164)',
+          axisTick: {
+            show: false,
           },
         },
-        splitLine: {
-          show: false,
-        },
-        axisTick: {
-          show: false,
-        },
-      },
 
-      yAxis: {
-        type: 'value',
-        name: '(m³/min)',
-        // max: maxY.value,
-        axisLabel: {
-          textStyle: {
-            fontSize: 14,
-            color: '#b3b8cc',
+        yAxis: {
+          type: 'value',
+          name: '(m³/min)',
+          // max: maxY.value,
+          axisLabel: {
+            textStyle: {
+              fontSize: 14,
+              color: '#b3b8cc',
+            },
           },
-        },
-        nameTextStyle: {
-          color: '#fff',
-          fontSize: 12,
-          lineHeight: 10,
-        },
-        splitLine: {
-          lineStyle: {
-            color: 'rgba(62, 103, 164,.4)',
+          nameTextStyle: {
+            color: '#fff',
+            fontSize: 12,
+            lineHeight: 10,
           },
-        },
-        axisLine: {
-          show: false,
-        },
-        axisTick: {
-          show: false,
-        },
-      },
-      series: [
-        {
-          data:echartData.ydata,
-          type: 'bar',
-          barMaxWidth: 'auto',
-          barWidth: 25,
-          itemStyle: {
-            color: {
-              x: 0,
-              y: 0,
-              x2: 0,
-              y2: 1,
-              type: 'linear',
-              global: false,
-              colorStops: [
-                {
-                  offset: 0,
-                  color: '#0b9eff',
-                },
-                {
-                  offset: 1,
-                  color: '#63caff',
-                },
-              ],
+          splitLine: {
+            lineStyle: {
+              color: 'rgba(62, 103, 164,.4)',
             },
           },
-          label: {
-            show: true,
-            position: 'top',
-            distance: 10,
-            color: '#fff',
+          axisLine: {
+            show: false,
+          },
+          axisTick: {
+            show: false,
           },
         },
-        {
-          data: [1, 1, 1, 1, 1, 1, 1, 1],
-          type: 'pictorialBar',
-          barMaxWidth: '25',
-          symbol: 'diamond',
-          symbolOffset: [0, '50%'],
-          symbolSize: [25, 15],
-        },
-        {
-          data: echartData.ydata,
-          type: 'pictorialBar',
-          barMaxWidth: '25',
-          symbolPosition: 'end',
-          symbol: 'diamond',
-          symbolOffset: [0, '-50%'],
-          symbolSize: [25, 12],
-          zlevel: 2,
-        },
-        {
-          data: [741, 741, 741, 741, 741, 741, 741, 741],
-          type: 'bar',
-          barMaxWidth: 'auto',
-          barWidth: 25,
-          barGap: '-100%',
-          zlevel: -1,
-        },
-        {
-          data: [1, 1, 1, 1, 1, 1, 1, 1],
-          type: 'pictorialBar',
-          barMaxWidth: '25',
-          symbol: 'diamond',
-          symbolOffset: [0, '50%'],
-          symbolSize: [25, 15],
-          zlevel: -2,
-        },
-        {
-          data: [741, 741, 741, 741, 741, 741, 741, 741],
-          type: 'pictorialBar',
-          barMaxWidth: '25',
-          symbolPosition: 'end',
-          symbol: 'diamond',
-          symbolOffset: [0, '-50%'],
-          symbolSize: [25, 12],
-          zlevel: -1,
+        series: [
+          {
+            data: echartData.ydata,
+            type: 'bar',
+            barMaxWidth: 'auto',
+            barWidth: 25,
+            itemStyle: {
+              color: {
+                x: 0,
+                y: 0,
+                x2: 0,
+                y2: 1,
+                type: 'linear',
+                global: false,
+                colorStops: [
+                  {
+                    offset: 0,
+                    color: '#0b9eff',
+                  },
+                  {
+                    offset: 1,
+                    color: '#63caff',
+                  },
+                ],
+              },
+            },
+            label: {
+              show: true,
+              position: 'top',
+              distance: 10,
+              color: '#fff',
+            },
+          },
+          {
+            data: [1, 1, 1, 1, 1, 1, 1, 1],
+            type: 'pictorialBar',
+            barMaxWidth: '25',
+            symbol: 'diamond',
+            symbolOffset: [0, '50%'],
+            symbolSize: [25, 15],
+          },
+          {
+            data: echartData.ydata,
+            type: 'pictorialBar',
+            barMaxWidth: '25',
+            symbolPosition: 'end',
+            symbol: 'diamond',
+            symbolOffset: [0, '-50%'],
+            symbolSize: [25, 12],
+            zlevel: 2,
+          },
+          {
+            data: [741, 741, 741, 741, 741, 741, 741, 741],
+            type: 'bar',
+            barMaxWidth: 'auto',
+            barWidth: 25,
+            barGap: '-100%',
+            zlevel: -1,
+          },
+          {
+            data: [1, 1, 1, 1, 1, 1, 1, 1],
+            type: 'pictorialBar',
+            barMaxWidth: '25',
+            symbol: 'diamond',
+            symbolOffset: [0, '50%'],
+            symbolSize: [25, 15],
+            zlevel: -2,
+          },
+          {
+            data: [741, 741, 741, 741, 741, 741, 741, 741],
+            type: 'pictorialBar',
+            barMaxWidth: '25',
+            symbolPosition: 'end',
+            symbol: 'diamond',
+            symbolOffset: [0, '-50%'],
+            symbolSize: [25, 12],
+            zlevel: -1,
+          },
+        ],
+        tooltip: {
+          trigger: 'axis',
+          show: false,
         },
-      ],
-      tooltip: {
-        trigger: 'axis',
-        show: false,
-      },
-    };
-    myChart.setOption(option);
-    window.onresize = function () {
-      myChart.resize();
-    };
-  });
-}
-
-function formatRoundNum(num) {
-  let interger = Math.ceil(num);
-  let leng = String(interger).length;
-  return Math.ceil(interger / Math.pow(10, leng - 1)) * Math.pow(10, leng - 1);
-}
-
-watch(
-  () => props.flList,
-  (val) => {
-    echartData.xdata.length = 0;
-    echartData.ydata.length = 0;
-    val.forEach((el: any) => {
-      if (el.readData.m3) {
-        echartData.xdata.push(el.strinstallpos);
-        echartData.ydata.push(el.readData.m3);
-      }
-    });
-    let max = echartData.ydata.reduce((acr, cur) => {
-      return parseFloat(acr) > parseFloat(cur) ? parseFloat(acr) : parseFloat(cur);
+      };
+      myChart.setOption(option);
+      window.onresize = function () {
+        myChart.resize();
+      };
     });
-    maxY.value = formatRoundNum(max * 1.5);
-    getOption();
-  },
-  {
-    deep: true,
   }
-);
 
-onMounted(() => { });
+  function formatRoundNum(num) {
+    let interger = Math.ceil(num);
+    let leng = String(interger).length;
+    return Math.ceil(interger / Math.pow(10, leng - 1)) * Math.pow(10, leng - 1);
+  }
+
+  watch(
+    () => props.flList,
+    (val) => {
+      echartData.xdata.length = 0;
+      echartData.ydata.length = 0;
+      val.forEach((el: any) => {
+        if (el.readData.m3) {
+          echartData.xdata.push(el.strinstallpos);
+          echartData.ydata.push(el.readData.m3);
+        }
+      });
+      let max = echartData.ydata.reduce((acr, cur) => {
+        return parseFloat(acr) > parseFloat(cur) ? parseFloat(acr) : parseFloat(cur);
+      });
+      maxY.value = formatRoundNum(max * 1.5);
+      getOption();
+    },
+    {
+      deep: true,
+    }
+  );
+
+  onMounted(() => {});
 </script>
 
 <style lang="less" scoped>
-.windMonitor {
-  width: 100%;
-  height: 100%;
-  position: relative;
+  .windMonitor {
+    width: 100%;
+    height: 100%;
+    position: relative;
 
-  .title-top {
-    position: absolute;
-    top: 9px;
-    left: 46px;
-    color: #fff;
-    font-size: 16px;
-    font-family: 'douyuFont';
-    cursor: pointer;
+    .title-top {
+      position: absolute;
+      top: 9px;
+      left: 46px;
+      color: #fff;
+      font-size: 16px;
+      font-family: 'douyuFont';
+      cursor: pointer;
 
-    &:hover {
-      color: #66ffff;
+      &:hover {
+        color: #66ffff;
+      }
     }
-  }
-
-  .wind-contents {
-    position: absolute;
-    left: 0;
-    top: 36px;
-    width: 100%;
-    height: calc(100% - 36px);
 
-    .wind-bar {
+    .wind-contents {
+      position: absolute;
+      left: 0;
+      top: 36px;
       width: 100%;
-      height: 100%;
+      height: calc(100% - 36px);
+
+      .wind-bar {
+        width: 100%;
+        height: 100%;
+      }
     }
   }
-}
 </style>

+ 320 - 320
src/views/vent/home/colliery/components/work-monitor.vue

@@ -5,14 +5,19 @@
       <i class="icon-search">
         <SvgIcon class="icon" size="14" name="toggle" />
       </i>
-      <a-select v-model:value="searchValue" style="width: 180px; margin-right: 10px" :options="workTypeList"
-        aria-placeholder="请选择" @change="changeSelect" />
+      <a-select
+        v-model:value="searchValue"
+        style="width: 180px; margin-right: 10px"
+        :options="workTypeList"
+        aria-placeholder="请选择"
+        @change="changeSelect"
+      />
     </div>
     <div class="work-echart">
       <div class="work" ref="work"></div>
     </div>
     <div class="work-card">
-      <div class="card-item" v-for="(item, index) in tabList" :key="index" >
+      <div class="card-item" v-for="(item, index) in tabList" :key="index">
         <div class="item-s" v-if="item.val">
           <div class="item-label">{{ item.name }}</div>
           <div class="item-val">{{ item.val }}</div>
@@ -23,371 +28,366 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, reactive, nextTick, onMounted, defineProps, watch } from 'vue';
-import { SvgIcon } from '/@/components/Icon';
-import * as echarts from 'echarts';
-import { getDate } from '../clique.data'
+  import { ref, reactive, nextTick, onMounted, defineProps, watch } from 'vue';
+  import { SvgIcon } from '/@/components/Icon';
+  import * as echarts from 'echarts';
+  import { getDate } from '../clique.data';
 
-
-let props = defineProps({
-  workList: Array,
-});
-const emit = defineEmits(['goDetail']);
-let workData = reactive<any[]>([]);
-let searchValue = ref('');
-const workTypeList = reactive<any[]>([]);
-
-let tabList = reactive<any[]>([
-  { name: '进风量(m³/min)', val: null },
-  { name: '回风量(m³/min)', val: null },
-  { name: '需风量(m³/min)', val: null },
-]);
-
-let work = ref<any>();
-let echartData = reactive({
-  xdata: [],
-  ydata: [],
-  ydata1: [],
-});
-//跳转详情
-function getDetail() {
- 
-  emit('goDetail', 'work');
-}
-//选项切换
-function changeSelect(val) {
-  searchValue.value = val;
-
-  const selectData = workData.find(item => item['deviceID'] == val)
-  if(selectData){
-    tabList[0].val = selectData.jin || 0;
-    tabList[1].val = selectData.hui || 0;
-    tabList[2].val = selectData.xufengliang || 0;
-    echartData.xdata.length = 0;
-    echartData.ydata.length = 0;
-    echartData.ydata1.length = 0;
-    if(selectData.history.length!=0){
-      selectData.history.forEach((el) => {
-      echartData.xdata.push(el.time);
-      echartData.ydata.push(el.jin);
-      echartData.ydata1.push(el.hui);
-    });
-    getOption();
+  let props = defineProps({
+    workList: Array,
+  });
+  const emit = defineEmits(['goDetail']);
+  let workData = reactive<any[]>([]);
+  let searchValue = ref('');
+  const workTypeList = reactive<any[]>([]);
+
+  let tabList = reactive<any[]>([
+    { name: '进风量(m³/min)', val: null },
+    { name: '回风量(m³/min)', val: null },
+    { name: '需风量(m³/min)', val: null },
+  ]);
+
+  let work = ref<any>();
+  let echartData = reactive({
+    xdata: [],
+    ydata: [],
+    ydata1: [],
+  });
+  //跳转详情
+  function getDetail() {
+    emit('goDetail', 'work');
+  }
+  //选项切换
+  function changeSelect(val) {
+    searchValue.value = val;
+
+    const selectData = workData.find((item) => item['deviceID'] == val);
+    if (selectData) {
+      tabList[0].val = selectData.jin || 0;
+      tabList[1].val = selectData.hui || 0;
+      tabList[2].val = selectData.xufengliang || 0;
+      echartData.xdata.length = 0;
+      echartData.ydata.length = 0;
+      echartData.ydata1.length = 0;
+      if (selectData.history.length != 0) {
+        selectData.history.forEach((el) => {
+          echartData.xdata.push(el.time);
+          echartData.ydata.push(el.jin);
+          echartData.ydata1.push(el.hui);
+        });
+        getOption();
+      }
     }
   }
-}
 
-function getOption() {
-  nextTick(() => {
-    const myChart = echarts.init(work.value);
-    let option = {
-      tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-          type: 'cross',
-        },
-      },
-
-      legend: {
-        align: 'left',
-        right: '4%',
-        top: '6%',
-        type: 'plain',
-        textStyle: {
-          color: '#7ec7ff',
-          fontSize: 12,
-        },
-        // icon:'rect',
-        itemGap: 25,
-        itemWidth: 18,
-        icon: 'path://M0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z',
-        data: [
-          {
-            name: '工作面进风',
-          },
-          {
-            name: '工作面回风',
+  function getOption() {
+    nextTick(() => {
+      const myChart = echarts.init(work.value);
+      let option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'cross',
           },
-          // {
-          //   name: '工作面需风'
-          // }
-        ],
-      },
-
-      grid: {
-        top: '28%',
-        left: '5%',
-        right: '5%',
-        bottom: '5%',
-        containLabel: true,
-      },
+        },
 
-      xAxis: [
-        {
-          type: 'category',
-          // boundaryGap: false,
-          axisLine: {
-            //坐标轴轴线相关设置。数学上的x轴
-            show: true,
-            lineStyle: {
-              color: 'rgba(62, 103, 164)',
-            },
+        legend: {
+          align: 'left',
+          right: '4%',
+          top: '6%',
+          type: 'plain',
+          textStyle: {
+            color: '#7ec7ff',
+            fontSize: 12,
           },
-          axisLabel: {
-            //坐标轴刻度标签的相关设置
-            textStyle: {
-              color: '#b3b8cc',
-              padding: 0,
-              fontSize: 12,
+          // icon:'rect',
+          itemGap: 25,
+          itemWidth: 18,
+          icon: 'path://M0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z',
+          data: [
+            {
+              name: '工作面进风',
             },
-            formatter: function (data) {
-              return data;
+            {
+              name: '工作面回风',
             },
-          },
-          splitLine: {
-            show: false,
-          },
-          axisTick: {
-            show: false,
-          },
-          data: echartData.xdata,
+            // {
+            //   name: '工作面需风'
+            // }
+          ],
         },
-      ],
 
-      yAxis: [
-        {
-          name: 'm³/min',
-          nameTextStyle: {
-            color: '#b3b8cc',
-            fontSize: 12,
-            padding: -5,
-          },
-          min: 0,
-          splitNumber: 3,
-          splitLine: {
-            show: true,
-            lineStyle: {
-              color: 'rgba(62, 103, 164,.4)',
+        grid: {
+          top: '28%',
+          left: '5%',
+          right: '5%',
+          bottom: '5%',
+          containLabel: true,
+        },
+
+        xAxis: [
+          {
+            type: 'category',
+            // boundaryGap: false,
+            axisLine: {
+              //坐标轴轴线相关设置。数学上的x轴
+              show: true,
+              lineStyle: {
+                color: 'rgba(62, 103, 164)',
+              },
             },
-          },
-          axisLine: {
-            show: true,
-            lineStyle: {
-              color: 'rgba(62, 103, 164)',
+            axisLabel: {
+              //坐标轴刻度标签的相关设置
+              textStyle: {
+                color: '#b3b8cc',
+                padding: 0,
+                fontSize: 12,
+              },
+              formatter: function (data) {
+                return data;
+              },
             },
+            splitLine: {
+              show: false,
+            },
+            axisTick: {
+              show: false,
+            },
+            data: echartData.xdata,
           },
-          axisLabel: {
-            show: true,
-            textStyle: {
+        ],
+
+        yAxis: [
+          {
+            name: 'm³/min',
+            nameTextStyle: {
               color: '#b3b8cc',
-              padding: 0,
               fontSize: 12,
+              padding: -5,
+            },
+            min: 0,
+            splitNumber: 3,
+            splitLine: {
+              show: true,
+              lineStyle: {
+                color: 'rgba(62, 103, 164,.4)',
+              },
             },
-            formatter: function (value) {
-              if (value === 0) {
+            axisLine: {
+              show: true,
+              lineStyle: {
+                color: 'rgba(62, 103, 164)',
+              },
+            },
+            axisLabel: {
+              show: true,
+              textStyle: {
+                color: '#b3b8cc',
+                padding: 0,
+                fontSize: 12,
+              },
+              formatter: function (value) {
+                if (value === 0) {
+                  return value;
+                }
                 return value;
-              }
-              return value;
+              },
             },
-          },
-          axisTick: {
-            show: false,
-          },
-        },
-      ],
-      series: [
-        {
-          name: '工作面进风',
-          type: 'line',
-          yAxisIndex: 0,
-          symbolSize: 6,
-          lineStyle: {
-            normal: {
-              width: 2,
-              color: 'orange', // 线条颜色
+            axisTick: {
+              show: false,
             },
-            borderColor: 'rgba(0,0,0,.4)',
           },
-          itemStyle: {
-            color: 'orange',
-            borderColor: '#646ace',
-            borderWidth: 0,
+        ],
+        series: [
+          {
+            name: '工作面进风',
+            type: 'line',
+            yAxisIndex: 0,
+            symbolSize: 6,
+            lineStyle: {
+              normal: {
+                width: 2,
+                color: 'orange', // 线条颜色
+              },
+              borderColor: 'rgba(0,0,0,.4)',
+            },
+            itemStyle: {
+              color: 'orange',
+              borderColor: '#646ace',
+              borderWidth: 0,
+            },
+            data: echartData.ydata,
           },
-          data: echartData.ydata,
-        },
-        {
-          name: '工作面回风',
-          type: 'line',
-          yAxisIndex: 0,
-          symbolSize: 6,
+          {
+            name: '工作面回风',
+            type: 'line',
+            yAxisIndex: 0,
+            symbolSize: 6,
 
-          lineStyle: {
-            normal: {
-              width: 2,
-              color: '#1891de', // 线条颜色
+            lineStyle: {
+              normal: {
+                width: 2,
+                color: '#1891de', // 线条颜色
+              },
+              borderColor: 'rgba(0,0,0,.4)',
             },
-            borderColor: 'rgba(0,0,0,.4)',
-          },
-          itemStyle: {
-            color: '#1891de',
-            borderColor: '#646ace',
-            borderWidth: 0,
+            itemStyle: {
+              color: '#1891de',
+              borderColor: '#646ace',
+              borderWidth: 0,
+            },
+            data: echartData.ydata1,
           },
-          data: echartData.ydata1,
-        },
-      ],
-    };
-    myChart.setOption(option);
-    window.onresize = function () {
-      myChart.resize();
-    };
-  });
-}
-
-watch(
-  () => props.workList,
-  (val) => {
-    // debugger
-    workData = val;
-    workTypeList.length = 0;
-    workData.forEach((el) => {
-      workTypeList.push({
-        label: el.deviceName,
-        value: el.deviceID,
-      });
+        ],
+      };
+      myChart.setOption(option);
+      window.onresize = function () {
+        myChart.resize();
+      };
     });
-
-
-    if (searchValue.value) {
-      changeSelect(searchValue.value);
-    } else {
-      searchValue.value = workTypeList[0].value;
-      changeSelect(searchValue.value);
-    }
-  },
-  {
-    deep: true,
   }
-);
-
 
+  watch(
+    () => props.workList,
+    (val) => {
+      // debugger
+      workData = val;
+      workTypeList.length = 0;
+      workData.forEach((el) => {
+        workTypeList.push({
+          label: el.deviceName,
+          value: el.deviceID,
+        });
+      });
 
+      if (searchValue.value) {
+        changeSelect(searchValue.value);
+      } else {
+        searchValue.value = workTypeList[0].value;
+        changeSelect(searchValue.value);
+      }
+    },
+    {
+      deep: true,
+    }
+  );
 
-onMounted(() => { });
+  onMounted(() => {});
 </script>
 
 <style lang="less" scoped>
-.workMonitor {
-  width: 100%;
-  height: 100%;
-  position: relative;
-
-  .title-top {
-    position: absolute;
-    top: 9px;
-    left: 46px;
-    color: #fff;
-    font-size: 16px;
-    font-family: 'douyuFont';
-    cursor: pointer;
-
-    &:hover {
-      color: #66ffff;
-    }
-  }
-
-  .toggle-search {
-    position: absolute;
-    left: 9px;
-    top: 37px;
-    display: flex;
+  .workMonitor {
+    width: 100%;
+    height: 100%;
+    position: relative;
 
-    .icon-search {
+    .title-top {
       position: absolute;
-      top: 50%;
-      left: 5px;
-      transform: translate(0%, -50%);
+      top: 9px;
+      left: 46px;
+      color: #fff;
+      font-size: 16px;
+      font-family: 'douyuFont';
+      cursor: pointer;
+
+      &:hover {
+        color: #66ffff;
+      }
     }
-  }
 
-  .work-echart {
-    position: absolute;
-    top: 66px;
-    left: 0;
-    height: 120px;
-    margin: 5px 0px;
-    padding: 0px 20px;
-    box-sizing: border-box;
-    width: 100%;
+    .toggle-search {
+      position: absolute;
+      left: 9px;
+      top: 37px;
+      display: flex;
 
-    .work {
-      height: 100%;
-      background: url('../../../../../assets/images/home-container/work-bd.png') no-repeat;
-      background-size: 100% 100%;
+      .icon-search {
+        position: absolute;
+        top: 50%;
+        left: 5px;
+        transform: translate(0%, -50%);
+      }
     }
-  }
 
-  .work-card {
-    position: absolute;
-    top: 186px;
-    left: 0;
-    width: 100%;
-    height: calc(100% - 186px);
-    padding: 0px 15px 15px 15px;
-    box-sizing: border-box;
-    display: flex;
-    justify-content: space-around;
-    align-items: center;
+    .work-echart {
+      position: absolute;
+      top: 66px;
+      left: 0;
+      height: 120px;
+      margin: 5px 0px;
+      padding: 0px 20px;
+      box-sizing: border-box;
+      width: 100%;
+
+      .work {
+        height: 100%;
+        background: url('../../../../../assets/images/home-container/work-bd.png') no-repeat;
+        background-size: 100% 100%;
+      }
+    }
 
-    .card-item {
+    .work-card {
+      position: absolute;
+      top: 186px;
+      left: 0;
+      width: 100%;
+      height: calc(100% - 186px);
+      padding: 0px 15px 15px 15px;
+      box-sizing: border-box;
       display: flex;
-      flex: 1;
-      justify-content: center;
+      justify-content: space-around;
       align-items: center;
-      height: 100%;
-
-      .item-s {
-        position: relative;
-        width: 105px;
-        height: 58px;
-        margin-top: 20px;
-        background: url('../../../../../assets/images/home-container/line-val.png') no-repeat;
-        background-size: 100% 90%;
 
-        .item-label {
-          width: 100%;
-          text-align: center;
-          color: #b3b8cc;
-          font-size: 12px;
-        }
-
-        .item-val {
-          position: absolute;
-          left: 50%;
-          top: 28px;
-          font-size: 14px;
-          font-family: 'douyuFont';
-          color: #fff;
-          transform: translate(-50%, 0);
+      .card-item {
+        display: flex;
+        flex: 1;
+        justify-content: center;
+        align-items: center;
+        height: 100%;
+
+        .item-s {
+          position: relative;
+          width: 105px;
+          height: 58px;
+          margin-top: 20px;
+          background: url('../../../../../assets/images/home-container/line-val.png') no-repeat;
+          background-size: 100% 90%;
+
+          .item-label {
+            width: 100%;
+            text-align: center;
+            color: #b3b8cc;
+            font-size: 12px;
+          }
+
+          .item-val {
+            position: absolute;
+            left: 50%;
+            top: 28px;
+            font-size: 14px;
+            font-family: 'douyuFont';
+            color: #fff;
+            transform: translate(-50%, 0);
+          }
         }
       }
     }
   }
-}
 
-:deep .zxm-select-selector {
-  width: 100%;
-  height: 30px !important;
-  padding: 0 11px 0px 25px !important;
-  background-color: rgba(8, 148, 255, 0.3) !important;
-  border: 1px solid #1d80da !important;
-}
+  :deep .zxm-select-selector {
+    width: 100%;
+    height: 30px !important;
+    padding: 0 11px 0px 25px !important;
+    background-color: rgba(8, 148, 255, 0.3) !important;
+    border: 1px solid #1d80da !important;
+  }
 
-:deep .zxm-select-selection-item {
-  color: #fff !important;
-  line-height: 28px !important;
-}
+  :deep .zxm-select-selection-item {
+    color: #fff !important;
+    line-height: 28px !important;
+  }
 
-:deep .zxm-select-arrow {
-  color: #fff !important;
-}</style>
+  :deep .zxm-select-arrow {
+    color: #fff !important;
+  }
+</style>

+ 619 - 581
src/views/vent/monitorManager/alarmMonitor/warn/dustWarn.vue

@@ -1,667 +1,705 @@
 <template>
-    <customHeader :options="options" @change="getSelectRow" :optionValue="optionValue"> 粉尘监测预警 </customHeader>
-    <div class="dustWarn">
-        <div class="top-dust">
-            <a-button preIcon="ant-design:rollback-outlined" type="text" size="small"
-                style="position: absolute;left:15px;top:15px;color: #fff;" @click="getBack">返回</a-button>
-            <div class="alarm-menu">
-                <div class="card-btn">
-                    <div :class="activeIndex1 == ind ? 'btn1' : 'btn'" v-for="(item, ind) in menuList" :key="ind"
-                        @click="cardClick(ind, item)">
-                        <div class="text">{{ item.name }}</div>
-                        <div class="warn">{{ item.warn }}</div>
-                    </div>
-                </div>
-            </div>
-            <div class="dust-content">
-                <div class="content-left">
-                    <div :class="activeIndex == index ? 'content-left-item' : 'content-left-item1'"
-                        v-for="(item, index) in topAreaList" :key="index" @click="topAreaClick(index)">
-                        <div class="content-title">{{ item.title }}</div>
-                        <div class="content-items" v-for="(ite, ind) in item.content" :key="ind">
-                            <span>{{ ite.label }}</span>
-                            <span style="color:#01fefc">{{ ite.value }}</span>
-                        </div>
-
-                    </div>
-                </div>
-                <div class="content-right">
-                    <div class="title-t">
-                        <div class="text-t">粉尘信息状态监测</div>
-                    </div>
-                    <div class="echart-boxd">
-                        <echartLine :echartDataGq="echartDataFc" :maxY="maxY" :echartDw="echartDw" :gridV="gridV" />
-                    </div>
-                </div>
+  <customHeader :options="options" @change="getSelectRow" :optionValue="optionValue"> 粉尘监测预警 </customHeader>
+  <div class="dustWarn">
+    <div class="top-dust">
+      <a-button
+        preIcon="ant-design:rollback-outlined"
+        type="text"
+        size="small"
+        style="position: absolute; left: 15px; top: 15px; color: #fff"
+        @click="getBack"
+        >返回</a-button
+      >
+      <div class="alarm-menu">
+        <div class="card-btn">
+          <div :class="activeIndex1 == ind ? 'btn1' : 'btn'" v-for="(item, ind) in menuList" :key="ind" @click="cardClick(ind, item)">
+            <div class="text">{{ item.name }}</div>
+            <div class="warn">{{ item.warn }}</div>
+          </div>
+        </div>
+      </div>
+      <div class="dust-content">
+        <div class="content-left">
+          <div
+            :class="activeIndex == index ? 'content-left-item' : 'content-left-item1'"
+            v-for="(item, index) in topAreaList"
+            :key="index"
+            @click="topAreaClick(index)"
+          >
+            <div class="content-title">{{ item.title }}</div>
+            <div class="content-items" v-for="(ite, ind) in item.content" :key="ind">
+              <span>{{ ite.label }}</span>
+              <span style="color: #01fefc">{{ ite.value }}</span>
             </div>
+          </div>
+        </div>
+        <div class="content-right">
+          <div class="title-t">
+            <div class="text-t">粉尘信息状态监测</div>
+          </div>
+          <div class="echart-boxd">
+            <echartLine :echartDataGq="echartDataFc" :maxY="maxY" :echartDw="echartDw" :gridV="gridV" />
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="bot-dust">
+      <div class="bot-area">
+        <div class="title-b">
+          <div class="text-b">粉尘监控测点信息</div>
         </div>
-        <div class="bot-dust">
-            <div class="bot-area">
-                <div class="title-b">
-                    <div class="text-b">粉尘监控测点信息</div>
-                </div>
-                <div class="content-b">
-                    <div class="card-b" v-for="(item, index) in cardListTf" :key="index">
-                        <div class="item-l">
-                            <div class="label-l">{{ item.label }}</div>
-                            <div class="value-l">{{ item.value }}</div>
-                        </div>
-                        <div class="item-r">
-                            <div class="content-r" v-for="(items, ind) in item.listR" :key="ind">
-                                <span>{{ `${items.label} : ` }}</span>
-                                <span :class="{
-                                    'status-f': items.value == 1,
-                                    'status-l': items.value == 0,
-                                }">{{  `${items.value}${items.dw}`}}</span>
-                            </div>
-                        </div>
-                    </div>
-                </div>
+        <div class="content-b">
+          <div class="card-b" v-for="(item, index) in cardListTf" :key="index">
+            <div class="item-l">
+              <div class="label-l">{{ item.label }}</div>
+              <div class="value-l">{{ item.value }}</div>
+            </div>
+            <div class="item-r">
+              <div class="content-r" v-for="(items, ind) in item.listR" :key="ind">
+                <span>{{ `${items.label} : ` }}</span>
+                <span
+                  :class="{
+                    'status-f': items.value == 1,
+                    'status-l': items.value == 0,
+                  }"
+                  >{{ `${items.value}${items.dw}` }}</span
+                >
+              </div>
             </div>
+          </div>
         </div>
-
+      </div>
     </div>
+  </div>
 </template>
 
 <script setup lang="ts">
-import { ref, reactive, onMounted, onUnmounted } from 'vue'
-import { sysTypeWarnList, sysWarn, getDevice } from '../common.api'
-import echartLine from '../common/echartLine.vue';
-import { useSystemSelect } from '/@/hooks/vent/useSystemSelect';
-import { useRouter } from 'vue-router';
-import CustomHeader from '/@/components/vent/customHeader.vue';
-
-const { options, optionValue, getSelectRow, getSysDataSource } = useSystemSelect('sys_surface_caimei'); // 参数为场景类型(设备类型管理中可以查询到)
-//左侧数据列表
-let menuList = reactive<any[]>([])
-//当前左侧激活菜单的索引
-let activeIndex1 = ref(0);
-//顶部区域激活选项
-let activeIndex = ref(0);
-//顶部区域数据
-let topAreaList = reactive<any[]>([]);
-let choiceData = reactive<any[]>([]);
-//粉尘图表数据
-let echartDataFc = reactive({
+  import { ref, reactive, onMounted, onUnmounted } from 'vue';
+  import { sysTypeWarnList, sysWarn, getDevice } from '../common.api';
+  import echartLine from '../common/echartLine.vue';
+  import { useSystemSelect } from '/@/hooks/vent/useSystemSelect';
+  import { useRouter } from 'vue-router';
+  import CustomHeader from '/@/components/vent/customHeader.vue';
+
+  const { options, optionValue, getSelectRow, getSysDataSource } = useSystemSelect('sys_surface_caimei'); // 参数为场景类型(设备类型管理中可以查询到)
+  //左侧数据列表
+  let menuList = reactive<any[]>([]);
+  //当前左侧激活菜单的索引
+  let activeIndex1 = ref(0);
+  //顶部区域激活选项
+  let activeIndex = ref(0);
+  //顶部区域数据
+  let topAreaList = reactive<any[]>([]);
+  let choiceData = reactive<any[]>([]);
+  //粉尘图表数据
+  let echartDataFc = reactive({
     maxData: {
-        lengedData: '实时值(mg/m³)',
-        data: [],
+      lengedData: '实时值(mg/m³)',
+      data: [],
     },
     minData: {
-        lengedData: '预测值(mg/m³)',
-        data: [],
+      lengedData: '预测值(mg/m³)',
+      data: [],
     },
     aveValue: {
-        lengedData: '预警值(mg/m³)',
-        data: [],
+      lengedData: '预警值(mg/m³)',
+      data: [],
     },
     xData: [],
-});
-let maxY = ref(0);
-let echartDw = ref('(mg/m³)');
-let gridV = reactive({
+  });
+  let maxY = ref(0);
+  let echartDw = ref('(mg/m³)');
+  let gridV = reactive({
     top: '12%',
     left: '1%',
     bottom: '5%',
     right: '5%',
     containLabel: true,
-})
-let cardListTf = reactive<any[]>([])
-let router = useRouter()
-let echartNow = ref<any[]>([])
-let echartYc = reactive<any[]>([])
-let flag = ref(true)
-
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-function getMonitor(deviceID, flag?) {
+  });
+  let cardListTf = reactive<any[]>([]);
+  let router = useRouter();
+  let echartNow = ref<any[]>([]);
+  let echartYc = reactive<any[]>([]);
+  let flag = ref(true);
+
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  function getMonitor(deviceID, flag?) {
     timer = setTimeout(
-        async () => {
-            await getSysWarnList(deviceID, 'dust');
-            if (timer) {
-                timer = null;
-            }
-            getMonitor(deviceID);
-        },
-        flag ? 0 : 3000
+      async () => {
+        await getSysWarnList(deviceID, 'dust');
+        if (timer) {
+          timer = null;
+        }
+        getMonitor(deviceID);
+      },
+      flag ? 0 : 3000
     );
-}
-//返回首页
-function getBack() {
-    router.push('/monitorChannel/monitor-alarm-home')
-}
-//菜单选项切换
-function cardClick(ind, item) {
+  }
+  //返回首页
+  function getBack() {
+    router.push('/monitorChannel/monitor-alarm-home');
+  }
+  //菜单选项切换
+  function cardClick(ind, item) {
     activeIndex1.value = ind;
     clearTimeout(timer);
     getMonitor(item.deviceID, true);
-}
-//顶部区域选项切换
-function topAreaClick(index) {
+  }
+  //顶部区域选项切换
+  function topAreaClick(index) {
     activeIndex.value = index;
     echartDataFc.maxData.data.length = 0;
     echartDataFc.minData.data.length = 0;
     echartDataFc.aveValue.data.length = 0;
     echartDataFc.xData.length = 0;
-    echartYc.length = 0
-    flag.value = true
+    echartYc.length = 0;
+    flag.value = true;
     if (flag.value) {
-        echartNow.value = JSON.parse(choiceData[index].readData.expectInfo)['list']
-        flag.value = false
+      echartNow.value = JSON.parse(choiceData[index].readData.expectInfo)['list'];
+      flag.value = false;
     }
-    echartYc.push({ time: JSON.parse(choiceData[index].readData.expectInfo)['nowTime'], value: JSON.parse(choiceData[index].readData.expectInfo)['nowVal'], })
-    let setData = [...echartNow.value, ...echartYc].sort((a, b) => Date.parse(new Date(a.time)) - Date.parse(new Date(b.time)))
-    setData.forEach(el => {
-        if (el.value && el.value != '0') {
-            echartDataFc.xData.push(el.time);
-            echartDataFc.maxData.data.push(el.value);
-            echartDataFc.minData.data.push(JSON.parse(choiceData[index].readData.expectInfo)['aveVal']);
-            echartDataFc.aveValue.data.push(JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin'] ? JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin'] : 0);
-        }
-    })
-}
-function formatRoundNum(num) {
+    echartYc.push({
+      time: JSON.parse(choiceData[index].readData.expectInfo)['nowTime'],
+      value: JSON.parse(choiceData[index].readData.expectInfo)['nowVal'],
+    });
+    let setData = [...echartNow.value, ...echartYc].sort((a, b) => Date.parse(new Date(a.time)) - Date.parse(new Date(b.time)));
+    setData.forEach((el) => {
+      if (el.value && el.value != '0') {
+        echartDataFc.xData.push(el.time);
+        echartDataFc.maxData.data.push(el.value);
+        echartDataFc.minData.data.push(JSON.parse(choiceData[index].readData.expectInfo)['aveVal']);
+        echartDataFc.aveValue.data.push(
+          JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin']
+            ? JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin']
+            : 0
+        );
+      }
+    });
+  }
+  function formatRoundNum(num) {
     let interger = Math.ceil(num);
     let leng = String(interger).length;
     return Math.ceil(interger / Math.pow(10, leng - 1)) * Math.pow(10, leng - 1);
-}
-//获取左侧菜单列表
-async function getMenuList() {
-    let res = await sysTypeWarnList({ type: 'dust' })
+  }
+  //获取左侧菜单列表
+  async function getMenuList() {
+    let res = await sysTypeWarnList({ type: 'dust' });
     if (res.length != 0) {
-        menuList.length = 0
-        res.forEach((el) => {
-            menuList.push({
-                name: el.systemname,
-                warn: '低风险',
-                deviceID: el.id,
-                strtype: el.strtype,
-            });
+      menuList.length = 0;
+      res.forEach((el) => {
+        menuList.push({
+          name: el.systemname,
+          warn: '低风险',
+          deviceID: el.id,
+          strtype: el.strtype,
         });
-        getMonitor(menuList[0].deviceID, true);
+      });
+      getMonitor(menuList[0].deviceID, true);
     }
-}
-//获取预警详情弹窗右侧数据
-function getSysWarnList(id, type) {
+  }
+  //获取预警详情弹窗右侧数据
+  function getSysWarnList(id, type) {
     sysWarn({ sysid: id, type: type }).then((res) => {
-        // listData.common = res;
-        topAreaList.length = 0;
-
-        if (JSON.stringify(res) != '{}') {
-            res.dust.forEach((el) => {
-                topAreaList.push({
-                    title: el.strinstallpos,
-                    content: [
-                        { ids: 0, label: '温度(°C)', value: el.readData.temperature || '--' },
-                        { ids: 1, label: '粉尘浓度(mg/m³)', value: el.readData.dustval || '--' },
-                        { ids: 2, label: '喷雾水压(MPa)', value: el.readData.waterPressure || '--' },
-                        { ids: 3, label: '喷雾状态', value: el.readData.atomizingState || '--' },
-                    ],
-                });
-            });
-            choiceData = res.dust;
-
-            if (choiceData[activeIndex.value]) {
-                if (flag.value) {
-                    echartNow.value = JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['list']
-                    flag.value = false
-                }
-                echartYc.push({ time: JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['nowTime'], value: JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['nowVal'], })
-                let setData = [...echartNow.value, ...echartYc].sort((a, b) => Date.parse(new Date(a.time)) - Date.parse(new Date(b.time)))
-                echartDataFc.maxData.data.length = 0;
-                echartDataFc.minData.data.length = 0;
-                echartDataFc.aveValue.data.length = 0;
-                echartDataFc.xData.length = 0;
-                setData.forEach(el => {
-                    if (el.value && el.value != '0') {
-                        echartDataFc.xData.push(el.time);
-                        echartDataFc.maxData.data.push(el.value);
-                        echartDataFc.minData.data.push(JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['aveVal']);
-                        echartDataFc.aveValue.data.push(JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin'] ? JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin'] : 0);
-                    }
-                })
-                let max1 = echartDataFc.maxData.data.reduce((acr, cur) => {
-                    return acr > cur ? acr : cur;
-                });
-                maxY.value = formatRoundNum(max1 * 1.5);
-            } else {
-                activeIndex.value = 0;
-                if (flag.value) {
-                    echartNow.value = JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['list']
-                    flag.value = false
-                }
-                echartYc.push({ time: JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['nowTime'], value: JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['nowVal'], })
-                let setData = [...echartNow.value, ...echartYc].sort((a, b) => Date.parse(new Date(a.time)) - Date.parse(new Date(b.time)))
-                echartDataFc.maxData.data.length = 0;
-                echartDataFc.minData.data.length = 0;
-                echartDataFc.aveValue.data.length = 0;
-                echartDataFc.xData.length = 0;
-                setData.forEach(el => {
-                    if (el.value && el.value != '0') {
-                        echartDataFc.xData.push(el.time);
-                        echartDataFc.maxData.data.push(el.value);
-                        echartDataFc.minData.data.push(JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['aveVal']);
-                        echartDataFc.aveValue.data.push(JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin'] ? JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin'] : 0);
-                    }
-                })
-                let max1 = echartDataFc.maxData.data.reduce((acr, cur) => {
-                    return acr > cur ? acr : cur;
-                });
-                maxY.value = formatRoundNum(max1 * 1.5);
+      // listData.common = res;
+      topAreaList.length = 0;
+
+      if (JSON.stringify(res) != '{}') {
+        res.dust.forEach((el) => {
+          topAreaList.push({
+            title: el.strinstallpos,
+            content: [
+              { ids: 0, label: '温度(°C)', value: el.readData.temperature || '--' },
+              { ids: 1, label: '粉尘浓度(mg/m³)', value: el.readData.dustval || '--' },
+              { ids: 2, label: '喷雾水压(MPa)', value: el.readData.waterPressure || '--' },
+              { ids: 3, label: '喷雾状态', value: el.readData.atomizingState || '--' },
+            ],
+          });
+        });
+        choiceData = res.dust;
+
+        if (choiceData[activeIndex.value]) {
+          if (flag.value) {
+            echartNow.value = JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['list'];
+            flag.value = false;
+          }
+          echartYc.push({
+            time: JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['nowTime'],
+            value: JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['nowVal'],
+          });
+          let setData = [...echartNow.value, ...echartYc].sort((a, b) => Date.parse(new Date(a.time)) - Date.parse(new Date(b.time)));
+          echartDataFc.maxData.data.length = 0;
+          echartDataFc.minData.data.length = 0;
+          echartDataFc.aveValue.data.length = 0;
+          echartDataFc.xData.length = 0;
+          setData.forEach((el) => {
+            if (el.value && el.value != '0') {
+              echartDataFc.xData.push(el.time);
+              echartDataFc.maxData.data.push(el.value);
+              echartDataFc.minData.data.push(JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['aveVal']);
+              echartDataFc.aveValue.data.push(
+                JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin']
+                  ? JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin']
+                  : 0
+              );
+            }
+          });
+          let max1 = echartDataFc.maxData.data.reduce((acr, cur) => {
+            return acr > cur ? acr : cur;
+          });
+          maxY.value = formatRoundNum(max1 * 1.5);
+        } else {
+          activeIndex.value = 0;
+          if (flag.value) {
+            echartNow.value = JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['list'];
+            flag.value = false;
+          }
+          echartYc.push({
+            time: JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['nowTime'],
+            value: JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['nowVal'],
+          });
+          let setData = [...echartNow.value, ...echartYc].sort((a, b) => Date.parse(new Date(a.time)) - Date.parse(new Date(b.time)));
+          echartDataFc.maxData.data.length = 0;
+          echartDataFc.minData.data.length = 0;
+          echartDataFc.aveValue.data.length = 0;
+          echartDataFc.xData.length = 0;
+          setData.forEach((el) => {
+            if (el.value && el.value != '0') {
+              echartDataFc.xData.push(el.time);
+              echartDataFc.maxData.data.push(el.value);
+              echartDataFc.minData.data.push(JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['aveVal']);
+              echartDataFc.aveValue.data.push(
+                JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin']
+                  ? JSON.parse(choiceData[activeIndex.value].readData.expectInfo)['fmin']
+                  : 0
+              );
             }
+          });
+          let max1 = echartDataFc.maxData.data.reduce((acr, cur) => {
+            return acr > cur ? acr : cur;
+          });
+          maxY.value = formatRoundNum(max1 * 1.5);
         }
+      }
     });
-}
-//获取粉尘监控测点信息
-async function getWindDeviceList() {
-    cardListTf.length = 0
-    let res = await getDevice({ devicetype: 'dusting', pagetype: 'normal' })
+  }
+  //获取粉尘监控测点信息
+  async function getWindDeviceList() {
+    cardListTf.length = 0;
+    let res = await getDevice({ devicetype: 'dusting', pagetype: 'normal' });
     if (res && res.msgTxt[0]) {
-        let list = res.msgTxt[0].datalist || [];
-        if (list.length > 0) {
-            list.forEach((el: any) => {
-                const readData = el.readData;
-                el = Object.assign(el, readData);
-                cardListTf.push({
-                    label: '通信状态',
-                    value: el.netStatus == '0' ? '断开' : '连接',
-                    listR: [
-                        { id: 0, label: '安装位置', dw: '', value: el.strinstallpos || '-' },
-                        { id: 1, label: '粉尘浓度', dw: '(mg/m³)', value: el.dustval || '-' },
-                        { id: 2, label: '巷道湿度', dw: el.humidity ? '(RH)' : '', value: el.humidity || '-' },
-                        { id: 4, label: '巷道温度', dw: el.humidity ? '(℃)' : '', value: el.temperature || '-' },
-                        { id: 3, label: '是否报警', dw: '', value: el.warnFlag == '0' ? '正常' : el.warnFlag == 1 ? '报警' : el.warnFlag == 2 ? '断开' : '未监测' },
-                    ],
-                })
-            });
-        }
+      let list = res.msgTxt[0].datalist || [];
+      if (list.length > 0) {
+        list.forEach((el: any) => {
+          const readData = el.readData;
+          el = Object.assign(el, readData);
+          cardListTf.push({
+            label: '通信状态',
+            value: el.netStatus == '0' ? '断开' : '连接',
+            listR: [
+              { id: 0, label: '安装位置', dw: '', value: el.strinstallpos || '-' },
+              { id: 1, label: '粉尘浓度', dw: '(mg/m³)', value: el.dustval || '-' },
+              {
+                id: 2,
+                label: '巷道湿度',
+                dw: el.humidity && Number(el.humidity) < 1 ? '(RH)' : el.humidity && Number(el.humidity) > 1 ? '(%RH)' : '',
+                value: el.humidity || '-',
+              },
+              { id: 4, label: '巷道温度', dw: el.humidity ? '(℃)' : '', value: el.temperature || '-' },
+              {
+                id: 3,
+                label: '是否报警',
+                dw: '',
+                value: el.warnFlag == '0' ? '正常' : el.warnFlag == 1 ? '报警' : el.warnFlag == 2 ? '断开' : '未监测',
+              },
+            ],
+          });
+        });
+      }
     }
-}
-onMounted(() => {
-    getMenuList()
-    getWindDeviceList()
-})
-onUnmounted(() => {
+  }
+  onMounted(() => {
+    getMenuList();
+    getWindDeviceList();
+  });
+  onUnmounted(() => {
     if (timer) {
-        clearTimeout(timer);
-        timer = undefined;
+      clearTimeout(timer);
+      timer = undefined;
     }
-});
+  });
 </script>
 
 <style lang="less" scoped>
-.dustWarn {
+  .dustWarn {
     width: 100%;
     height: 100%;
     padding: 80px 10px 15px 10px;
     box-sizing: border-box;
 
     .top-dust {
+      display: flex;
+      justify-content: space-between;
+      height: 50%;
+      margin-bottom: 15px;
+      background: url('../../../../../assets/images/fire/border.png') no-repeat center;
+      background-size: 100% 100%;
+
+      .alarm-menu {
+        height: 100%;
+        width: 15%;
+        padding: 10px;
+        box-sizing: border-box;
+
+        .card-btn {
+          width: 100%;
+          height: 100%;
+          overflow-y: auto;
+
+          .btn {
+            position: relative;
+            width: 81%;
+            height: 24%;
+            margin-bottom: 6%;
+            font-family: 'douyuFont';
+            background: url('../../../../../assets/images/fire/no-choice.png') no-repeat;
+            background-size: 100% 100%;
+            cursor: pointer;
+
+            .text {
+              width: 80%;
+              position: absolute;
+              left: 50%;
+              top: 28px;
+              font-size: 14px;
+              color: #01fefc;
+              text-align: center;
+              transform: translate(-50%, 0);
+            }
+
+            .warn {
+              width: 100%;
+              position: absolute;
+              left: 50%;
+              bottom: 11px;
+              font-size: 12px;
+              color: #fff;
+              text-align: center;
+              transform: translate(-50%, 0);
+            }
+          }
+
+          .btn1 {
+            position: relative;
+            width: 100%;
+            height: 24%;
+            margin-bottom: 6%;
+            font-family: 'douyuFont';
+            background: url('../../../../../assets/images/fire/choice.png') no-repeat;
+            background-size: 100% 100%;
+            cursor: pointer;
+
+            .text {
+              width: 80%;
+              position: absolute;
+              left: 50%;
+              top: 28px;
+              font-size: 14px;
+              color: #01fefc;
+              text-align: center;
+              transform: translate(-62%, 0);
+            }
+
+            .warn {
+              width: 100%;
+              position: absolute;
+              left: 50%;
+              bottom: 11px;
+              font-size: 14px;
+              color: #fff;
+              text-align: center;
+              transform: translate(-60%, 0);
+            }
+          }
+        }
+      }
+
+      .dust-content {
         display: flex;
         justify-content: space-between;
-        height: 50%;
-        margin-bottom: 15px;
-        background: url('../../../../../assets/images/fire/border.png') no-repeat center;
-        background-size: 100% 100%;
+        height: 100%;
+        width: 85%;
+        padding: 10px 0px;
+        box-sizing: border-box;
 
-        .alarm-menu {
-            height: 100%;
-            width: 15%;
-            padding: 10px;
-            box-sizing: border-box;
+        .content-left {
+          width: 280px;
+          height: 100%;
+          display: flex;
+          flex-direction: column;
+          // justify-content: space-around;
+          align-items: flex-start;
+          overflow-y: auto;
+          overflow-x: hidden;
+
+          .content-left-item {
+            position: relative;
+            width: 272px;
+            height: 173px;
+            flex-shrink: 0;
+            background: url('../../../../../assets/images/fire/dust-choice.png') no-repeat center;
+            background-size: 100% 100%;
+            margin: 5px 0px;
+
+            .content-title {
+              width: 85%;
+              position: absolute;
+              top: 2px;
+              left: 50%;
+              transform: translate(-55%, 0);
+              font-size: 14px;
+              color: #fff;
+              text-align: center;
+            }
 
-            .card-btn {
-                width: 100%;
-                height: 100%;
-                overflow-y: auto;
-
-                .btn {
-                    position: relative;
-                    width: 81%;
-                    height: 24%;
-                    margin-bottom: 6%;
-                    font-family: 'douyuFont';
-                    background: url('../../../../../assets/images/fire/no-choice.png') no-repeat;
-                    background-size: 100% 100%;
-                    cursor: pointer;
-
-                    .text {
-                        width: 80%;
-                        position: absolute;
-                        left: 50%;
-                        top: 28px;
-                        font-size: 14px;
-                        color: #01fefc;
-                        text-align: center;
-                        transform: translate(-50%, 0);
-                    }
-
-                    .warn {
-                        width: 100%;
-                        position: absolute;
-                        left: 50%;
-                        bottom: 11px;
-                        font-size: 12px;
-                        color: #fff;
-                        text-align: center;
-                        transform: translate(-50%, 0);
-                    }
-                }
+            .content-items {
+              position: absolute;
+              left: 50%;
+              transform: translate(-54%, 0);
+              display: flex;
+              justify-content: space-between;
+              align-items: center;
+              width: 240px;
+              height: 26px;
+              color: #fff;
+              font-size: 14px;
+              padding: 0px 5px;
+              box-sizing: border-box;
+              background: url('../../../../../assets/images/fire/dust-content.png') no-repeat center;
+              background-size: 100% 100%;
+
+              &:nth-child(2) {
+                top: 32px;
+              }
+
+              &:nth-child(3) {
+                top: 67px;
+              }
+
+              &:nth-child(4) {
+                top: 102px;
+              }
+
+              &:nth-child(5) {
+                top: 136px;
+              }
+            }
+          }
+
+          .content-left-item1 {
+            position: relative;
+            width: 250px;
+            height: 173px;
+            flex-shrink: 0;
+            background: url('../../../../../assets/images/fire/dust-choice1.png') no-repeat center;
+            background-size: 100% 100%;
+            margin: 5px 0px;
+
+            .content-title {
+              width: 85%;
+              position: absolute;
+              top: 2px;
+              left: 50%;
+              transform: translate(-50%, 0);
+              font-size: 14px;
+              color: #fff;
+              text-align: center;
+            }
 
-                .btn1 {
-                    position: relative;
-                    width: 100%;
-                    height: 24%;
-                    margin-bottom: 6%;
-                    font-family: 'douyuFont';
-                    background: url('../../../../../assets/images/fire/choice.png') no-repeat;
-                    background-size: 100% 100%;
-                    cursor: pointer;
-
-                    .text {
-                        width: 80%;
-                        position: absolute;
-                        left: 50%;
-                        top: 28px;
-                        font-size: 14px;
-                        color: #01fefc;
-                        text-align: center;
-                        transform: translate(-62%, 0);
-                    }
-
-                    .warn {
-                        width: 100%;
-                        position: absolute;
-                        left: 50%;
-                        bottom: 11px;
-                        font-size: 14px;
-                        color: #fff;
-                        text-align: center;
-                        transform: translate(-60%, 0);
-                    }
-                }
+            .content-items {
+              position: absolute;
+              left: 50%;
+              transform: translate(-54%, 0);
+              display: flex;
+              justify-content: space-between;
+              align-items: center;
+              width: 215px;
+              height: 26px;
+              color: #fff;
+              font-size: 14px;
+              padding: 0px 5px;
+              box-sizing: border-box;
+              background: url('../../../../../assets/images/fire/dust-content.png') no-repeat center;
+              background-size: 100% 100%;
+
+              &:nth-child(2) {
+                top: 32px;
+              }
+
+              &:nth-child(3) {
+                top: 67px;
+              }
+
+              &:nth-child(4) {
+                top: 102px;
+              }
+
+              &:nth-child(5) {
+                top: 136px;
+              }
             }
+          }
         }
 
-        .dust-content {
+        .content-right {
+          width: calc(100% - 280px);
+          height: 100%;
+
+          .title-t {
+            height: 30px;
+            margin-bottom: 10px;
             display: flex;
             justify-content: space-between;
-            height: 100%;
-            width: 85%;
-            padding: 10px 0px;
-            box-sizing: border-box;
-
-            .content-left {
-                width: 280px;
-                height: 100%;
-                display: flex;
-                flex-direction: column;
-                // justify-content: space-around;
-                align-items: flex-start;
-                overflow-y: auto;
-                overflow-x: hidden;
-
-                .content-left-item {
-                    position: relative;
-                    width: 272px;
-                    height: 173px;
-                    flex-shrink: 0;
-                    background: url('../../../../../assets/images/fire/dust-choice.png') no-repeat center;
-                    background-size: 100% 100%;
-                    margin: 5px 0px;
-
-                    .content-title {
-                        width: 85%;
-                        position: absolute;
-                        top: 2px;
-                        left: 50%;
-                        transform: translate(-55%, 0);
-                        font-size: 14px;
-                        color: #fff;
-                        text-align: center
-                    }
-
-                    .content-items {
-                        position: absolute;
-                        left: 50%;
-                        transform: translate(-54%, 0);
-                        display: flex;
-                        justify-content: space-between;
-                        align-items: center;
-                        width: 240px;
-                        height: 26px;
-                        color: #fff;
-                        font-size: 14px;
-                        padding: 0px 5px;
-                        box-sizing: border-box;
-                        background: url('../../../../../assets/images/fire/dust-content.png') no-repeat center;
-                        background-size: 100% 100%;
-
-                        &:nth-child(2) {
-                            top: 32px;
-                        }
-
-                        &:nth-child(3) {
-                            top: 67px;
-                        }
-
-                        &:nth-child(4) {
-                            top: 102px;
-                        }
-
-                        &:nth-child(5) {
-                            top: 136px;
-                        }
-
-                    }
-                }
+            align-items: center;
 
-                .content-left-item1 {
-                    position: relative;
-                    width: 250px;
-                    height: 173px;
-                    flex-shrink: 0;
-                    background: url('../../../../../assets/images/fire/dust-choice1.png') no-repeat center;
-                    background-size: 100% 100%;
-                    margin: 5px 0px;
-
-                    .content-title {
-                        width: 85%;
-                        position: absolute;
-                        top: 2px;
-                        left: 50%;
-                        transform: translate(-50%, 0);
-                        font-size: 14px;
-                        color: #fff;
-                        text-align: center
-                    }
-
-                    .content-items {
-                        position: absolute;
-                        left: 50%;
-                        transform: translate(-54%, 0);
-                        display: flex;
-                        justify-content: space-between;
-                        align-items: center;
-                        width: 215px;
-                        height: 26px;
-                        color: #fff;
-                        font-size: 14px;
-                        padding: 0px 5px;
-                        box-sizing: border-box;
-                        background: url('../../../../../assets/images/fire/dust-content.png') no-repeat center;
-                        background-size: 100% 100%;
-
-                        &:nth-child(2) {
-                            top: 32px;
-                        }
-
-                        &:nth-child(3) {
-                            top: 67px;
-                        }
-
-                        &:nth-child(4) {
-                            top: 102px;
-                        }
-
-                        &:nth-child(5) {
-                            top: 136px;
-                        }
-
-                    }
-                }
+            .text-t {
+              font-family: 'douyuFont';
+              font-size: 14px;
+              color: #fff;
             }
+          }
 
-            .content-right {
-                width: calc(100% - 280px);
-                height: 100%;
-
-                .title-t {
-                    height: 30px;
-                    margin-bottom: 10px;
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
-
-                    .text-t {
-                        font-family: 'douyuFont';
-                        font-size: 14px;
-                        color: #fff;
-                    }
-                }
-
-                .echart-boxd {
-                    width: 100%;
-                    height: calc(100% - 40px);
-                }
-            }
+          .echart-boxd {
+            width: 100%;
+            height: calc(100% - 40px);
+          }
         }
+      }
     }
 
     .bot-dust {
-        height: calc(50% - 15px);
-        background: url('../../../../../assets/images/fire/border.png') no-repeat center;
-        background-size: 100% 100%;
+      height: calc(50% - 15px);
+      background: url('../../../../../assets/images/fire/border.png') no-repeat center;
+      background-size: 100% 100%;
+      padding: 10px;
+      box-sizing: border-box;
+
+      .bot-area {
+        height: 100%;
         padding: 10px;
+        background: url('../../../../../assets/images/fire/bj1.png') no-repeat center;
+        background-size: 100% 100%;
         box-sizing: border-box;
 
-        .bot-area {
-            height: 100%;
-            padding: 10px;
-            background: url('../../../../../assets/images/fire/bj1.png') no-repeat center;
+        .title-b {
+          height: 30px;
+          margin-bottom: 10px;
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+
+          .text-b {
+            font-family: 'douyuFont';
+            font-size: 14px;
+            color: #fff;
+          }
+        }
+
+        .content-b {
+          height: calc(100% - 40px);
+          display: flex;
+          justify-content: flex-start;
+          align-items: flex-start;
+          flex-wrap: wrap;
+          overflow-y: auto;
+
+          .card-b {
+            position: relative;
+            width: 24%;
+            height: 128px;
+            margin: 0px 9px 10px 9px;
+            background: url(/src/assets/images/fire/bot-area.png) no-repeat center;
             background-size: 100% 100%;
-            box-sizing: border-box;
 
-            .title-b {
-                height: 30px;
-                margin-bottom: 10px;
-                display: flex;
-                justify-content: space-between;
-                align-items: center;
+            .item-l {
+              position: absolute;
+              left: 32px;
+              top: 50%;
+              transform: translate(0, -50%);
+              width: 89px;
+              height: 98px;
+              background: url('../../../../../assets/images/fire/bot-area1.png') no-repeat center;
 
-                .text-b {
-                    font-family: 'douyuFont';
-                    font-size: 14px;
-                    color: #fff;
-                }
+              .label-l {
+                width: 100%;
+                position: absolute;
+                top: 7px;
+                color: #fff;
+                font-size: 12px;
+                text-align: center;
+              }
+
+              .value-l {
+                width: 100%;
+                position: absolute;
+                top: 50px;
+                font-family: 'douyuFont';
+                font-size: 14px;
+                color: #3df6ff;
+                text-align: center;
+              }
             }
 
-            .content-b {
-                height: calc(100% - 40px);
+            .item-r {
+              position: absolute;
+              left: 132px;
+              top: 50%;
+              transform: translate(0, -50%);
+              height: 128px;
+              padding: 5px 0px;
+              display: flex;
+              flex-direction: column;
+              justify-content: space-around;
+              box-sizing: border-box;
+
+              .content-r {
                 display: flex;
-                justify-content: flex-start;
-                align-items: flex-start;
-                flex-wrap: wrap;
-                overflow-y: auto;
-
-                .card-b {
-                    position: relative;
-                    width: 24%;
-                    height: 128px;
-                    margin: 0px 9px 10px 9px;
-                    background: url(/src/assets/images/fire/bot-area.png) no-repeat center;
-                    background-size: 100% 100%;
-
-                    .item-l {
-                        position: absolute;
-                        left: 32px;
-                        top: 50%;
-                        transform: translate(0, -50%);
-                        width: 89px;
-                        height: 98px;
-                        background: url('../../../../../assets/images/fire/bot-area1.png') no-repeat center;
-
-                        .label-l {
-                            width: 100%;
-                            position: absolute;
-                            top: 7px;
-                            color: #fff;
-                            font-size: 12px;
-                            text-align: center;
-                        }
-
-                        .value-l {
-                            width: 100%;
-                            position: absolute;
-                            top: 50px;
-                            font-family: 'douyuFont';
-                            font-size: 14px;
-                            color: #3df6ff;
-                            text-align: center;
-                        }
-                    }
-
-                    .item-r {
-                        position: absolute;
-                        left: 132px;
-                        top: 50%;
-                        transform: translate(0, -50%);
-                        height: 128px;
-                        padding: 5px 0px;
-                        display: flex;
-                        flex-direction: column;
-                        justify-content: space-around;
-                        box-sizing: border-box;
-
-                        .content-r {
-                            display: flex;
-
-                            span {
-                                font-size: 14px;
-                                color: #fff;
-
-                                &:first-child {
-                                    display: inline-block;
-                                    width: 68px;
-                                }
-
-                                &:last-child {
-                                    display: inline-block;
-                                    width: calc(100% - 68px);
-                                    color: #01fefc;
-                                    overflow: hidden;
-                                    white-space: nowrap;
-                                    /* 不换行 */
-
-                                    /* 超出部分隐藏 */
-                                    text-overflow: ellipsis;
-                                    /* 使用省略符号 */
-                                }
-                            }
-
-                            .status-f {
-                                color: #ff0000;
-                            }
-
-                            .status-l {
-                                color: #3df6ff;
-                            }
-                        }
-                    }
+
+                span {
+                  font-size: 14px;
+                  color: #fff;
+
+                  &:first-child {
+                    display: inline-block;
+                    width: 68px;
+                  }
+
+                  &:last-child {
+                    display: inline-block;
+                    width: calc(100% - 68px);
+                    color: #01fefc;
+                    overflow: hidden;
+                    white-space: nowrap;
+                    /* 不换行 */
+
+                    /* 超出部分隐藏 */
+                    text-overflow: ellipsis;
+                    /* 使用省略符号 */
+                  }
+                }
+
+                .status-f {
+                  color: #ff0000;
                 }
+
+                .status-l {
+                  color: #3df6ff;
+                }
+              }
             }
+          }
         }
+      }
     }
-
-}
-</style>
+  }
+</style>

+ 7 - 14
src/views/vent/monitorManager/mainFanMonitor/index.vue

@@ -11,7 +11,7 @@
           <div class="elementContent elementContent-r" v-if="selectData.DataPa && backMonitorIsShow">
             <!-- <div class="element-item"><span class="data-title">风机气压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
             <div class="element-item"
-              ><span class="data-title">风机负压(Pa):</span><span>{{ selectData.Fan2FanPre ? selectData.Fan2FanPre : '-' }}</span></div
+              ><span class="data-title">风机负压(Pa):</span><span>{{ c }}</span></div
             >
             <div class="element-item"
               ><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan2m3 ? selectData.Fan2m3 : '-' }}</span></div
@@ -74,20 +74,13 @@
             </div>
             <div class="fbm-data">
               <div class="element-item"
-                ><span class="data-title">井口负压(kPa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div
-              >
-              <div class="element-item"
-                ><span class="data-title">井口正压(kPa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div
-              >
-              <div class="element-item"
-                ><span class="data-title">井口温度(℃):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div
-              >
-              <div class="element-item"
-                ><span class="data-title">甲烷浓度(%):</span><span>{{ selectData.Fan1Negative ? selectData.Fan1Negative : '-' }}</span></div
-              >
-              <div class="element-item"
-                ><span class="data-title">CO浓度(%):</span><span>{{ selectData.Fan1m3 ? selectData.Fan1m3 : '-' }}</span></div
+                ><span class="data-title">井口负压(kPa):</span
+                ><span>{{ selectData.Fan1FanPre ? selectData.Fan1FanPre : selectData.Fan2FanPre ? selectData.Fan2FanPre : '-' }}</span></div
               >
+              <div class="element-item"><span class="data-title">井口正压(kPa):</span><span>0</span></div>
+              <div class="element-item"><span class="data-title">井口温度(℃):</span><span>19.132</span></div>
+              <div class="element-item"><span class="data-title">甲烷浓度(%):</span><span>0.36</span></div>
+              <div class="element-item"><span class="data-title">CO浓度(%):</span><span>0</span></div>
               <div class="vent-flex-row-between">
                 <span class="data-title">操作方式:</span>
                 <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>远程</span>

+ 145 - 148
src/views/vent/monitorManager/nitrogen/components/nitrogenEcharts.vue

@@ -1,18 +1,19 @@
 <template>
-  <div class="nitrogen-echatrs-box">  
+  <div class="nitrogen-echatrs-box">
     <div class="button-box">
-      <div style="color: #fff; font-weight: 600;">{{ currentTime }}</div>
+      <div style="color: #fff; font-weight: 600">{{ currentTime }}</div>
     </div>
     <div class="echarts-container">
       <div v-for="(item, index) in dataSource" :key="index" class="echarts-item">
         <div class="echarts-nitrogen-item">
           <BarAndLine
-          xAxisPropType="readTime"
-          :dataSource="item"
-          height="100%"
-          :chartsColumns="nitrogenChartsColumns"
-          :option="nitrogenOption"
-          chartsType="detail" />
+            xAxisPropType="readTime"
+            :dataSource="item"
+            height="100%"
+            :chartsColumns="nitrogenChartsColumns"
+            :option="nitrogenOption"
+            chartsType="detail"
+          />
         </div>
         <div class="echarts-cqg-item">
           <BarAndLine
@@ -21,69 +22,70 @@
             height="100%"
             :chartsColumns="cqgChartsColumns"
             :option="cqgOption"
-            chartsType="detail" />
+            chartsType="detail"
+          />
         </div>
-      </div>    
-    </div>
+      </div>
     </div>
-  </template>
-  <script setup lang="ts">
-    import{ref, onMounted, onUnmounted, reactive } from 'vue'
-    import dayjs from 'dayjs'
-    import BarAndLine from '/@/components/chart/BarAndLine.vue';
-    import { list } from '../nitrogen.api'
+  </div>
+</template>
+<script setup lang="ts">
+  import { ref, onMounted, onUnmounted, reactive } from 'vue';
+  import dayjs from 'dayjs';
+  import BarAndLine from '/@/components/chart/BarAndLine.vue';
+  import { list } from '../nitrogen.api';
 
-    const nitrogenChartsColumns = [
-      {
-        legend: '空压机排气压力',
-        seriesName: '(Mpa)',
-        ymax: 100,
-        yname: 'Pa',
-        linetype: 'line',
-        yaxispos: 'left',
-        color: '#9BCB75',
-        sort: 1,
-        xRotate: 0,
-        dataIndex: 'compressExhaustPressF1',
-      },
-      {
-        legend: '空压机分离压力',
-        seriesName: '(Mpa)',
-        ymax: 100,
-        yname: 'Mpa',
-        linetype: 'line',
-        yaxispos: 'left',
-        color: '#1EB0FC',
-        sort: 1,
-        xRotate: 0,
-        dataIndex: 'compressSeparatePressF1',
-      },
-      {
-        legend: '空压机主机温度',
-        seriesName: '(℃)',
-        ymax: 200,
-        yname: '℃',
-        linetype: 'line',
-        yaxispos: 'right',
-        color: '#FDB146',
-        sort: 2,
-        xRotate: 0,
-        dataIndex: 'compressHostTempF1',
-      },
-      {
-        legend: '空压机机组温度',
-        seriesName: '(℃)',
-        ymax: 200,
-        yname: '℃',
-        linetype: 'line',
-        yaxispos: 'right',
-        color: '#EE6666',
-        sort: 2,
-        xRotate: 0,
-        dataIndex: 'compressCrewTempF1',
-      },
-    ];
-    const cqgChartsColumns = [
+  const nitrogenChartsColumns = [
+    {
+      legend: '空压机排气压力',
+      seriesName: '(Mpa)',
+      ymax: 100,
+      yname: 'Pa',
+      linetype: 'line',
+      yaxispos: 'left',
+      color: '#9BCB75',
+      sort: 1,
+      xRotate: 0,
+      dataIndex: 'compressExhaustPressF1',
+    },
+    {
+      legend: '空压机分离压力',
+      seriesName: '(Mpa)',
+      ymax: 100,
+      yname: 'Mpa',
+      linetype: 'line',
+      yaxispos: 'left',
+      color: '#1EB0FC',
+      sort: 1,
+      xRotate: 0,
+      dataIndex: 'compressSeparatePressF1',
+    },
+    {
+      legend: '空压机主机温度',
+      seriesName: '(℃)',
+      ymax: 200,
+      yname: '℃',
+      linetype: 'line',
+      yaxispos: 'right',
+      color: '#FDB146',
+      sort: 2,
+      xRotate: 0,
+      dataIndex: 'compressHostTempF1',
+    },
+    {
+      legend: '空压机机组温度',
+      seriesName: '(℃)',
+      ymax: 200,
+      yname: '℃',
+      linetype: 'line',
+      yaxispos: 'right',
+      color: '#EE6666',
+      sort: 2,
+      xRotate: 0,
+      dataIndex: 'compressCrewTempF1',
+    },
+  ];
+  const cqgChartsColumns = [
     {
       legend: '储气罐压力',
       seriesName: '(Mpa)',
@@ -122,101 +124,98 @@
     },
   ];
 
-    const nitrogenOption = {
-      grid: {
-        top: '20%',
-        left: '2px',
-        right: '0px',
-        bottom: '3%',
-        containLabel: true
-      },
-      toolbox: {
-        feature:{
-          
-        }
-      }
-    }
-
-    const cqgOption = {
-      grid: {
-        top: '20%',
-        left: '0px',
-        right: '40px',
-        bottom: '3%',
-        containLabel: true
-      },
-      toolbox: {
-        feature: {
+  const nitrogenOption = {
+    grid: {
+      top: '20%',
+      left: '2px',
+      right: '0px',
+      bottom: '3%',
+      containLabel: true,
+    },
+    toolbox: {
+      feature: {},
+    },
+  };
 
-        }
-      }
-    }
+  const cqgOption = {
+    grid: {
+      top: '20%',
+      left: '0px',
+      right: '40px',
+      bottom: '3%',
+      containLabel: true,
+    },
+    toolbox: {
+      feature: {},
+    },
+  };
 
-    const currentTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'))
-    // const monitorData = [] as any[]
-    const dataSource = reactive<any[]>([])
+  const currentTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'));
+  // const monitorData = [] as any[]
+  const dataSource = reactive<any[]>([]);
 
-    // https获取监测数据
-    let timer: null | NodeJS.Timeout = null;
-    let count = 0
-    async function getMonitor(flag?) {
-      if (Object.prototype.toString.call(timer) === '[object Null]') {
-        timer = await setTimeout(async () => {
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  let count = 0;
+  async function getMonitor(flag?) {
+    if (Object.prototype.toString.call(timer) === '[object Null]') {
+      timer = await setTimeout(
+        async () => {
           await getDataSource();
           if (timer) {
             timer = null;
           }
           await getMonitor();
-        }, flag ? 0 : 1000);
-      }
-    };
+        },
+        flag ? 0 : 1000
+      );
+    }
+  }
 
-    async function getDataSource() {
-      
-      const res = await list({ devicetype: 'pressurefan', pagetype: 'normal' });
-      const dataList = res.msgTxt[0].datalist || [];
-      dataList.forEach((data, index) => {
-        const item = data.readData;
-        Object.assign(item, data);
-        item['readTime'] = item['readTime'].substring(11)
-        if(count == 0){
-          dataSource.push([item])
-        }else {
-          if(dataSource[index].length < 10){
-            dataSource[index].push(item)
-          }else {
-            dataSource[index].shift()
-            dataSource[index].push(item)
-          }
+  async function getDataSource() {
+    const res = await list({ devicetype: 'pressurefan', pagetype: 'normal' });
+    const dataList = res.msgTxt[0].datalist || [];
+    dataList.forEach((data, index) => {
+      const item = data.readData;
+      Object.assign(item, data);
+      item['readTime'] = item['readTime'].substring(11);
+      if (count == 0) {
+        dataSource.push([item]);
+      } else {
+        if (dataSource[index].length < 10) {
+          dataSource[index].push(item);
+        } else {
+          dataSource[index].shift();
+          dataSource[index].push(item);
         }
-      });
-      count++ // 实时数据累计
-      console.log('实时监测数据----->', dataSource)
-    };
-
-    onMounted(() => {
-      getMonitor(true)
-    })
-
-    onUnmounted(() => {
-      if (timer) {
-        clearTimeout(timer);
-        timer = undefined;
       }
     });
+    count++; // 实时数据累计
+    console.log('实时监测数据----->', dataSource);
+  }
+
+  onMounted(() => {
+    getMonitor(true);
+  });
 
+  onUnmounted(() => {
+    if (timer) {
+      clearTimeout(timer);
+      timer = undefined;
+    }
+  });
 </script>
 <style lang="less" scoped>
-  .button-box{
+  .button-box {
     text-align: end;
     margin-top: 10px;
     margin-right: 10px;
   }
-  .nitrogen-echatrs-box{
+  .nitrogen-echatrs-box {
     width: 100%;
     height: 100%;
   }
-  .echarts-container{
+  .echarts-container {
     position: fixed;
     width: 100%;
     height: 730px;
@@ -227,21 +226,19 @@
     display: flex;
     flex-direction: column;
     z-index: 99999;
-    
-    .echarts-item{
+
+    .echarts-item {
       display: flex;
       flex-direction: row;
       justify-content: space-between;
-      .echarts-nitrogen-item{
+      .echarts-nitrogen-item {
         width: calc(60% - 30px);
         height: 240px;
       }
-      .echarts-cqg-item{
+      .echarts-cqg-item {
         width: calc(40% - 10px);
         height: 240px;
       }
     }
-    
   }
-
-</style>
+</style>