소스 검색

1. 公司端预警样式修改
2. echarts 公共样式修改,纵轴颜色与监测数据颜色一致
3. 风窗修改

hongrunxia 9 달 전
부모
커밋
16ae066ef5
20개의 변경된 파일2417개의 추가작업 그리고 4029개의 파일을 삭제
  1. 9 2
      src/utils/echartsUtil.ts
  2. 19 15
      src/views/vent/home/clique/components/icon-light.vue
  3. 253 253
      src/views/vent/monitorManager/alarmMonitor/common/echartLine.vue
  4. 209 211
      src/views/vent/monitorManager/alarmMonitor/common/echartLine1.vue
  5. 205 205
      src/views/vent/monitorManager/alarmMonitor/common/echartLine2.vue
  6. 1 1
      src/views/vent/monitorManager/alarmMonitor/common/fireWork.vue
  7. 348 344
      src/views/vent/monitorManager/alarmMonitor/warn/fireWarn.vue
  8. 7 3
      src/views/vent/monitorManager/deviceMonitor/components/device/index.vue
  9. 0 54
      src/views/vent/monitorManager/fanLocalMonitor/components/fanlocal-echart-line.vue
  10. 0 59
      src/views/vent/monitorManager/fanLocalMonitor/components/fanlocal-history.vue
  11. 0 36
      src/views/vent/monitorManager/fanLocalMonitor/components/fanlocal-operate-history.vue
  12. 0 29
      src/views/vent/monitorManager/fanLocalMonitor/components/fanlocal-warn-history.vue
  13. 52 52
      src/views/vent/monitorManager/fanLocalMonitor/fanLocal.data.ts
  14. 0 1795
      src/views/vent/monitorManager/fanLocalMonitor/index-copy.vue
  15. 886 545
      src/views/vent/monitorManager/fanLocalMonitor/index.vue
  16. 221 234
      src/views/vent/monitorManager/fanlocalPage/index.vue
  17. 20 0
      src/views/vent/monitorManager/gateMonitor/index.vue
  18. 181 188
      src/views/vent/monitorManager/tunFaceMonitor/components/tunFaceFireHome.vue
  19. 4 1
      src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts
  20. 2 2
      src/views/vent/monitorManager/windowMonitor/index.vue

+ 9 - 2
src/utils/echartsUtil.ts

@@ -1,3 +1,4 @@
+import { color } from 'echarts';
 import echarts from '/@/utils/lib/echarts';
 import { merge } from 'lodash-es';
 export default class echartsUtil {
@@ -93,7 +94,8 @@ export default class echartsUtil {
       ];
     } else if (type == 'listMonitor' || type == 'detail') {
       return {
-        start: 0,
+        // start: 10,
+        // end: 100,
         type: 'inside',
       };
     }
@@ -179,15 +181,20 @@ export default class echartsUtil {
       position: item.yaxispos ? item.yaxispos : 'right',
       offset: item.yaxispos == 'right' ? (item.sort - 2) * 60 : 0,
       alignTicks: true,
+      nameTextStyle: {
+        color: '#fff',
+      },
       axisLine: {
         show: true,
         lineStyle: {
-          color: '#006c9d',
+          // color: '#006c9d',
+          color: item.color,
         },
       },
       axisLabel: {
         show: true,
         color: '#ffffffcc',
+        // color: item.color,
         formatter: function (value) {
           if (typeof value === 'number' && /[\.]/.test(value)) {
             return Math.round(value * 100) / 100;

+ 19 - 15
src/views/vent/home/clique/components/icon-light.vue

@@ -3,9 +3,11 @@
     <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' }">{{
-          item.label
-        }}</span>
+        <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>
@@ -41,7 +43,7 @@
             label: 'bet',
             leftV: '286px',
             topV: '97px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjtwlmlmk', imgSrc: warningLevel1, label: 'wlml', leftV: '327px', topV: '115px', textColor: '#fff', align: 'left' },
@@ -51,7 +53,7 @@
             label: 'cc',
             leftV: '346px',
             topV: '132px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjtsgtmk', imgSrc: warningLevel1, label: 'skt', leftV: '373px', topV: '149px', textColor: '#fff', align: 'left' },
@@ -61,7 +63,7 @@
             label: 'blt',
             leftV: '408px',
             topV: '184px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjthlgmk', imgSrc: warningLevel1, label: 'hlg', leftV: '445px', topV: '214px', textColor: '#fff', align: 'left' },
@@ -71,7 +73,7 @@
             label: 'sw',
             leftV: '439px',
             topV: '244px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjtdltmkhjtj', imgSrc: warningLevel1, label: 'hjt', leftV: '398px', topV: '265px', textColor: '#fff', align: 'left' },
@@ -82,7 +84,7 @@
             label: 'jj',
             leftV: '565px',
             topV: '413px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjtyjlmk', imgSrc: warningLevel1, label: 'yjl', leftV: '669px', topV: '308px', textColor: '#fff', align: 'left' },
@@ -92,7 +94,7 @@
             label: 'bd',
             leftV: '862px',
             topV: '340px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
         ]
@@ -105,7 +107,7 @@
             label: '布尔台矿',
             leftV: '329px',
             topV: '177px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjtwlmlmk', imgSrc: warningLevel1, label: '乌兰木伦矿', leftV: '432px', topV: '178px', textColor: '#fff', align: 'right' },
@@ -115,7 +117,7 @@
             label: '寸草塔矿',
             leftV: '396px',
             topV: '224px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjtsgtmk', imgSrc: warningLevel1, label: '石圪台矿', leftV: '470px', topV: '236px', textColor: '#fff', align: 'right' },
@@ -125,7 +127,7 @@
             label: '补连塔矿',
             leftV: '432px',
             topV: '282px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjthlgmk', imgSrc: warningLevel1, label: '哈拉沟矿', leftV: '511px', topV: '302px', textColor: '#fff', align: 'right' },
@@ -135,7 +137,7 @@
             label: '上湾矿',
             leftV: '381px',
             topV: '334px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'left',
           },
           { code: 'sdmtjtdltmkhjtj', imgSrc: warningLevel1, label: '活鸡兔井', leftV: '518px', topV: '358px', textColor: '#fff', align: 'left' },
@@ -146,7 +148,7 @@
             label: '锦界矿',
             leftV: '575px',
             topV: '460px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'center',
           },
           { code: 'sdmtjtyjlmk', imgSrc: warningLevel1, label: '榆家梁矿', leftV: '699px', topV: '307px', textColor: '#fff', align: 'center' },
@@ -156,7 +158,7 @@
             label: '保德矿',
             leftV: '892px',
             topV: '200px',
-            textColor: 'rgba(255, 231, 83,.9)',
+            textColor: '#fff',
             align: 'center',
           },
         ]
@@ -174,6 +176,7 @@
             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 ? '#f00' : '#fff';
           }
         }
       } else {
@@ -181,6 +184,7 @@
         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 ? '#f00' : '#fff';
         }
       }
       if (newPointList) {

+ 253 - 253
src/views/vent/monitorManager/alarmMonitor/common/echartLine.vue

@@ -5,290 +5,290 @@
 </template>
 
 <script lang="ts" setup>
-import { defineProps, ref, nextTick, reactive, watch, } from 'vue';
-import * as echarts from 'echarts';
+  import { defineProps, ref, nextTick, reactive, watch } from 'vue';
+  import * as echarts from 'echarts';
 
-let props = defineProps({
-  echartDataGq: {
-    type: Object,
-  },
-  maxY: {
-    type: Number
-  },
-  echartDw: {
-    type: String
-  },
-  echartDw1:{
-    type:String,
-  },
-  gridV:{
-    type:Object,
-    default:()=>{
-      return {
-        top: '15%',
-        left: '2%',
-        bottom: '6%',
-        right: '2%',
-        containLabel: true,
-      }
-    }
-  }
-});
-//获取dom元素节点
-let line = ref<any>();
-let echartDataGqs = reactive({})
-watch(
-  () => props.echartDataGq,
-  (data) => {
-    echartDataGqs = Object.assign({}, data)
-    getOption();
-  },
-  { immediate: true, deep: true }
-);
-function getOption() {
-  nextTick(() => {
-    let myChart = echarts.init(line.value);
-    let option = {
-      grid: props.gridV,
-      tooltip: {
-        trigger: 'item',
-        backgroundColor: 'rgba(0, 0, 0, .6)',
-        textStyle: {
-          color: '#fff',
-          fontSize: 12,
-        },
+  let props = defineProps({
+    echartDataGq: {
+      type: Object,
+    },
+    maxY: {
+      type: Number,
+    },
+    echartDw: {
+      type: String,
+    },
+    echartDw1: {
+      type: String,
+    },
+    gridV: {
+      type: Object,
+      default: () => {
+        return {
+          top: '15%',
+          left: '2%',
+          bottom: '6%',
+          right: '2%',
+          containLabel: true,
+        };
       },
-      legend: {
-        align: 'left',
-        right: 'center',
-        top: '0%',
-        type: 'plain',
-        textStyle: {
-          color: '#7ec7ff',
-          fontSize: 14,
-        },
-        // 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: echartDataGqs.maxData ? echartDataGqs.maxData.lengedData  : '',
+    },
+  });
+  //获取dom元素节点
+  let line = ref<any>();
+  let echartDataGqs = reactive({});
+  watch(
+    () => props.echartDataGq,
+    (data) => {
+      echartDataGqs = Object.assign({}, data);
+      getOption();
+    },
+    { immediate: true, deep: true }
+  );
+  function getOption() {
+    nextTick(() => {
+      let myChart = echarts.init(line.value);
+      let option = {
+        grid: props.gridV,
+        tooltip: {
+          trigger: 'item',
+          backgroundColor: 'rgba(0, 0, 0, .6)',
+          textStyle: {
+            color: '#fff',
+            fontSize: 12,
           },
-          {
-            name: echartDataGqs.minData ? echartDataGqs.minData.lengedData : '',
+        },
+        legend: {
+          align: 'left',
+          right: 'center',
+          top: '0%',
+          type: 'plain',
+          textStyle: {
+            color: '#7ec7ff',
+            fontSize: 14,
           },
+          // 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: echartDataGqs.maxData ? echartDataGqs.maxData.lengedData : '',
+            },
+            {
+              name: echartDataGqs.minData ? echartDataGqs.minData.lengedData : '',
+            },
 
-          {
-            name:echartDataGqs.aveValue ? echartDataGqs.aveValue.lengedData : ''
-          }
-        ],
-      },
-      xAxis: [
-        {
-          type: 'category',
-          boundaryGap: false,
-          axisLabel: {
-            // formatter: '{value}',
-            fontSize: 14,
-            margin: 20,
-            textStyle: {
-              color: '#b3b8cc',
+            {
+              name: echartDataGqs.aveValue ? echartDataGqs.aveValue.lengedData : '',
             },
-            formatter: function (params) {
-              let newParamsName = ref('')  // 最终拼接成的字符串
-              let paramsNameNumber = ref(params.length) // 实际标签的个数
-              let provideNumber = ref(10)  // 每行能显示的字的个数
-              let rowNumber = Math.ceil(paramsNameNumber.value / provideNumber.value) // 换行的话,需要显示几行,向上取整
-              /**
-               * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
-               */
-              // 条件等同于rowNumber>1
-              if (paramsNameNumber.value > provideNumber.value) {
-                /** 循环每一行,p表示行 */
-                for (var p = 0; p < rowNumber; p++) {
-                  var tempStr = '' // 表示每一次截取的字符串
-                  var start = p * provideNumber.value // 开始截取的位置
-                  var end = start + provideNumber.value // 结束截取的位置
-                  // 此处特殊处理最后一行的索引值
-                  if (p == rowNumber - 1) {
-                    // 最后一次不换行
-                    tempStr = params.substring(start, paramsNameNumber.value)
-                  } else {
-                    // 每一次拼接字符串并换行
-                    tempStr = params.substring(start, end) + '\n'
+          ],
+        },
+        xAxis: [
+          {
+            type: 'category',
+            boundaryGap: false,
+            axisLabel: {
+              // formatter: '{value}',
+              fontSize: 14,
+              margin: 20,
+              textStyle: {
+                color: '#b3b8cc',
+              },
+              formatter: function (params) {
+                let newParamsName = ref(''); // 最终拼接成的字符串
+                let paramsNameNumber = ref(params.length); // 实际标签的个数
+                let provideNumber = ref(10); // 每行能显示的字的个数
+                let rowNumber = Math.ceil(paramsNameNumber.value / provideNumber.value); // 换行的话,需要显示几行,向上取整
+                /**
+                 * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
+                 */
+                // 条件等同于rowNumber>1
+                if (paramsNameNumber.value > provideNumber.value) {
+                  /** 循环每一行,p表示行 */
+                  for (var p = 0; p < rowNumber; p++) {
+                    var tempStr = ''; // 表示每一次截取的字符串
+                    var start = p * provideNumber.value; // 开始截取的位置
+                    var end = start + provideNumber.value; // 结束截取的位置
+                    // 此处特殊处理最后一行的索引值
+                    if (p == rowNumber - 1) {
+                      // 最后一次不换行
+                      tempStr = params.substring(start, paramsNameNumber.value);
+                    } else {
+                      // 每一次拼接字符串并换行
+                      tempStr = params.substring(start, end) + '\n';
+                    }
+                    newParamsName.value += tempStr; // 最终拼成的字符串
                   }
-                  newParamsName.value += tempStr // 最终拼成的字符串
+                } else {
+                  // 将旧标签的值赋给新标签
+                  newParamsName.value = params;
                 }
-              } else {
-                // 将旧标签的值赋给新标签
-                newParamsName.value = params
-              }
-              //将最终的字符串返回
-              return newParamsName.value
-            }
-          },
-          axisLine: {
-            lineStyle: {
-              // color: 'rgba(14, 53, 95)',
-              color: '#244a94',
+                //将最终的字符串返回
+                return newParamsName.value;
+              },
             },
-          },
-          splitLine: {
-            show: false,
-            //   lineStyle: {
-            //     color: '#243753',
-            //   },
-          },
-          axisTick: {
-            show: false,
-          },
-          data: echartDataGqs.xData ? echartDataGqs.xData : [],
-        },
-      ],
-      yAxis: [
-        {
-          boundaryGap: false,
-          type: 'value',
-          max: props.maxY,
-          axisLabel: {
-            textStyle: {
-              color: '#b3b8cc',
+            axisLine: {
+              lineStyle: {
+                // color: 'rgba(14, 53, 95)',
+                color: '#244a94',
+              },
             },
-            formatter:'{value}'
-          },
-          name: props.echartDw,
-          nameTextStyle: {
-            color: '#fff',
-            fontSize: 12,
-            lineHeight: 10,
-          },
-          splitLine: {
-            lineStyle: {
-              // color: 'rgba(14, 53, 95)',
-              color: '#0d2973',
+            splitLine: {
+              show: false,
+              //   lineStyle: {
+              //     color: '#243753',
+              //   },
             },
-          },
-          axisLine: {
-            show: true,
-            lineStyle: {
-              // color: 'rgba(14, 53, 95)',
-              color: '#244a94',
+            axisTick: {
+              show: false,
             },
+            data: echartDataGqs.xData ? echartDataGqs.xData : [],
           },
-          axisTick: {
-            show: false,
-          },
-        },
-        {
-          boundaryGap: false,
-          type: 'value',
-          max: props.maxY,
-          axisLabel: {
-            textStyle: {
-              color: '#b3b8cc',
+        ],
+        yAxis: [
+          {
+            boundaryGap: false,
+            type: 'value',
+            max: props.maxY,
+            axisLabel: {
+              textStyle: {
+                color: '#b3b8cc',
+              },
+              formatter: '{value}',
             },
-            formatter:'{value}'
-          },
-          name: props.echartDw1,
-          nameTextStyle: {
-            color: '#fff',
-            fontSize: 12,
-            lineHeight: 10,
-          },
-          splitLine: {
-            lineStyle: {
-              color: 'rgba(14, 53, 95)',
+            name: props.echartDw,
+            nameTextStyle: {
+              color: '#fff',
+              fontSize: 12,
+              lineHeight: 10,
             },
-          },
-          axisLine: {
-            show: true,
-            lineStyle: {
-              color: 'rgba(14, 53, 95)',
+            splitLine: {
+              lineStyle: {
+                // color: 'rgba(14, 53, 95)',
+                color: '#0d2973',
+              },
+            },
+            axisLine: {
+              show: true,
+              lineStyle: {
+                // color: 'rgba(14, 53, 95)',
+                color: '#244a94',
+              },
+            },
+            axisTick: {
+              show: false,
             },
           },
-          axisTick: {
-            show: false,
-          },
-        },
-      ],
-      series: [
-        {
-          name: echartDataGqs.maxData ? echartDataGqs.maxData.lengedData : '',
-          type: 'line',
-          smooth: true,
-          showSymbol: true,
-          symbolSize: 8,
-          zlevel: 3,
-          itemStyle: {
-            color: '#19a3df',
-            borderColor: '#a3c8d8',
+          {
+            boundaryGap: false,
+            type: 'value',
+            max: props.maxY,
+            axisLabel: {
+              textStyle: {
+                color: '#b3b8cc',
+              },
+              formatter: '{value}',
+            },
+            name: props.echartDw1,
+            nameTextStyle: {
+              color: '#fff',
+              fontSize: 12,
+              lineHeight: 10,
+            },
+            splitLine: {
+              lineStyle: {
+                color: 'rgba(14, 53, 95)',
+              },
+            },
+            axisLine: {
+              show: true,
+              lineStyle: {
+                color: 'rgba(14, 53, 95)',
+              },
+            },
+            axisTick: {
+              show: false,
+            },
           },
-          lineStyle: {
-            normal: {
-              width: 2,
+        ],
+        series: [
+          {
+            name: echartDataGqs.maxData ? echartDataGqs.maxData.lengedData : '',
+            type: 'line',
+            smooth: true,
+            showSymbol: true,
+            symbolSize: 8,
+            zlevel: 3,
+            itemStyle: {
               color: '#19a3df',
+              borderColor: '#a3c8d8',
             },
+            lineStyle: {
+              normal: {
+                width: 2,
+                color: '#19a3df',
+              },
+            },
+            data: echartDataGqs.maxData ? echartDataGqs.maxData.data : [],
           },
-          data: echartDataGqs.maxData ? echartDataGqs.maxData.data : [],
-        },
-        {
-          name: echartDataGqs.minData ? echartDataGqs.minData.lengedData : '',
-          type: 'line',
-          smooth: true,
-          showSymbol: true,
-          symbolSize: 8,
-          zlevel: 3,
-          itemStyle: {
-            color: '#4fffad',
-            borderColor: '#a3c8d8',
-          },
-          lineStyle: {
-            normal: {
-              width: 2,
+          {
+            name: echartDataGqs.minData ? echartDataGqs.minData.lengedData : '',
+            type: 'line',
+            smooth: true,
+            showSymbol: true,
+            symbolSize: 8,
+            zlevel: 3,
+            itemStyle: {
               color: '#4fffad',
+              borderColor: '#a3c8d8',
             },
+            lineStyle: {
+              normal: {
+                width: 2,
+                color: '#4fffad',
+              },
+            },
+            data: echartDataGqs.minData ? echartDataGqs.minData.data : [],
           },
-          data: echartDataGqs.minData ? echartDataGqs.minData.data : [],
-        },
-        {
-          name: echartDataGqs.aveValue ? echartDataGqs.aveValue.lengedData : '',
-          type: 'line',
-          smooth: true,
-          showSymbol: true,
-          symbolSize: 8,
-          zlevel: 3,
-          itemStyle: {
-            color: '#fc8452',
-            borderColor: '#a3c8d8',
-          },
-          lineStyle: {
-            normal: {
-              width: 2,
+          {
+            name: echartDataGqs.aveValue ? echartDataGqs.aveValue.lengedData : '',
+            type: 'line',
+            smooth: true,
+            showSymbol: true,
+            symbolSize: 8,
+            zlevel: 3,
+            itemStyle: {
               color: '#fc8452',
+              borderColor: '#a3c8d8',
+            },
+            lineStyle: {
+              normal: {
+                width: 2,
+                color: '#fc8452',
+              },
             },
-          },
 
-          data: echartDataGqs.aveValue ? echartDataGqs.aveValue.data : [],
-        },
-      ],
-    };
-    myChart.setOption(option);
-    window.onresize = function () {
-      myChart.resize();
-    };
-  });
-}
+            data: echartDataGqs.aveValue ? echartDataGqs.aveValue.data : [],
+          },
+        ],
+      };
+      myChart.setOption(option);
+      window.onresize = function () {
+        myChart.resize();
+      };
+    });
+  }
 </script>
 
 <style scoped lang="less">
-.echartLine {
-  width: 100%;
-  height: 100%;
-
-  .line {
+  .echartLine {
     width: 100%;
     height: 100%;
+
+    .line {
+      width: 100%;
+      height: 100%;
+    }
   }
-}
 </style>

+ 209 - 211
src/views/vent/monitorManager/alarmMonitor/common/echartLine1.vue

@@ -1,232 +1,230 @@
 <template>
-    <div class="echartLine">
-        <div class="line" ref="line"></div>
-    </div>
+  <div class="echartLine">
+    <div class="line" ref="line"></div>
+  </div>
 </template>
-  
+
 <script lang="ts" setup>
-import * as echarts from 'echarts'
-import { ref, nextTick, reactive, watch, defineProps } from 'vue';
-let props = defineProps({
+  import * as echarts from 'echarts';
+  import { ref, nextTick, reactive, watch, defineProps } from 'vue';
+  let props = defineProps({
     echartDataSg: {
-        type: Object,
+      type: Object,
     },
     lengedDataName: {
-        type: String,
-    }
-})
-
-//获取dom元素节点
-let line = ref<any>()
-let echartDataSgs = reactive({})
-watch(() => props.echartDataSg, (data) => {
-    echartDataSgs = Object.assign({}, data)
-    getOption()
-}, { immediate: true, deep: true })
-
+      type: String,
+    },
+  });
 
+  //获取dom元素节点
+  let line = ref<any>();
+  let echartDataSgs = reactive({});
+  watch(
+    () => props.echartDataSg,
+    (data) => {
+      echartDataSgs = Object.assign({}, data);
+      getOption();
+    },
+    { immediate: true, deep: true }
+  );
 
-function getOption() {
+  function getOption() {
     nextTick(() => {
-        const myChart = echarts.init(line.value)
-        let option = {
-            grid: {
-                top: '8%',
-                left: '5%',
-                bottom: '14%',
-                right: '5%',
-                //   containLabel: true,
+      const myChart = echarts.init(line.value);
+      let option = {
+        grid: {
+          top: '8%',
+          left: '5%',
+          bottom: '14%',
+          right: '5%',
+          //   containLabel: true,
+        },
+        tooltip: {
+          trigger: 'axis',
+          backgroundColor: 'rgba(0, 0, 0, .6)',
+          textStyle: {
+            color: '#fff',
+            fontSize: 12,
+          },
+        },
+        legend: {
+          align: 'left',
+          right: '50%',
+          top: '0%',
+          type: 'plain',
+          textStyle: {
+            color: '#7ec7ff',
+            fontSize: 14,
+          },
+          // 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: echartDataSgs.lengedData ? echartDataSgs.lengedData : '',
             },
-            tooltip: {
-                trigger: 'axis',
-                backgroundColor: 'rgba(0, 0, 0, .6)',
-                textStyle: {
-                    color: '#fff',
-                    fontSize: 12,
-                },
+          ],
+        },
+        xAxis: [
+          {
+            type: 'category',
+            boundaryGap: false,
+            axisLabel: {
+              // formatter: '{value}',
+              fontSize: 14,
+              margin: 10,
+              textStyle: {
+                color: '#b3b8cc',
+              },
+              // interval: 0,
+              formatter: function (params) {
+                let newParamsName = ref(''); // 最终拼接成的字符串
+                let paramsNameNumber = ref(params.length); // 实际标签的个数
+                let provideNumber = ref(10); // 每行能显示的字的个数
+                let rowNumber = Math.ceil(paramsNameNumber.value / provideNumber.value); // 换行的话,需要显示几行,向上取整
+                /**
+                 * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
+                 */
+                // 条件等同于rowNumber>1
+                if (paramsNameNumber.value > provideNumber.value) {
+                  /** 循环每一行,p表示行 */
+                  for (var p = 0; p < rowNumber; p++) {
+                    var tempStr = ''; // 表示每一次截取的字符串
+                    var start = p * provideNumber.value; // 开始截取的位置
+                    var end = start + provideNumber.value; // 结束截取的位置
+                    // 此处特殊处理最后一行的索引值
+                    if (p == rowNumber - 1) {
+                      // 最后一次不换行
+                      tempStr = params.substring(start, paramsNameNumber.value);
+                    } else {
+                      // 每一次拼接字符串并换行
+                      tempStr = params.substring(start, end) + '\n';
+                    }
+                    newParamsName.value += tempStr; // 最终拼成的字符串
+                  }
+                } else {
+                  // 将旧标签的值赋给新标签
+                  newParamsName.value = params;
+                }
+                //将最终的字符串返回
+                return newParamsName.value;
+              },
             },
-            legend: {
-                align: 'left',
-                right: '50%',
-                top: '0%',
-                type: 'plain',
-                textStyle: {
-                    color: '#7ec7ff',
-                    fontSize: 14,
-                },
-                // 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: echartDataSgs.lengedData ? echartDataSgs.lengedData : '',
-                    },
-               
-                ],
+            axisLine: {
+              lineStyle: {
+                color: '#244a94',
+              },
             },
-            xAxis: [
-                {
-                    type: 'category',
-                    boundaryGap: false,
-                    axisLabel: {
-                        // formatter: '{value}',
-                        fontSize: 14,
-                        margin: 10,
-                        textStyle: {
-                            color: '#b3b8cc',
-                        },
-                        // interval: 0,
-                        formatter: function (params) {
-                            let newParamsName = ref('')  // 最终拼接成的字符串
-                            let paramsNameNumber = ref(params.length) // 实际标签的个数
-                            let provideNumber = ref(10)  // 每行能显示的字的个数
-                            let rowNumber = Math.ceil(paramsNameNumber.value / provideNumber.value) // 换行的话,需要显示几行,向上取整
-                            /**
-                             * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
-                             */
-                            // 条件等同于rowNumber>1
-                            if (paramsNameNumber.value > provideNumber.value) {
-                                /** 循环每一行,p表示行 */
-                                for (var p = 0; p < rowNumber; p++) {
-                                    var tempStr = '' // 表示每一次截取的字符串
-                                    var start = p * provideNumber.value // 开始截取的位置
-                                    var end = start + provideNumber.value // 结束截取的位置
-                                    // 此处特殊处理最后一行的索引值
-                                    if (p == rowNumber - 1) {
-                                        // 最后一次不换行
-                                        tempStr = params.substring(start, paramsNameNumber.value)
-                                    } else {
-                                        // 每一次拼接字符串并换行
-                                        tempStr = params.substring(start, end) + '\n'
-                                    }
-                                    newParamsName.value += tempStr // 最终拼成的字符串
-                                }
-                            } else {
-                                // 将旧标签的值赋给新标签
-                                newParamsName.value = params
-                            }
-                            //将最终的字符串返回
-                            return newParamsName.value
-                        }
-
-                    },
-                    axisLine: {
-                        lineStyle: {
-                            color: '#244a94',
-                        },
-                    },
-                    splitLine: {
-                        show: true,
-                        lineStyle: {
-                            color: '#0d2973',
-                            type: 'dashed',
-                        },
-                    },
-                    axisTick: {
-                        show: false,
-                    },
-                    data: echartDataSgs.xData,
-                },
-            ],
-            yAxis: [
-                {
-                    boundaryGap: false,
-                    name: props.lengedDataName ? props.lengedDataName : '',
-                    type: 'value',
-                    max: 50,
-                    axisLabel: {
-                        textStyle: {
-                            color: '#b3b8cc',
-                        },
-                    },
-                    nameTextStyle: {
-                        color: '#fff',
-                        fontSize: 12,
-                        lineHeight: 5,
-                    },
-                    splitLine: {
-                        lineStyle: {
-                            color: '#0d2973',
-                            type: 'dashed',
-                        },
-                    },
-                    axisLine: {
-                        show: true,
-                        lineStyle: {
-                            color: '#244a94',
-                        },
-                    },
-                    axisTick: {
-                        show: false,
-                    },
-                },
-            ],
-            series: [
-                {
-                    name: echartDataSgs.lengedData ? echartDataSgs.lengedData : '',
-                    type: 'line',
-                    smooth: false,
-                    showSymbol: false,
-                    symbolSize: 8,
-                    zlevel: 3,
-                    itemStyle: {
-                        color: '#02f2de',
-                        borderColor: '#a3c8d8',
+            splitLine: {
+              show: true,
+              lineStyle: {
+                color: '#0d2973',
+                type: 'dashed',
+              },
+            },
+            axisTick: {
+              show: false,
+            },
+            data: echartDataSgs.xData,
+          },
+        ],
+        yAxis: [
+          {
+            boundaryGap: false,
+            name: props.lengedDataName ? props.lengedDataName : '',
+            type: 'value',
+            max: 50,
+            axisLabel: {
+              textStyle: {
+                color: '#b3b8cc',
+              },
+            },
+            nameTextStyle: {
+              color: '#fff',
+              fontSize: 12,
+              lineHeight: 5,
+            },
+            splitLine: {
+              lineStyle: {
+                color: '#0d2973',
+                type: 'dashed',
+              },
+            },
+            axisLine: {
+              show: true,
+              lineStyle: {
+                color: '#244a94',
+              },
+            },
+            axisTick: {
+              show: false,
+            },
+          },
+        ],
+        series: [
+          {
+            name: echartDataSgs.lengedData ? echartDataSgs.lengedData : '',
+            type: 'line',
+            smooth: false,
+            showSymbol: false,
+            symbolSize: 8,
+            zlevel: 3,
+            itemStyle: {
+              color: '#02f2de',
+              borderColor: '#a3c8d8',
+            },
+            lineStyle: {
+              normal: {
+                width: 3,
+                color: '#02f2de',
+              },
+            },
+            areaStyle: {
+              normal: {
+                color: new echarts.graphic.LinearGradient(
+                  0,
+                  0,
+                  0,
+                  1,
+                  [
+                    {
+                      offset: 0,
+                      color: 'rgba(2, 242, 222,0.8)',
                     },
-                    lineStyle: {
-                        normal: {
-                            width: 3,
-                            color: '#02f2de',
-                        },
+                    {
+                      offset: 0.5,
+                      color: 'rgba(2, 242, 222,0.4)',
                     },
-                    areaStyle: {
-                        normal: {
-                            color: new echarts.graphic.LinearGradient(
-                                0,
-                                0,
-                                0,
-                                1,
-                                [
-                                    {
-                                        offset: 0,
-                                        color: 'rgba(2, 242, 222,0.8)',
-                                    },
-                                    {
-                                        offset: 0.5,
-                                        color: 'rgba(2, 242, 222,0.4)',
-                                    },
-                                    {
-                                        offset: 0.9,
-                                        color: 'rgba(2, 242, 222,0)',
-                                    },
-                                ],
-                                false
-                            ),
-                        },
+                    {
+                      offset: 0.9,
+                      color: 'rgba(2, 242, 222,0)',
                     },
-                    data: echartDataSgs.yData,
-                },
-            ],
-        }
-        myChart.setOption(option)
-        window.onresize = function () {
-            myChart.resize()
-        }
-    })
-}
-
-
+                  ],
+                  false
+                ),
+              },
+            },
+            data: echartDataSgs.yData,
+          },
+        ],
+      };
+      myChart.setOption(option);
+      window.onresize = function () {
+        myChart.resize();
+      };
+    });
+  }
 </script>
-  
-<style scoped lang='less'>
-.echartLine {
+
+<style scoped lang="less">
+  .echartLine {
     width: 100%;
     height: 100%;
 
     .line {
-        width: 100%;
-        height: 100%;
+      width: 100%;
+      height: 100%;
     }
-}
-</style>
+  }
+</style>

+ 205 - 205
src/views/vent/monitorManager/alarmMonitor/common/echartLine2.vue

@@ -1,229 +1,229 @@
 <template>
-    <div class="echart-work">
-        <div ref="work" class="work-box"></div>
-    </div>
+  <div class="echart-work">
+    <div ref="work" class="work-box"></div>
+  </div>
 </template>
-  
+
 <script lang="ts" setup>
-import * as echarts from 'echarts'
-import { ref, nextTick, reactive, watch, defineProps } from 'vue';
+  import * as echarts from 'echarts';
+  import { ref, nextTick, reactive, watch, defineProps } from 'vue';
 
-let props = defineProps({
+  let props = defineProps({
     echartDataWd: {
-        type: Object,
-    }
-})
+      type: Object,
+    },
+  });
 
-//获取dom元素节点
-let work = ref<any>()
-let echartDataWds = reactive({})
+  //获取dom元素节点
+  let work = ref<any>();
+  let echartDataWds = reactive({});
 
-watch(() => props.echartDataWd, (data) => {
-    echartDataWds = Object.assign({}, data)
-    getOption()
-}, { immediate: true, deep: true })
+  watch(
+    () => props.echartDataWd,
+    (data) => {
+      echartDataWds = Object.assign({}, data);
+      getOption();
+    },
+    { immediate: true, deep: true }
+  );
 
-function getOption() {
+  function getOption() {
     nextTick(() => {
-        const myChart = echarts.init(work.value)
-        let option = {
-            tooltip: {
-                trigger: 'axis',
-                axisPointer: {
-                    type: 'cross',
-                },
-            },
+      const myChart = echarts.init(work.value);
+      let option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'cross',
+          },
+        },
 
-            legend: {
-                align: 'left',
-                right: '50%',
-                top: '0%',
-                type: 'plain',
-                textStyle: {
-                    color: '#7ec7ff',
-                    fontSize: 14,
-                },
-                // 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: echartDataWds.maxData ? echartDataWds.maxData.lengedData : '',
-                    },
-               
-                ],
+        legend: {
+          align: 'left',
+          right: '50%',
+          top: '0%',
+          type: 'plain',
+          textStyle: {
+            color: '#7ec7ff',
+            fontSize: 14,
+          },
+          // 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: echartDataWds.maxData ? echartDataWds.maxData.lengedData : '',
             },
+          ],
+        },
 
-            grid: {
-                top: '20%',
-                left: '4%',
-                right: '4%',
-                bottom: '20%',
-                // containLabel: true
-            },
-
-            xAxis: [
-                {
-                    type: 'category',
-                    boundaryGap: false,
-                    axisLine: {
-                        //坐标轴轴线相关设置。数学上的x轴
-                        show: true,
-                        lineStyle: {
-                            color: '#244a94',
-                        },
-                    },
-                    axisLabel: {
-                        //坐标轴刻度标签的相关设置
-                        textStyle: {
-                            color: '#b3b8cc',
-                            padding: 5,
-                            fontSize: 14,
-                        },
-                        formatter: function (data) {
-                            return data
-                        },
-                    },
-                    splitLine: {
-                        show: true,
-                        lineStyle: {
-                            color: '#0d2973',
-                            type: 'dashed',
-                        },
-                    },
-                    axisTick: {
-                        show: false,
-                    },
-                    data: echartDataWds.xData,
-                },
-            ],
-
-            yAxis: [
-                {
-                    name: '(℃)',
-                    nameTextStyle: {
-                        color: '#7ec7ff',
-                        fontSize: 14,
-                        padding: 0,
-                    },
-                    min: 0,
-                    max: 2000,
-                    splitLine: {
-                        show: true,
-                        lineStyle: {
-                            color: '#0d2973',
-                            type: 'dashed',
-                        },
-                    },
-                    axisLine: {
-                        show: true,
-                        lineStyle: {
-                            color: '#244a94',
-                        },
-                    },
-                    axisLabel: {
-                        show: true,
-                        textStyle: {
-                            color: '#b3b8cc',
-                            padding: 5,
-                        },
-                        formatter: function (value) {
-                            if (value === 0) {
-                                return value
-                            }
-                            return value
-                        },
-                    },
-                    axisTick: {
-                        show: false,
-                    },
-                },
-            ],
-            series: [
-                {
-                    name: echartDataWds.maxData ? echartDataWds.maxData.lengedData : '',
-                    type: 'line',
-                    smooth: true,
-                    yAxisIndex: 0,
-                    symbolSize: 8,
-                    lineStyle: {
-                        normal: {
-                            width: 2,
-                            color: '#4653fd', // 线条颜色
-                        },
-                        borderColor: 'rgba(0,0,0,.4)',
-                    },
-                    itemStyle: {
-                        color: '#4653fd',
-                        borderColor: '#646ace',
-                        borderWidth: 0,
-                    },
-                    data: echartDataWds.maxData ? echartDataWds.maxData.data : [],
-                },
-                {
-                    name: echartDataWds.minData ? echartDataWds.minData.lengedData : '',
-                    type: 'line',
-                    smooth: true,
-                    yAxisIndex: 0,
-                    symbolSize: 8,
+        grid: {
+          top: '20%',
+          left: '4%',
+          right: '4%',
+          bottom: '20%',
+          // containLabel: true
+        },
 
-                    lineStyle: {
-                        normal: {
-                            width: 2,
-                            color: '#46fda8', // 线条颜色
-                        },
-                        borderColor: 'rgba(0,0,0,.4)',
-                    },
-                    itemStyle: {
-                        color: '#46fda8',
-                        borderColor: '#646ace',
-                        borderWidth: 0,
-                    },
-                    data: echartDataWds.minData ? echartDataWds.minData.data : [],
-                },
-                {
-                    name: echartDataWds.aveaData ? echartDataWds.aveaData.lengedData : '',
-                    type: 'line',
-                    smooth: true,
-                    yAxisIndex: 0,
-                    symbolSize: 8,
+        xAxis: [
+          {
+            type: 'category',
+            boundaryGap: false,
+            axisLine: {
+              //坐标轴轴线相关设置。数学上的x轴
+              show: true,
+              lineStyle: {
+                color: '#244a94',
+              },
+            },
+            axisLabel: {
+              //坐标轴刻度标签的相关设置
+              textStyle: {
+                color: '#b3b8cc',
+                padding: 5,
+                fontSize: 14,
+              },
+              formatter: function (data) {
+                return data;
+              },
+            },
+            splitLine: {
+              show: true,
+              lineStyle: {
+                color: '#0d2973',
+                type: 'dashed',
+              },
+            },
+            axisTick: {
+              show: false,
+            },
+            data: echartDataWds.xData,
+          },
+        ],
 
-                    lineStyle: {
-                        normal: {
-                            width: 2,
-                            color: '#1eb0fc', // 线条颜色
-                        },
-                        borderColor: 'rgba(0,0,0,.4)',
-                    },
-                    itemStyle: {
-                        color: '#1eb0fc',
-                        borderColor: '#646ace',
-                        borderWidth: 0,
-                    },
-                    data: echartDataWds.aveaData ? echartDataWds.aveaData.data : [],
-                },
-            ],
-        }
-        myChart.setOption(option)
-        window.onresize = function () {
-            myChart.resize()
-        }
-    })
-}
+        yAxis: [
+          {
+            name: '(℃)',
+            nameTextStyle: {
+              color: '#7ec7ff',
+              fontSize: 14,
+              padding: 0,
+            },
+            min: 0,
+            max: 100,
+            splitLine: {
+              show: true,
+              lineStyle: {
+                color: '#0d2973',
+                type: 'dashed',
+              },
+            },
+            axisLine: {
+              show: true,
+              lineStyle: {
+                color: '#244a94',
+              },
+            },
+            axisLabel: {
+              show: true,
+              textStyle: {
+                color: '#b3b8cc',
+                padding: 5,
+              },
+              formatter: function (value) {
+                if (value === 0) {
+                  return value;
+                }
+                return value;
+              },
+            },
+            axisTick: {
+              show: false,
+            },
+          },
+        ],
+        series: [
+          {
+            name: echartDataWds.maxData ? echartDataWds.maxData.lengedData : '',
+            type: 'line',
+            smooth: true,
+            yAxisIndex: 0,
+            symbolSize: 8,
+            lineStyle: {
+              normal: {
+                width: 2,
+                color: '#4653fd', // 线条颜色
+              },
+              borderColor: 'rgba(0,0,0,.4)',
+            },
+            itemStyle: {
+              color: '#4653fd',
+              borderColor: '#646ace',
+              borderWidth: 0,
+            },
+            data: echartDataWds.maxData ? echartDataWds.maxData.data : [],
+          },
+          {
+            name: echartDataWds.minData ? echartDataWds.minData.lengedData : '',
+            type: 'line',
+            smooth: true,
+            yAxisIndex: 0,
+            symbolSize: 8,
 
+            lineStyle: {
+              normal: {
+                width: 2,
+                color: '#46fda8', // 线条颜色
+              },
+              borderColor: 'rgba(0,0,0,.4)',
+            },
+            itemStyle: {
+              color: '#46fda8',
+              borderColor: '#646ace',
+              borderWidth: 0,
+            },
+            data: echartDataWds.minData ? echartDataWds.minData.data : [],
+          },
+          {
+            name: echartDataWds.aveaData ? echartDataWds.aveaData.lengedData : '',
+            type: 'line',
+            smooth: true,
+            yAxisIndex: 0,
+            symbolSize: 8,
 
+            lineStyle: {
+              normal: {
+                width: 2,
+                color: '#1eb0fc', // 线条颜色
+              },
+              borderColor: 'rgba(0,0,0,.4)',
+            },
+            itemStyle: {
+              color: '#1eb0fc',
+              borderColor: '#646ace',
+              borderWidth: 0,
+            },
+            data: echartDataWds.aveaData ? echartDataWds.aveaData.data : [],
+          },
+        ],
+      };
+      myChart.setOption(option);
+      window.onresize = function () {
+        myChart.resize();
+      };
+    });
+  }
 </script>
-  
+
 <style scoped lang="less">
-.echart-work {
+  .echart-work {
     width: 100%;
     height: 100%;
 
     .work-box {
-        width: 100%;
-        height: 100%;
+      width: 100%;
+      height: 100%;
     }
-}
+  }
 </style>
-  

+ 1 - 1
src/views/vent/monitorManager/alarmMonitor/common/fireWork.vue

@@ -72,7 +72,7 @@
     listData: Object,
   });
 
-  let maxY = ref(2000);
+  let maxY = ref(100);
   let echartDw = ref('(­°C)');
   //光钎测温-图表数据
   let echartDataGq = reactive({

+ 348 - 344
src/views/vent/monitorManager/alarmMonitor/warn/fireWarn.vue

@@ -1,55 +1,57 @@
 <template>
-    <customHeader :options="options" @change="getSelectRow" :optionValue="optionValue"> 火灾监测预警 </customHeader>
-    <div class="fireWarn">
-        <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="type-btn">
-                <div :class="activeIndex == index ? 'btn1' : 'btn'" v-for="(item, index) in typeMenuList" :key="index"
-                    @click="btnClick(index)">
-                    {{ item.name }}
-                </div>
-            </div>
-            <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>
+  <customHeader :options="options" @change="getSelectRow" :optionValue="optionValue"> 火灾监测预警 </customHeader>
+  <div class="fireWarn">
+    <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="type-btn">
+        <div :class="activeIndex == index ? 'btn1' : 'btn'" v-for="(item, index) in typeMenuList" :key="index" @click="btnClick(index)">
+          {{ item.name }}
         </div>
-        <div class="fire-content">
-            <component :is="componentName[currentLoad]" :listData="listData" :strType="strType" :tableList="tableLists">
-            </component>
+      </div>
+      <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="fire-content">
+      <component :is="componentName[currentLoad]" :listData="listData" :strType="strType" :tableList="tableLists" />
     </div>
+  </div>
 </template>
 
 <script setup lang="ts">
-import { ref, reactive, onMounted, onUnmounted, defineAsyncComponent } from 'vue'
-import { typeMenuList, componentName } from '../common.data'
-import { sysTypeWarnList, sysWarn } from '../common.api'
-import { useSystemSelect } from '/@/hooks/vent/useSystemSelect';
-import { useGlobSetting } from '/@/hooks/setting';
-import { useRouter } from 'vue-router';
-import CustomHeader from '/@/components/vent/customHeader.vue';
+  import { ref, reactive, onMounted, onUnmounted, defineAsyncComponent } from 'vue';
+  import { typeMenuList, componentName } from '../common.data';
+  import { sysTypeWarnList, sysWarn } from '../common.api';
+  import { useSystemSelect } from '/@/hooks/vent/useSystemSelect';
+  import { useGlobSetting } from '/@/hooks/setting';
+  import { useRouter } from 'vue-router';
+  import CustomHeader from '/@/components/vent/customHeader.vue';
 
-const { options, optionValue, getSelectRow, getSysDataSource } = useSystemSelect('sys_surface_caimei'); // 参数为场景类型(设备类型管理中可以查询到)
-//当前加载组件
-let currentLoad = ref('')
-//内外因火灾激活索引
-let activeIndex = ref(0);
-//当前激活菜单的索引
-let activeIndex1 = ref(0);
-let menuList = reactive<any[]>([]); //左侧菜单列表
-let menuList1 = reactive({
+  const { options, optionValue, getSelectRow, getSysDataSource } = useSystemSelect('sys_surface_caimei'); // 参数为场景类型(设备类型管理中可以查询到)
+  //当前加载组件
+  let currentLoad = ref('');
+  //内外因火灾激活索引
+  let activeIndex = ref(0);
+  //当前激活菜单的索引
+  let activeIndex1 = ref(0);
+  let menuList = reactive<any[]>([]); //左侧菜单列表
+  let menuList1 = reactive({
     external: [],
     internal: [],
-    info: []
-});
-//详情数据
-let listData = reactive({
+    info: [],
+  });
+  //详情数据
+  let listData = reactive({
     common: {},
     bundletube: [],
     fiber: [],
@@ -58,129 +60,132 @@ let listData = reactive({
     smoke: [],
     spray: [],
     temperature: [],
-}); //详情数据
-let strType = ref(''); //火灾外因-区别工作面和煤层
-let router = useRouter()
-let tableLists = ref<any[]>([])
+  }); //详情数据
+  let strType = ref(''); //火灾外因-区别工作面和煤层
+  let router = useRouter();
+  let tableLists = ref<any[]>([]);
 
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-function getMonitor(deviceID, flag?) {
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  function getMonitor(deviceID, flag?) {
     timer = setTimeout(
-        async () => {
-            await getSysWarnList(deviceID, 'fire');
-            if (timer) {
-                timer = null;
-            }
-            getMonitor(deviceID);
-        },
-        flag ? 0 : 1000
+      async () => {
+        await getSysWarnList(deviceID, 'fire');
+        if (timer) {
+          timer = null;
+        }
+        getMonitor(deviceID);
+      },
+      flag ? 0 : 1000
     );
-}
+  }
 
-//返回首页
-function getBack() {
-    router.push('/monitorChannel/monitor-alarm-home')
-}
+  //返回首页
+  function getBack() {
+    router.push('/monitorChannel/monitor-alarm-home');
+  }
 
-//获取左侧菜单列表
-async function getMenuList() {
-    let res = await sysTypeWarnList({ type: 'fire' })
-    console.log(res, '火灾左侧菜单列表-------')
+  //获取左侧菜单列表
+  async function getMenuList() {
+    let res = await sysTypeWarnList({ type: 'fire' });
+    console.log(res, '火灾左侧菜单列表-------');
     if (res.length != 0) {
-        menuList.length = 0
-        menuList1.external = res.external;
-        menuList1.internal = res.internal;
-        menuList1.info = res.info
+      menuList.length = 0;
+      menuList1.external = res.external;
+      menuList1.internal = res.internal;
+      menuList1.info = res.info;
+      if (menuList1.internal && menuList1.internal.length > 0) {
         menuList1.internal.forEach((el) => {
-            menuList.push({
-                name: el.systemname,
-                warn: '低风险',
-                type: 'on',
-                deviceID: el.id,
-                strtype: el.strtype,
-            });
+          menuList.push({
+            name: el.systemname,
+            warn: '低风险',
+            type: 'on',
+            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.bundletube = res.bundletube;
-        listData.fiber = res.fiber;
-        listData.fire = res.fire;
-        listData.co = res.co;
-        listData.smoke = res.smoke;
-        listData.spray = res.spray;
-        listData.temperature = res.temperature;
-        loadZj();
+      listData.bundletube = res.bundletube;
+      listData.fiber = res.fiber;
+      listData.fire = res.fire;
+      listData.co = res.co;
+      listData.smoke = res.smoke;
+      listData.spray = res.spray;
+      listData.temperature = res.temperature;
+      loadZj();
     });
-}
-//内外因火灾、预警指标选项切换
-function btnClick(ind) {
+  }
+  //内外因火灾、预警指标选项切换
+  function btnClick(ind) {
     activeIndex.value = ind;
     switch (ind) {
-        case 0:
-            activeIndex1.value = 0;
-            menuList.length = 0;
-            currentLoad.value = '';
-            menuList1.internal.forEach((el) => {
-                menuList.push({
-                    name: el.systemname,
-                    warn: '低风险',
-                    type: 'on',
-                    deviceID: el.id,
-                    strtype: el.strtype,
-                });
-            });
-            clearTimeout(timer);
-            getClearList();
-            getMonitor(menuList[0].deviceID, true);
-            break;
-        case 1:
-            activeIndex1.value = 0;
-            menuList.length = 0;
-            currentLoad.value = '';
-            if (menuList1.external.length != 0) {
-                menuList1.external.forEach((el) => {
-                    menuList.push({
-                        name: el.systemname,
-                        warn: '低风险',
-                        type: 'out',
-                        deviceID: el.id,
-                        strtype: el.strtype,
-                    });
-                });
-                clearTimeout(timer);
-                getClearList();
-                getMonitor(menuList[0].deviceID, true);
-                strType.value = menuList[0].strtype;
-            } else {
-                menuList.length = 0;
-                clearTimeout(timer);
-                currentLoad.value = '';
-            }
-            break;
-        case 2:
-            clearTimeout(timer);
-            menuList.length = 0;
-            activeIndex1.value = 0;
-            menuList1.info.forEach((el) => {
-                menuList.push({
-                    name: el.sysname,
-                    warn: '正常',
-                    deviceID: el.sysid,
-                    strtype: '',
-                });
+      case 0:
+        activeIndex1.value = 0;
+        menuList.length = 0;
+        currentLoad.value = '';
+        menuList1.internal.forEach((el) => {
+          menuList.push({
+            name: el.systemname,
+            warn: '低风险',
+            type: 'on',
+            deviceID: el.id,
+            strtype: el.strtype,
+          });
+        });
+        clearTimeout(timer);
+        getClearList();
+        getMonitor(menuList[0].deviceID, true);
+        break;
+      case 1:
+        activeIndex1.value = 0;
+        menuList.length = 0;
+        currentLoad.value = '';
+        if (menuList1.external.length != 0) {
+          menuList1.external.forEach((el) => {
+            menuList.push({
+              name: el.systemname,
+              warn: '低风险',
+              type: 'out',
+              deviceID: el.id,
+              strtype: el.strtype,
             });
-            loadZb()
-            break;
+          });
+          clearTimeout(timer);
+          getClearList();
+          getMonitor(menuList[0].deviceID, true);
+          strType.value = menuList[0].strtype;
+        } else {
+          menuList.length = 0;
+          clearTimeout(timer);
+          currentLoad.value = '';
+        }
+        break;
+      case 2:
+        clearTimeout(timer);
+        menuList.length = 0;
+        activeIndex1.value = 0;
+        menuList1.info.forEach((el) => {
+          menuList.push({
+            name: el.sysname,
+            warn: '正常',
+            deviceID: el.sysid,
+            strtype: '',
+          });
+        });
+        loadZb();
+        break;
     }
-}
-//加载预警指标组件
-function loadZb() {
+  }
+  //加载预警指标组件
+  function loadZb() {
     // menuList1.info.forEach((el) => {
     //     if (el.list.length != 0) {
     //         el.list.forEach(v => {
@@ -196,50 +201,49 @@ function loadZb() {
     //         tableLists.value.length = 0
     //     }
     // });
-    tableLists.value = menuList1.info[0].list
+    tableLists.value = menuList1.info[0].list;
     const { sysOrgCode } = useGlobSetting();
     switch (sysOrgCode) {
-        case 'sdmtjtbdmk': // 宝德
-            currentLoad.value = 'warnFireBd';
-            return currentLoad.value;
-        case 'sdmtjtbetmk': // 布尔台
-            currentLoad.value = 'warnFireBrt';
-            return currentLoad.value;
-        default:
-            currentLoad.value = 'warnFireBrt';
-            return currentLoad.value;
+      case 'sdmtjtbdmk': // 宝德
+        currentLoad.value = 'warnFireBd';
+        return currentLoad.value;
+      case 'sdmtjtbetmk': // 布尔台
+        currentLoad.value = 'warnFireBrt';
+        return currentLoad.value;
+      default:
+        currentLoad.value = 'warnFireBrt';
+        return currentLoad.value;
     }
-}
-//菜单选项切换
-function cardClick(ind, item) {
+  }
+  //菜单选项切换
+  function cardClick(ind, item) {
     if (activeIndex.value != 2) {
-        activeIndex1.value = ind;
-        strType.value = item.strtype;
-        clearTimeout(timer);
-        getClearList();
-        currentLoad.value = '';
-        getMonitor(item.deviceID, true);
+      activeIndex1.value = ind;
+      strType.value = item.strtype;
+      clearTimeout(timer);
+      getClearList();
+      currentLoad.value = '';
+      getMonitor(item.deviceID, true);
     } else {
-        clearTimeout(timer);
-        activeIndex1.value = ind;
-        tableLists.value = menuList1.info[ind].list
+      clearTimeout(timer);
+      activeIndex1.value = ind;
+      tableLists.value = menuList1.info[ind].list;
     }
-
-}
-//加载组件
-function loadZj() {
+  }
+  //加载组件
+  function loadZj() {
     if (!activeIndex.value && listData.fiber.length != 0 && listData.bundletube.length != 0) {
-        currentLoad.value = 'fireWork';
+      currentLoad.value = 'fireWork';
     } else if (!activeIndex.value && listData.bundletube.length != 0) {
-        currentLoad.value = 'closeWall';
+      currentLoad.value = 'closeWall';
     } else if (activeIndex.value && activeIndex.value != 2) {
-        currentLoad.value = 'mainWell';
+      currentLoad.value = 'mainWell';
     } else {
-        currentLoad.value = '';
+      currentLoad.value = '';
     }
-}
-//清空数据
-function getClearList() {
+  }
+  //清空数据
+  function getClearList() {
     listData.common = {};
     listData.bundletube.length = 0;
     listData.fiber.length = 0;
@@ -248,21 +252,21 @@ function getClearList() {
     listData.smoke.length = 0;
     listData.spray.length = 0;
     listData.temperature.length = 0;
-}
+  }
 
-onMounted(() => {
-    getMenuList()
-})
-onUnmounted(() => {
+  onMounted(() => {
+    getMenuList();
+  });
+  onUnmounted(() => {
     if (timer) {
-        clearTimeout(timer);
-        timer = undefined;
+      clearTimeout(timer);
+      timer = undefined;
     }
-});
+  });
 </script>
 
 <style lang="less" scoped>
-.fireWarn {
+  .fireWarn {
     width: 100%;
     height: 100%;
     padding: 80px 10px 15px 10px;
@@ -271,180 +275,180 @@ onUnmounted(() => {
     justify-content: space-between;
 
     .alarm-menu {
-        height: 100%;
-        width: 15%;
+      height: 100%;
+      width: 15%;
 
-        .type-btn {
-            width: 100%;
-            height: 28px;
-            line-height: 28px;
-            background-color: rgba(15, 55, 108, .8);
-            border: 2px solid #1b6eab;
-            margin-bottom: 20px;
-            border-radius: 5px;
-            box-sizing: border-box;
-            display: flex;
-            justify-content: space-between;
+      .type-btn {
+        width: 100%;
+        height: 28px;
+        line-height: 28px;
+        background-color: rgba(15, 55, 108, 0.8);
+        border: 2px solid #1b6eab;
+        margin-bottom: 20px;
+        border-radius: 5px;
+        box-sizing: border-box;
+        display: flex;
+        justify-content: space-between;
 
-            .btn {
-                width: 33%;
-                height: 24px;
-                line-height: 24px;
-                font-size: 14px;
-                text-align: center;
-                color: #fff;
-                cursor: pointer;
-            }
+        .btn {
+          width: 33%;
+          height: 24px;
+          line-height: 24px;
+          font-size: 14px;
+          text-align: center;
+          color: #fff;
+          cursor: pointer;
+        }
 
-            .btn1 {
-                width: 33%;
-                height: 24px;
-                line-height: 24px;
-                font-size: 14px;
-                color: #fff;
-                text-align: center;
-                border-radius: 2px;
-                background: #209dfc;
-                cursor: pointer;
-            }
+        .btn1 {
+          width: 33%;
+          height: 24px;
+          line-height: 24px;
+          font-size: 14px;
+          color: #fff;
+          text-align: center;
+          border-radius: 2px;
+          background: #209dfc;
+          cursor: pointer;
         }
+      }
 
-        .card-btn {
-            width: 100%;
-            height: calc(100% - 48px);
-            overflow-y: auto;
+      .card-btn {
+        width: 100%;
+        height: calc(100% - 48px);
+        overflow-y: auto;
 
-            .btn {
-                position: relative;
-                width: 81%;
-                height: 14%;
-                margin-bottom: 10%;
-                font-family: 'douyuFont';
-                background: url('../../../../../assets/images/fire/no-choice.png') no-repeat;
-                background-size: 100% 100%;
-                cursor: pointer;
+        .btn {
+          position: relative;
+          width: 81%;
+          height: 14%;
+          margin-bottom: 10%;
+          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: 16px;
-                    color: #01fefc;
-                    text-align: center;
-                    transform: translate(-50%, 0);
-                }
+          .text {
+            width: 80%;
+            position: absolute;
+            left: 50%;
+            top: 28px;
+            font-size: 16px;
+            color: #01fefc;
+            text-align: center;
+            transform: translate(-50%, 0);
+          }
 
-                .warn {
-                    width: 100%;
-                    position: absolute;
-                    left: 50%;
-                    bottom: 14px;
-                    font-size: 14px;
-                    color: #fff;
-                    text-align: center;
-                    transform: translate(-50%, 0);
-                }
-            }
+          .warn {
+            width: 100%;
+            position: absolute;
+            left: 50%;
+            bottom: 14px;
+            font-size: 14px;
+            color: #fff;
+            text-align: center;
+            transform: translate(-50%, 0);
+          }
+        }
 
-            .btn1 {
-                position: relative;
-                width: 100%;
-                height: 14%;
-                margin-bottom: 10%;
-                font-family: 'douyuFont';
-                background: url('../../../../../assets/images/fire/choice.png') no-repeat;
-                background-size: 100% 100%;
-                cursor: pointer;
+        .btn1 {
+          position: relative;
+          width: 100%;
+          height: 14%;
+          margin-bottom: 10%;
+          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: 16px;
-                    color: #01fefc;
-                    text-align: center;
-                    transform: translate(-62%, 0);
-                }
+          .text {
+            width: 80%;
+            position: absolute;
+            left: 50%;
+            top: 28px;
+            font-size: 16px;
+            color: #01fefc;
+            text-align: center;
+            transform: translate(-62%, 0);
+          }
 
-                .warn {
-                    width: 100%;
-                    position: absolute;
-                    left: 50%;
-                    bottom: 14px;
-                    font-size: 14px;
-                    color: #fff;
-                    text-align: center;
-                    transform: translate(-60%, 0);
-                }
-            }
+          .warn {
+            width: 100%;
+            position: absolute;
+            left: 50%;
+            bottom: 14px;
+            font-size: 14px;
+            color: #fff;
+            text-align: center;
+            transform: translate(-60%, 0);
+          }
         }
+      }
     }
 
     .fire-content {
-        width: calc(85% - 10px);
-        height: 100%;
-        margin-left: 10px;
-        background: url('../../../../../assets/images/fire/border.png') no-repeat;
-        background-size: 100% 100%;
+      width: calc(85% - 10px);
+      height: 100%;
+      margin-left: 10px;
+      background: url('../../../../../assets/images/fire/border.png') no-repeat;
+      background-size: 100% 100%;
     }
+  }
 
-}
-
-// .fireWarn1 {
-//     width: 100%;
-//     height: 100%;
-//     padding: 80px 10px 15px 10px;
-//     box-sizing: border-box;
+  // .fireWarn1 {
+  //     width: 100%;
+  //     height: 100%;
+  //     padding: 80px 10px 15px 10px;
+  //     box-sizing: border-box;
 
-//     .alarm-menu {
-//         width: 100%;
+  //     .alarm-menu {
+  //         width: 100%;
 
-//         .type-btn {
-//             width: 25%;
-//             height: 36px;
-//             line-height: 36px;
-//             background-color: rgba(15, 55, 108, .8);
-//             border: 2px solid #1b6eab;
-//             border-radius: 5px;
-//             box-sizing: border-box;
-//             display: flex;
-//             justify-content: space-between;
+  //         .type-btn {
+  //             width: 25%;
+  //             height: 36px;
+  //             line-height: 36px;
+  //             background-color: rgba(15, 55, 108, .8);
+  //             border: 2px solid #1b6eab;
+  //             border-radius: 5px;
+  //             box-sizing: border-box;
+  //             display: flex;
+  //             justify-content: space-between;
 
-//             .btn {
-//                 width: 33%;
-//                 height: 32px;
-//                 line-height: 32px;
-//                 font-size: 14px;
-//                 text-align: center;
-//                 color: #fff;
-//                 cursor: pointer;
-//             }
+  //             .btn {
+  //                 width: 33%;
+  //                 height: 32px;
+  //                 line-height: 32px;
+  //                 font-size: 14px;
+  //                 text-align: center;
+  //                 color: #fff;
+  //                 cursor: pointer;
+  //             }
 
-//             .btn1 {
-//                 width: 33%;
-//                 height: 32px;
-//                 line-height: 32px;
-//                 font-size: 14px;
-//                 color: #fff;
-//                 text-align: center;
-//                 border-radius: 2px;
-//                 background: #209dfc;
-//                 cursor: pointer;
-//             }
-//         }
+  //             .btn1 {
+  //                 width: 33%;
+  //                 height: 32px;
+  //                 line-height: 32px;
+  //                 font-size: 14px;
+  //                 color: #fff;
+  //                 text-align: center;
+  //                 border-radius: 2px;
+  //                 background: #209dfc;
+  //                 cursor: pointer;
+  //             }
+  //         }
 
-//         .card-btn {
-//             width: 100%;
-//             height: calc(100% - 36px);
-//             overflow-y: auto;
-//             display: none;
+  //         .card-btn {
+  //             width: 100%;
+  //             height: calc(100% - 36px);
+  //             overflow-y: auto;
+  //             display: none;
 
-//         }
-//     }
+  //         }
+  //     }
 
-//     .fire-content {
-//         height: calc(100% - 30px)
-//     }
-// }</style>
+  //     .fire-content {
+  //         height: calc(100% - 30px)
+  //     }
+  // }
+</style>

+ 7 - 3
src/views/vent/monitorManager/deviceMonitor/components/device/index.vue

@@ -736,6 +736,7 @@ function goLocation(record) {
 }
 
 function goDetail(record?) {
+  debugger;
   if (record) {
     activeID.value = record.deviceID;
     if (deviceType.value.startsWith('fiber')) {
@@ -769,11 +770,14 @@ function goDetail(record?) {
     } else if (deviceType.value.indexOf('windrect') != -1) {
       const newPage = router.resolve({ path: '/monitorChannel/monitor-windrect', query: { id: activeID.value, deviceType: deviceType.value } });
       window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('fanmain') != -1) {
+    } else if (deviceType.value.indexOf('fanmain') != -1 ) {
       const newPage = router.resolve({ path: '/monitorChannel/monitor-fanmain', query: { id: activeID.value, deviceType: deviceType.value } });
       window.open(newPage.href, '_blank');
-    } else if (deviceType.value.indexOf('fanlocal') != -1) {
-      const newPage = router.resolve({ path: '/monitorChannel/monitor-fanlocal', query: { id: activeID.value, deviceType: deviceType.value } });
+    } else if (deviceType.value.indexOf('fanlocal') != -1 && glob.sysOrgCode !== 'ymdnymdn') {
+      const newPage = router.resolve({ path: '/monitorChannel/monitor-fanlocal1', query: { id: activeID.value, deviceType: deviceType.value } });
+      window.open(newPage.href, '_blank');
+    } else if (deviceType.value.indexOf('fanlocal') != -1 && glob.sysOrgCode == 'ymdnymdn') {
+      const newPage = router.resolve({ path: '/monitorChannel/monitor-fanlocal1', query: { id: activeID.value, deviceType: record.deviceType } });
       window.open(newPage.href, '_blank');
     } else if (deviceType.value.indexOf('pulping') != -1) {
       const newPage = router.resolve({ path: '/grout-home', query: { id: activeID.value } });

+ 0 - 54
src/views/vent/monitorManager/fanLocalMonitor/components/fanlocal-echart-line.vue

@@ -1,54 +0,0 @@
-<template>
-    <div class="alarm-history">
-        <BarAndLine class="echarts-line" xAxisPropType="time" :dataSource="historyLists" height="90%" width="100%"
-            :chartsColumns="chartsColumn" :option="echatsOption" chartsType="listMonitor" />
-    </div>
-</template>
-<script setup lang="ts">
-import { onBeforeMount, ref, watch, onMounted, nextTick, defineAsyncComponent, reactive, onUnmounted, inject, unref } from 'vue';
-import BarAndLine from '../../../../../components/chart/BarAndLine.vue';
-import { echatsOption } from '../fanLocal.data';
-const props = defineProps({
-    devicekide: {
-        type: String,
-        default: '',
-    },
-    historyList: {
-        type: Array,
-        default: () => {
-            return []
-        }
-    },
-    chartsColumns: {
-        type: Array,
-        default: () => {
-            return []
-        }
-    }
-});
-let scroll = reactive({
-    y: 700,
-});
-let historyLists = ref<any[]>([])
-let chartsColumn = ref<any[]>([])
-
-watch(() => props.historyList, (newH, oldH) => {
-    historyLists.value = newH
-},
-    { immediate: true })
-watch(() => props.chartsColumns, (newC, oldC) => {
-    chartsColumn.value = newC
-}, {
-    immediate: true
-})
-
-
-</script>
-<style lang="less" scoped>
-.alarm-history {
-    width: 100%;
-    height: 730px;
-    position: fixed;
-    top: 100px;
-}
-</style>

+ 0 - 59
src/views/vent/monitorManager/fanLocalMonitor/components/fanlocal-history.vue

@@ -1,59 +0,0 @@
-<template>
-    <div class="alarm-history">
-        <template v-if="globalConfig.History_Type == 'remote'">
-                <HistoryTable
-                  :columns-type="`${selectDatas.deviceType}`"
-                  :device-type="`${devicekide}`"
-                  designScope="fanlocal-history"
-                  :scroll="scroll"
-                />
-              </template>
-              <template v-else>
-                <HistoryTable1 class="w-100% h-100%" :device-code="`${devicekide}`" :scroll="scroll" dict-code="fanlocal_dict" />
-              </template>
-    </div>
-</template>
-<script setup lang="ts">
-import { onBeforeMount, ref, watch, onMounted, nextTick, defineAsyncComponent, reactive, onUnmounted, inject, unref } from 'vue';
-import HistoryTable from '../../comment/HistoryTable.vue'
-import HistoryTable1 from '../../../../vent/comment/history/HistoryTable.vue'
-
-const props = defineProps({
-    selectData: {
-        type: Object,
-        default: () => {
-            return {}
-        }
-    },
-    devicekide:{
-        type:String,
-        default:'',
-    },
-    globalConfig:{
-        type:Object,
-        default:()=>{
-            return {}
-        },
-    }
-});
-
-let selectDatas = reactive({})
-let scroll = reactive({
-  y: 700,
-});
-
-watch(() => props.selectData, (newS, oldS) => {
-    selectDatas = Object.assign({}, newS)
-}, {
-    immediate: true,
-    deep: true
-})
-</script>
-<style lang="less" scoped>
-.alarm-history {
-    width: 100%;
-    height: 730px;
-    position: fixed;
-    top: 100px;
-}
-</style>

+ 0 - 36
src/views/vent/monitorManager/fanLocalMonitor/components/fanlocal-operate-history.vue

@@ -1,36 +0,0 @@
-<template>
-    <div class="alarm-history">
-        <HandlerHistoryTable
-                columns-type="operator_history"
-                :device-type="`${devicekide}`"
-                :device-list-api="baseList"
-                designScope="alarm-history"
-                :scroll="scroll"
-              />
-    </div>
-</template>
-<script setup lang="ts">
-import { onBeforeMount, ref, watch, onMounted, nextTick, defineAsyncComponent, reactive, onUnmounted, inject, unref } from 'vue';
-import HandlerHistoryTable from '../../comment/HandlerHistoryTable.vue';
-import { list as baseList } from '../../../deviceManager/fanTabel/fan.api';
-
-const props = defineProps({
-    devicekide:{
-        type:String,
-        default:'',
-    },
-});
-let scroll = reactive({
-  y: 700,
-});
-
-
-</script>
-<style lang="less" scoped>
-.alarm-history {
-    width: 100%;
-    height: 730px;
-    position: fixed;
-    top: 100px;
-}
-</style>

+ 0 - 29
src/views/vent/monitorManager/fanLocalMonitor/components/fanlocal-warn-history.vue

@@ -1,29 +0,0 @@
-<template>
-    <div class="alarm-history">
-        <AlarmHistoryTable columns-type="alarm" :device-type="`${devicekide}`" designScope="alarm-history" :scroll="scroll" />
-    </div>
-</template>
-<script setup lang="ts">
-import { onBeforeMount, ref, watch, onMounted, nextTick, defineAsyncComponent, reactive, onUnmounted, inject, unref } from 'vue';
-import AlarmHistoryTable from '../../comment/AlarmHistoryTable.vue';
-
-const props = defineProps({
-    devicekide:{
-        type:String,
-        default:'',
-    },
-});
-let scroll = reactive({
-  y: 700,
-});
-
-
-</script>
-<style lang="less" scoped>
-.alarm-history {
-    width: 100%;
-    height: 730px;
-    position: fixed;
-    top: 100px;
-}
-</style>

+ 52 - 52
src/views/vent/monitorManager/fanLocalMonitor/fanLocal.data.ts

@@ -3,33 +3,6 @@ import { FormSchema } from '/@/components/Table';
 import { rules } from '/@/utils/helper/validator';
 import { ref, reactive } from 'vue';
 import { cloneDeep } from 'lodash-es';
-export const navList = ref([
-  {
-    title: '实时监测',
-    pathName: 'fanLocal-ssjc',
-    isHover: false,
-  },
-  {
-    title: '历史监测记录',
-    pathName: 'fanLocal-history',
-    isHover: false,
-  },
-  {
-    title: '报警历史记录',
-    pathName: 'fanLocal-warn',
-    isHover: false,
-  },
-  {
-    title: '操作历史记录',
-    pathName: 'fanLocal-operate',
-    isHover: false,
-  },
-  {
-    title: '风量实时曲线',
-    pathName: 'fanLocal-wind',
-    isHover: false,
-  },
-]);
 export const columns: BasicColumn[] = [
   {
     title: '名称',
@@ -325,11 +298,11 @@ export const chartsColumns1 = [
     seriesName: 'm³/min',
     ymax: 1000,
     yname: '',
-    linetype: 'line',
+    linetype: 'bar',
     yaxispos: 'left',
     color: '#755cf8',
     sort: 1,
-    dataIndex: 'windQuantity2',
+    dataIndex: '',
     xRotate: 0,
   },
 ];
@@ -3586,7 +3559,7 @@ export const option = reactive<EChartsOption>({
       formatter: '{value}',
       color: '#0071A5',
     },
-    min: 1000,
+    min: 360,
     max: 9000,
     name: 'Pa',
     nameTextStyle: {
@@ -3597,18 +3570,44 @@ export const option = reactive<EChartsOption>({
   series: [],
 });
 export const echatsOption = {
+  // tooltip: {
+  //   show: true,
+  //   formatter: function (datas: []) {
+  //     return datas.map((item) => {
+  //       item['data'] = item['data'].toFixed(2);
+  //       return item;
+  //     });
+  //   },
+  // },
+  legend: {
+    top: -10,
+  },
   grid: {
     top: '15%',
     left: '20',
-    right: '45',
+    right: '25',
     bottom: '0',
     containLabel: true,
   },
   toolbox: {
-    feature: null,
+    feature: {
+      saveAsImage: {
+        show: false,
+      },
+    },
   },
-  legend: {
-    top: -10,
+  xAxis: {
+    type: 'category',
+    axisLabel: {
+      margin: 10,
+      color: '#f1f1f199',
+    },
+    name: 'm³/min',
+  },
+  yAxis: {
+    axisLabel: {
+      color: '#0071A5',
+    },
   },
 };
 
@@ -3652,32 +3651,33 @@ export const chartsColumnList = [
 ];
 
 export const initData = () => {
-  const num = 20;
+  const num = 3;
   const obj = {
     angle: 0,
-    Hz: 50.0,
-    a: -0.0354466316912028,
-    b: 46.9032472840413,
-    c: -6837.67023286905,
-    min: 600,
+    Hz: 35.0,
+    a: -0.0626027929595192,
+    b: 44.737585902203136,
+    c: -4047.5601190339376,
+    min: 300,
     max: 1100.0,
   };
-  const a = -0.0354,
-    m = 46.90324,
-    n = -6837.67023;
+  const a = -0.0626,
+    m = 44.737589,
+    n = -4047.56012;
+
+  const maxList = [519, 587, 659.4, 737, 820.7];
+  const minList = [264, 303.7, 346, 387.2, 429.1];
   const data = [];
-  for (let i = 0; i <= num; i++) {
+  for (let i = -1; i <= num; i++) {
     const item = cloneDeep(obj);
-    const maxn = 14 * i - 0.15 * i * i;
-    item['a'] = Math.round((a - 0.02 * 0.02 * i) * 10000) / 10000;
-    item['Hz'] = 50 - i;
-    item['c'] = n - 10 * i - 0.0232 * i * i;
-    item['b'] = m + i * 0.31 * 0.12;
-    item['max'] = 1090.0 - maxn;
-    item['min'] = 600 + 0.2 * (i - 50) * i;
+    item['a'] = Math.round((a + 0.003 * i) * 10000) / 10000;
+    item['Hz'] = 35 + i * 5;
+    item['c'] = n + 0.6 * i;
+    item['b'] = m + i * 1.9;
+    item['max'] = maxList[i + 1];
+    item['min'] = minList[i + 1];
     data.push(item);
   }
-  console.log('------------------->', data);
   return data;
 };
 

+ 0 - 1795
src/views/vent/monitorManager/fanLocalMonitor/index-copy.vue

@@ -1,1795 +0,0 @@
-<template>
-  <div class="bg" style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
-    <a-spin :spinning="loading" />
-    <div id="fanLocal3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"> </div>
-    <div id="fanLocal3DCSS" class="threejs-Object-CSS" style="width: 100%; height: 100%; position: absolute; overflow: hidden; pointer-events: none">
-      <div style="z-index: -1; position: relative" v-if="hasPermission('show:sensorMonitor')">
-        <div class="elementTag" id="inputBox1">
-          <div class="elementContent" v-if="selectData.windSpeed1 || selectData.gas3 || selectData.windSpeed_merge">
-            <p v-if="selectData.windSpeed1 || selectData.windSpeed_merge"
-              >风筒入口风速:<span class="value">{{
-                selectData.windSpeed1 ? selectData.windSpeed1 : selectData.windSpeed_merge ? selectData.windSpeed_merge : '-'
-              }}</span>
-              <span class="unit"> m/s</span></p
-            >
-            <p v-if="selectData.windInputSpeed1 || selectData.windInputSpeed_merge"
-              >风筒入口风速:<span class="value">{{
-                selectData.windInputSpeed1 ? selectData.windInputSpeed1 : selectData.windInputSpeed_merge ? selectData.windInputSpeed_merge : '-'
-              }}</span>
-              <span class="unit"> m/s</span></p
-            >
-            <p v-if="selectData.windQuantity1 || selectData.inletAirVolume_merge"
-              >风筒入口风量:<span class="value">{{
-                selectData.windQuantity1 ? selectData.windQuantity1 : selectData.inletAirVolume_merge ? selectData.inletAirVolume_merge : '-'
-              }}</span>
-              <span class="unit"> m³/min</span></p
-            >
-            <p v-if="selectData.gas3"
-              >风筒入口瓦斯浓度: <span class="value">{{ selectData.gas3 ? selectData.gas3 : '-' }}</span> <span class="unit"> %</span></p
-            >
-          </div>
-        </div>
-        <div class="elementTag" id="outBox">
-          <div
-            class="elementContent elementContent-r"
-            v-if="
-              selectData.windQuantity2 ||
-              selectData.gas1 ||
-              (selectData.windOutSpeed1 && selectData.windOutSpeed_merge) ||
-              selectData.ductOutletAirVolume_merge
-            "
-          >
-            <p v-if="selectData.windQuantity2 || selectData.m3 || selectData.ductOutletAirVolume_merge || selectData.windOutSpeed_merge"
-              >迎头供风量:<span class="value">{{
-                selectData.windQuantity2
-                  ? selectData.windQuantity2
-                  : selectData.m3
-                  ? selectData.m3
-                  : selectData.ductOutletAirVolume_merge
-                  ? selectData.ductOutletAirVolume_merge
-                  : '-'
-              }}</span>
-              <span class="unit"> m³/min</span></p
-            >
-            <p v-if="selectData.gas1"
-              >迎头瓦斯浓度:<span class="value">{{ selectData.gas1 ? selectData.gas1 : '-' }}</span> <span class="unit"> %</span></p
-            >
-            <p v-if="selectData.windOutSpeed1 || selectData.windOutSpeed_merge"
-              >风筒出口风速<span class="value">{{
-                selectData.windOutSpeed1 ? selectData.windOutSpeed1 : selectData.windOutSpeed_merge ? selectData.windOutSpeed_merge : '-'
-              }}</span>
-              <span class="unit"> %</span></p
-            >
-          </div>
-        </div>
-        <div class="elementTag" id="returnBox">
-          <div class="elementContent elementContent-r" v-if="selectData.gas2">
-            <p v-if="selectData.gas2"
-              >回风流瓦斯浓度:<span class="value">{{ selectData.gas2 ? selectData.gas2 : '-' }}</span> <span class="unit"> %</span></p
-            >
-          </div>
-        </div>
-        <div class="elementTag" id="gateBox">
-          <div class="elementContent">
-            <p>风门状态:关</p>
-            <p>风门过风面积:{{ selectData.gas1 ? selectData.gas1 : '-' }}</p>
-          </div>
-        </div>
-        <div class="elementTag" id="windownBox">
-          <div class="elementContent" v-if="modalType == 'fc'">
-            <p style="pointer-events: auto"
-              ><a class="action-link" @click="goDetailDevice('window_fWindowM3')">风窗详情</a> <ArrowRightOutlined :style="{ color: '#157DC8' }"
-            /></p>
-            <p v-if="selectData.windSpeed"
-              >风窗风流风速:<span class="value">{{ selectData.windSpeed ? selectData.windSpeed : '-' }}</span> <span class="unit"> m/s</span></p
-            >
-            <p v-if="selectData.fWindowM3"
-              >风窗过风量:<span class="value">{{ selectData.fWindowM3 ? selectData.fWindowM3 : '-' }}</span> <span class="unit"> m³/min</span></p
-            >
-            <p v-if="selectData.OpenDegree"
-              >风窗开度值:<span class="value">{{ selectData.OpenDegree ? selectData.OpenDegree : '-' }}</span> <span class="unit"> %</span></p
-            >
-            <p v-if="selectData.OpenDegree"
-              >风窗过风面积:<span class="value">{{ selectData.forntArea ? selectData.forntArea : '-' }}</span> <span class="unit"> ㎡</span></p
-            >
-          </div>
-        </div>
-        <!-- <div class="elementTag" id="inputBox1">
-          <div class="elementContent" v-if="selectData.windInputSpeed1 || selectData.windInputSpeed_merge">
-            <p v-if="selectData.windInputSpeed1 || selectData.windInputSpeed_merge"
-              >风筒入口风速:<span class="value">{{
-                selectData.windInputSpeed1 ? selectData.windInputSpeed1 : selectData.windInputSpeed_merge ? selectData.windInputSpeed_merge : '-'
-              }}</span>
-              <span class="unit"> m/s</span></p
-            >
-          </div>
-        </div> -->
-      </div>
-    </div>
-  </div>
-
-  <div class="scene-box">
-    <div class="top-box" v-if="!loading">
-      <div class="top-center row">
-        <div class="vent-flex-row" id="fanLocalSelectDom" v-if="!globalConfig?.simulatedPassword && getDictItemsByCode('fanlocaltype')">
-          <span style="color: #00f5fe; margin-left: 5px">风机类型:</span>
-          <JDictSelectTag
-            style="width: 180px"
-            v-model:value="devicekide"
-            dictCode="fanlocaltype"
-            :showChooseOption="false"
-            :getPopupContainer="getPopupContainer"
-            @change="changeDeviceKind"
-          />
-        </div>
-        <!-- fanlocal_systeml_zj 模拟局部风机,不显示操作按钮 -->
-        <template v-for="(item, index) in modalTypeArr.leftBtnArr" :key="index">
-          <div
-            v-if="!(selectData.fanFrequencyType == 'fandp' && item.permission.startsWith('btn:frequency')) && hasPermission(item.permission)"
-            :class="{ 'button-box': btnClick, 'button-disable': !btnClick }"
-            @click="showModal(item)"
-            >{{ item.value }}</div
-          >
-        </template>
-      </div>
-      <div class="top-right row">
-        <template v-for="(item, index) in modalTypeArr.rightBtnArr" :key="index">
-          <div
-            v-if="
-              !(selectData.fanFrequencyType == 'fandp' && (item.permission === 'fanLocal:gasAlarmSet' || item.permission === 'fanLocal:kkjc')) &&
-              hasPermission(item.permission)
-            "
-            :class="{ 'button-box': btnClick, 'button-disable': !btnClick }"
-            @click="showModal(item)"
-            >{{ item.value }}</div
-          >
-        </template>
-      </div>
-    </div>
-    <div class="title-text">
-      {{ selectData.supplyAirAddr || selectData.strinstallpos || selectData.stationname }}
-    </div>
-    <div class="data-show-box" v-if="!loading">
-      <div class="data-item" v-if="leftColumns.length > 0">
-        <div class="item-header">设备监测</div>
-        <div class="item-container">
-          <div class="tab">
-            <div class="tab-item" :class="{ 'tab-item-active-r': warningMonitorRowIndex === 0 }" @click="selectDevice('warningMonitorRowIndex', 0)"
-              >主机</div
-            >
-            <div class="tab-item" :class="{ 'tab-item-active-r': warningMonitorRowIndex === 1 }" @click="selectDevice('warningMonitorRowIndex', 1)"
-              >备机</div
-            >
-          </div>
-          <div class="container-group">
-            <!-- <div class="warning-header">
-              <div class="header-item">
-                <div class="header-title">报警总数</div>
-                <div class="header-value">0</div>
-              </div>
-              <div class="header-item">
-                <div class="header-title">未处理数</div>
-                <div class="header-value">0</div>
-              </div>
-            </div> -->
-            <div class="warning-group">
-              <template v-if="selectData.deviceType">
-                <!-- <div class="warning-item" v-for="(state, index) in leftColumns" :key="index">
-                <div class="item-name"><div class="icon"></div> {{ state.title }}</div>
-                <div v-if="state.dataIndex.startsWith('Fan')">
-                  <div class="signal-item" v-if="warningMonitorRowIndex == 0">
-                    <div
-                      class="signal-round"
-                      :class="{
-                        'signal-round-run': selectData[state.dataIndex.replace('Fan', 'Fan1')],
-                        'signal-round-warning':
-                          selectData[state.dataIndex.replace('Fan', 'Fan1')] !== undefined && !selectData[state.dataIndex.replace('Fan', 'Fan1')],
-                        'signal-round-gry': selectData[state.dataIndex.replace('Fan', 'Fan1')] === undefined,
-                      }"
-                    ></div>
-                    <div class="vent-margin-l-8">{{
-                      selectData[state.dataIndex.replace('Fan', 'Fan1')] === undefined
-                      ? '无状态'
-                      : selectData[state.dataIndex.replace('Fan', 'Fan1')]
-                        ? '正常'
-                        : '异常'
-                    }}</div>
-                  </div>
-                  <div class="signal-item" v-if="warningMonitorRowIndex == 1">
-                    <div
-                      class="signal-round"
-                      :class="{
-                        'signal-round-run': selectData[state.dataIndex.replace('Fan', 'Fan2')],
-                        'signal-round-warning':
-                          selectData[state.dataIndex.replace('Fan', 'Fan2')] !== undefined && !selectData[state.dataIndex.replace('Fan', 'Fan2')],
-                        'signal-round-gry': selectData[state.dataIndex.replace('Fan', 'Fan2')] === undefined,
-                      }"
-                    ></div>
-                    <div class="vent-margin-l-8">{{
-                      selectData[state.dataIndex.replace('Fan', 'Fan2')] === undefined
-                      ? '无状态'
-                      : selectData[state.dataIndex.replace('Fan', 'Fan2')]
-                        ? '正常'
-                        : '异常'
-                    }}</div>
-                  </div>
-                </div>
-                <div v-else>
-                  <div class="signal-item">
-                    <div
-                      class="signal-round vent-margin-l-8"
-                      :class="{
-                              'signal-round-run': selectData[state.dataIndex],
-                              'signal-round-warning': selectData[state.dataIndex] !== undefined && !selectData[state.dataIndex],
-                              'signal-round-gry': selectData[state.dataIndex] === undefined,
-                            }"
-                    ></div>
-                    <div class="vent-margin-l-8">{{ selectData[state.dataIndex] === undefined ? '无状态' : selectData[state.dataIndex] ? '正常' : '异常' }}</div>
-                  </div>
-                </div>
-              </div> -->
-                <div class="container-item" v-for="(data, index) in leftColumns" :key="index">
-                  <div class="item-icon">
-                    <!-- <SvgIcon class="icon-style" size="18" name="temperature" /> -->
-                    <CaretRightOutlined class="icon-style" />
-                  </div>
-                  <div class="item-name">{{ data.title }}</div>
-                  <div v-if="data.dataIndex.startsWith('Fan')">
-                    <div class="item-value" v-if="warningMonitorRowIndex == 0">{{
-                      selectData[data.dataIndex.replace('Fan', 'Fan1')] ? selectData[data.dataIndex.replace('Fan', 'Fan1')] : '-'
-                    }}</div>
-                    <div class="item-value" v-if="warningMonitorRowIndex == 1">{{
-                      selectData[data.dataIndex.replace('Fan', 'Fan2')] ? selectData[data.dataIndex.replace('Fan', 'Fan2')] : '-'
-                    }}</div>
-                  </div>
-                  <div v-else>
-                    <div class="item-value">{{ selectData[data.dataIndex] ? selectData[data.dataIndex] : '-' }}</div>
-                  </div>
-                </div>
-              </template>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div>
-        <div class="data-item" v-if="rightColumns.length > 0">
-          <div class="item-header">环境监测/设备报警</div>
-          <div class="item-container">
-            <div class="tab">
-              <div class="tab-item" :class="{ 'tab-item-active-r': dataMonitorRowIndex == 0 }" @click="selectDevice('dataMonitorRowIndex', 0)"
-                >主机</div
-              >
-              <div class="tab-item" :class="{ 'tab-item-active-r': dataMonitorRowIndex == 1 }" @click="selectDevice('dataMonitorRowIndex', 1)"
-                >备机</div
-              >
-            </div>
-            <div class="container-group container-group-l">
-              <div class="warning-group" style="max-height: 200px; overflow-y: auto">
-                <template v-if="deviceType">
-                  <div v-for="(state, index) in rightColumns" :key="index">
-                    <template v-if="!state.dataIndex.endsWith('_w')">
-                      <div class="container-item">
-                        <div class="item-icon">
-                          <CaretRightOutlined class="icon-style" />
-                        </div>
-                        <div class="item-name">{{ state.title }}</div>
-                        <div v-if="state.dataIndex.startsWith('Fan')">
-                          <div class="item-value" v-if="dataMonitorRowIndex == 0">{{
-                            selectData[state.dataIndex.replace('Fan', 'Fan1')] ? selectData[state.dataIndex.replace('Fan', 'Fan1')] : '-'
-                          }}</div>
-                          <div class="item-value" v-if="dataMonitorRowIndex == 1">{{
-                            selectData[state.dataIndex.replace('Fan', 'Fan2')] ? selectData[state.dataIndex.replace('Fan', 'Fan2')] : '-'
-                          }}</div>
-                        </div>
-                        <div v-else>
-                          <div class="item-value">{{ selectData[state.dataIndex] ? selectData[state.dataIndex] : '-' }}</div>
-                        </div>
-                      </div>
-                    </template>
-                  </div>
-                </template>
-              </div>
-              <div class="warning-group" style="max-height: 200px; overflow-y: auto">
-                <div class="warning-header">
-                  <div class="header-item">
-                    <div class="header-title">报警数量</div>
-                    <div class="header-value">{{ selectData['warnLogNotOkCount'] }} </div>
-                  </div>
-                </div>
-                <template v-if="deviceType">
-                  <div v-for="(state, index) in leftColumns" :key="index">
-                    <template v-if="state.dataIndex.endsWith('_w')">
-                      <div class="warning-item">
-                        <div class="item-name"> <div class="icon"></div> {{ state.title }} </div>
-                        <div v-if="state.dataIndex.startsWith('Fan')">
-                          <div class="signal-item" v-if="warningMonitorRowIndex == 0">
-                            <div
-                              class="signal-round"
-                              :class="{
-                                'signal-round-run': selectData[state.dataIndex.replace('Fan', 'Fan1')] == '0',
-                                'signal-round-warning':
-                                  selectData[state.dataIndex.replace('Fan', 'Fan1')] !== undefined &&
-                                  selectData[state.dataIndex.replace('Fan', 'Fan1')] == '1',
-                                'signal-round-gry': selectData[state.dataIndex.replace('Fan', 'Fan1')] === undefined,
-                              }"
-                            ></div>
-                            <div class="vent-margin-l-8">{{
-                              selectData[state.dataIndex.replace('Fan', 'Fan1')] === undefined
-                                ? '无状态'
-                                : selectData[state.dataIndex.replace('Fan', 'Fan1')] == '0'
-                                ? '正常'
-                                : '异常'
-                            }}</div>
-                          </div>
-                          <div class="signal-item" v-if="warningMonitorRowIndex == 1">
-                            <div
-                              class="signal-round"
-                              :class="{
-                                'signal-round-run': selectData[state.dataIndex.replace('Fan', 'Fan2')] == '0',
-                                'signal-round-warning':
-                                  selectData[state.dataIndex.replace('Fan', 'Fan2')] != undefined &&
-                                  selectData[state.dataIndex.replace('Fan', 'Fan2')] == '1',
-                                'signal-round-gry': selectData[state.dataIndex.replace('Fan', 'Fan2')] == undefined,
-                              }"
-                            ></div>
-                            <div class="vent-margin-l-8">{{
-                              selectData[state.dataIndex.replace('Fan', 'Fan2')] == undefined
-                                ? '无状态'
-                                : selectData[state.dataIndex.replace('Fan', 'Fan2')] == '0'
-                                ? '正常'
-                                : '异常'
-                            }}</div>
-                          </div>
-                        </div>
-                        <div v-else>
-                          <div class="signal-item">
-                            <div
-                              class="signal-round vent-margin-l-8"
-                              :class="{
-                                'signal-round-run': selectData[state.dataIndex] == '0',
-                                'signal-round-warning': selectData[state.dataIndex] !== undefined && selectData[state.dataIndex] == '1',
-                                'signal-round-gry': selectData[state.dataIndex] === undefined,
-                              }"
-                            ></div>
-                            <div class="vent-margin-l-8">{{
-                              selectData[state.dataIndex] === undefined ? '无状态' : selectData[state.dataIndex] == '0' ? '正常' : '异常'
-                            }}</div>
-                          </div>
-                        </div>
-                      </div>
-                    </template>
-                  </div>
-                </template>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 170, scroll, 180)">
-      <dv-border-box8 :dur="5" class="dv_border_8" :style="`bottom: 20px; padding: 5px; height: ${scroll.y + 140}px`">
-        <!-- <div class="enter-detail" @click="goDetail()">
-          <send-outlined class=""/>风机运行详情
-        </div> -->
-        <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
-          <a-tab-pane key="1" tab="实时监测">
-            <GroupMonitorTable
-              v-if="activeKey === '1'"
-              ref="MonitorDataTable"
-              :dataSource="dataSource"
-              :columnsType="`${selectData.deviceType}_monitor`"
-              @selectRow="getSelectRow"
-              :scroll="scroll"
-              :is-action="true"
-            >
-              <template #action="{ record }">
-                <a v-if="globalConfig?.showReport" class="table-action-link" @click="deviceEdit($event, 'reportInfo', record)">报表录入</a>
-                <a class="table-action-link" @click="deviceEdit($event, 'deviceInfo', record)">设备编辑</a>
-              </template>
-            </GroupMonitorTable>
-          </a-tab-pane>
-          <a-tab-pane key="3" tab="历史数据">
-            <div class="tab-item" v-if="activeKey === '3'">
-              <template v-if="globalConfig.History_Type == 'remote'">
-                <HistoryTable
-                  :columns-type="`${selectData.deviceType}`"
-                  :device-type="`${devicekide}`"
-                  designScope="fanlocal-history"
-                  :scroll="scroll"
-                />
-              </template>
-              <template v-else>
-                <HistoryTable class="w-100% h-100%" :device-code="`${devicekide}`" :scroll="scroll" dict-code="fanlocal_dict" />
-              </template>
-            </div>
-          </a-tab-pane>
-          <a-tab-pane key="4" tab="报警历史">
-            <div class="tab-item" v-if="activeKey === '4'">
-              <AlarmHistoryTable columns-type="alarm" :device-type="`${devicekide}`" designScope="alarm-history" :scroll="scroll" />
-            </div>
-          </a-tab-pane>
-          <a-tab-pane key="5" tab="操作历史">
-            <div class="tab-item" v-if="activeKey === '5'">
-              <HandlerHistoryTable
-                columns-type="operator_history"
-                :device-type="`${devicekide}`"
-                :device-list-api="baseList"
-                designScope="alarm-history"
-                :scroll="scroll"
-              />
-            </div>
-          </a-tab-pane>
-          <a-tab-pane key="2" tab="风量实时曲线图" force-render v-if="hasPermission('echart:show')">
-            <!-- <a-tab-pane key="2" tab="风量实时曲线图" force-render> -->
-            <div class="tab-item" v-if="activeKey === '2'">
-              <!-- <div class="vent-flex-row-between" style="height: 100%">
-                <BarSingle
-                  :xAxisData="xAxisDataGas"
-                  :dataSource="dataSource[selectRowIndex]"
-                  height="100%"
-                  :chartsColumns="chartsColumns"
-                  style="flex: 3"
-                />
-                <BarSingle
-                  v-if="globalConfig?.simulatedPassword"
-                  :xAxisData="[
-                    { key: 'F1', valueKey: 'windQuantity1' },
-                    { key: 'F2', valueKey: 'windQuantity2' },
-                  ]"
-                  :dataSource="dataSource[selectRowIndex]"
-                  height="100%"
-                  :chartsColumns="chartsColumns1"
-                  style="flex: 2"
-                />
-              </div> -->
-              <div class="vent-flex-row-between" style="height: 100%">
-                <BarAndLine
-                  class="echarts-line"
-                  xAxisPropType="time"
-                  :dataSource="historyList"
-                  height="90%"
-                  width="100%"
-                  :chartsColumns="chartsColumns"
-                  :option="echatsOption"
-                  chartsType="listMonitor"
-                />
-              </div>
-            </div>
-          </a-tab-pane>
-        </a-tabs>
-        <a-button
-          v-if="hasPermission('btn:reportDown')"
-          type="primary"
-          size="small"
-          preIcon="ant-design:download-outlined"
-          style="position: absolute; right: 15px; top: 10px"
-          @click="reportDown"
-        >
-          报表导出
-        </a-button>
-      </dv-border-box8>
-    </div>
-  </div>
-  <div
-    ref="playerRef"
-    :class="{ 'to-right': rightColumns.length < 1 || leftColumns.length < 1, 'to-no-right': rightColumns.length > 0 && leftColumns.length > 0 }"
-    style="z-index: 999; position: absolute; top: 100px; right: 15px; width: 100%; height: 100%; margin: auto; pointer-events: none"
-  >
-  </div>
-  <a-modal v-model:visible="modalIsShow" :title="modalTitle" :maskStyle="{ backgroundColor: '#000000aa', backdropFilter: 'blur(3px)' }">
-    <template #footer>
-      <div v-if="controlType != 'startFan'">
-        <a-button key="back" @click="cancel">返回</a-button>
-        <a-button key="submit" type="primary" :loading="loading" @click="handleOk">确定</a-button>
-      </div>
-    </template>
-    <div class="modal-container">
-      <div class="vent-flex-row">
-        <ExclamationCircleFilled style="color: #ffb700; font-size: 30px" />
-        <div class="warning-text">您是否要进行{{ modalTitle }}操作?</div>
-      </div>
-      <div class="" v-if="controlType == 'startSmoke'">
-        <!-- 互斥控制 -->
-        <div class="startSmoke-select">
-          <div class="label">主机:</div>
-          <a-radio-group v-model:value="mainWindIsShow1" @change="changeMotor" name="localWind1">
-            <a-radio value="open">开启</a-radio>
-            <a-radio value="stop">停止</a-radio>
-          </a-radio-group>
-        </div>
-        <div class="startSmoke-select">
-          <div class="label">备机:</div>
-          <a-radio-group v-model:value="mainWindIsShow2" @change="changeMotor" name="localWind2">
-            <a-radio value="open">开启</a-radio>
-            <a-radio value="stop">停止</a-radio>
-          </a-radio-group>
-        </div>
-      </div>
-      <div class="" v-if="controlType == 'startFan'">
-        <!-- 不互斥控制 -->
-        <div class="startSmoke-select">
-          <div class="label">主机:</div>
-          <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('Fan1Open')">开启</div>
-          <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('Fan1Stop')">停止</div>
-          <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('Fan1Reset')">复位</div>
-        </div>
-        <div class="startSmoke-select">
-          <div class="label">备机:</div>
-          <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('Fan2Open')">开启</div>
-          <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('Fan2Stop')">停止</div>
-          <div :class="{ 'button-box': true, 'button-disable': false }" @click="handleOk('Fan2Reset')">复位</div>
-        </div>
-      </div>
-      <!-- 调频 -->
-      <div class="vent-flex-row input-box" v-if="controlType == 'Fan1Frequency'">
-        <div class="label">主风机运行频率(Hz):</div>
-        <a-input-number size="small" v-model:value="fan1FrequencyVal" :min="20" :max="50" :step="0.1" />
-      </div>
-      <div class="vent-flex-row input-box" v-if="controlType == 'Fan2Frequency'">
-        <div class="label">备风机运行频率(Hz):</div>
-        <a-input-number size="small" v-model:value="fan2FrequencyVal" :min="20" :max="50" :step="0.1" />
-      </div>
-      <div class="vent-flex-row input-box" v-if="controlType == 'FanFrequency'">
-        <div class="label">风机运行频率(Hz):</div>
-        <a-input-number size="small" v-model:value="fan1FrequencyVal" :min="20" :max="50" :step="0.1" />
-      </div>
-
-      <div class="vent-flex-row input-box" v-if="controlType == 'disAirAlarm'">
-        <div class="label">漏风率(%):</div>
-        <a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
-      </div>
-      <div class="vent-flex-row input-box" v-if="controlType == 'diameter'">
-        <div class="label">风筒直径(m):</div>
-        <a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
-      </div>
-      <div class="vent-flex-row input-box" v-if="controlType == 'len'">
-        <div class="label">风筒长度(m):</div>
-        <a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
-      </div>
-      <div class="vent-flex-row input-box" v-if="controlType == 'windPowerLimit'">
-        <div class="label">风电闭锁限值(m³/min):</div>
-        <a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
-      </div>
-      <div class="vent-flex-row input-box" v-if="controlType == 'gasPowerLimit'">
-        <div class="label">瓦斯电闭锁限值(m³/min):</div>
-        <a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
-      </div>
-      <div v-if="controlType == 'gasAlarmSet'">
-        <div class="vent-flex-row input-box">
-          <div class="label">设置瓦斯超限浓度:</div>
-          <a-input-number size="small" v-model:value="gasWarningVal" :min="0" :max="1" :step="0.01" />
-        </div>
-      </div>
-      <div v-if="controlType == 'gasAlarm'">
-        <div class="vent-flex-row input-box">
-          <div class="label">传感器名称:</div>
-          <a-select placeholder="传感器" @change="handleChangeSensor" :options="sensorList" v-model:value="modalSensor" />
-        </div>
-        <div class="vent-flex-row input-box">
-          <div class="label">传感器值:</div>
-          <a-input-number size="small" v-model:value="frequencyVal" :min="0" :max="50" :step="0.1" />
-        </div>
-      </div>
-      <div v-if="controlType == 'airVolumeAlarm'">
-        <div class="vent-flex-row input-box">
-          <div class="label">风量上限(m³/min):</div>
-          <a-input-number size="small" v-model:value="modalTypeArr.rightBtnArr[3].min" :min="0" :max="50" :step="0.1" />
-        </div>
-        <div class="vent-flex-row input-box">
-          <div class="label">风量下限(m³/min):</div>
-          <a-input-number size="small" v-model:value="modalTypeArr.rightBtnArr[3].max" :min="0" :max="50" :step="0.1" />
-        </div>
-      </div>
-      <div class="vent-flex-row input-box" v-if="controlType == 'zhlk'">
-        <div class="label">目标风量(m³/min):</div>
-        <a-input-number size="small" v-model:value="targetVolume" />
-      </div>
-      <div v-if="controlType == 'gasOverSet'">
-        <div class="vent-flex-row input-box">
-          <div class="label">设置瓦斯超限浓度:</div>
-          <a-input-number size="small" v-model:value="gasWarningVal" :min="0" :max="1" :step="0.01" />
-        </div>
-      </div>
-      <!-- 启动或停止 -->
-      <div class="" v-if="controlType == 'startSmoke'"> </div>
-      <div v-if="!globalConfig?.simulatedPassword" class="vent-flex-row input-box">
-        <div class="label">操作密码:</div>
-        <a-input size="small" type="password" v-model:value="passWord" />
-      </div>
-    </div>
-  </a-modal>
-  <ConditionAssistance @register="registerModalAssistance" :dataSource="historySource" />
-  <DeviceBaseInfo @register="registerModal" :device-type="selectData['deviceType']" />
-  <reportInfo @register="registerModal1" :editID="editID" :fileType="fileType" />
-</template>
-
-<script setup lang="ts">
-  import { ExclamationCircleFilled, ArrowRightOutlined } from '@ant-design/icons-vue';
-  import { onBeforeMount, ref, watch, onMounted, nextTick, defineAsyncComponent, reactive, onUnmounted, inject, unref } from 'vue';
-  // import BarSingle from '../../../../components/chart/BarSingle.vue';
-  import BarAndLine from '../../../../components/chart/BarAndLine.vue';
-  import GroupMonitorTable from '../comment/GroupMonitorTable.vue';
-  import AlarmHistoryTable from '../comment/AlarmHistoryTable.vue';
-  import HandlerHistoryTable from '../comment/HandlerHistoryTable.vue';
-  import DeviceBaseInfo from '../comment/components/DeviceBaseInfo.vue';
-  import { mountedThree, setModelType, destroy, addCssText, addText, playSmoke } from './fanLocal.three';
-  import lodash from 'lodash';
-  import { getTableList, list, autoAdjust } from '/@/views/vent/monitorManager/fanLocalMonitor/fanLocal.api';
-  import { list as baseList } from '../../deviceManager/fanTabel/fan.api';
-  import { chartsColumns1, echatsOption } from './fanLocal.data';
-  import { deviceControlApi } from '/@/api/vent/index';
-  import { setDivHeight } from '/@/utils/event';
-  import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
-  import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
-  import { useRouter } from 'vue-router';
-  import { useModal } from '/@/components/Modal';
-  import type { BasicColumn } from '/@/components/Table/src/types/table';
-  import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
-  import { getPopupContainer } from '/@/utils';
-  import { getDictItemsByCode } from '/@/utils/dict';
-  import { message } from 'ant-design-vue';
-  import { useCamera } from '/@/hooks/system/useCamera';
-  import { CaretRightOutlined } from '@ant-design/icons-vue';
-  import ConditionAssistance from './components/conditionAssistance.vue';
-  import reportInfo from '../comment/components/reportInfo.vue';
-  import { save, reportList } from '../../reportManager/reportManager.api';
-  import { usePermission } from '/@/hooks/web/usePermission';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  const globalConfig = inject('globalConfig');
-  const HistoryTable =
-    globalConfig.History_Type == 'remote'
-      ? defineAsyncComponent(() => import('../comment/HistoryTable.vue'))
-      : defineAsyncComponent(() => import('../../../vent/comment/history/HistoryTable.vue'));
-  const { hasPermission } = usePermission();
-
-  const [registerModal, { openModal, closeModal }] = useModal();
-  const [registerModal1, { openModal: openModal1, closeModal: closeModal1 }] = useModal();
-  const [registerModalAssistance, { openModal: openAssistance, closeModal: closeAssistance }] = useModal();
-  const { currentRoute } = useRouter();
-  const router = useRouter();
-  const { createConfirm } = useMessage();
-  const globSetting = useGlobSetting();
-
-  const modalTypeArr = reactive({
-    leftBtnArr: [
-      {
-        key: 'startSmoke',
-        value: '启停风机',
-        permission: 'btn:openclose',
-      },
-      {
-        key: 'startFan',
-        value: '启停风机',
-        permission: 'btn:openclose1',
-      },
-      {
-        key: 'changeSmoke', // 主备两个点位
-        value: '一键倒机',
-        permission: 'btn:change',
-      },
-      {
-        key: 'changeFan', // 主备一个点位
-        value: '一键倒机',
-        permission: 'btn:CtrlFanChange',
-      },
-      {
-        key: 'fan1ToFan2',
-        value: '主机倒备机',
-        permission: 'btn:ctrlFan1ToFan2',
-      },
-      {
-        key: 'fan2ToFan1',
-        value: '备机倒主机',
-        permission: 'btn:ctrlFan2ToFan1',
-      },
-      {
-        key: 'Fan1Frequency',
-        value: '主机调频',
-        permission: 'btn:frequency',
-      },
-      {
-        key: 'Fan2Frequency',
-        value: '备机调频',
-        permission: 'btn:frequency',
-      },
-      {
-        key: 'FanFrequency',
-        value: '风机调频',
-        permission: 'btn:frequencyMerge',
-      },
-      {
-        key: 'windPower',
-        value: '风电闭锁',
-        permission: 'fanLocal:fdbs',
-      },
-      {
-        key: 'gasPower',
-        value: '瓦斯电闭锁',
-        permission: 'fanLocal:wsdbs',
-      },
-      {
-        key: 'needAir',
-        value: '需风量',
-        permission: 'fanLocal:control',
-      },
-    ],
-    rightBtnArr: [
-      {
-        key: 'gasAlarmSet',
-        value: '瓦斯限值设定',
-        permission: 'fanLocal:gasAlarmSet',
-      },
-      {
-        key: 'gasOverSet', //
-        value: '瓦斯限值设定',
-        permission: 'fanLocal:gasOverSet',
-      },
-      {
-        key: 'kkjc',
-        value: '工况辅助决策',
-        permission: 'fanLocal:kkjc',
-      },
-      {
-        key: 'zhlk',
-        value: '自主联控',
-        permission: 'fanLocal:zhlk',
-      },
-      {
-        key: 'diameter',
-        value: '风筒直径',
-        permission: 'fanLocal:control',
-      },
-      {
-        key: 'diameter',
-        value: '风筒直径',
-        permission: 'fanLocal:control',
-      },
-      {
-        key: 'len',
-        value: '风筒长度',
-        permission: 'fanLocal:control',
-      },
-      // {
-      //   key: 'frequency',
-      //   value: '调频',
-      //   permission: 'fanLocal:control',
-      // },
-      {
-        key: 'windPowerLimit',
-        value: '风电闭锁限值',
-        permission: 'fanLocal:control',
-      },
-      {
-        key: 'gasPowerLimit',
-        value: '瓦斯电闭锁限值',
-        permission: 'fanLocal:control',
-      },
-      {
-        key: 'airVolumeAlarm',
-        value: '风量报警',
-        permission: 'fanLocal:control',
-        min: 0,
-        max: 100,
-      },
-      {
-        key: 'disAirAlarm',
-        value: '漏风率报警',
-        permission: 'fanLocal:control',
-      },
-      // {
-      //   key: 'gasAlarm',
-      //   value: '瓦斯报警',
-      //   permission: 'fanLocal:control',
-      // },
-    ],
-  });
-  const sensorList = ref<any[]>([
-    {
-      value: '1',
-      label: 'T1',
-    },
-    {
-      value: '2',
-      label: 'T2',
-    },
-    {
-      value: '3',
-      label: 'T3',
-    },
-  ]);
-
-  const scroll = reactive({
-    y: 180,
-  });
-  const deviceTypeDicts = getDictItemsByCode('fanlocaltype');
-  const gasWarningVal = ref(0.6); // 瓦斯最大报警值
-  const playerRef = ref();
-  const MonitorDataTable = ref();
-  const modalSensor = ref(null);
-  const loading = ref(false);
-  const activeKey = ref('1');
-  const player1 = ref();
-  const modalIsShow = ref<boolean>(false); // 是否显示模态框
-  const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
-  const fan1FrequencyVal = ref(40); //主机频率
-  const fan2FrequencyVal = ref(40); //备机频率
-  const mainWindIsShow1 = ref('open'); // 主机默认启动leftColumns
-  const mainWindIsShow2 = ref('stop'); // 备机默认不启动
-  const fanControl = ref('');
-  const targetVolume = ref(600);
-  const historyList = ref([]);
-  const remoteChartsColumns = getTableHeaderColumns('fanlocal_chart');
-  const chartsColumns = remoteChartsColumns && remoteChartsColumns.length > 0 ? remoteChartsColumns : chartsColumns1;
-
-  const passWord = ref('');
-  // 默认初始是第一行
-  const selectRowIndex = ref(-1);
-  const dataMonitorRowIndex = ref(0);
-  // 默认数据右边监测的是主机
-  const warningMonitorRowIndex = ref(0);
-
-  const xAxisDataGas = ref([]);
-  // 设备数据
-  const controlType = ref('');
-  const modalType = ref('');
-  // 监测数据
-  const initData = {
-    deviceID: '',
-    deviceType: '',
-    strname: '',
-    dataDh: '-', //压差
-    dataDtestq: '-', //测试风量
-    sourcePressure: '-', //气源压力
-    dataDequivalarea: '-',
-    netStatus: '0', //通信状态
-    warnLevel_str: '',
-    stationname: '',
-    fanFrequencyType: '',
-  };
-  const frequencyVal = ref(0);
-  const dataSource = ref([]);
-  const historySource = ref([]);
-  // 关联设备信息
-  const linkDeviceInfo = ref({});
-  // 监测数据
-  let selectData = reactive(lodash.cloneDeep(initData));
-  const rightColumns = ref<BasicColumn[]>([]);
-  const leftColumns = ref<BasicColumn[]>([]);
-  const devicekide = ref(deviceTypeDicts && deviceTypeDicts.length > 0 ? deviceTypeDicts[0]['value'] : 'fanlocal');
-  const deviceType = ref(selectData.deviceType);
-  const headElHeight = ref(0);
-  let btnClick = ref(true); // 判断按钮是否可点
-
-  //报表导出
-  let editID = ref<any>('');
-  let fileType = ref('');
-
-  const { getCamera, removeCamera } = useCamera();
-
-  watch(deviceType, (type) => {
-    rightColumns.value = getTableHeaderColumns(type + '_monitor_right') as [];
-    if (rightColumns.value && rightColumns.value.length < 1) {
-      rightColumns.value = getTableHeaderColumns(type.split('_')[0] + '_monitor_right') as [];
-    }
-    leftColumns.value = getTableHeaderColumns(type + '_monitor_left') as [];
-    if (leftColumns.value && leftColumns.value.length < 1) {
-      leftColumns.value = getTableHeaderColumns(type.split('_')[0] + '_monitor_left') as [];
-    }
-  });
-
-  const flvURL1 = () => {
-    // return `https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv`;
-    return '';
-  };
-
-  const changeDeviceKind = (e) => {
-    devicekide.value = e;
-    loading.value = true;
-    selectRowIndex.value = -1;
-    nextTick(() => {
-      selectData = lodash.cloneDeep(initData);
-      loading.value = false;
-      if (selectData.deviceID) MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID]);
-      const headEl = document.querySelector(`.zxm-table-thead`);
-      if (headEl) {
-        headElHeight.value = headEl.clientHeight;
-      }
-    });
-  };
-
-  const tabChange = (activeKeyVal) => {
-    activeKey.value = activeKeyVal;
-    if (activeKeyVal == 1) {
-      nextTick(() => {
-        MonitorDataTable.value.setSelectedRowKeys([selectData.deviceID]);
-      });
-    }
-  };
-
-  const selectDevice = (key, val) => {
-    if (key === 'dataMonitorRowIndex') {
-      dataMonitorRowIndex.value = val;
-    } else {
-      warningMonitorRowIndex.value = val;
-    }
-  };
-
-  //报表导出点击
-  async function reportDown() {
-    openModal1();
-    let res = await save({ reportType: 'fanlocal' });
-    console.log(res, 'res-----------');
-    let list = await reportList({ id: res.id });
-    console.log(list, 'list-----------');
-    let index = list.records[0].fileName.indexOf('.');
-    fileType.value = list.records[0].fileName.substring(index + 1);
-    editID.value = list.records[0].id;
-    openModal1();
-  }
-
-  //详情
-  function goDetail() {
-    openModal();
-  }
-
-  function goDetailDevice(linkDeviceCode) {
-    let linkDeviceId = '';
-    if (linkDeviceCode.startsWith('window')) {
-      linkDeviceId = linkDeviceInfo.value[linkDeviceCode] ? linkDeviceInfo.value[linkDeviceCode]['id'] : '';
-      router.push({ path: '/monitorChannel/monitor-window', query: { id: linkDeviceId } });
-    }
-  }
-
-  //
-  async function getDataSource() {
-    if (devicekide.value) {
-      const res = await list({ devicetype: devicekide.value, pagetype: 'normal' });
-      // const res = await list({ devicetype: 'fanlocal', pagetype: 'normal' });
-      if (res.msgTxt && res.msgTxt[0] && res.msgTxt[0].datalist && res.msgTxt[0].datalist.length > 0) {
-        const dataArr = res.msgTxt[0].datalist || [];
-        dataSource.value = [];
-        dataArr.forEach((data) => {
-          const readData = data.readData;
-          data = Object.assign(data, readData);
-          if (data['Fan1StartStatus'] && data['Fan1StartStatus'] === '1.0') data['Fan1StartStatus'] = '1';
-          if (data['Fan2StartStatus'] && data['Fan2StartStatus'] === '1.0') data['Fan2StartStatus'] = '1';
-          if (data['Fan1StartStatus'] && data['Fan1StartStatus'] === '0.0') data['Fan1StartStatus'] = '0';
-          if (data['Fan2StartStatus'] && data['Fan2StartStatus'] === '0.0') data['Fan2StartStatus'] = '0';
-          data['windQuantity2'] =
-            data['windQuantity2'] ||
-            data['m3'] ||
-            data['ductOutletAirVolume_merge'] ||
-            data['windOutSpeed_merge'] ||
-            data['windOutSpeed1'] ||
-            data['windOutSpeed2'] ||
-            data['windOutSpeed_merge'];
-          // if (globSetting.sysOrgCode === 'sdmtjtbetmk') {
-          //   if (data['m3']) data['ductOutletAirVolume_merge'] = data['m3'];
-          //   if (data['m3']) data['inletAirVolume_merge'] = (Number(data['m3']) * 1.08).toFixed(2);
-          // }
-          dataSource.value.push(data);
-          if (selectRowIndex.value > -1) {
-            let echartsData = dataArr[selectRowIndex.value]['history'] || [];
-            echartsData = echartsData.filter((item) => {
-              item['FanfHz'] = data['Fan1StartStatus'] == '1' ? item['Fan1fHz'] : data['Fan2StartStatus'] == '1' ? item['Fan2fHz'] : 0;
-              item['windQuantity2'] =
-                item['windQuantity2'] ||
-                item['m3'] ||
-                item['ductOutletAirVolume_merge'] ||
-                item['windOutSpeed_merge'] ||
-                item['windOutSpeed1'] ||
-                item['windOutSpeed2'] ||
-                item['windOutSpeed_merge'];
-              return true;
-            });
-            historyList.value = echartsData;
-          }
-        });
-      } else {
-        return (dataSource.value = []);
-      }
-    } else {
-      dataSource.value = [];
-    }
-  }
-
-  // https获取监测数据
-  let timer: null | NodeJS.Timeout = null;
-  async function getMonitor(flag?) {
-    if (Object.prototype.toString.call(timer) === '[object Null]') {
-      timer = await setTimeout(
-        async () => {
-          // debugger;
-          await getDataSource();
-          if (dataSource.value.length > 0 && selectRowIndex.value == -1 && MonitorDataTable.value) {
-            // 初始打开页面
-            if (flag && currentRoute.value && currentRoute.value['query'] && currentRoute.value['query']['id']) {
-              MonitorDataTable.value.setSelectedRowKeys(currentRoute.value['query']['id']);
-            } else {
-              MonitorDataTable.value.setSelectedRowKeys(dataSource.value[0]['deviceID']);
-            }
-          }
-          for (const key in selectData) {
-            selectData[key] = '';
-          }
-          if (dataSource.value.length > 0 && dataSource.value[selectRowIndex.value]) {
-            deviceType.value = dataSource.value[selectRowIndex.value]['deviceType'];
-            if (dataSource.value.length > 0 && dataSource.value[selectRowIndex.value]) {
-              Object.assign(selectData, dataSource.value[selectRowIndex.value]);
-            }
-            playSmoke(selectData);
-            addText(selectData);
-          }
-          historySource.value = selectData.history;
-          if (timer) {
-            timer = null;
-          }
-          getMonitor();
-        },
-        flag ? 0 : 1000
-      );
-    }
-  }
-
-  // 获取设备基本信息列表
-  const deviceBaseList = ref([]);
-  function getDeviceBaseList() {
-    getTableList({ pageSize: 1000 }).then((res) => {
-      deviceBaseList.value = res.records;
-    });
-  }
-
-  // 切换检测数据
-  async function getSelectRow(id) {
-    console.log('选中的设备id------->', id);
-
-    if (!id || id == selectData['deviceID']) return;
-    // loading.value = true;
-    const selectIndex: any = dataSource.value.findIndex((baseData: any) => baseData.deviceID == id);
-    selectRowIndex.value = selectIndex;
-    nextTick(() => {
-      const headEl = document.querySelector(`.zxm-table-thead`);
-      if (headEl) {
-        headElHeight.value = headEl.clientHeight;
-      }
-
-      const data = dataSource.value[selectIndex];
-      if (data) {
-        if (selectData['linkInfo']) linkDeviceInfo.value = JSON.parse(selectData['linkInfo']);
-
-        if (linkDeviceInfo.value['window_fWindowM3']) {
-          modalType.value = 'fc';
-        }
-        // 主备互斥控制
-        if (data['Fan1StartStatus'] == '1') {
-          mainWindIsShow1.value = 'open';
-          mainWindIsShow2.value = 'stop';
-          selectDevice('warningMonitorRowIndex', 0);
-          selectDevice('dataMonitorRowIndex', 0);
-        } else if (data['Fan2StartStatus'] == '1') {
-          mainWindIsShow2.value = 'open';
-          mainWindIsShow1.value = 'stop';
-          selectDevice('warningMonitorRowIndex', 1);
-          selectDevice('dataMonitorRowIndex', 1);
-        }
-        const xAxisDataGasArr = [];
-        for (const key in selectData) {
-          if (key.startsWith('gas') && key.length < 5) {
-            xAxisDataGasArr.push({ key: 'T' + key.substring(3), valueKey: key });
-          }
-        }
-        xAxisDataGas.value = xAxisDataGasArr;
-      }
-      setModelType(modalType.value);
-    });
-
-    await getCamera(id, playerRef.value);
-    return;
-  }
-
-  // 打开并设置modal的标题
-  function showModal(obj) {
-    if (!btnClick.value) return;
-    if (obj.key == 'kkjc') {
-      gasWarningVal.value = 0.6;
-      // 工况辅助决策
-      openAssistance(true, {});
-      return;
-    }
-    controlType.value = obj.key;
-    modalTitle.value = obj.value;
-    passWord.value = '';
-    modalIsShow.value = true;
-  }
-
-  function changeMotor(e) {
-    const target = e.target;
-    if (target.name === 'localWind1') {
-      if (target.value === 'open') {
-        mainWindIsShow2.value = 'stop';
-      }
-    } else if (target.name === 'localWind2') {
-      if (target.value === 'open') {
-        mainWindIsShow1.value = 'stop';
-      }
-    }
-  }
-
-  function handleOk(control?) {
-    if (passWord.value == '') {
-      message.warning('请输入密码!');
-      return;
-    }
-
-    createConfirm({
-      iconType: 'warning',
-      title: '控制',
-      content: '您确定要控制吗?',
-      onOk: () => handerFn(),
-    });
-    const handerFn = () => {
-      const handType = controlType.value;
-      const data = {
-        deviceid: selectData.deviceID,
-        devicetype: selectData.deviceType,
-        paramcode: '',
-        password: passWord.value || globalConfig?.simulatedPassword,
-        value: null,
-      };
-      if (handType === 'startSmoke') {
-        // 启动风机
-        // 以下是互斥
-        if (mainWindIsShow1.value === 'open' && mainWindIsShow2.value === 'stop') {
-          // playSmoke(handType, 'top', frequency, 'open');
-          data.paramcode = 'CtrlFan1Start';
-          deviceControlApi(data)
-            .then((res) => {
-              if (res.success) {
-                if (globalConfig.History_Type == 'remote') {
-                  message.success('指令已下发至生产管控平台成功!');
-                } else {
-                  message.success('指令已下发成功!');
-                }
-                modalTitle.value = '';
-                modalIsShow.value = false;
-              } else {
-                message.error(res.message);
-              }
-            })
-            .catch((err) => {
-              // modalIsShow.value = true;
-            });
-        } else if (mainWindIsShow2.value === 'open' && mainWindIsShow1.value === 'stop') {
-          // playSmoke(handType, 'down', frequency, 'open');
-          data.paramcode = 'CtrlFan2Start';
-          deviceControlApi(data)
-            .then(() => {
-              if (res.success) {
-                if (globalConfig.History_Type == 'remote') {
-                  message.success('指令已下发至生产管控平台成功!');
-                } else {
-                  message.success('指令已下发成功!');
-                }
-                modalTitle.value = '';
-                modalIsShow.value = false;
-              } else {
-                message.error(res.message);
-              }
-            })
-            .catch((err) => {});
-        } else if (mainWindIsShow1.value === 'stop' && mainWindIsShow2.value === 'stop') {
-          // playSmoke(handType, '', frequency, 'stop');
-        }
-      } else if (handType === 'startFan') {
-        if (control === 'Fan1Open') {
-          data.paramcode = 'CtrlFan1Start';
-        } else if (control === 'Fan2Open') {
-          data.paramcode = 'CtrlFan2Start';
-        } else if (control === 'Fan1Stop') {
-          data.paramcode = 'Fan1Stop';
-        } else if (control === 'Fan2Stop') {
-          data.paramcode = 'Fan2Stop';
-        } else if (control === 'Fan1Reset') {
-          data.paramcode = 'Fan1Reset';
-        } else if (control === 'Fan2Reset') {
-          data.paramcode = 'Fan2Reset';
-        }
-        deviceControlApi(data)
-          .then((res) => {
-            if (res.success) {
-              if (globalConfig.History_Type == 'remote') {
-                message.success('指令已下发至生产管控平台成功!');
-              } else {
-                message.success('指令已下发成功!');
-              }
-              modalTitle.value = '';
-              modalIsShow.value = false;
-            } else {
-              message.error(res.message);
-            }
-          })
-          .catch((err) => {
-            btnClick.value = true;
-          });
-      } else if (handType === 'Fan1Frequency' || handType === 'Fan2Frequency' || handType === 'FanFrequency') {
-        // 调频
-        if (handType === 'Fan1Frequency') {
-          data.paramcode = 'Fan1FreqHz';
-          data.value = fan1FrequencyVal.value;
-        } else if (handType === 'Fan2Frequency') {
-          data.paramcode = 'Fan2FreqHz';
-          data.value = fan2FrequencyVal.value;
-        } else if (handType === 'FanFrequency') {
-          data.paramcode = 'FreqHz_merge';
-          data.value = fan1FrequencyVal.value;
-        }
-
-        deviceControlApi(data)
-          .then((res) => {
-            if (res.success) {
-              if (globalConfig.History_Type == 'remote') {
-                message.success('指令已下发至生产管控平台成功!');
-              } else {
-                message.success('指令已下发成功!');
-              }
-              modalTitle.value = '';
-              modalIsShow.value = false;
-            } else {
-              message.error(res.message);
-            }
-          })
-          .catch((err) => {});
-      } else if (handType === 'changeSmoke') {
-        if (selectData['Fan1StartStatus'] == '0' || !selectData['Fan1StartStatus']) {
-          data.paramcode = 'CtrlFan1Start';
-          deviceControlApi(data)
-            .then((res) => {
-              if (res.success) {
-                if (globalConfig.History_Type == 'remote') {
-                  message.success('指令已下发至生产管控平台成功!');
-                } else {
-                  message.success('指令已下发成功!');
-                }
-                modalTitle.value = '';
-                modalIsShow.value = false;
-              } else {
-                message.error(res.message);
-              }
-
-              mainWindIsShow1.value = 'stop';
-              mainWindIsShow2.value = 'open';
-            })
-            .catch((err) => {});
-        } else if (selectData['Fan2StartStatus'] == '0' || !selectData['Fan2StartStatus']) {
-          data.paramcode = 'CtrlFan2Start';
-          deviceControlApi(data)
-            .then((res) => {
-              if (res.success) {
-                if (globalConfig.History_Type == 'remote') {
-                  message.success('指令已下发至生产管控平台成功!');
-                } else {
-                  message.success('指令已下发成功!');
-                }
-                modalTitle.value = '';
-                modalIsShow.value = false;
-              } else {
-                message.error(res.message);
-              }
-              mainWindIsShow1.value = 'open';
-              mainWindIsShow2.value = 'stop';
-            })
-            .catch((err) => {});
-        }
-        // // 一键倒机
-        // if (mainWindIsShow1.value === 'open' && mainWindIsShow2.value === 'stop') {
-        //   // playSmoke('startSmoke', 'down', frequency, 'open');
-        //   data.paramcode = 'CtrlFan2Start';
-        //   deviceControlApi(data).then((res) => {
-        //     console.log('设备操作结果', res);
-        //     modalTitle.value = '';
-        //     modalIsShow.value = false;
-        //   }).catch((err) => {
-
-        //   });
-        //   mainWindIsShow1.value = 'stop';
-        //   mainWindIsShow2.value = 'open';
-        // } else if (mainWindIsShow2.value === 'open' && mainWindIsShow1.value === 'stop') {
-        //   // playSmoke('startSmoke', 'top', frequency, 'open');
-        //   data.paramcode = 'CtrlFan1Start';
-        //   deviceControlApi(data).then((res) => {
-        //     console.log('设备操作结果', res);
-        //     modalTitle.value = '';
-        //     modalIsShow.value = false;
-        //   }).catch((err) => {
-
-        //   });
-        //   mainWindIsShow1.value = 'open';
-        //   mainWindIsShow2.value = 'stop';
-        // } else if (mainWindIsShow1.value === 'stop' && mainWindIsShow2.value === 'stop') {
-        //   // playSmoke(handType, '', frequency, 'stop');
-        // }
-      } else if (handType === 'changeFan') {
-        data.paramcode = 'CtrlFanStart';
-        deviceControlApi(data)
-          .then((res) => {
-            if (res.success) {
-              if (globalConfig.History_Type == 'remote') {
-                message.success('指令已下发至生产管控平台成功!');
-              } else {
-                message.success('指令已下发成功!');
-              }
-            } else {
-              message.error(res.message);
-            }
-            modalTitle.value = '';
-            modalIsShow.value = false;
-          })
-          .catch((err) => {});
-      } else if (handType === 'fan1ToFan2') {
-        data.paramcode = 'CtrlFan1ToFan2';
-        deviceControlApi(data).then((res) => {
-          if (res.success) {
-            if (globalConfig.History_Type == 'remote') {
-              message.success('指令已下发至生产管控平台成功!');
-            } else {
-              message.success('指令已下发成功!');
-            }
-            modalTitle.value = '';
-            modalIsShow.value = false;
-          } else {
-            message.error(res.message);
-          }
-        });
-      } else if (handType === 'fan2ToFan1') {
-        data.paramcode = 'CtrlFan2ToFan1';
-        deviceControlApi(data).then((res) => {
-          if (res.success) {
-            if (globalConfig.History_Type == 'remote') {
-              message.success('指令已下发至生产管控平台成功!');
-            } else {
-              message.success('指令已下发成功!');
-            }
-            modalTitle.value = '';
-            modalIsShow.value = false;
-          } else {
-            message.error(res.message);
-          }
-        });
-      } else if (handType === 'gasAlarmSet') {
-        if (passWord.value != '123456') {
-          message.error('密码错误,请重新输入!');
-          return;
-        }
-        if (gasWarningVal.value) {
-          modalTitle.value = '';
-          modalIsShow.value = false;
-          setTimeout(() => {
-            passWord.value = '';
-            modalIsShow.value = true;
-            controlType.value = 'toGkjc';
-            modalTitle.value = '工况决策辅助';
-          }, 500);
-        } else {
-          message.error('请核对瓦斯超限浓度值!');
-        }
-      } else if (handType === 'toGkjc') {
-        if (passWord.value != '123456') {
-          message.error('密码错误,请重新输入!');
-          return;
-        }
-        //进行工况决策
-        if (selectData.Fan1StartStatus == '1') {
-          openAssistance(true, {
-            // m3: selectData.m3 || 675.87,
-            m3: 675.87,
-            frequency: 30,
-            // m3: 525.87,  //5.0测试数据
-            // frequency: 35,
-            // frequency: selectData.Fan1fHz || selectData.Fan1FreqHz || selectData.Fan1Loop_Frequency,
-            gasWarningVal: gasWarningVal.value,
-            isCompute: false,
-          });
-        } else if (selectData.Fan2StartStatus == '1') {
-          openAssistance(true, {
-            // m3: selectData.m3 || 675.87,
-            m3: 675.87,
-            frequency: 30,
-            // frequency: selectData.Fan2fHz || selectData.Fan2FreqHz || selectData.Fan2Loop_Frequency,
-            gasWarningVal: gasWarningVal.value,
-            isCompute: false,
-          });
-        } else {
-          // openAssistance(true, { m3: 635.04, dataDh: 5748 });
-          openAssistance(true);
-        }
-        modalTitle.value = '';
-        modalIsShow.value = false;
-      } else if (handType === 'zhlk' || handType === 'gasOverSet') {
-        if (targetVolume.value) {
-          const params =
-            handType === 'zhlk'
-              ? { auto: 1, fanlocalId: selectData.deviceID, xufengliang: targetVolume.value }
-              : { auto: 1, fanlocalId: selectData.deviceID, gasMax: gasWarningVal.value };
-          autoAdjust(params).then(() => {
-            if (res.success) {
-              if (globalConfig.History_Type == 'remote') {
-                message.success('指令已下发至生产管控平台成功!');
-              } else {
-                message.success('指令已下发成功!');
-              }
-              modalTitle.value = '';
-              modalIsShow.value = false;
-            } else {
-              message.error(res.message);
-            }
-          });
-        }
-      }
-    };
-  }
-
-  function cancel() {
-    modalTitle.value = '';
-    modalIsShow.value = false;
-    gasWarningVal.value = 0;
-  }
-
-  function handleChangeSensor(value: string) {
-    console.log(value);
-  }
-
-  function addPlayVideo() {
-    if (player1.value && player1.value.play) {
-      if (!player1.value.paused()) player1.value.play();
-      document.body.removeEventListener('mousedown', addPlayVideo);
-    }
-  }
-
-  function deviceEdit(e: Event, type: string, record) {
-    e.stopPropagation();
-    openModal(true, {
-      type,
-      deviceId: record['deviceID'],
-    });
-  }
-
-  onBeforeMount(() => {
-    getDeviceBaseList();
-  });
-
-  onMounted(() => {
-    const { query } = unref(currentRoute);
-    if (query['deviceType']) devicekide.value = query['deviceType'] as string;
-    mountedThree(player1.value).then(async () => {
-      await getMonitor(true);
-      nextTick(async () => {
-        addCssText();
-      });
-    });
-
-    document.body.addEventListener('mousedown', addPlayVideo, false);
-  });
-
-  onUnmounted(() => {
-    destroy();
-    removeCamera();
-    if (timer) {
-      clearTimeout(timer);
-      timer = undefined;
-    }
-  });
-</script>
-<style scoped lang="less">
-  @import '/@/design/vent/modal.less';
-  :deep(.@{ventSpace}-tabs-tabpane-active) {
-    height: 100%;
-  }
-  .scene-box {
-    .title-text {
-      height: 32px;
-    }
-    .bottom-tabs-box {
-      height: 280px;
-      .tabs-box {
-        position: relative !important;
-      }
-    }
-  }
-
-  .data-show-box {
-    position: relative;
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-    padding: 10px 5px;
-    color: #ffffff;
-    z-index: 999;
-    top: 60px;
-    .data-item {
-      pointer-events: auto;
-      .item-header {
-        width: 374px;
-        background: url('/@/assets/images/vent/lr-top-bg.png') no-repeat;
-        background-size: auto;
-        height: 32px;
-        text-align: center;
-        line-height: 34px;
-        font-size: 15px;
-        font-weight: 600;
-        color: #fafafa;
-      }
-      .item-container {
-        width: 346px;
-        margin: 0 14px;
-        padding: 10px;
-        background: #00377c33;
-        backdrop-filter: blur(2px);
-        .tab {
-          width: 323px;
-          background: url('/@/assets/images/vent/lr-tab-bg.png') no-repeat;
-          display: flex;
-          .tab-item {
-            flex: 1;
-            text-align: center;
-            padding-top: 2px;
-            color: #ffffff99;
-            cursor: pointer;
-          }
-          .tab-item-active-l {
-            color: #00ffea;
-            background-image: url('/@/assets/images/vent/l-tab-active.png');
-            background-repeat: no-repeat;
-            background-size: auto;
-            background-position: 6px 3px;
-          }
-          .tab-item-active-r {
-            color: #00ffea;
-            background-image: url('/@/assets/images/vent/r-tab-active.png');
-            background-repeat: no-repeat;
-            background-position: 0 3px;
-          }
-        }
-        .container-group {
-          width: 314px;
-          margin: 0px 4px;
-          padding: 10px 0;
-          min-height: 432px;
-          background: linear-gradient(to right, #00deff22, #2081ff05);
-          max-height: 440px;
-          overflow-y: auto;
-        }
-        .container-item {
-          width: 100%;
-          height: 60px;
-          display: flex;
-          padding: 10px 0 0 20px;
-          margin-bottom: 5px;
-          position: relative;
-          background: url('/@/assets/images/vent/plane-bottom.png') no-repeat;
-          background-size: auto;
-          background-position: bottom;
-          &::before {
-            content: '';
-            display: block;
-            width: 100%;
-            height: 5px;
-            position: absolute;
-            top: 62px;
-            left: 0;
-            background-color: #73f4ff66;
-            backdrop-filter: blur(5px);
-          }
-          .item-icon {
-            width: 54px;
-            height: 45px;
-            background: url('/@/assets/images/vent/plane-icon-bg.png') no-repeat;
-            background-size: cover;
-            .icon-style {
-              font-size: 18px;
-              margin: 10px 0 0 20px;
-              color: #ffc800;
-            }
-          }
-          .item-name {
-            width: 180px;
-            line-height: 60px;
-          }
-          .item-value {
-            position: relative;
-            height: 26px;
-            line-height: 24px;
-            margin: 15px 0;
-            text-align: center;
-            width: 80px;
-            border: 1px solid #00f5fe;
-            border-radius: 13px;
-            background: linear-gradient(to right, #00f5fe44, #0090ff44);
-            &::before {
-              width: 6px;
-              height: 6px;
-              content: '';
-              position: absolute;
-              left: -3px;
-              top: 8px;
-              background: #ffa500;
-              border-radius: 3px;
-            }
-          }
-        }
-        .warning-header {
-          display: flex;
-          font-size: 14px;
-          .header-item {
-            flex: 1;
-            display: flex;
-            justify-content: center;
-            align-items: center;
-            .header-title {
-              color: #39e7fe;
-              margin-top: 10px;
-            }
-            .header-value {
-              // width: 133px;
-              height: 36px;
-              font-weight: 600;
-              font-family: 'douyuFont';
-              font-size: 16px;
-              color: #ffa500;
-              display: flex;
-              justify-content: center;
-              align-items: center;
-              margin-top: 15px;
-              margin-left: 8px;
-              // background: url('/@/assets/images/vent/count-header-bg.png') no-repeat;
-            }
-          }
-        }
-        .warning-group {
-          padding: 0 10px;
-          position: relative;
-
-          .warning-item {
-            display: flex;
-            flex-direction: row;
-            justify-content: space-between;
-            align-items: center;
-            height: 38px;
-            .item-name {
-              display: flex;
-              align-items: center;
-              // padding-left: 5px;
-              .icon {
-                width: 6px;
-                height: 6px;
-                display: inline-block;
-                background-color: #1cd5ff;
-                border-radius: 3px;
-                position: relative;
-                margin-right: 8px;
-                &::before {
-                  content: '';
-                  width: 10px;
-                  height: 10px;
-                  display: block;
-                  border: 1px solid #34edff99;
-                  border-radius: 5px;
-                  position: absolute;
-                  top: -2px;
-                  left: -2px;
-                }
-              }
-              &::before {
-                content: '';
-                display: block;
-                width: 1px;
-                height: 38px;
-                position: absolute;
-                left: 12px;
-                background-color: #00f5fe;
-              }
-            }
-          }
-        }
-        .warning-group-r {
-          &::before {
-            content: '';
-            display: block;
-            width: 1px;
-            height: 100%;
-            position: absolute;
-            left: 12px;
-            background-color: #00f5fe;
-          }
-        }
-      }
-    }
-  }
-  .input-box {
-    display: flex;
-    align-items: center;
-    .input-title {
-      color: #73e8fe;
-      width: auto;
-    }
-    margin-right: 10px;
-  }
-  .label {
-    max-width: 220px;
-  }
-  #fanLocalSelectDom {
-    :deep(.@{ventSpace}-select-dropdown) {
-      left: 0px !important;
-      top: 35px !important;
-    }
-  }
-  .@{ventSpace}-input {
-    width: 150px;
-  }
-  :deep(#LivePlayerBox) {
-    display: flex;
-    flex-direction: row;
-    justify-content: flex-end;
-    padding-right: 380px;
-    pointer-events: none;
-    .video-parent {
-      height: 208px;
-      pointer-events: auto !important;
-    }
-  }
-  .to-right {
-    :deep(#LivePlayerBox) {
-      padding-right: 0px;
-    }
-  }
-
-  :deep(.button-box) {
-    position: relative;
-    padding: 5px;
-    // border: 1px transparent solid;
-    border-radius: 5px;
-    margin-left: 8px;
-    margin-right: 8px;
-    width: auto;
-    // height: 40px;
-    // border: 1px solid #65dbea;
-    height: 35px !important;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    color: #fff;
-    padding: 0 15px 5px 15px;
-    cursor: pointer;
-    &:hover {
-      background: linear-gradient(#2cd1ff55, #1eb0ff55);
-    }
-    &::before {
-      width: calc(100% - 6px);
-      height: 27px;
-      content: '';
-      position: absolute;
-      top: 3px;
-      right: 0;
-      left: 3px;
-      bottom: 0;
-      z-index: -1;
-      border-radius: inherit; /*important*/
-      background: linear-gradient(#1fa6cb, #127cb5);
-    }
-    &::after {
-      width: calc(100% + 32px);
-      height: 10px;
-      content: '';
-      position: absolute;
-      top: 28px;
-      right: 0;
-      left: -16px;
-      bottom: 0;
-      z-index: -1;
-      border-radius: inherit; /*important*/
-      background-position: center;
-      background-size: 100%;
-      z-index: 999;
-    }
-  }
-</style>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 886 - 545
src/views/vent/monitorManager/fanLocalMonitor/index.vue


+ 221 - 234
src/views/vent/monitorManager/fanlocalPage/index.vue

@@ -1,118 +1,115 @@
 <template>
-    <div class="fanlocalPage">
-        <customHeader>局部风机监测</customHeader>
-        <div class="left-icon">
-            <img src="../../../../assets/images/vent/fanlocal-page/arrow-button.png" alt="">
-        </div>
-        <div class="right-icon">
-            <img class="img1" src="../../../../assets/images/vent/fanlocal-page/arrow-button.png" alt="">
-        </div>
-        <div class="fanlocal-container">
-            <div class="card-box" v-for="(item, index) in cardList" :key="index">
-                <div class="card-title" @click="getClick(item)">{{ item.label }}</div>
-                <div class="card-box-item">
-                    <div class="left-box-item">
-                        <div class="item-icon">
-                            <img src="../../../../assets/images/vent/fanlocal-page/is-txzt1.png" alt="">
-                        </div>
-                        <div class="item-content">
-                            <div class="item-content-value">{{ item.txVal }}</div>
-                            <div class="item-content-text">{{ item.txLable }}</div>
-                        </div>
-                    </div>
-                    <div class="right-box-item">
-                        <div class="item-icon">
-                            <img src="../../../../assets/images/vent/fanlocal-page/is-warn1.png" alt="">
-                        </div>
-                        <div class="item-content">
-                            <div class="item-content-value">{{ item.warnVal }}</div>
-                            <div class="item-content-text">{{ item.warnLabel }}</div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card-box-list">
-                    <div class="list-item" v-for="(ite, ind) in item.listData" :key="ind">
-                        <div class="list-item-label">{{ ite.label }}</div>
-                        <div class="list-item-value">{{ `${ite.value}${ite.dw}` }}</div>
-                    </div>
-                </div>
+  <div class="fanlocalPage">
+    <customHeader>局部风机监测</customHeader>
+    <div class="left-icon">
+      <img src="../../../../assets/images/vent/fanlocal-page/arrow-button.png" alt="" />
+    </div>
+    <div class="right-icon">
+      <img class="img1" src="../../../../assets/images/vent/fanlocal-page/arrow-button.png" alt="" />
+    </div>
+    <div class="fanlocal-container">
+      <div class="card-box" v-for="(item, index) in cardList" :key="index">
+        <div class="card-title" @click="getClick(item)">{{ item.label }}</div>
+        <div class="card-box-item">
+          <div class="left-box-item">
+            <div class="item-icon">
+              <img src="../../../../assets/images/vent/fanlocal-page/is-txzt1.png" alt="" />
+            </div>
+            <div class="item-content">
+              <div class="item-content-value">{{ item.txVal }}</div>
+              <div class="item-content-text">{{ item.txLable }}</div>
             </div>
+          </div>
+          <div class="right-box-item">
+            <div class="item-icon">
+              <img src="../../../../assets/images/vent/fanlocal-page/is-warn1.png" alt="" />
+            </div>
+            <div class="item-content">
+              <div class="item-content-value">{{ item.warnVal }}</div>
+              <div class="item-content-text">{{ item.warnLabel }}</div>
+            </div>
+          </div>
         </div>
+        <div class="card-box-list">
+          <div class="list-item" v-for="(ite, ind) in item.listData" :key="ind">
+            <div class="list-item-label">{{ ite.label }}</div>
+            <div class="list-item-value">{{ `${ite.value}${ite.dw}` }}</div>
+          </div>
+        </div>
+      </div>
     </div>
+  </div>
 </template>
 <script setup lang="ts">
-import { onBeforeMount, ref, watch, onMounted, nextTick, defineAsyncComponent, reactive, onUnmounted, inject, unref } from 'vue';
-import customHeader from '/@/components/vent/customHeader.vue';
-import { device } from './fanlocal.api'
-import { useRouter } from 'vue-router';
+  import { onBeforeMount, ref, watch, onMounted, nextTick, defineAsyncComponent, reactive, onUnmounted, inject, unref } from 'vue';
+  import customHeader from '/@/components/vent/customHeader.vue';
+  import { device } from './fanlocal.api';
+  import { useRouter } from 'vue-router';
 
-const props = defineProps({});
+  const props = defineProps({});
 
-let router = useRouter();
-let cardList = reactive<any[]>([])
+  let router = useRouter();
+  let cardList = reactive<any[]>([]);
+  const deviceType = ref('');
 
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-function getMonitor(flag?) {
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  function getMonitor(flag?) {
     timer = setTimeout(
-        async () => {
-            await getList()
-            if (timer) {
-                timer = null;
-            }
-            getMonitor();
-        },
-        flag ? 0 : 3000
+      async () => {
+        await getList();
+        if (timer) {
+          timer = null;
+        }
+        getMonitor();
+      },
+      flag ? 0 : 3000
     );
-}
-//点击标题页面跳转
-function getClick(item){
-    router.push('/monitorChannel/monitor-fanlocal?id='+ item.deviceID + '&deviceType=fanlocal')
-}
-//获取列表数据
-async function getList() {
-    let res = await device({ devicetype: "fanlocal", pagetype: "normal" })
-    let data = res.msgTxt[0].datalist
-    cardList.length = 0
+  }
+  //点击标题页面跳转
+  function getClick(item) {
+    router.push('/monitorChannel/monitor-fanlocal1?id=' + item.deviceID + '&deviceType=' + item.deviceType);
+  }
+  //获取列表数据
+  async function getList() {
+    let res = await device({ devicetype: 'fanlocal', pagetype: 'normal' });
+    let data = res.msgTxt[0].datalist;
+    cardList.length = 0;
     if (data.length != 0) {
-        data.forEach(el => {
-            cardList.push(
-                {
-                    deviceID:el.deviceID,
-                    label: el.strinstallpos,
-                    txVal: el.netStatus==1 ? '连接' : '未连接',
-                    txLable: '通讯状态',
-                    warnVal: el.warnLevel_str,
-                    warnLabel: '是否报警',
-                    listData: [
-                        { label: '运行风机', value: el.readData.Fan1StartStatus=='1' ? '主机' : el.readData.Fan2StartStatus=='1' ? '备机' : '--', dw: '' },
-                        { label: '风量', value: el.readData.window_fWindowM3, dw: 'm³/min' },
-                        { label: '迎头风速', value:el.readData.windSpeed1, dw: 'm/s' },
-                        { label: '迎头瓦斯', value: el.readData.gas1, dw: 'm/s' },
-                        { label: '时间', value: el.readTime, dw: '' },
-                    ]
-                },
-            )
-        })
+      data.forEach((el) => {
+        cardList.push({
+          deviceID: el.deviceID,
+          deviceType: el.deviceType,
+          label: el.strinstallpos,
+          txVal: el.netStatus == 1 ? '连接' : '未连接',
+          txLable: '通讯状态',
+          warnVal: el.warnLevel_str,
+          warnLabel: '是否报警',
+          listData: [
+            { label: '运行风机', value: el.readData.Fan1StartStatus == '1' ? '主机' : el.readData.Fan2StartStatus == '1' ? '备机' : '--', dw: '' },
+            { label: '风量', value: el.readData.window_fWindowM3, dw: 'm³/min' },
+            { label: '迎头风速', value: el.readData.windSpeed1, dw: 'm/s' },
+            { label: '迎头瓦斯', value: el.readData.gas1, dw: 'm/s' },
+            { label: '时间', value: el.readTime, dw: '' },
+          ],
+        });
+      });
     }
+  }
 
-}
-
-onMounted(() => {
-    getList()
-    getMonitor()
-})
-onUnmounted(() => {
+  onMounted(() => {
+    getList();
+    getMonitor();
+  });
+  onUnmounted(() => {
     if (timer) {
-        clearTimeout(timer);
-        timer = undefined;
+      clearTimeout(timer);
+      timer = undefined;
     }
-});
-
-
+  });
 </script>
 <style lang="less" scoped>
-.fanlocalPage {
+  .fanlocalPage {
     width: 100%;
     height: 100%;
     padding: 100px 60px 20px 60px;
@@ -120,160 +117,150 @@ onUnmounted(() => {
     position: relative;
 
     .left-icon {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        width: 60px;
-        height: calc(100% - 100px);
-        position: absolute;
-        left: 0;
-        top: 100px;
-
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 60px;
+      height: calc(100% - 100px);
+      position: absolute;
+      left: 0;
+      top: 100px;
     }
 
     .right-icon {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        width: 60px;
-        height: calc(100% - 100px);
-        position: absolute;
-        right: 0;
-        top: 100px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 60px;
+      height: calc(100% - 100px);
+      position: absolute;
+      right: 0;
+      top: 100px;
     }
 
     img {
-        width: 60px;
-        height: 60px;
+      width: 60px;
+      height: 60px;
     }
 
     .img1 {
-        transform: rotate(180deg);
+      transform: rotate(180deg);
     }
 
     .fanlocal-container {
-        height: 100%;
-        display: flex;
-        flex-wrap: wrap;
+      height: 100%;
+      display: flex;
+      flex-wrap: wrap;
+
+      .card-box {
+        position: relative;
+        width: 417px;
+        height: 380px;
+        margin: 0px 15px;
+        background: url(/src/assets/images/vent/fanlocal-page/card.png) no-repeat center;
+        background-size: 100% 100%;
+
+        .card-title {
+          position: absolute;
+          left: 50%;
+          top: 6px;
+          transform: translate(-50%, 0);
+          font-size: 14px;
+          font-family: 'douyuFont';
+          color: #fff;
+          cursor: pointer;
+        }
 
-        .card-box {
-            position: relative;
-            width: 417px;
-            height: 380px;
-            margin: 0px 15px;
-            background: url(/src/assets/images/vent/fanlocal-page/card.png) no-repeat center;
+        .card-box-item {
+          width: 100%;
+          height: 64px;
+          position: absolute;
+          left: 0;
+          top: 55px;
+          display: flex;
+          justify-content: space-around;
+
+          .left-box-item {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            width: 45%;
+            height: 100%;
+            padding: 5px 10px;
+            background: url('../../../../assets/images/vent/fanlocal-page/is-txzt.png') no-repeat center;
             background-size: 100% 100%;
-
-            .card-title {
-                position: absolute;
-                left: 50%;
-                top: 6px;
-                transform: translate(-50%, 0);
-                font-size: 14px;
-                font-family: 'douyuFont';
-                color: #fff;
-                cursor: pointer;
-            }
-
-            .card-box-item {
-                width: 100%;
-                height: 64px;
-                position: absolute;
-                left: 0;
-                top: 55px;
-                display: flex;
-                justify-content: space-around;
-
-                .left-box-item {
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
-                    width: 45%;
-                    height: 100%;
-                    padding: 5px 10px;
-                    background: url('../../../../assets/images/vent/fanlocal-page/is-txzt.png') no-repeat center;
-                    background-size: 100% 100%;
-                    box-sizing: border-box;
-                }
-
-                .right-box-item {
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
-                    width: 45%;
-                    height: 100%;
-                    padding: 5px 10px;
-                    background: url('../../../../assets/images/vent/fanlocal-page/is-warn.png') no-repeat center;
-                    background-size: 100% 100%;
-                    box-sizing: border-box;
-                }
-
-                .item-icon {
-                    width: 60px;
-                    height: 100%;
-                    margin-right: 15px;
-                    display: flex;
-                    justify-content: center;
-                    align-items: center
-                }
-
-                .item-content {
-                    width: calc(100% - 60px);
-                    height: 100%;
-                    display: flex;
-                    flex-direction: column;
-                    justify-content: center;
-                    color: #fff;
-                    font-size: 14px;
-                    padding-top: 10px;
-                    box-sizing: border-box;
-
-                    .item-content-value {
-                        font-family: 'douyuFont';
-                        color: #01fefc;
-                    }
-
-
-
-                }
-
-
+            box-sizing: border-box;
+          }
+
+          .right-box-item {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            width: 45%;
+            height: 100%;
+            padding: 5px 10px;
+            background: url('../../../../assets/images/vent/fanlocal-page/is-warn.png') no-repeat center;
+            background-size: 100% 100%;
+            box-sizing: border-box;
+          }
+
+          .item-icon {
+            width: 60px;
+            height: 100%;
+            margin-right: 15px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+          }
+
+          .item-content {
+            width: calc(100% - 60px);
+            height: 100%;
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            color: #fff;
+            font-size: 14px;
+            padding-top: 10px;
+            box-sizing: border-box;
+
+            .item-content-value {
+              font-family: 'douyuFont';
+              color: #01fefc;
             }
+          }
+        }
 
-            .card-box-list {
-                width: 100%;
-                height: 245px;
-                padding: 0px 15px;
-                box-sizing: border-box;
-                position: absolute;
-                left: 0;
-                top: 130px;
-                display: flex;
-                flex-direction: column;
-                justify-content: space-around;
-                overflow-y: auto;
-
-                .list-item {
-                    height: 30px;
-                    padding: 0px 25px;
-                    box-sizing: border-box;
-                    color: #fff;
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
-                    background: url('../../../../assets/images/vent/fanlocal-page/one-bg.png') no-repeat center;
-                    background-size: 100% 100%;
-
-                    .list-item-value {
-                        color: #01fefc;
-                    }
-                }
+        .card-box-list {
+          width: 100%;
+          height: 245px;
+          padding: 0px 15px;
+          box-sizing: border-box;
+          position: absolute;
+          left: 0;
+          top: 130px;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-around;
+          overflow-y: auto;
+
+          .list-item {
+            height: 30px;
+            padding: 0px 25px;
+            box-sizing: border-box;
+            color: #fff;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            background: url('../../../../assets/images/vent/fanlocal-page/one-bg.png') no-repeat center;
+            background-size: 100% 100%;
 
+            .list-item-value {
+              color: #01fefc;
             }
+          }
         }
-
-
+      }
     }
-
-}
-</style>
+  }
+</style>

+ 20 - 0
src/views/vent/monitorManager/gateMonitor/index.vue

@@ -635,6 +635,8 @@
       return;
     }
     if (isOpenRunning) {
+      message.warning('风门正在运行。。。');
+      modalIsShow.value = false;
       return;
     }
     const data = {
@@ -653,6 +655,9 @@
             frontDoorIsOpen.value = true;
           };
           data.paramcode = 'frontGateOpen_S';
+        } else {
+          message.warning('前门已打开。。。');
+          modalIsShow.value = false;
         }
         break;
       case '2': // 关闭前门
@@ -661,6 +666,9 @@
             frontDoorIsOpen.value = false;
           };
           data.paramcode = 'frontGateClose_S';
+        } else {
+          message.warning('前门已关闭。。。');
+          modalIsShow.value = false;
         }
         break;
       case '3': // 打开后门
@@ -669,6 +677,9 @@
             backDoorIsOpen.value = true;
           };
           data.paramcode = 'rearGateOpen_S';
+        } else {
+          message.warning('后门已打开。。。');
+          modalIsShow.value = false;
         }
         break;
       case '4': // 关闭后门
@@ -677,6 +688,9 @@
             backDoorIsOpen.value = false;
           };
           data.paramcode = 'rearGateClose_S';
+        } else {
+          message.warning('后门已关闭。。。');
+          modalIsShow.value = false;
         }
         break;
       case '8': // 打开中间门
@@ -685,6 +699,9 @@
             midDoorIsOpen.value = true;
           };
           data.paramcode = 'midGateOpen_S';
+        } else {
+          message.warning('中间风门已打开。。。');
+          modalIsShow.value = false;
         }
         break;
       case '9': // 关闭中间门
@@ -693,6 +710,9 @@
             midDoorIsOpen.value = false;
           };
           data.paramcode = 'midGateClose_S';
+        } else {
+          message.warning('中间风门已关闭。。。');
+          modalIsShow.value = false;
         }
         break;
       case '5': // 打开前后门

+ 181 - 188
src/views/vent/monitorManager/tunFaceMonitor/components/tunFaceFireHome.vue

@@ -12,67 +12,67 @@
               <div class="title">外因火灾风险</div>
               <div class="value">高风险</div>
             </div>
-          </div>          
+          </div>
           <ventBox1 class="vent-margin-t-20">
             <template #title>
               <div>掘进工作面火灾信息监测</div>
             </template>
             <template #container>
               <div class="temperature-box">
-                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="14" name="CO-title"/><span>O2监测</span></div>
+                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="14" name="CO-title" /><span>O2监测</span></div>
                 <div class="co-param">
-                    <div class="light-group">
-                      <div class="param-item">
-                        <div class="param">
-                          <div class="param-icon">
-                            <SvgIcon class="icon" size="30" name="O2-aveg"/>
-                            <div class="param-unit">平均(%)</div>
-                          </div>
+                  <div class="light-group">
+                    <div class="param-item">
+                      <div class="param">
+                        <div class="param-icon">
+                          <SvgIcon class="icon" size="30" name="O2-aveg" />
+                          <div class="param-unit">平均(%)</div>
+                        </div>
 
-                          <div class="param-val-box">
-                            <div class="param-val-icon"></div>
-                            <div class="param-val">56.99</div>
-                          </div>
+                        <div class="param-val-box">
+                          <div class="param-val-icon"></div>
+                          <div class="param-val">56.99</div>
                         </div>
                       </div>
-                      <div class="param-item">
-                        <div class="param">
-                          <div class="param-icon">
-                            <SvgIcon class="icon" size="30" name="O2-top"/>
-                            <div class="param-unit">最大(%)</div>
-                          </div>
-                          <div class="param-val-box">
-                            <div class="param-val-icon"></div>
-                            <div class="param-val">56.99</div>
-                          </div>
+                    </div>
+                    <div class="param-item">
+                      <div class="param">
+                        <div class="param-icon">
+                          <SvgIcon class="icon" size="30" name="O2-top" />
+                          <div class="param-unit">最大(%)</div>
+                        </div>
+                        <div class="param-val-box">
+                          <div class="param-val-icon"></div>
+                          <div class="param-val">56.99</div>
                         </div>
                       </div>
-                      <div class="param-item">
-                        <div class="param">
-                          <div class="param-icon">
-                            <SvgIcon class="icon" size="30" name="O2-low"/>
-                            <div class="param-unit">最小(%)</div>
-                          </div>
-                          <div class="param-val-box">
-                            <div class="param-val-icon"></div>
-                            <div class="param-val">56.99</div>
-                          </div>
+                    </div>
+                    <div class="param-item">
+                      <div class="param">
+                        <div class="param-icon">
+                          <SvgIcon class="icon" size="30" name="O2-low" />
+                          <div class="param-unit">最小(%)</div>
+                        </div>
+                        <div class="param-val-box">
+                          <div class="param-val-icon"></div>
+                          <div class="param-val">56.99</div>
                         </div>
                       </div>
                     </div>
                   </div>
+                </div>
                 <!-- <div class="state">
                   最大值产生于 <span class="state-color">2013-05-24 15:52:42</span> 时刻 <span class="state-color">15212胶运顺槽600m</span> 处
                 </div> -->
               </div>
               <div class="CO-box">
-                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="14" name="CO-title"/><span>CO监测</span></div>
+                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="14" name="CO-title" /><span>CO监测</span></div>
                 <div class="co-param">
                   <div class="light-group">
                     <div class="param-item">
                       <div class="param">
                         <div class="param-icon">
-                          <SvgIcon class="icon" size="30" name="CO-aveg"/>
+                          <SvgIcon class="icon" size="30" name="CO-aveg" />
                           <div class="param-unit">平均(%)</div>
                         </div>
 
@@ -85,7 +85,7 @@
                     <div class="param-item">
                       <div class="param">
                         <div class="param-icon">
-                          <SvgIcon class="icon" size="30" name="CO-top"/>
+                          <SvgIcon class="icon" size="30" name="CO-top" />
                           <div class="param-unit">最大(%)</div>
                         </div>
                         <div class="param-val-box">
@@ -97,7 +97,7 @@
                     <div class="param-item">
                       <div class="param">
                         <div class="param-icon">
-                          <SvgIcon class="icon" size="30" name="CO-low"/>
+                          <SvgIcon class="icon" size="30" name="CO-low" />
                           <div class="param-unit">最小(%)</div>
                         </div>
                         <div class="param-val-box">
@@ -113,7 +113,7 @@
                 </div> -->
               </div>
               <div class="">
-                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="14" name="smoke-title"/><span>烟雾传感器</span></div>
+                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="14" name="smoke-title" /><span>烟雾传感器</span></div>
                 <div class="warning-container">
                   <div class="warning-item">
                     <SvgIcon class="icon" size="24" name="alarm-smoke" />报警
@@ -127,7 +127,9 @@
                 </div>
               </div>
               <div class="">
-                <div class="parameter-title group-parameter-title"><SvgIcon class="icon" size="14" name="temperature-title"/><span>温度传感器</span></div>
+                <div class="parameter-title group-parameter-title"
+                  ><SvgIcon class="icon" size="14" name="temperature-title" /><span>温度传感器</span></div
+                >
                 <div class="warning-container">
                   <div class="warning-item">
                     <SvgIcon class="icon" size="24" name="alarm-smoke" />报警
@@ -144,189 +146,180 @@
           </ventBox1>
         </div>
       </div>
-      <div class="lr right-box">
-
-      </div>
+      <div class="lr right-box"> </div>
     </div>
   </a-spin>
-  
 </template>
 
 <script setup lang="ts">
+  import { onBeforeMount, ref, onMounted, onUnmounted, reactive, defineProps } from 'vue';
+  import { list } from '../tunFace.api';
+  import ventBox1 from '/@/components/vent/ventBox1.vue';
+  import { BarsOutlined } from '@ant-design/icons-vue';
+  import { beamTubeColumns, groutColumns, nitrogenColumns, sprayColumns } from '../tunFace.data';
+  import { SvgIcon } from '/@/components/Icon';
 
-import { onBeforeMount, ref, onMounted, onUnmounted, reactive, defineProps } from 'vue';
-import { list } from '../tunFace.api';
-import ventBox1 from '/@/components/vent/ventBox1.vue'
-import { BarsOutlined } from '@ant-design/icons-vue';
-import { beamTubeColumns, groutColumns, nitrogenColumns, sprayColumns } from '../tunFace.data'
-import { SvgIcon } from '/@/components/Icon';
+  const props = defineProps({
+    deviceId: {
+      type: String,
+      require: true,
+    },
+  });
 
-const props = defineProps({
-  deviceId: {
-    type: String,
-    require: true
-  }
-})
+  const loading = ref(false);
 
-const loading = ref(false)
+  // 默认初始是第一行
+  const openDust = ref(false);
+  const workFaceSource = ref({});
+  const workFaceHistorySource = ref([]);
+  const sprayDataSource = ref([]);
+  const bundleTubeDataSource = ref({});
+  const pulpingDataSource = ref([]);
+  const nitrogenDataSource = ref([]);
+  const temperatureDataSource = ref([]);
+  const fireDataSource = ref([]);
 
-// 默认初始是第一行
-const openDust = ref(false)
-const workFaceSource = ref({});
-const workFaceHistorySource = ref([])
-const sprayDataSource = ref([]);
-const bundleTubeDataSource = ref({});
-const pulpingDataSource = ref([]);
-const nitrogenDataSource = ref([]);
-const temperatureDataSource = ref([]);
-const fireDataSource = ref([]);
+  // 监测数据
+  const selectData = reactive({});
 
-// 监测数据
-const selectData = reactive({});
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  function getMonitor(flag?) {
+    if (Object.prototype.toString.call(timer) === '[object Null]') {
+      timer = setTimeout(
+        async () => {
+          if (props.deviceId) {
+            const data = await getDataSource(props.deviceId);
+            Object.assign(selectData, data);
+          }
+          if (timer) {
+            timer = null;
+          }
+          await getMonitor();
+          loading.value = false;
+        },
+        flag ? 0 : 1000
+      );
+    }
+  }
 
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-function getMonitor(flag?) {
-  if (Object.prototype.toString.call(timer) === '[object Null]') {
-    timer = setTimeout(async () => {
-      if (props.deviceId) {
-        const data = await getDataSource(props.deviceId)
-        Object.assign(selectData, data);
+  async function getDataSource(systemID) {
+    const res = await list({ devicetype: 'sys', systemID, type: 'fireS' });
+    const result = res.deviceInfo;
+    for (const key in result) {
+      const item = result[key];
+      if (item.type.startsWith('spray_auto')) {
+        // 喷淋
+        sprayDataSource.value = item['datalist'].filter((data: any) => {
+          const readData = data.readData;
+          return Object.assign(data, readData);
+        });
       }
-      if (timer) {
-        timer = null;
+      if (item.type.startsWith('bundletube')) {
+        // 束管
+        bundleTubeDataSource.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData']);
+      }
+      if (item.type === 'pulping_auto') {
+        // 注浆
+        pulpingDataSource.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData']);
+      }
+      if (item.type === 'nitrogen_auto') {
+        // 注氮
+        nitrogenDataSource.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData']);
       }
-      await getMonitor();
-      loading.value = false
-    }, flag ? 0 :1000);
-  }
-};
-
-async function getDataSource(systemID) {
-  const res = await list({ devicetype: 'sys', systemID, type: 'fireS' });
-  const result = res.deviceInfo;
-  for (const key in result) {
-    const item = result[key]
-    if (item.type.startsWith('spray_auto')) {
-      // 喷淋
-      sprayDataSource.value = item['datalist'].filter((data: any) => {
-        const readData = data.readData;
-        return Object.assign(data, readData);
-      })
-    }
-    if (item.type.startsWith('bundletube')) {
-      // 束管
-      bundleTubeDataSource.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData'])
-    }
-    if (item.type === 'pulping_auto') {
-      // 注浆
-      pulpingDataSource.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData'])
-    }
-    if (item.type === 'nitrogen_auto') {
-      // 注氮
-      nitrogenDataSource.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData'])
     }
-    
+    loading.value = false;
+    workFaceHistorySource.value = res['sysInfo']['history'];
+    workFaceSource.value = Object.assign(res['sysInfo'], res['sysInfo']['readData']);
   }
-  loading.value = false;
-  workFaceHistorySource.value = res['sysInfo']['history']
-  workFaceSource.value = Object.assign(res['sysInfo'], res['sysInfo']['readData']);
-}
-
-function toDetail() {
-  
-}
 
-function changeType(e:Event, item) {
-  item.value = e.target?.value
-}
+  function toDetail() {}
 
-function handlerDevice(param: string | Object) {
-
-}
+  function changeType(e: Event, item) {
+    item.value = e.target?.value;
+  }
 
-// 喷粉操作
-function handleSpray() {
-  //
-}
+  function handlerDevice(param: string | Object) {}
 
-onBeforeMount(() => {
+  // 喷粉操作
+  function handleSpray() {
+    //
+  }
 
-});
+  onBeforeMount(() => {});
 
-onMounted(async() => {
-  loading.value = true;
-  timer = null
-  await getMonitor(true)
-});
-onUnmounted(() => {
-  if (timer) {
-    clearTimeout(timer);
-    timer = undefined;
-  }
-});
+  onMounted(async () => {
+    loading.value = true;
+    timer = null;
+    await getMonitor(true);
+  });
+  onUnmounted(() => {
+    if (timer) {
+      clearTimeout(timer);
+      timer = undefined;
+    }
+  });
 </script>
 <style lang="less" scoped>
-@import '/@/design/vent/modal.less';
-@import '../../comment/less/workFace.less';
-@ventSpace: zxm;
+  @import '/@/design/vent/modal.less';
+  @import '../../comment/less/workFace.less';
+  @ventSpace: zxm;
 
-.fire-analysis {
-  display: flex;
-  justify-content: center;
-  .analysis-item {
-    width: 321px;
-    height: 104px;
-    text-align: center;
-    background: url('/@/assets/images/vent/alarm/1.png');
-    color: #ffffffdd;
-    margin: 0 4px;
+  .fire-analysis {
+    display: flex;
+    justify-content: center;
+    .analysis-item {
+      width: 321px;
+      height: 104px;
+      text-align: center;
+      background: url('/@/assets/images/vent/alarm/1.png');
+      color: #ffffffdd;
+      margin: 0 4px;
 
-    .title {
-      margin-top: 46px;
-    }
+      .title {
+        margin-top: 46px;
+      }
 
-    .value {
-      margin-top: 7px;
+      .value {
+        margin-top: 7px;
+      }
     }
-  }
 
-  .warning1 {
-    background: url('/@/assets/images/vent/alarm/21.png');
-  }
+    .warning1 {
+      background: url('/@/assets/images/vent/alarm/21.png');
+    }
 
-  .warning2 {
-    background: url('/@/assets/images/vent/alarm/31.png');
-  }
+    .warning2 {
+      background: url('/@/assets/images/vent/alarm/31.png');
+    }
 
-  .warning3 {
-    background: url('/@/assets/images/vent/alarm/41.png');
+    .warning3 {
+      background: url('/@/assets/images/vent/alarm/41.png');
+    }
   }
-}
-.warning-container{
-  width: 100%;
-  display: flex;
-  justify-content: space-between;
-  padding: 10px 0;
-  .warning-item{
+  .warning-container {
+    width: 100%;
     display: flex;
     justify-content: space-between;
-    align-items: center;
-    .icon{
-      margin-right: 5px;
-    }
-    .num{
-      margin-left: 14px;
+    padding: 10px 0;
+    .warning-item {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      .icon {
+        margin-right: 5px;
+      }
+      .num {
+        margin-left: 14px;
+      }
     }
-  }
-  .detail{
-    align-self: flex-end;
-    color: #1bf5fd;
-    cursor: pointer;
-    &:hover{
-      color: #1bf5fddd;
+    .detail {
+      align-self: flex-end;
+      color: #1bf5fd;
+      cursor: pointer;
+      &:hover {
+        color: #1bf5fddd;
+      }
     }
   }
-}
-
 </style>

+ 4 - 1
src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts

@@ -296,7 +296,10 @@ class singleWindow {
 
   mountedThree(playerDom) {
     return new Promise((resolve) => {
-      this.model.setGLTFModel(['ddFc'], this.group).then(() => {
+      this.model.setGLTFModel('ddFc').then((gltf) => {
+        const fcModal = gltf[0];
+        fcModal.name = 'ddFc';
+        this.group?.add(fcModal);
         this.setModalPosition();
         this.initAnimation();
         resolve(null);

+ 2 - 2
src/views/vent/monitorManager/windowMonitor/index.vue

@@ -18,7 +18,7 @@
   <div class="scene-box">
     <div class="top-box">
       <div class="top-center">
-        <div class="row" v-if="selectData.nwindownum > 1">
+        <div class="row" v-if="Number(selectData.nwindownum) > 1">
           <div v-if="hasPermission('window:control')" class="button-box" @click="setArea(1)">设定前窗面积</div>
           <div v-if="hasPermission('window:control')" class="button-box" @click="setArea(2)">设定后窗面积</div>
           <div v-if="hasPermission('window:fltk')" class="button-box" @click="setArea(7)">前窗自主调控</div>
@@ -27,7 +27,7 @@
           <!-- <div v-if="hasPermission('window:ldkz')" class="button-box" @click="setArea(3)">自主联动控制开启</div>
           <div v-if="hasPermission('window:ldkz')" class="button-box" @click="setArea(4)">自主联动控制停止</div> -->
         </div>
-        <div class="row" v-if="selectData.nwindownum == 1">
+        <div class="row" v-if="Number(selectData.nwindownum) == 1">
           <div v-if="hasPermission('window:control')" class="button-box" @click="setArea(1)">设定风窗面积</div>
           <div v-if="hasPermission('window:fltk')" class="button-box" @click="setArea(7)">风窗自主调控</div>
           <!-- 展会功能 -->

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.