Răsfoiți Sursa

Merge branch 'master' of http://39.97.59.228:8013/lxh/gas-injection

lxh 1 lună în urmă
părinte
comite
84a0a261b8

+ 1 - 1
.env

@@ -2,7 +2,7 @@
 VITE_PORT = 3100
 
 #  网站标题
-VITE_GLOB_APP_TITLE = 智能通风管控系统
+VITE_GLOB_APP_TITLE = 注气驱替监控系统
 
 VITE_GLOB_AP_LOGO = 
 

+ 1 - 0
.env.development

@@ -7,6 +7,7 @@ VITE_PUBLIC_PATH = /
 # 跨域代理,您可以配置多个 ,请注意,没有换行符
 #VITE_PROXY = [["/jeecgboot","http://localhost:8080/jeecg-boot"],["/upload","http://localhost:3300/upload"]]
 VITE_PROXY = [["/sw","http://182.92.126.35:6008"],["/jeecgsystem","http://182.92.126.35:9999"],["/upload","http://182.92.126.35:9999/upload"],["/documents", "http://182.92.126.35:9050"],["/modelreq", "http://182.92.126.35:9999"],["/webRtc", "http://182.92.126.35:8051"], ["/python", "http://127.0.0.1:8008"], ["/tun2D", "http://127.0.0.1:8088/micro-vent-2dModal/tun2D"],["/dataCenter", "http://39.97.59.228:10999"]]
+# VITE_PROXY = [["/sw","http://182.92.126.35:6008"],["/jeecgsystem","http://39.97.59.228:9999"],["/upload","http://39.97.59.228:9999/upload"],["/documents", "http://182.92.126.35:9050"],["/modelreq", "http://39.97.59.228:9999"],["/webRtc", "http://182.92.126.35:8051"], ["/python", "http://127.0.0.1:8008"], ["/tun2D", "http://127.0.0.1:8088/micro-vent-2dModal/tun2D"],["/dataCenter", "http://39.97.59.228:10999"]]
 # VITE_PROXY = [["/jeecgsystem","http://192.168.183.88:9999"],["/upload","http://192.168.183.88:9999/upload"],["/documents", "http://192.168.183.88:9050"],["/modelreq", "http://192.168.183.88:9999"],["/webRtc", "http://192.168.183.88:8051"]]
 # VITE_PROXY = [["/jeecgsystem","http://10.10.150.72:9999"],["/upload","http://localhost:3300/upload"],["/documents", "http://10.10.150.72:9050"],["/modelreq", "http://10.10.150.72:9999"],["/webRtc", "http://192.168.183.216:8051"]]
 # VITE_PROXY = [["/jeecgsystem","http://192.168.1.8:9999"],["/upload","http://localhost:3300/upload"]]

+ 5 - 5
index.html

@@ -23,11 +23,11 @@
           htmlRoot.setAttribute('data-theme', theme);
           theme = htmlRoot = null;
         }
-        const remoteUrl = window.location.hostname === 'localhost' ? '182.92.126.35' : window.location.hostname;
-        var script = document.createElement('script');
-          script.type = 'text/javascript';
-          script.src = 'http://'+remoteUrl+':9050/web-apps/apps/api/documents/api.js';
-          document.head.appendChild(script);
+        // const remoteUrl = window.location.hostname === 'localhost' ? '182.92.126.35' : window.location.hostname;
+        // var script = document.createElement('script');
+        //   script.type = 'text/javascript';
+        //   script.src = 'http://'+remoteUrl+':9050/web-apps/apps/api/documents/api.js';
+        //   document.head.appendChild(script);
       })();
     </script>
     <div id="app">

Fișier diff suprimat deoarece este prea mare
+ 606 - 439
pnpm-lock.yaml


+ 2 - 2
public/fileEdit.html

@@ -7,8 +7,8 @@
 <body>
 
 <div id="fileEdit"></div>
-<!--// 页面引入document的api.js-->
-<script type="text/javascript" src="http://47.94.222.6:9050/web-apps/apps/api/documents/api.js"></script>
+// 页面引入document的api.js
+<!-- <script type="text/javascript" src="http://47.94.222.6:9050/web-apps/apps/api/documents/api.js"></script> -->
 <script>
 
     //office文件在线编辑、预览

+ 1 - 1
src/utils/threejs/main.worker.ts

@@ -121,7 +121,7 @@ export function initTHREE() {
   }
 
   if (!window['$camera']) {
-    const camera = new THREE.PerspectiveCamera(50, document.body.clientWidth / document.body.clientHeight, 0.0000001, 1000);
+    const camera = new THREE.PerspectiveCamera(45, document.body.clientWidth / document.body.clientHeight, 0.0000001, 1000);
     window['$camera'] = camera;
   }
 

+ 1 - 1
src/utils/threejs/useThree.ts

@@ -487,13 +487,13 @@ class UseThree {
   }
 
   render() {
-    this.startAnimation();
     this.orbitControls?.update();
     this.camera?.updateMatrixWorld();
     // this.composer?.render();
     this.renderer?.render(this.scene as THREE.Object3D, this.camera as THREE.Camera);
     this.css3dRender?.render(this.scene as THREE.Scene, this.camera as THREE.PerspectiveCamera);
     this.css2dRender?.render(this.scene as THREE.Scene, this.camera as THREE.PerspectiveCamera);
+    this.startAnimation();
   }
 
   timeRender() {

+ 28 - 28
src/views/vent/deviceManager/workingFace/workingFace.data.ts

@@ -157,34 +157,34 @@ export const commentFormSchema = (strtype) => {
         };
       },
     },
-    {
-      label: '关联需风量地点',
-      field: 'xufengliangid',
-      component: 'ApiSelect',
-      componentProps: ({ formModel }) => {
-        let api;
-        if (formModel['strtype'] == 'sys_dongshi') {
-          api = dongshi;
-        } else if (formModel['strtype'] == 'sys_cheliang') {
-          api = cheliang;
-        } else if (formModel['strtype'] == 'sys_surface_juejin') {
-          api = juejin;
-        } else if (formModel['strtype'] == 'sys_surface_caimei') {
-          api = caimei;
-        } else if (formModel['strtype'] == 'sys_surface_beiyong') {
-          api = beiyong;
-        } else if (formModel['strtype'] == 'sys_other') {
-          api = qita;
-        }
-        if (api)
-          return {
-            api: api.bind(null, { id: formModel['huifengid'] }),
-            labelField: 'work_name',
-            valueField: 'id',
-            resultField: 'obj',
-          };
-      },
-    },
+    // {
+    //   label: '关联需风量地点',
+    //   field: 'xufengliangid',
+    //   component: 'ApiSelect',
+    //   componentProps: ({ formModel }) => {
+    //     let api;
+    //     if (formModel['strtype'] == 'sys_dongshi') {
+    //       api = dongshi;
+    //     } else if (formModel['strtype'] == 'sys_cheliang') {
+    //       api = cheliang;
+    //     } else if (formModel['strtype'] == 'sys_surface_juejin') {
+    //       api = juejin;
+    //     } else if (formModel['strtype'] == 'sys_surface_caimei') {
+    //       api = caimei;
+    //     } else if (formModel['strtype'] == 'sys_surface_beiyong') {
+    //       api = beiyong;
+    //     } else if (formModel['strtype'] == 'sys_other') {
+    //       api = qita;
+    //     }
+    //     if (api)
+    //       return {
+    //         api: api.bind(null, { id: formModel['huifengid'] }),
+    //         labelField: 'work_name',
+    //         valueField: 'id',
+    //         resultField: 'obj',
+    //       };
+    //   },
+    // },
     {
       label: '模型类型',
       field: 'strsystype',

+ 70 - 63
src/views/vent/home/configurable/components/ModuleGasInject.vue

@@ -1,81 +1,88 @@
 <template>
   <!-- 注气驱替 -->
-  <component :is="getModuleComponent(showStyle)" :style="style" :title="moduleName" :visible="visible"
-    :visibleDetail="visibleDetail" :class="{ 'cursor-pointer': !!moduleData.to }" @close="$emit('close')"
-    @click="redirectTo" @handleClickDetail="handleClickDetail">
+  <component
+    :is="getModuleComponent(showStyle)"
+    :style="style"
+    :title="moduleName"
+    :visible="visible"
+    :visibleDetail="visibleDetail"
+    :class="{ 'cursor-pointer': !!moduleData.to }"
+    @close="$emit('close')"
+    @click="redirectTo"
+    @handleClickDetail="handleClickDetail"
+  >
     <slot>
       <Header :deviceType="deviceType" :moduleData="moduleData" :data="data" @select="selectedData = $event" />
-      <Content :style="{ height: header.show ? 'calc(100% - 30px)' : '100%' }" :moduleData="moduleData"
-        :data="selectedData" />
+      <Content :style="{ height: header.show ? 'calc(100% - 30px)' : '100%' }" :moduleData="moduleData" :data="selectedData" />
       <DetailInfo :showDetail="showDetail" :deviceType="deviceType" @closeModal="closeModal"></DetailInfo>
     </slot>
   </component>
 </template>
 <script lang="ts" setup>
-import Header from './header.vue';
-import Content from './content.vue';
-import ModuleLeft from './gasInject/moduleLeft.vue';
-import ModuleRight from './gasInject/moduleRight.vue';
-import ModuleBottom from './gasInject/moduleBottom.vue';
-import DetailInfo from './gasInject/DetailInfo.vue'
-import { computed, ref } from 'vue';
-import { openWindow } from '/@/utils';
-import { getFormattedText } from '../hooks/helper';
-// import { ModuleProps } from '../types';
+  import Header from './header.vue';
+  import Content from './content.vue';
+  import ModuleLeft from './gasInject/moduleLeft.vue';
+  import ModuleRight from './gasInject/moduleRight.vue';
+  import ModuleBottom from './gasInject/moduleBottom.vue';
+  import DetailInfo from './gasInject/DetailInfo.vue';
+  import { computed, ref } from 'vue';
+  import { openWindow } from '/@/utils';
+  import { getFormattedText } from '../hooks/helper';
+  // import { ModuleProps } from '../types';
 
-const props = defineProps<{
-  /** 配置的详细模块信息 */
-  moduleData: any;
-  /** 配置的详细样式信息 */
-  showStyle: any;
-  /** 该模块配置中的设备标识符 */
-  deviceType: string;
-  /** api返回的数据 */
-  data: any;
-  moduleName: string;
-  visible: boolean;
-  visibleDetail: boolean
-}>();
-defineEmits(['close', 'click']);
+  const props = defineProps<{
+    /** 配置的详细模块信息 */
+    moduleData: any;
+    /** 配置的详细样式信息 */
+    showStyle: any;
+    /** 该模块配置中的设备标识符 */
+    deviceType: string;
+    /** api返回的数据 */
+    data: any;
+    moduleName: string;
+    visible: boolean;
+    visibleDetail: boolean;
+  }>();
+  defineEmits(['close', 'click']);
 
-const { header } = props.moduleData;
-const selectedData = ref();
-//是否显示详情信息
-const showDetail = ref(false)
+  const { header } = props.moduleData;
+  const selectedData = ref();
+  //是否显示详情信息
+  const showDetail = ref(false);
 
-const style = computed(() => {
-  const size = props.showStyle.size;
-  const position = props.showStyle.position;
-  return size + position;
-});
+  const style = computed(() => {
+    const size = props.showStyle.size;
+    const position = props.showStyle.position;
+    return size + position;
+  });
 
-// 根据配置里的定位判断应该使用哪个module组件
-function getModuleComponent({ size, position }) {
-  const [_, width] = size.match(/width:([0-9]+)px/) || [];
-  if (position.includes('bottom') || parseInt(width) > 800) {
+  // 根据配置里的定位判断应该使用哪个module组件
+  function getModuleComponent({ size, position }) {
+    const [_, width] = size.match(/width:([0-9]+)px/) || [];
+    if (position.includes('bottom') || parseInt(width) > 800) {
+      return ModuleBottom;
+    }
+    if (position.includes('left')) {
+      return ModuleLeft;
+    }
+    if (position.includes('right')) {
+      return ModuleRight;
+    }
     return ModuleBottom;
   }
-  if (position.includes('left')) {
-    return ModuleLeft;
-  }
-  if (position.includes('right')) {
-    return ModuleRight;
-  }
-  return ModuleBottom;
-}
 
-function redirectTo() {
-  const { to } = props.moduleData;
-  if (!to) return;
-  openWindow(getFormattedText(selectedData.value, to));
-}
+  function redirectTo() {
+    const { to } = props.moduleData;
+    if (!to) return;
+    openWindow(getFormattedText(selectedData.value, to));
+  }
 
-//详情点击
-function handleClickDetail() {
-  showDetail.value = true
-}
-//关闭弹窗
-function closeModal(param) {
-  showDetail.value = param
-}
+  //详情点击
+  function handleClickDetail() {
+    showDetail.value = true;
+  }
+  //关闭弹窗
+  function closeModal(param) {
+    showDetail.value = param;
+  }
 </script>

+ 6 - 2
src/views/vent/home/configurable/components/gasInject/moduleBottom.vue

@@ -61,9 +61,11 @@
     position: relative;
     padding-left: 55px;
     padding-right: 24px;
-    padding-top: 4px;
+    // padding-top: 3px;
     margin-bottom: 5px;
-    font-family: 'douyuFont';
+    // font-family: 'douyuFont';
+    font-size: 18px;
+    font-weight: 700;
     line-height: var(--bg-height);
   }
   .module-slot {
@@ -78,6 +80,8 @@
   .detail-text {
     color: #2cb6ff;
     cursor: pointer;
+    font-family: 'douyuFont';
+    font-size: 13px;
   }
 
   // Transition动画相关

+ 6 - 2
src/views/vent/home/configurable/components/gasInject/moduleLeft.vue

@@ -60,9 +60,11 @@
     background-size: 100% 100%;
     position: relative;
     padding-left: 45px;
-    padding-top: 4px;
+    // padding-top: 4px;
     margin-bottom: 5px;
-    font-family: 'douyuFont';
+    // font-family: 'douyuFont';
+    font-size: 18px;
+    font-weight: 700;
     line-height: var(--bg-height);
   }
 
@@ -80,6 +82,8 @@
   .detail-text {
     color: #2cb6ff;
     cursor: pointer;
+    font-family: 'douyuFont';
+    font-size: 13px;
   }
 
   // Transition动画相关

+ 75 - 73
src/views/vent/home/configurable/components/gasInject/moduleRight.vue

@@ -2,11 +2,11 @@
   <Transition>
     <div v-if="visible" class="module-content">
       <div v-if="title" class="module-content__title__expand">
-       <div>
-         <span class="action-btn close-btn" @click="closeModel"></span>
-        <span @click="clickHandler">{{ title }}</span>
-       </div>
-       <span v-if="visibleDetail" class="detail-text" @click="handleClickDetail">详情</span>
+        <div>
+          <span class="action-btn close-btn" @click="closeModel"></span>
+          <span @click="clickHandler">{{ title }}</span>
+        </div>
+        <span v-if="visibleDetail" class="detail-text" @click="handleClickDetail">详情</span>
       </div>
       <div class="module-slot">
         <slot></slot>
@@ -15,86 +15,88 @@
   </Transition>
 </template>
 <script lang="ts" setup>
-// 和 ./moduleLeft 一样,针对动画做了一些修改
-defineProps<{ title: string; visible: boolean,visibleDetail:boolean }>();
-const emit = defineEmits(['close', 'click','handleClickDetail']);
+  // 和 ./moduleLeft 一样,针对动画做了一些修改
+  defineProps<{ title: string; visible: boolean; visibleDetail: boolean }>();
+  const emit = defineEmits(['close', 'click', 'handleClickDetail']);
 
-function closeModel() {
-  emit('close');
-}
-function clickHandler() {
-  emit('click');
-}
-//详情点击
-function handleClickDetail() {
-  emit('handleClickDetail')
-}
+  function closeModel() {
+    emit('close');
+  }
+  function clickHandler() {
+    emit('click');
+  }
+  //详情点击
+  function handleClickDetail() {
+    emit('handleClickDetail');
+  }
 </script>
 <style lang="less" scoped>
-@import '/@/design/theme.less';
+  @import '/@/design/theme.less';
 
-@{theme-deepblue} {
-  .module-content {
-    --image-model_original_title_bg: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/2-1.png');
-    --image-model_original_border_bg: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/2-4.png');
+  @{theme-deepblue} {
+    .module-content {
+      --image-model_original_title_bg: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/2-1.png');
+      --image-model_original_border_bg: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/2-4.png');
+    }
   }
-}
-
-.module-content {
-  --image-model_original_title_bg: url('@/assets/images/gasInjection/2-1.png');
-  --image-model_original_border_bg: url('@/assets/images/gasInjection/2-4.png');
-  --bg-height: 40px;
-  color: #fff;
-  box-sizing: border-box;
-  position: absolute;
-  width: 100%;
-  height: 100%;
-}
-
-.module-content__title__expand {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  width: 100%;
-  height: var(--bg-height);
-  background: var(--image-model_original_title_bg) no-repeat;
-  background-size: 100% 100%;
-  position: relative;
-  padding-left: 45px;
-  padding-top: 4px;
-  margin-bottom: 5px;
-  font-family: 'douyuFont';
-  line-height: var(--bg-height);
-}
 
+  .module-content {
+    --image-model_original_title_bg: url('@/assets/images/gasInjection/2-1.png');
+    --image-model_original_border_bg: url('@/assets/images/gasInjection/2-4.png');
+    --bg-height: 40px;
+    color: #fff;
+    box-sizing: border-box;
+    position: absolute;
+    width: 100%;
+    height: 100%;
+  }
 
+  .module-content__title__expand {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 100%;
+    height: var(--bg-height);
+    background: var(--image-model_original_title_bg) no-repeat;
+    background-size: 100% 100%;
+    position: relative;
+    padding-left: 45px;
+    // padding-top: 4px;
+    margin-bottom: 5px;
+    font-size: 18px;
+    font-weight: 700;
+    // font-family: 'douyuFont';
+    line-height: var(--bg-height);
+  }
 
-.module-slot {
-  height: calc(100% - 33px);
-  // width: calc(100% - 20px);
-  width: 100%;
-  // backdrop-filter: blur(5px);
-  // #182d47
-  background: var(--image-model_original_border_bg) no-repeat;
-  background-size: 100% 100%;
-}
+  .module-slot {
+    height: calc(100% - 33px);
+    // width: calc(100% - 20px);
+    width: 100%;
+    // backdrop-filter: blur(5px);
+    // #182d47
+    background: var(--image-model_original_border_bg) no-repeat;
+    background-size: 100% 100%;
+  }
 
-.detail-text{
+  .detail-text {
     color: #2cb6ff;
     cursor: pointer;
+    font-family: 'douyuFont';
+    font-size: 13px;
   }
 
-// Transition动画相关
-.v-enter-active,
-.v-leave-active {
-  transition: all 0.3s ease;
-}
+  // Transition动画相关
+  .v-enter-active,
+  .v-leave-active {
+    transition: all 0.3s ease;
+  }
 
-.v-enter-from,
-.v-leave-to {
-  // opacity: 1;
-  transform: translateX(100%);
-  // transform: scaleY(0);
-  // transform-origin: center top;
-}
+  .v-enter-from,
+  .v-leave-to {
+    // opacity: 1;
+    transform: translateX(100%);
+    // transform: scaleY(0);
+    // transform-origin: center top;
+  }
 </style>

+ 46 - 45
src/views/vent/home/configurable/components/preset/gasInjectList.vue

@@ -1,11 +1,10 @@
 <template>
   <div class="gas-inject-list">
-
     <div class="list-box-item" v-for="(item, index) in option" :key="index">
       <div class="box-item-label">{{ item.label }}</div>
       <div class="box-item-value">
-        <span>  {{ item.value }}</span>
-        <span style="margin-left: 5px;">{{ item.unit }}</span>
+        <span> {{ item.value }}</span>
+        <span style="margin-left: 5px; color: aliceblue">{{ item.unit }}</span>
       </div>
     </div>
     <!-- <div class="list-box-item">
@@ -28,61 +27,63 @@
         <div class="box-item-label">{{ item.hlTitle }}</div>
         <div class="box-item-value">{{ item.hlValue }}</div>
       </div> -->
-
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue'
-
-let props = defineProps({
-  option: {
-    type: Array as any
-  }
-})
-// let listData = ref([
-//   { id: 1, gzmTitle: '工作面', gzmValue: '12304工作面', mcTitle: '所属煤层', mcValue: '2号煤', cdTitle: '设计长度', cdValue: '2924.6', kdTitle: '采面宽度', kdValue: '300.4', sycdTitle: '剩余可采长度', sycdValue: '900', hlTitle: '原始煤层瓦斯含量', hlValue: '3.40' },
-// ])
+  import { ref } from 'vue';
 
+  let props = defineProps({
+    option: {
+      type: Array as any,
+    },
+  });
+  // let listData = ref([
+  //   { id: 1, gzmTitle: '工作面', gzmValue: '12304工作面', mcTitle: '所属煤层', mcValue: '2号煤', cdTitle: '设计长度', cdValue: '2924.6', kdTitle: '采面宽度', kdValue: '300.4', sycdTitle: '剩余可采长度', sycdValue: '900', hlTitle: '原始煤层瓦斯含量', hlValue: '3.40' },
+  // ])
 </script>
 
 <style lang="less" scoped>
-@import '/@/design/theme.less';
+  @import '/@/design/theme.less';
 
-@{theme-deepblue} {
-  .gas-inject-list {
-    --image-model_list_bg: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/5-1.png');
+  @{theme-deepblue} {
+    .gas-inject-list {
+      --image-model_list_bg: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/5-1.png');
+    }
   }
-}
-
-.gas-inject-list {
-  --image-model_list_bg: url('@/assets/images/gasInjection/5-1.png');
-  position: relative;
-  width: 100%;
-  height: 100%;
-  padding: 13px 15px;
-  box-sizing: border-box;
-  overflow-y: auto;
 
-  .list-box-item {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
+  .gas-inject-list {
+    --image-model_list_bg: url('@/assets/images/gasInjection/5-1.png');
+    position: relative;
     width: 100%;
-    height: 50px;
-    padding: 0px 28px;
-    background: var(--image-model_list_bg) no-repeat;
-    background-size: 100% 100%;
-  }
+    height: 100%;
+    padding: 13px 15px;
+    box-sizing: border-box;
+    overflow-y: auto;
 
-  .box-item-label {
-    color: #c3f5ff;
-  }
+    .list-box-item {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      width: 100%;
+      height: 50px;
+      padding: 0px 28px;
+      background: var(--image-model_list_bg) no-repeat;
+      background-size: 100% 100%;
+    }
+
+    .box-item-label {
+      color: #c3f5ff;
+      font-size: 15px;
+      font-weight: 700;
+    }
+
+    .box-item-value {
+      font-size: 15px;
+      font-weight: 700;
+      // font-family: 'douyuFont';
 
-  .box-item-value {
-    font-size: 12px;
-    font-family: 'douyuFont';
-    color: #91faff;
+      color: #91faff;
+    }
   }
-}
 </style>

+ 65 - 61
src/views/vent/home/configurable/components/preset/gasZyList.vue

@@ -2,7 +2,7 @@
   <div class="gasZyList">
     <div class="list-box">
       <div class="list-box-item" v-for="(item, index) in option" :key="index">
-             <SvgIcon class="icon-style" size="20" :name="item.iconName" />
+        <SvgIcon class="icon-style" size="20" :name="item.iconName" />
         <div class="item-label">{{ item.label }}</div>
         <div class="item-value">{{ item.value }}</div>
       </div>
@@ -11,82 +11,86 @@
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue'
-import { SvgIcon } from '/@/components/Icon';
+  import { ref } from 'vue';
+  import { SvgIcon } from '/@/components/Icon';
 
-let props=defineProps({
-  option:{
-    type:Array as any
-  }
-})
+  let props = defineProps({
+    option: {
+      type: Array as any,
+    },
+  });
 </script>
 
 <style lang="less" scoped>
-@import '/@/design/theme.less';
+  @import '/@/design/theme.less';
 
-@{theme-deepblue} {
-  .gasZyList {
-    --image-zy_list_bg: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/12-1.png');
-    --image-zy_list_bg1: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/12-2.png');
+  @{theme-deepblue} {
+    .gasZyList {
+      --image-zy_list_bg: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/12-1.png');
+      --image-zy_list_bg1: url('@/assets/images/themify/deepblue/home-container/configurable/gasInjection/12-2.png');
+    }
   }
-}
 
-.gasZyList {
-  --image-zy_list_bg: url('@/assets/images/gasInjection/12-1.png');
-  --image-zy_list_bg1: url('@/assets/images/gasInjection/12-2.png');
-  width: 100%;
-  height: 100%;
-  padding: 25px 15px;
-  box-sizing: border-box;
-
-  .list-box {
+  .gasZyList {
+    --image-zy_list_bg: url('@/assets/images/gasInjection/12-1.png');
+    --image-zy_list_bg1: url('@/assets/images/gasInjection/12-2.png');
+    width: 100%;
     height: 100%;
-    display: flex;
-    flex-direction: column;
-    justify-content: space-between;
-    align-items: center;
-  }
+    padding: 25px 15px;
+    box-sizing: border-box;
 
-  .list-box-item {
-    position: relative;
-    width: 100%;
-    height: 43px;
-    display: flex;
-    align-items: center;
+    .list-box {
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+      align-items: center;
+    }
 
-    &:nth-child(1) {
-      .item-value {
-        color: #04cdff;
-      }
+    .list-box-item {
+      position: relative;
+      width: 100%;
+      height: 43px;
+      display: flex;
+      align-items: center;
 
-      background: var(--image-zy_list_bg) no-repeat;
-      background-size: 100% 100%;
-    }
+      &:nth-child(1) {
+        .item-value {
+          color: #04cdff;
+        }
 
-    &:nth-child(2) {
-      .item-value {
-        color: #2cffdd;
+        background: var(--image-zy_list_bg) no-repeat;
+        background-size: 100% 100%;
       }
 
-      background: var(--image-zy_list_bg1) no-repeat;
-      background-size: 100% 100%;
+      &:nth-child(2) {
+        .item-value {
+          color: #2cffdd;
+        }
+
+        background: var(--image-zy_list_bg1) no-repeat;
+        background-size: 100% 100%;
+      }
     }
-  }
 
-  .item-label {
-    position: absolute;
-    left: 56px;
-  }
+    .item-label {
+      position: absolute;
+      left: 56px;
+      font-size: 16px;
+      font-weight: 700;
+    }
 
-  .item-value {
-    font-size: 12px;
-    position: absolute;
-    right: 40px;
-    font-family: 'douyuFont';
-  }
-  .icon-style{
-    position: absolute;
-    left: 13px;
+    .item-value {
+      font-size: 12px;
+      position: absolute;
+      right: 40px;
+      // font-family: 'douyuFont';
+      font-size: 16px;
+      font-weight: 700;
+    }
+    .icon-style {
+      position: absolute;
+      left: 13px;
+    }
   }
-}
 </style>

+ 7 - 1
src/views/vent/home/configurable/components/three3D.vue

@@ -4,15 +4,18 @@
   <div id="three3D"> </div>
 </template>
 <script lang="ts" setup>
-  import { ref, watch, onMounted, onUnmounted } from 'vue';
+  import { ref, watch, onMounted, onUnmounted, defineEmits, nextTick } from 'vue';
   import UseThree from '/@/utils/threejs/useThree';
   import { animateCamera } from '/@/utils/threejs/util';
   import * as THREE from 'three';
+  import { e } from 'unocss';
 
   const props = defineProps<{
     modalName: string;
   }>();
 
+  const emit = defineEmits(['success']);
+
   const spinning = ref(true);
 
   let modal, modalGroup;
@@ -54,6 +57,7 @@
           await animateCamera(oldCameraPosition, { x: 0, y: 0, z: 0 }, config.newP, config.newT, modal);
           modal.scene?.add(modalGroup);
           resolve(null);
+          emit('success', modal);
         }, 1000);
       }
     });
@@ -75,11 +79,13 @@
         customModal();
         modal.animate();
         addMouseEvent();
+        debugger;
         // this.group.name = this.modelName;
         // setModalCenter(this.group);
         // this.group.scale.set(2.5, 2.5, 2.5);
         // this.setThreePlane();
         // this.setControls();
+
         resolve(null);
         spinning.value = false;
       });

+ 39 - 52
src/views/vent/home/configurable/configurable.data.ts

@@ -3,7 +3,6 @@ import { Config } from '../../deviceManager/configurationTable/types';
 // import { BDdustMock, BDfireMock } from './configurable.data.bd';
 import { getThemifyImagesURL } from '/@/utils/ui';
 
-
 //注气驱替-主界面
 export const testConfigGasInject: Config[] = [
   {
@@ -194,17 +193,17 @@ export const testConfigGasInject: Config[] = [
               },
             },
             grid: {
-              top: "18%",
-              left: "6%",
-              right: "6%",
-              bottom: "3%",
+              top: '18%',
+              left: '6%',
+              right: '6%',
+              bottom: '3%',
               containLabel: true,
             },
             botColor: ['rgba(8, 213, 252,1)'],
-            cenColor: ["rgba(7, 67, 96)", "rgba(9, 214, 252)"],
-            topColor: ["rgba(9, 170, 208,1)"]
-          }
-        }
+            cenColor: ['rgba(7, 67, 96)', 'rgba(9, 214, 252)'],
+            topColor: ['rgba(9, 170, 208,1)'],
+          },
+        },
       ],
       // mock: BDdustMock,
     },
@@ -256,14 +255,14 @@ export const testConfigGasInject: Config[] = [
         {
           readFrom: '',
           option: [
-            { label: '工作面', value: '12304工作面',unit:'' },
-            { label: '所属煤层', value: '2号煤',unit:'' },
-            { label: '设计长度', value: '2924.6' ,unit:'m'},
-            { label: '采面宽度', value: '300.4' ,unit:'m'},
-            { label: '剩余可采长度', value: '900' ,unit:'m'},
-            { label: '原始煤层瓦斯含量', value: '3.40',unit:'%'},
-          ]
-        }
+            { label: '工作面', value: '12304工作面', unit: '' },
+            { label: '所属煤层', value: '2号煤', unit: '' },
+            { label: '设计长度', value: '2924.6', unit: 'm' },
+            { label: '采面宽度', value: '300.4', unit: 'm' },
+            { label: '剩余可采长度', value: '900', unit: 'm' },
+            { label: '原始煤层瓦斯含量', value: '3.40', unit: '%' },
+          ],
+        },
       ],
     },
     showStyle: {
@@ -316,7 +315,7 @@ export const testConfigGasInject: Config[] = [
           option: [
             { label: '装备运行', value: '2025-07-30 21:29:00', iconName: 'famen-open' },
             { label: '注气阀门开启', value: '2025-07-30 21:29:00', iconName: 'device-run' },
-          ]
+          ],
         },
       ],
     },
@@ -372,19 +371,9 @@ export const testConfigGasInject: Config[] = [
         {
           readFrom: '',
           option: {
-            colorOn: [
-              "rgba(70, 255, 156, 1)",
-              "rgba(0, 243, 255, 1)",
-              "rgba(255, 157, 28, 1)",
-              "rgba(44, 182, 255, 1)",
-            ],
-            colorOut: [
-              "rgba(70, 255, 156, .5)",
-              "rgba(0, 243, 255, .5)",
-              "rgba(255, 157, 28, .5)",
-              "rgba(44, 182, 255, .5)",
-            ],
-          }
+            colorOn: ['rgba(70, 255, 156, 1)', 'rgba(0, 243, 255, 1)', 'rgba(255, 157, 28, 1)', 'rgba(44, 182, 255, 1)'],
+            colorOut: ['rgba(70, 255, 156, .5)', 'rgba(0, 243, 255, .5)', 'rgba(255, 157, 28, .5)', 'rgba(44, 182, 255, .5)'],
+          },
         },
         {
           readFrom: '',
@@ -393,7 +382,7 @@ export const testConfigGasInject: Config[] = [
             { label: '环境监测异常', value: '30' },
             { label: '信号传输异常', value: '10' },
             { label: '驱替数据异常', value: '20' },
-          ]
+          ],
         },
       ],
     },
@@ -461,12 +450,12 @@ export const testConfigGasInject: Config[] = [
               left: '5%',
               right: '5%',
               bottom: '10%',
-              containLabel: true
+              containLabel: true,
             },
-            colorLine: "rgba(255, 157, 29,1)",
-            colorArea: ["rgba(255, 157, 29,.4)", "rgba(255, 157, 29, .1)"]
-          }
-        }
+            colorLine: 'rgba(255, 157, 29,1)',
+            colorArea: ['rgba(255, 157, 29,.4)', 'rgba(255, 157, 29, .1)'],
+          },
+        },
       ],
     },
     showStyle: {
@@ -475,7 +464,7 @@ export const testConfigGasInject: Config[] = [
       position: 'bottom:22px;left:460px;',
     },
   },
-]
+];
 //注气驱替-注气
 export const testConfigGasInjectZq: Config[] = [
   {
@@ -525,8 +514,8 @@ export const testConfigGasInjectZq: Config[] = [
             { label: '出口压力设置', isShowSwitch: false, value: '1', iconName: 'yalishezhi' },
             { label: '进气端阀门', isShowSwitch: true, value: '1', iconName: 'fameng' },
             { label: '出气端阀门', isShowSwitch: true, value: '1', iconName: 'fameng' },
-          ]
-        }
+          ],
+        },
       ],
       to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
     },
@@ -655,10 +644,10 @@ export const testConfigGasInjectZq: Config[] = [
           option: [
             { label: '氧气浓度', value: '60', iconName: 'o2-gas', unit: 'Nm³' },
             { label: '甲烷浓度', value: '60', iconName: 'ch4-gas', unit: 'm³/min' },
-            { label: '温度', value: '60', iconName: 'temp-gas', unit: '' },
-            { label: '风速', value: '60', iconName: 'wind-gas', unit: 'm/s' },
-          ]
-        }
+            { label: '温度', value: '60', iconName: 'temp-gas', unit: '' },
+            { label: '风速', value: '60', iconName: 'wind-gas', unit: '' },
+          ],
+        },
       ],
       to: '/micro-vent-3dModal/dashboard/analysis?type=tunMonitor&deviceType=fanmain',
     },
@@ -782,7 +771,7 @@ export const testConfigGasInjectZq: Config[] = [
       position: 'top:580px;right:10px;',
     },
   },
-]
+];
 //注气驱替-抽采
 export const testConfigGasInjectCc: Config[] = [
   {
@@ -834,8 +823,8 @@ export const testConfigGasInjectCc: Config[] = [
             { label: '甲烷气体标况总量', value: '900' },
             { label: '甲烷气体标况瞬量', value: '3.40' },
             { label: '累计流量', value: '100' },
-          ]
-        }
+          ],
+        },
       ],
     },
     showStyle: {
@@ -886,10 +875,8 @@ export const testConfigGasInjectCc: Config[] = [
       preset: [
         {
           readFrom: '',
-          option: [
-
-          ]
-        }
+          option: [],
+        },
       ],
     },
     showStyle: {
@@ -1312,7 +1299,7 @@ export const testConfigGasInjectSy: Config[] = [
       position: 'top:600px;right:10px;',
     },
   },
-]
+];
 
 export const testConfigVentSsl: Config[] = [
   {

+ 240 - 203
src/views/vent/home/configurable/gasInjection.vue

@@ -9,19 +9,34 @@
       </div>
       <template v-if="menuName == 'zjm'">
         <div class="main-status"> 运行中 </div>
-        <ModuleGasInject v-for="cfg in configs" :key="cfg.deviceType" :show-style="cfg.showStyle"
-          :module-data="cfg.moduleData" :module-name="cfg.moduleName" :device-type="cfg.deviceType" :data="data"
-          :visible="true" :visible-detail="cfg.showDetail" />
+        <ModuleGasInject
+          v-for="cfg in configs"
+          :key="cfg.deviceType"
+          :show-style="cfg.showStyle"
+          :module-data="cfg.moduleData"
+          :module-name="cfg.moduleName"
+          :device-type="cfg.deviceType"
+          :data="data"
+          :visible="true"
+          :visible-detail="cfg.showDetail"
+        />
       </template>
       <template v-else>
-        <ModuleGasInject v-for="cfg in configs" :key="cfg.deviceType" :show-style="cfg.showStyle"
-          :module-data="cfg.moduleData" :module-name="cfg.moduleName" :device-type="cfg.deviceType" :data="data"
-          :visible="true" :visible-detail="cfg.showDetail" />
+        <ModuleGasInject
+          v-for="cfg in configs"
+          :key="cfg.deviceType"
+          :show-style="cfg.showStyle"
+          :module-data="cfg.moduleData"
+          :module-name="cfg.moduleName"
+          :device-type="cfg.deviceType"
+          :data="data"
+          :visible="true"
+          :visible-detail="cfg.showDetail"
+        />
       </template>
-      <div
-        :class="{ 'vent-modal': menuName == 'zjm', 'vent-modal-1': menuName == 'syq' || menuName == 'zqxt' || menuName == 'ccxt' }">
+      <div :class="{ 'vent-modal': menuName == 'zjm', 'vent-modal-1': menuName == 'syq' || menuName == 'zqxt' || menuName == 'ccxt' }">
         <div class="modal-box">
-          <Three3D ref="three3D" :modalName="'zhuqi'" class="modal-3d" />
+          <Three3D ref="three3D" :modalName="'zhuqi'" class="modal-3d" @success="initModalAnimate" />
         </div>
       </div>
       <!-- <div v-if="menuName === 'syq'" class="syq-modal">
@@ -30,240 +45,262 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { onMounted, onUnmounted, ref, computed, nextTick } from 'vue';
-import { useInitConfigs, useInitPage } from './hooks/useInit';
-import ModuleGasInject from './components/ModuleGasInject.vue';
-import navMenu from './components/gasInject/navMenu.vue';
-import Three3D from './components/three3D.vue';
-import { getHomeData } from './configurable.api';
-import { testConfigGasInject, testConfigGasInjectZq, testConfigGasInjectCc, testConfigGasInjectSy } from './configurable.data';
-import { animateCamera } from '/@/utils/threejs/util';
+  import { onMounted, onUnmounted, ref, computed, nextTick } from 'vue';
+  import { useInitConfigs, useInitPage } from './hooks/useInit';
+  import ModuleGasInject from './components/ModuleGasInject.vue';
+  import navMenu from './components/gasInject/navMenu.vue';
+  import Three3D from './components/three3D.vue';
+  import { getHomeData } from './configurable.api';
+  // import { useRoute } from 'vue-router';
+  import { testConfigGasInject, testConfigGasInjectZq, testConfigGasInjectCc, testConfigGasInjectSy } from './configurable.data';
+  import { animateCamera } from '/@/utils/threejs/util';
+  import { modalAnimate } from './threejs/gasInjection';
+  // import * as dat from 'dat.gui';
+  // const gui = new dat.GUI();
+  // gui.domElement.style = 'position:absolute;top:100px;left:10px;z-index:99999999999999';
 
-const { configs, fetchConfigs } = useInitConfigs();
-const { mainTitle, data, updateData } = useInitPage('注气驱替智能管控系统');
-const three3D = ref(null);
-let interval: number | undefined;
-let menuName = ref('zjm');
+  const { configs, fetchConfigs } = useInitConfigs();
+  const { mainTitle, data, updateData } = useInitPage('注气驱替智能管控系统');
+  const three3D = ref(null);
+  let interval: number | undefined;
+  let menuName = ref('zjm');
 
-//选项切换
-function toggleMenu(param) {
-  menuName.value = param;
-  switch (menuName.value) {
-    case 'zjm':
-      configs.value = testConfigGasInject;
-      break;
-    case 'syq':
-      configs.value = testConfigGasInjectSy;
-      break;
-    case 'zqxt':
-      configs.value = testConfigGasInjectZq;
-      break;
-    case 'ccxt':
-      configs.value = testConfigGasInjectCc;
-      break;
-  }
+  //选项切换
+  function toggleMenu(param) {
+    menuName.value = param;
+    switch (menuName.value) {
+      case 'zjm':
+        configs.value = testConfigGasInject;
+        break;
+      case 'syq':
+        configs.value = testConfigGasInjectSy;
+        break;
+      case 'zqxt':
+        configs.value = testConfigGasInjectZq;
+        break;
+      case 'ccxt':
+        configs.value = testConfigGasInjectCc;
+        break;
+    }
 
-  // 刷新/
-  nextTick(async () => {
-    three3D.value?.resizeRenderer();
-    const modal = three3D.value.getModal();
-    if (modal) {
-      const oldCamera = modal.camera;
-      const oldCameraPosition = { x: oldCamera.position.x, y: oldCamera.position.y, z: oldCamera.position.z };
-      if (param == 'zqxt') {
-        const newP = { x: -26.587483577770445, y: -1.885170491810538, z: 39.104309663143255 };
-        const newT = { x: 10.919881491980828, y: -4.7228274957026946, z: 38.87645926712004 };
-        await animateCamera(oldCameraPosition, { x: 0, y: 0, z: 0 }, newP, newT, modal);
-      } else {
-        const newP = { x: -50.67171826505719,y: 51.72951331422375,z: -0.2490818466518837 };
-        const newT = { x: 7.203626999999999,y: -23.224234999999993,z: -0.12054599999999999 };
-        await animateCamera(oldCameraPosition, { x: 0, y: 0, z: 0 }, newP, newT, modal);
+    // 刷新/
+    nextTick(async () => {
+      three3D.value?.resizeRenderer();
+      const modal = three3D.value.getModal();
+      if (modal) {
+        const oldCamera = modal.camera;
+        const oldCameraPosition = { x: oldCamera.position.x, y: oldCamera.position.y, z: oldCamera.position.z };
+        if (param == 'zqxt') {
+          const newP = { x: -26.587483577770445, y: -1.885170491810538, z: 39.104309663143255 };
+          const newT = { x: 10.919881491980828, y: -4.7228274957026946, z: 38.87645926712004 };
+          await animateCamera(oldCameraPosition, { x: 0, y: 0, z: 0 }, newP, newT, modal);
+        } else if (param == 'zjm') {
+          const newP = { x: -45.69228602978097, y: 49.59721939545517, z: 2.6454258202266985 };
+          const newT = { x: 9.289291846942458, y: -21.608842010051386, z: 2.7675348357947906 };
+          await animateCamera(oldCameraPosition, { x: 0, y: 0, z: 0 }, newP, newT, modal);
+        } else {
+          const newP = { x: -43.18945276107877, y: 40.44347648044, z: 0.059975838354020664 };
+          const newT = { x: 6.431421158296241, y: -23.819993211059913, z: 0.17017939135402457 };
+          await animateCamera(oldCameraPosition, { x: 0, y: 0, z: 0 }, newP, newT, modal);
+        }
       }
-    }
-  });
-}
-onMounted(() => {
-  // fetchConfigs('vent_new').then(() => {
-  configs.value = testConfigGasInject;
-  // updateEnhancedConfigs(configs.value);
+    });
+  }
+
+  function initModalAnimate(modal) {
+    console.log('初始化模型', modal);
+    modal.isRender = true;
+
+    modalAnimate(modal);
+  }
+
+  onMounted(() => {
+    // fetchConfigs('vent_new').then(() => {
+    configs.value = testConfigGasInject;
+    // updateEnhancedConfigs(configs.value);
 
-  getHomeData({}).then(updateData);
-  // });
-  setInterval(() => {
     getHomeData({}).then(updateData);
-  }, 60000);
-});
+    // });
+    setInterval(() => {
+      getHomeData({}).then(updateData);
+    }, 60000);
+  });
 
-onUnmounted(() => {
-  clearInterval(interval);
-});
+  onUnmounted(() => {
+    clearInterval(interval);
+  });
 </script>
 
 <style lang="less" scoped>
-@import '/@/design/theme.less';
+  @import '/@/design/theme.less';
+
+  @{theme-deepblue} {
+    .company-home {
+      --image-modal-top: url('@/assets/images/gasInjection/1-1.png');
+      --image-modal-status: url('@/assets/images/gasInjection/3-1.png');
+      --image-modal-center: url('@/assets/images/gasInjection/1-2.png');
+    }
+  }
 
-@{theme-deepblue} {
   .company-home {
     --image-modal-top: url('@/assets/images/gasInjection/1-1.png');
     --image-modal-status: url('@/assets/images/gasInjection/3-1.png');
     --image-modal-center: url('@/assets/images/gasInjection/1-2.png');
-  }
-}
-
-.company-home {
-  --image-modal-top: url('@/assets/images/gasInjection/1-1.png');
-  --image-modal-status: url('@/assets/images/gasInjection/3-1.png');
-  --image-modal-center: url('@/assets/images/gasInjection/1-2.png');
-  width: 100%;
-  height: 100%;
-  color: @white;
-  position: relative;
-  background: url('@/assets/images/vent/homeNew/bg.png') no-repeat center;
-
-  .top-bg {
     width: 100%;
-    height: 66px;
-    background: var(--image-modal-top) no-repeat center;
-    background-size: 100% 100%;
-    position: absolute;
-    z-index: 1;
+    height: 100%;
+    color: @white;
+    position: relative;
+    background: url('@/assets/images/vent/homeNew/bg.png') no-repeat center;
 
-    .main-title {
+    .top-bg {
+      width: 100%;
       height: 66px;
-      font-family: 'douyuFont';
-      font-size: 20px;
-      letter-spacing: 2px;
+      background: var(--image-modal-top) no-repeat center;
+      background-size: 100% 100%;
+      position: absolute;
+      z-index: 1;
+
+      .main-title {
+        height: 66px;
+        font-family: 'douyuFont';
+        font-size: 20px;
+        letter-spacing: 2px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+      }
+
+      .top-nav {
+        position: absolute;
+        top: 0;
+        width: 880px;
+        height: 100%;
+        display: flex;
+        justify-content: flex-start;
+      }
+    }
+
+    .main-container {
+      position: absolute;
+      top: 66px;
+      width: 100%;
+      height: calc(100% - 66px);
+      padding: 0px 10px;
+      box-sizing: border-box;
+    }
+
+    .main-status {
       display: flex;
       justify-content: center;
       align-items: center;
+      width: 440px;
+      height: 80px;
+      font-size: 18px;
+      font-family: 'douyuFont';
+      margin: 10px 0px;
+      background: var(--image-modal-status);
+      background-size: 100% 100%;
     }
 
-    .top-nav {
+    .module-dropdown {
+      padding: 10px;
+      background-image: @vent-configurable-dropdown;
+      border-bottom: 2px solid @vent-configurable-home-light-border;
+      color: @vent-font-color;
       position: absolute;
-      top: 0;
-      width: 880px;
-      height: 100%;
-      display: flex;
-      justify-content: flex-start;
+      top: 70px;
+      right: 460px;
+    }
+
+    .modal-box {
+      width: calc(100% - 20px);
+      height: calc(100% - 20px);
+      position: relative;
+      pointer-events: auto;
+      margin: 10px;
+    }
+
+    .module-dropdown-original {
+      padding: 10px;
+      background-image: @vent-configurable-dropdown;
+      border-bottom: 2px solid @vent-configurable-home-light-border;
+      color: @vent-font-color;
+      position: absolute;
+      top: 70px;
+      right: 460px;
+    }
+
+    .module-trigger-button {
+      color: @vent-font-color;
+      background-image: @vent-configurable-dropdown;
+      border: none;
+      border-bottom: 2px solid @vent-configurable-home-light-border;
+    }
+
+    .nav-cards {
+      position: absolute;
+      left: 50%;
+      top: 0px;
+      transform: translate(-50%, 0);
+      width: 691px;
+      height: 58px;
+      background: var(--image-modal-center) no-repeat;
+      background-size: 100% 100%;
     }
   }
 
-  .main-container {
-    position: absolute;
-    top: 66px;
-    width: 100%;
-    height: calc(100% - 66px);
-    padding: 0px 10px;
-    box-sizing: border-box;
+  :deep(.loading-box) {
+    position: unset;
   }
 
-  .main-status {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    width: 440px;
-    height: 80px;
-    font-size: 18px;
-    font-family: 'douyuFont';
-    margin: 10px 0px;
-    background: var(--image-modal-status);
-    background-size: 100% 100%;
+  .modal-box {
+    width: 100%;
+    height: 100%;
+    position: relative;
+    pointer-events: auto;
   }
 
-  .module-dropdown {
-    padding: 10px;
-    background-image: @vent-configurable-dropdown;
-    border-bottom: 2px solid @vent-configurable-home-light-border;
-    color: @vent-font-color;
+  // 试验区模型区域样式
+  .syq-modal {
     position: absolute;
-    top: 70px;
-    right: 460px;
+    top: 135px;
+    right: 20px;
+    width: calc(100% - 510px);
+    height: 515px;
+    background: url('@/assets/images/gasInjection/syq/modal-bg.png') no-repeat;
+    background-size: 100% 100%;
   }
 
-  .module-dropdown-original {
-    padding: 10px;
-    background-image: @vent-configurable-dropdown;
-    border-bottom: 2px solid @vent-configurable-home-light-border;
-    color: @vent-font-color;
+  .vent-modal {
     position: absolute;
     top: 70px;
-    right: 460px;
-  }
-
-  .module-trigger-button {
-    color: @vent-font-color;
-    background-image: @vent-configurable-dropdown;
-    border: none;
-    border-bottom: 2px solid @vent-configurable-home-light-border;
+    left: 50%;
+    transform: translate(-50%, 0px);
+    width: calc(100% - 920px);
+    height: 500px;
+    background: url(/src/assets/images/gasInjection/syq/modal-bg.png) no-repeat;
+    background-size: 100% 100%;
+    pointer-events: auto;
+    // padding: 15px;
+    box-sizing: border-box;
+    overflow: hidden;
   }
 
-  .nav-cards {
+  .vent-modal-1 {
     position: absolute;
-    left: 50%;
-    top: 0px;
-    transform: translate(-50%, 0);
-    width: 691px;
-    height: 58px;
-    background: var(--image-modal-center) no-repeat;
+    top: 70px;
+    left: 460px;
+    width: calc(100% - 470px);
+    height: 500px;
+    background: url(/src/assets/images/gasInjection/syq/modal-bg.png) no-repeat;
     background-size: 100% 100%;
+    pointer-events: auto;
+    padding: 10px 15px;
+    box-sizing: border-box;
+    overflow: hidden;
   }
-}
-
-:deep(.loading-box) {
-  position: unset;
-}
-
-.modal-box {
-  width: 100%;
-  height: 100%;
-  position: relative;
-  pointer-events: auto;
-  padding: 20px;
-}
-
-// 试验区模型区域样式
-.syq-modal {
-  position: absolute;
-  top: 135px;
-  right: 20px;
-  width: calc(100% - 510px);
-  height: 515px;
-  background: url('@/assets/images/gasInjection/syq/modal-bg.png') no-repeat;
-  background-size: 100% 100%;
-}
 
-.vent-modal {
-  position: absolute;
-  top: 70px;
-  left: 50%;
-  transform: translate(-50%, 0px);
-  width: calc(100% - 920px);
-  height: 500px;
-  background: url(/src/assets/images/gasInjection/syq/modal-bg.png) no-repeat;
-  background-size: 100% 100%;
-  pointer-events: auto;
-  padding: 15px;
-  box-sizing: border-box;
-  overflow: hidden;
-}
-
-.vent-modal-1 {
-  position: absolute;
-  top: 70px;
-  left: 460px;
-  width: calc(100% - 470px);
-  height: 500px;
-  background: url(/src/assets/images/gasInjection/syq/modal-bg.png) no-repeat;
-  background-size: 100% 100%;
-  pointer-events: auto;
-    padding:10px 15px;
-  box-sizing: border-box;
-  overflow: hidden;
-}
-
-.modal-3d {
-  padding: 10px;
-  width: calc(100% - 20px) !important;
-  height: calc(100% - 20px) !important;
-}
+  .modal-3d {
+    width: 100%;
+  }
 </style>

+ 174 - 175
src/views/vent/monitorManager/comment/safetyWarnAnalysis.vue

@@ -1,221 +1,220 @@
 <template>
-    <div class="warnAnalysis">
-        <div class="warn-search">
-            <a-row>
-                <a-col :span="4">
-                    <span class="search-label">查询设备:</span>
-                    <a-select v-model:value="dataTypeName" style="width: 220px" placeholder="请选择查询设备">
-                        <a-select-option v-for="item in deviceOptions" :key="item" :value="item.value">{{ item.label
-                        }}</a-select-option>
-                    </a-select>
-                </a-col>
-                <a-col :span="4">
-                    <span class="search-label">开始时间:</span>
-                    <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" placeholder="开始时间"
-                        v-model:value="startTime" style="width: 220px" />
-                </a-col>
-                <a-col :span="4">
-                    <span class="search-label">结束时间:</span>
-                    <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" placeholder="结束时间"
-                        v-model:value="endTime" style="width: 220px" />
-                </a-col>
-                <a-col :span="4">
-                    <a-button type="primary" preIcon="ant-design:search-outlined" style="margin-left:15px"
-                        @click="getSearch">查询</a-button>
-                </a-col>
-            </a-row>
-        </div>
-        <div class="warn-tag" v-if="typeList.length != 0">
-            <div :class="activeIndex == index ? 'tag-item-Y' : 'tag-item-N'" v-for="(item, index) in typeList"
-                :key="index" @click="typeClick(index)">
-                <div class="item-value">{{ item.label }}</div>
-                <div class="item-label">{{ item.value }}</div>
-            </div>
-        </div>
-        <div class="warn-content">
-            <a-spin :spinning="loading">
-                <a-table :columns="analysisColumns" :data-source="tableData" size="small" :scroll="{ y: 500 }"
-                class="tableW" :pagination="pagination" @change="changePaper">
-                <template #bodyCell="{ column, text }"></template>
-            </a-table>
-            </a-spin >
-        </div>
+  <div class="warnAnalysis">
+    <div class="warn-search">
+      <a-row>
+        <a-col :span="4">
+          <span class="search-label">查询设备:</span>
+          <a-select v-model:value="dataTypeName" style="width: 220px" placeholder="请选择查询设备">
+            <a-select-option v-for="item in deviceOptions" :key="item" :value="item.value">{{ item.label }}</a-select-option>
+          </a-select>
+        </a-col>
+        <a-col :span="4">
+          <span class="search-label">开始时间:</span>
+          <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" placeholder="开始时间" v-model:value="startTime" style="width: 220px" />
+        </a-col>
+        <a-col :span="4">
+          <span class="search-label">结束时间:</span>
+          <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" placeholder="结束时间" v-model:value="endTime" style="width: 220px" />
+        </a-col>
+        <a-col :span="4">
+          <a-button type="primary" preIcon="ant-design:search-outlined" style="margin-left: 15px" @click="getSearch">查询</a-button>
+        </a-col>
+      </a-row>
     </div>
+    <div class="warn-tag" v-if="typeList.length != 0">
+      <div :class="activeIndex == index ? 'tag-item-Y' : 'tag-item-N'" v-for="(item, index) in typeList" :key="index" @click="typeClick(index)">
+        <div class="item-value">{{ item.label }}</div>
+        <div class="item-label">{{ item.value }}</div>
+      </div>
+    </div>
+    <div class="warn-content">
+      <a-spin :spinning="loading">
+        <a-table
+          :columns="analysisColumns"
+          :data-source="tableData"
+          size="small"
+          :scroll="{ y: 500 }"
+          class="tableW"
+          :pagination="pagination"
+          @change="changePaper"
+        >
+          <template #bodyCell="{ column, text }"></template>
+        </a-table>
+      </a-spin>
+    </div>
+  </div>
 </template>
 
 <script setup lang="ts">
-import { ref, reactive, onMounted } from 'vue'
-import { analysisColumns } from './comment.data'
-import { defHttp } from '/@/utils/http/axios';
-import dayjs from 'dayjs';
-import { message } from 'ant-design-vue';
-
+  import { ref, reactive, onMounted } from 'vue';
+  import { analysisColumns } from './comment.data';
+  import { defHttp } from '/@/utils/http/axios';
+  import dayjs from 'dayjs';
+  import { message } from 'ant-design-vue';
 
-let props = defineProps({
+  let props = defineProps({
     deviceType: {
-        type: String,
-        required: true,
+      type: String,
+      required: true,
     },
-})
-const getAlarmHistoryDataCount = (params) => defHttp.post({ url: '/ventanaly-device/monitor/history/getAlarmHistoryDataCount', params })
-const getDeviceListApi = (params) => defHttp.post({ url: '/monitor/codeDict', params });
-let loading=ref(false)
-let dataTypeName = ref('')
-let startTime = ref(dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'))
-let endTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'))
-//设备下拉选项列表
-let deviceOptions = ref<any[]>([])
-let typeList = ref<any[]>([])
-let activeIndex = ref(0)
-let pagination = reactive({
+  });
+  const getAlarmHistoryDataCount = (params) => defHttp.post({ url: '/ventanaly-device/monitor/history/getAlarmHistoryDataCount', params });
+  const getDeviceListApi = (params) => defHttp.post({ url: '/monitor/codeDict', params });
+  let loading = ref(false);
+  let dataTypeName = ref('');
+  let startTime = ref(dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'));
+  let endTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'));
+  //设备下拉选项列表
+  let deviceOptions = ref<any[]>([]);
+  let typeList = ref<any[]>([]);
+  let activeIndex = ref(0);
+  let pagination = reactive({
     current: 1, // 当前页码
     pageSize: 10, // 每页显示条数
     total: 0, // 总条目数,后端返回
     // showTotal: (total, range) => `${range[0]}-${range[1]} 条,总共 ${total} 条`, // 分页右下角显示信息
     showSizeChanger: true, // 是否可改变每页显示条数
     pageSizeOptions: ['10', '20', '50'], // 可选的每页显示条数
-});
-let tableData = ref<any[]>([])
+  });
+  let tableData = ref<any[]>([]);
 
-//查询
-async function getSearch() {
+  //查询
+  async function getSearch() {
     if (dataTypeName.value) {
-        loading.value=true
-        let res = await getAlarmHistoryDataCount({
-            "pageNo": pagination.current,
-            "pageSize": pagination.pageSize,
-            "startTime": startTime.value,
-            "endTime": endTime.value,
-            "dataTypeName": dataTypeName.value
-        })
-        if(res){
-            loading.value=false
-            let data = res.result
-        typeList.value = Object.keys(data.exceptionType).map(el => {
-            return {
-                label: el,
-                value: data.exceptionType[el].count || 0
-            }
-        })
-        tableData.value = data.exceptionType[typeList.value[activeIndex.value].label]['records']
-        pagination.total = typeList.value[activeIndex.value].value
-        }
-       
+      loading.value = true;
+      let res = await getAlarmHistoryDataCount({
+        pageNo: pagination.current,
+        pageSize: pagination.pageSize,
+        startTime: startTime.value,
+        endTime: endTime.value,
+        dataTypeName: dataTypeName.value,
+      });
+      if (res) {
+        loading.value = false;
+        let data = res.result;
+        typeList.value = Object.keys(data.exceptionType).map((el) => {
+          return {
+            label: el,
+            value: data.exceptionType[el].count || 0,
+          };
+        });
+        tableData.value = data.exceptionType[typeList.value[activeIndex.value].label]['records'];
+        pagination.total = typeList.value[activeIndex.value].value;
+      }
     } else {
-        message.warning('请选择设备类型!')
+      message.warning('请选择设备类型!');
     }
-}
-//选项切换
-function typeClick(index) {
-    activeIndex.value = index
-    pagination.current = 1
-    getSearch()
-}
-//分页切换
-function changePaper(val) {
-    pagination.current = val.current
-    pagination.pageSize = val.pageSize
-    getSearch()
-}
-async function getDeviceList() {
-    const res = await getDeviceListApi({ devicetype: props.deviceType, code:'dataTypeName' });
-    console.log(res,'000---')
-    if(res && res.length!=0){
-              deviceOptions.value = res.map((item) => {
-            return {
-                label: item['name'],
-                value: item['code'],
-            };
-
-        });
+  }
+  //选项切换
+  function typeClick(index) {
+    activeIndex.value = index;
+    pagination.current = 1;
+    getSearch();
+  }
+  //分页切换
+  function changePaper(val) {
+    pagination.current = val.current;
+    pagination.pageSize = val.pageSize;
+    getSearch();
+  }
+  async function getDeviceList() {
+    const res = await getDeviceListApi({ devicetype: props.deviceType, code: 'dataTypeName' });
+    console.log(res, '000---');
+    if (res && res.length != 0) {
+      deviceOptions.value = res.map((item) => {
+        return {
+          label: item['name'],
+          value: item['code'],
+        };
+      });
     }
-}
+  }
 
-onMounted(() => {
-    getDeviceList()
+  onMounted(() => {
+    getDeviceList();
     // getSearch()
-})
+  });
 </script>
 
 <style lang="less" scoped>
-.warnAnalysis {
+  .warnAnalysis {
     position: relative;
     width: 100%;
     height: 100%;
 
     .warn-search {
-        display: flex;
-        align-items: center;
-        height: 30px;
-        margin: 15px;
-
-        .search-label {
-            width: 75px;
-            font-size: 14px;
-            color: #fff;
-        }
+      display: flex;
+      align-items: center;
+      height: 30px;
+      margin: 15px;
+
+      .search-label {
+        width: 75px;
+        font-size: 14px;
+        color: #fff;
+      }
     }
 
     .warn-tag {
-        height: 130px;
-        margin: 15px;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-
-        .tag-item-N {
-            position: relative;
-            width: 215px;
-            height: 128px;
-            margin:0px 120px;
-            background: url('../../../../assets/images/choice-N.png') no-repeat center;
-            background-size: 100%;
-        }
-
-        .tag-item-Y {
-            position: relative;
-            width: 215px;
-            height: 128px;
-            margin:0px 120px;
-            background: url('../../../../assets/images/choice-Y.png') no-repeat center;
-            background-size: 100%;
-        }
-
-        .item-label {
-            position: absolute;
-            left: 50%;
-            transform: translate(-50%, 0);
-            top: 80px;
-            color: #3df6ff;
-            // font-size: 18px;
-            font-family: 'douyuFont';
-        }
-
-        .item-value {
-            position: absolute;
-            left: 50%;
-            transform: translate(-50%, 0%);
-            top: 25px;
-            font-size: 18px;
-            color: #fff;
-        }
+      height: 130px;
+      margin: 15px;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+
+      .tag-item-N {
+        position: relative;
+        width: 215px;
+        height: 128px;
+        margin: 0px 120px;
+        background: url('../../../../assets/images/choice-N.png') no-repeat center;
+        background-size: 100%;
+      }
+
+      .tag-item-Y {
+        position: relative;
+        width: 215px;
+        height: 128px;
+        margin: 0px 120px;
+        background: url('../../../../assets/images/choice-Y.png') no-repeat center;
+        background-size: 100%;
+      }
+
+      .item-label {
+        position: absolute;
+        left: 50%;
+        transform: translate(-50%, 0);
+        top: 80px;
+        color: #3df6ff;
+        // font-size: 18px;
+        font-family: 'douyuFont';
+      }
+
+      .item-value {
+        position: absolute;
+        left: 50%;
+        transform: translate(-50%, 0%);
+        top: 25px;
+        font-size: 18px;
+        color: #fff;
+      }
     }
 
     .warn-content {
-        margin: 15px;
+      margin: 15px;
     }
 
     .zxm-row {
-        width: 100%;
+      width: 100%;
     }
-}
+  }
 
-::v-deep .zxm-tag {
+  ::v-deep .zxm-tag {
     font-size: 14px;
     padding: 0px 20px;
     line-height: 28px;
     background: linear-gradient(#2cd1ff55, #1eb0ff55);
     border-color: #74e9fe;
     color: #fff;
-}
-</style>
+  }
+</style>

+ 178 - 179
src/views/vent/monitorManager/comment/warnAnalysis.vue

@@ -1,232 +1,231 @@
 <template>
-    <div class="warnAnalysis">
-        <div class="warn-search">
-            <a-row>
-                <a-col :span="4">
-                    <span class="search-label">查询设备:</span>
-                    <a-select v-model:value="dataTypeName" style="width: 220px" placeholder="请选择查询设备">
-                        <a-select-option v-for="item in deviceOptions" :key="item" :value="item.value">{{ item.label
-                        }}</a-select-option>
-                    </a-select>
-                </a-col>
-                <a-col :span="4">
-                    <span class="search-label">开始时间:</span>
-                    <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" placeholder="开始时间"
-                        v-model:value="startTime" style="width: 220px" />
-                </a-col>
-                <a-col :span="4">
-                    <span class="search-label">结束时间:</span>
-                    <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" placeholder="结束时间"
-                        v-model:value="endTime" style="width: 220px" />
-                </a-col>
-                <a-col :span="4">
-                    <a-button type="primary" preIcon="ant-design:search-outlined" style="margin-left:15px"
-                        @click="getSearch">查询</a-button>
-                </a-col>
-            </a-row>
-        </div>
-        <div class="warn-tag" v-if="typeList.length != 0">
-            <div :class="activeIndex == index ? 'tag-item-Y' : 'tag-item-N'" v-for="(item, index) in typeList"
-                :key="index" @click="typeClick(index)">
-                <div class="item-value">{{ item.label }}</div>
-                <div class="item-label">{{ item.value }}</div>
-            </div>
-        </div>
-        <div class="warn-content">
-            <a-spin :spinning="loading">
-                <a-table :columns="analysisColumns" :data-source="tableData" size="small" :scroll="{ y: 500 }"
-                class="tableW" :pagination="pagination" @change="changePaper">
-                <template #bodyCell="{ column, text }"></template>
-            </a-table>
-            </a-spin>
-        </div>
+  <div class="warnAnalysis">
+    <div class="warn-search">
+      <a-row>
+        <a-col :span="4">
+          <span class="search-label">查询设备:</span>
+          <a-select v-model:value="dataTypeName" style="width: 220px" placeholder="请选择查询设备">
+            <a-select-option v-for="item in deviceOptions" :key="item" :value="item.value">{{ item.label }}</a-select-option>
+          </a-select>
+        </a-col>
+        <a-col :span="4">
+          <span class="search-label">开始时间:</span>
+          <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" placeholder="开始时间" v-model:value="startTime" style="width: 220px" />
+        </a-col>
+        <a-col :span="4">
+          <span class="search-label">结束时间:</span>
+          <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" placeholder="结束时间" v-model:value="endTime" style="width: 220px" />
+        </a-col>
+        <a-col :span="4">
+          <a-button type="primary" preIcon="ant-design:search-outlined" style="margin-left: 15px" @click="getSearch">查询</a-button>
+        </a-col>
+      </a-row>
     </div>
+    <div class="warn-tag" v-if="typeList.length != 0">
+      <div :class="activeIndex == index ? 'tag-item-Y' : 'tag-item-N'" v-for="(item, index) in typeList" :key="index" @click="typeClick(index)">
+        <div class="item-value">{{ item.label }}</div>
+        <div class="item-label">{{ item.value }}</div>
+      </div>
+    </div>
+    <div class="warn-content">
+      <a-spin :spinning="loading">
+        <a-table
+          :columns="analysisColumns"
+          :data-source="tableData"
+          size="small"
+          :scroll="{ y: 500 }"
+          class="tableW"
+          :pagination="pagination"
+          @change="changePaper"
+        >
+          <template #bodyCell="{ column, text }"></template>
+        </a-table>
+      </a-spin>
+    </div>
+  </div>
 </template>
 
 <script setup lang="ts">
-import { ref, reactive, onMounted } from 'vue'
-import { analysisColumns } from './comment.data'
-import { defHttp } from '/@/utils/http/axios';
-import dayjs from 'dayjs';
-import { message } from 'ant-design-vue';
+  import { ref, reactive, onMounted } from 'vue';
+  import { analysisColumns } from './comment.data';
+  import { defHttp } from '/@/utils/http/axios';
+  import dayjs from 'dayjs';
+  import { message } from 'ant-design-vue';
 
-let props = defineProps({
+  let props = defineProps({
     deviceType: {
-        type: String,
-        required: true,
+      type: String,
+      required: true,
     },
-})
-const getAlarmHistoryDataCount = (params) => defHttp.post({ url: '/ventanaly-device/monitor/history/getAlarmHistoryDataCount', params })
-const getDeviceListApi = (params) => defHttp.post({ url: '/monitor/device', params });
-let loading=ref(false)
-let dataTypeName = ref('')
-let startTime = ref(dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'))
-let endTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'))
-//设备下拉选项列表
-let deviceOptions = ref<any[]>([])
-let typeList = ref<any[]>([])
-let activeIndex = ref(0)
-let pagination = reactive({
+  });
+  const getAlarmHistoryDataCount = (params) => defHttp.post({ url: '/ventanaly-device/monitor/history/getAlarmHistoryDataCount', params });
+  const getDeviceListApi = (params) => defHttp.post({ url: '/monitor/device', params });
+  let loading = ref(false);
+  let dataTypeName = ref('');
+  let startTime = ref(dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'));
+  let endTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'));
+  //设备下拉选项列表
+  let deviceOptions = ref<any[]>([]);
+  let typeList = ref<any[]>([]);
+  let activeIndex = ref(0);
+  let pagination = reactive({
     current: 1, // 当前页码
     pageSize: 10, // 每页显示条数
     total: 0, // 总条目数,后端返回
     // showTotal: (total, range) => `${range[0]}-${range[1]} 条,总共 ${total} 条`, // 分页右下角显示信息
     showSizeChanger: true, // 是否可改变每页显示条数
     pageSizeOptions: ['10', '20', '50'], // 可选的每页显示条数
-});
-let tableData = ref<any[]>([])
+  });
+  let tableData = ref<any[]>([]);
 
-//查询
-async function getSearch() {
+  //查询
+  async function getSearch() {
     if (dataTypeName.value) {
-        loading.value=true
-        let res = await getAlarmHistoryDataCount({
-            "pageNo": pagination.current,
-            "pageSize": pagination.pageSize,
-            "startTime": startTime.value,
-            "endTime": endTime.value,
-            "dataTypeName": dataTypeName.value
-        })
-       if(res){
-        loading.value=false
-        let data = res.result
-        typeList.value = Object.keys(data.exceptionType).map(el => {
-            return {
-                label: el,
-                value: data.exceptionType[el].count || 0
-            }
-        })
-        tableData.value = data.exceptionType[typeList.value[activeIndex.value].label]['records']
-        pagination.total = typeList.value[activeIndex.value].value
-       }
+      loading.value = true;
+      let res = await getAlarmHistoryDataCount({
+        pageNo: pagination.current,
+        pageSize: pagination.pageSize,
+        startTime: startTime.value,
+        endTime: endTime.value,
+        dataTypeName: dataTypeName.value,
+      });
+      if (res) {
+        loading.value = false;
+        let data = res.result;
+        typeList.value = Object.keys(data.exceptionType).map((el) => {
+          return {
+            label: el,
+            value: data.exceptionType[el].count || 0,
+          };
+        });
+        tableData.value = data.exceptionType[typeList.value[activeIndex.value].label]['records'];
+        pagination.total = typeList.value[activeIndex.value].value;
+      }
     } else {
-        message.warning('请选择设备类型!')
+      message.warning('请选择设备类型!');
     }
- 
-}
-//选项切换
-function typeClick(index) {
-    activeIndex.value = index
-    pagination.current = 1
-    getSearch()
-}
-//分页切换
-function changePaper(val) {
-    pagination.current = val.current
-    pagination.pageSize = val.pageSize
-    getSearch()
-}
-async function getDeviceList() {
+  }
+  //选项切换
+  function typeClick(index) {
+    activeIndex.value = index;
+    pagination.current = 1;
+    getSearch();
+  }
+  //分页切换
+  function changePaper(val) {
+    pagination.current = val.current;
+    pagination.pageSize = val.pageSize;
+    getSearch();
+  }
+  async function getDeviceList() {
     if (props.deviceType.split('_')[1] && props.deviceType.split('_')[1] === 'history') return;
-    let result
+    let result;
     const res = await getDeviceListApi({ devicetype: props.deviceType, pageSize: 10000 });
     if (res['records'] && res['records'].length > 0) {
-        result = res['records'];
+      result = res['records'];
     } else if (res['msgTxt'] && res['msgTxt'][0] && res['msgTxt'][0]['datalist']) {
-        result = res['msgTxt'][0]['datalist'];
+      result = res['msgTxt'][0]['datalist'];
     }
     if (result) {
-        deviceOptions.value = result.map((item) => {
-            return {
-                label: item['strinstallpos'],
-                value: item['id'] || item['deviceID'],
-                // strtype: item['strtype'],
-                // strinstallpos: item['strinstallpos'],
-                // devicekind: item['devicekind'],
-                // stationtype: item['stationtype'],
-            };
-
-        });
-        // console.log( deviceOptions.value,'deviceOptions.value')
+      deviceOptions.value = result.map((item) => {
+        return {
+          label: item['strinstallpos'],
+          value: item['id'] || item['deviceID'],
+          // strtype: item['strtype'],
+          // strinstallpos: item['strinstallpos'],
+          // devicekind: item['devicekind'],
+          // stationtype: item['stationtype'],
+        };
+      });
+      // console.log( deviceOptions.value,'deviceOptions.value')
     }
+  }
 
-}
-
-onMounted(() => {
-    getDeviceList()
+  onMounted(() => {
+    getDeviceList();
     // getSearch()
-})
+  });
 </script>
 
 <style lang="less" scoped>
-.warnAnalysis {
+  .warnAnalysis {
     position: relative;
     width: 100%;
     height: 100%;
 
     .warn-search {
-        display: flex;
-        align-items: center;
-        height: 30px;
-        margin: 15px;
-
-        .search-label {
-            width: 75px;
-            font-size: 14px;
-            color: #fff;
-        }
+      display: flex;
+      align-items: center;
+      height: 30px;
+      margin: 15px;
+
+      .search-label {
+        width: 75px;
+        font-size: 14px;
+        color: #fff;
+      }
     }
 
     .warn-tag {
-        height: 130px;
-        margin: 15px;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-
-        .tag-item-N {
-            position: relative;
-            width: 215px;
-            height: 128px;
-            margin:0px 120px;
-            background: url('../../../../assets/images/choice-N.png') no-repeat center;
-            background-size: 100%;
-        }
-
-        .tag-item-Y {
-            position: relative;
-            width: 215px;
-            height: 128px;
-            margin:0px 120px;
-            background: url('../../../../assets/images/choice-Y.png') no-repeat center;
-            background-size: 100%;
-        }
-
-        .item-label {
-            position: absolute;
-            left: 50%;
-            transform: translate(-50%, 0);
-            top: 80px;
-            color: #3df6ff;
-            // font-size: 18px;
-            font-family: 'douyuFont';
-        }
-
-        .item-value {
-            position: absolute;
-            left: 50%;
-            transform: translate(-50%, 0%);
-            top: 25px;
-            font-size: 18px;
-            color: #fff;
-        }
+      height: 130px;
+      margin: 15px;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+
+      .tag-item-N {
+        position: relative;
+        width: 215px;
+        height: 128px;
+        margin: 0px 120px;
+        background: url('../../../../assets/images/choice-N.png') no-repeat center;
+        background-size: 100%;
+      }
+
+      .tag-item-Y {
+        position: relative;
+        width: 215px;
+        height: 128px;
+        margin: 0px 120px;
+        background: url('../../../../assets/images/choice-Y.png') no-repeat center;
+        background-size: 100%;
+      }
+
+      .item-label {
+        position: absolute;
+        left: 50%;
+        transform: translate(-50%, 0);
+        top: 80px;
+        color: #3df6ff;
+        // font-size: 18px;
+        font-family: 'douyuFont';
+      }
+
+      .item-value {
+        position: absolute;
+        left: 50%;
+        transform: translate(-50%, 0%);
+        top: 25px;
+        font-size: 18px;
+        color: #fff;
+      }
     }
 
     .warn-content {
-        margin: 15px;
+      margin: 15px;
     }
 
     .zxm-row {
-        width: 100%;
+      width: 100%;
     }
-}
+  }
 
-::v-deep .zxm-tag {
+  ::v-deep .zxm-tag {
     font-size: 14px;
     padding: 0px 20px;
     line-height: 28px;
     background: linear-gradient(#2cd1ff55, #1eb0ff55);
     border-color: #74e9fe;
     color: #fff;
-}
+  }
 </style>

+ 810 - 783
src/views/vent/monitorManager/deviceMonitor/components/emergency/index.vue

@@ -1,12 +1,9 @@
 <template>
   <div class="zl-box">
     <div class="zl-container-box">
-      <customHeader >灾变应急管控系统</customHeader>
+      <customHeader>灾变应急管控系统</customHeader>
       <div class="emergency_box">
-        <transition
-          enter-active-class="animate__animated  animate__slideInLeft"
-          leave-active-class="animate__animated  animate__slideOutLeft"
-        >
+        <transition enter-active-class="animate__animated  animate__slideInLeft" leave-active-class="animate__animated  animate__slideOutLeft">
           <div class="left-box lr-box" v-show="show">
             <div class="network-time">
               本次解算时间:
@@ -14,18 +11,17 @@
             </div>
             <div class="analysis-box">
               <div class="item-top-title">工作面基本信息</div>
-              <BorderBox1 class="border-bg" backgroundColor="#00bfff15" >
+              <BorderBox1 class="border-bg" backgroundColor="#00bfff15">
                 <div class="detail-data-group">
                   <div class="container-item" v-for="(data, index) in analysisDetailDataList" :key="index">
                     <div class="item-icon">
                       <SvgIcon class="icon-style" size="18" :name="data.icon" />
                     </div>
                     <div class="item-name">{{ data.name }}</div>
-                    <div v-if="data.code !== 'level' && data.code !== 'resistance'" class="item-value">{{ pageData[data.code] }}
-                    </div>
+                    <div v-if="data.code !== 'level' && data.code !== 'resistance'" class="item-value">{{ pageData[data.code] }} </div>
                     <div v-if="data.code == 'level'" class="item-value">
                       <!-- <span class="signal-round signal-round-run" :class="{'signal-round-run': Number(pageData.dTotalArea) > 2, 'signal-round-red': Number(pageData.dTotalArea) <= 2 }"></span> -->
-                      <span class="">{{ Number(pageData.dTotalArea) > 2 ? '容易':'难' }}</span>
+                      <span class="">{{ Number(pageData.dTotalArea) > 2 ? '容易' : '难' }}</span>
                     </div>
                     <div v-if="data.code == 'resistance'" class="item-value">{{ totalPa }}</div>
                   </div>
@@ -37,41 +33,41 @@
             </div>
           </div>
         </transition>
-        <transition
-          enter-active-class="animate__animated  animate__slideInRight"
-          leave-active-class="animate__animated  animate__slideOutRight"
-        >
-        <div class="right-box lr-box" v-show="show">
-          <div class="sensor-box">
-            <div class="item-top-title">传感器实时数据</div>
-            <BorderBox1 class="table-box border-bg" backgroundColor="#00bfff15">
-              <div class="table-container">
-                <a-table :columns="sensorColumns" :data-source="pageData.sensorDataList" :pagination="false" size="small" />
-              </div>
-            </BorderBox1>
-          </div>
-          <div class="warning-box">
-            <div class="item-top-title">预警报警信息</div>
-            <BorderBox1 class="table-box border-bg" backgroundColor="#00bfff15">
-              <div class="table-container">
-                <a-table :columns="warningColumns" :data-source="pageData.warningDataList" :pagination="false" size="small">
-                  <template #bodyCell="{ column, record }">
-                    <div v-if="column.dataIndex == 'level'">
-                      <span class="signal-round"
-                        :class="{ 'signal-round-red': record['level'] == 1, 'signal-round-orange': record['level'] == 2, 'signal-round-yellow': record['level'] == 3 }"></span>
-                    </div>
-                  </template>
-                </a-table>
-              </div>
-            </BorderBox1>
+        <transition enter-active-class="animate__animated  animate__slideInRight" leave-active-class="animate__animated  animate__slideOutRight">
+          <div class="right-box lr-box" v-show="show">
+            <div class="sensor-box">
+              <div class="item-top-title">传感器实时数据</div>
+              <BorderBox1 class="table-box border-bg" backgroundColor="#00bfff15">
+                <div class="table-container">
+                  <a-table :columns="sensorColumns" :data-source="pageData.sensorDataList" :pagination="false" size="small" />
+                </div>
+              </BorderBox1>
+            </div>
+            <div class="warning-box">
+              <div class="item-top-title">预警报警信息</div>
+              <BorderBox1 class="table-box border-bg" backgroundColor="#00bfff15">
+                <div class="table-container">
+                  <a-table :columns="warningColumns" :data-source="pageData.warningDataList" :pagination="false" size="small">
+                    <template #bodyCell="{ column, record }">
+                      <div v-if="column.dataIndex == 'level'">
+                        <span
+                          class="signal-round"
+                          :class="{
+                            'signal-round-red': record['level'] == 1,
+                            'signal-round-orange': record['level'] == 2,
+                            'signal-round-yellow': record['level'] == 3,
+                          }"
+                        ></span>
+                      </div>
+                    </template>
+                  </a-table>
+                </div>
+              </BorderBox1>
+            </div>
           </div>
-        </div>
-      </transition>
+        </transition>
       </div>
-      <transition
-            enter-active-class="animate__animated  animate__slideInUp"
-            leave-active-class="animate__animated  animate__slideOutDown"
-          >
+      <transition enter-active-class="animate__animated  animate__slideInUp" leave-active-class="animate__animated  animate__slideOutDown">
         <div class="bottom-box" v-show="show">
           <div class="slider-box">
             <a-slider v-model:value="sliderNum" :min="0" :max="100" />
@@ -81,7 +77,14 @@
             <BorderBox11 class="border-bg" title="灾变网络解算" :color="['#00FFFF']" backgroundColor="#00bfff15">
               <div class="zl-top">
                 <div>
-                  <span v-for="(device, index) in deviceTab " :key="index" class="btn" :class="{'active': device.code == deviceActiveCode }" @click="setTable(device.code)">{{ device.title }}</span>
+                  <span
+                    v-for="(device, index) in deviceTab"
+                    :key="index"
+                    class="btn"
+                    :class="{ active: device.code == deviceActiveCode }"
+                    @click="setTable(device.code)"
+                    >{{ device.title }}</span
+                  >
                 </div>
               </div>
               <div class="table-container">
@@ -90,20 +93,33 @@
             </BorderBox11>
           </div>
           <div class="bottom-left bottom-lr-box">
-            <BorderBox11 class="border-bg" title="灾变应急路线" :color="['#00FFFF']"  backgroundColor="#00bfff15">
-             <div class="zl-top">
-                  <div>
-                    <span v-for="(device, index) in emergencyTab " :key="index" class="btn" :class="{'active': device.code == emergencyActiveCode }" @click="setTable(device.code)">{{ device.title }}</span>
-                  </div>
-                </div>
-                <div class="table-container">
-                  <a-table v-if="emergencyActiveCode === 'location'" :columns="locationColumns" :data-source="locationData" :pagination="false" size="small" ></a-table>
-                  <a-table v-else :columns="emergencyColumns" :data-source="emergencyData" :pagination="false" size="small" >
-                    <template #expandedRowRender>
-                      <a-table :columns="emergencyPathColumns" :data-source="emergencyPathData" :pagination="false"></a-table>
-                    </template>
-                  </a-table>
+            <BorderBox11 class="border-bg" title="灾变应急路线" :color="['#00FFFF']" backgroundColor="#00bfff15">
+              <div class="zl-top">
+                <div>
+                  <span
+                    v-for="(device, index) in emergencyTab"
+                    :key="index"
+                    class="btn"
+                    :class="{ active: device.code == emergencyActiveCode }"
+                    @click="setTable(device.code)"
+                    >{{ device.title }}</span
+                  >
                 </div>
+              </div>
+              <div class="table-container">
+                <a-table
+                  v-if="emergencyActiveCode === 'location'"
+                  :columns="locationColumns"
+                  :data-source="locationData"
+                  :pagination="false"
+                  size="small"
+                ></a-table>
+                <a-table v-else :columns="emergencyColumns" :data-source="emergencyData" :pagination="false" size="small">
+                  <template #expandedRowRender>
+                    <a-table :columns="emergencyPathColumns" :data-source="emergencyPathData" :pagination="false"></a-table>
+                  </template>
+                </a-table>
+              </div>
             </BorderBox11>
           </div>
         </div>
@@ -113,866 +129,877 @@
 </template>
 
 <script setup lang="ts">
-import { ref, onMounted, onUnmounted, defineEmits, defineProps, watch, reactive } from 'vue';
-import { Icon as SvgIcon } from '/@/components/Icon';
-import { BorderBox11, BorderBox1, ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
-import { sensorColumns, networkColumns, warningColumns, locationColumns, emergencyColumns, emergencyPathColumns, deviceTab, emergencyTab, SensorType, NetworkType, windowColumns, gateColumns, WindowType, GateType, solveTimesData } from './network.data'
-import dayjs from 'dayjs'
-import { formatNum } from '/@/utils/ventutil'
-import customHeader from '/@/components/vent/customHeader.vue';
-
-const emit = defineEmits(['changePageType'])
-const props = defineProps({
-  pageResult: {
-    type: Object,
-    default: () => {}
+  import { ref, onMounted, onUnmounted, defineEmits, defineProps, watch, reactive } from 'vue';
+  import { Icon as SvgIcon } from '/@/components/Icon';
+  import { BorderBox11, BorderBox1, ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
+  import {
+    sensorColumns,
+    networkColumns,
+    warningColumns,
+    locationColumns,
+    emergencyColumns,
+    emergencyPathColumns,
+    deviceTab,
+    emergencyTab,
+    SensorType,
+    NetworkType,
+    windowColumns,
+    gateColumns,
+    WindowType,
+    GateType,
+    solveTimesData,
+  } from './network.data';
+  import dayjs from 'dayjs';
+  import { formatNum } from '/@/utils/ventutil';
+  import customHeader from '/@/components/vent/customHeader.vue';
+
+  const emit = defineEmits(['changePageType']);
+  const props = defineProps({
+    pageResult: {
+      type: Object,
+      default: () => {},
+    },
+  });
+
+  let count = 0;
+  const sliderNum = ref(0);
+  const pageData = reactive({
+    currentTime: dayjs(new Date().getTime() + count).format('YYYY-MM-DD HH:mm:ss'),
+    totalEnterNum: '-',
+    totalToNum: '-',
+    totallength: '-', // 总长
+    level: '-',
+    dTotalArea: '-',
+    sensorDataList: <SensorType[]>[],
+    networkDataList: <NetworkType[]>[],
+    gateDataList: <GateType[]>[],
+    windowDataList: <WindowType[]>[],
+    warningDataList: [],
+  });
+
+  const show = ref(false);
+
+  const deviceActiveCode = ref('tun');
+  const emergencyActiveCode = ref('location');
+  const columns = ref(networkColumns);
+  const emergencycolumns = ref(locationColumns);
+  const tableDate = <any[]>ref(pageData.networkDataList as any);
+
+  const totalPa = ref(1640 + '');
+  const rate1 = ref(95 + '');
+  const rate2 = ref(95 + '');
+  const rate3 = ref(95 + '');
+  const locationData = [];
+  const emergencyData = [];
+  const emergencyPathData = [];
+
+  const analysisDetailDataList = [
+    {
+      code: 'dTotalArea',
+      name: '工作面编号',
+      icon: 'path-icon4',
+    },
+    {
+      code: 'dTotalArea',
+      name: '所属采区',
+      icon: 'path-icon4',
+    },
+    {
+      code: 'dTotalArea',
+      name: '所属煤层',
+      icon: 'path-icon4',
+    },
+    {
+      code: 'totallength',
+      name: '工作面长度(m)',
+      icon: 'path-icon1',
+    },
+    {
+      code: 'totallength',
+      name: '工作面走向长度(m)',
+      icon: 'path-icon1',
+    },
+    {
+      code: 'totallength',
+      name: '工作面采高(m)',
+      icon: 'path-icon1',
+    },
+    {
+      code: 'resistance',
+      name: '灾变等级',
+      // value: totalPa.value,
+      icon: 'path-icon3',
+    },
+  ];
+  const maxPaths = ref([]);
+  const activePath = ref(1);
+  let solveTimes: [string, string][] = [];
+  const scrollBoardRef = ref();
+
+  function toHome() {
+    show.value = false;
+    setTimeout(() => {
+      emit('changePageType', 'model3D');
+    }, 1200);
   }
-})
-
-let count = 0;
-const sliderNum = ref(0)
-const pageData = reactive({
-  currentTime: dayjs(new Date().getTime() + count).format('YYYY-MM-DD HH:mm:ss'),
-  totalEnterNum: '-',
-  totalToNum: '-',
-  totallength: '-', // 总长
-  level: '-',
-  dTotalArea: '-',
-  sensorDataList: <SensorType[]>[],
-  networkDataList: <NetworkType[]>[],
-  gateDataList: <GateType[]>[],
-  windowDataList: <WindowType[]>[],
-  warningDataList: []
-})
-
-const show = ref(false)
-
-const deviceActiveCode = ref('tun')
-const emergencyActiveCode = ref('location')
-const columns = ref(networkColumns)
-const emergencycolumns = ref(locationColumns)
-const tableDate = <any[]>ref(pageData.networkDataList as any)
-
-const totalPa = ref(1640 + '')
-const rate1 = ref(95 + '')
-const rate2 = ref(95 + '')
-const rate3 = ref(95 + '')
-const locationData = []
-const emergencyData = []
-const emergencyPathData = []
-
-const analysisDetailDataList = [
-  {
-    code: 'dTotalArea',
-    name: '工作面编号',
-    icon: 'path-icon4'
-  },
-  {
-    code: 'dTotalArea',
-    name: '所属采区',
-    icon: 'path-icon4'
-  },
-  {
-    code: 'dTotalArea',
-    name: '所属煤层',
-    icon: 'path-icon4'
-  },
-  {
-    code: 'totallength',
-    name: '工作面长度(m)',
-    icon: 'path-icon1'
-  },
-  {
-    code: 'totallength',
-    name: '工作面走向长度(m)',
-    icon: 'path-icon1'
-  },
-  {
-    code: 'totallength',
-    name: '工作面采高(m)',
-    icon: 'path-icon1'
-  },
-  {
-    code: 'resistance',
-    name: '灾变等级',
-    // value: totalPa.value,
-    icon: 'path-icon3'
-  },
-  
-]
-const maxPaths = ref([])
-const activePath = ref(1)
-let solveTimes: [string, string][] = []
-const scrollBoardRef = ref()
-
-function toHome() {
-  show.value = false
-  setTimeout(() => {
-    emit('changePageType', 'model3D')
-  }, 1200)
-}
-
-function changeActive(index){
-  activePath.value = index
-}
-
-function analyzePageResult(resultData){
-  console.log('数据接收到------', resultData);
-  if(!resultData) return
-  pageData.currentTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
-
-  const sensorDataList = <SensorType[]>[];
-  const networkDataList = <NetworkType[]>[]
-  const gateDataList = <GateType[]>[]
-  const windowDataList = <WindowType[]>[]
-  
-  if(resultData['solutionresult']){
-    
-    const solutionresult = resultData['solutionresult'] || null;
-    pageData.totalEnterNum = solutionresult['TotalInQ'] != null ? formatNum(Number(solutionresult['TotalInQ'])) : '-';
-    pageData.totalToNum = solutionresult['TotalOutQ'] != null ? formatNum(Number(solutionresult['TotalOutQ'])): '-';
-    pageData.totallength = solutionresult['TotalLength'] != null ? formatNum(Number(solutionresult['TotalLength'])) : '-';
-    pageData.dTotalArea = solutionresult['dTotalArea'] != null ? formatNum(Number(solutionresult['dTotalArea'])) : '-';
-    
-    if (solutionresult['tuns'])
-
-      for (const key in solutionresult['tuns']) {
-        const item = solutionresult['tuns'][key]
-        const obj = {
-          nTunID: key,
-          strName: item['strName'],
-          dHFric: item['dHFric'] != null ? item['dHFric'].toFixed(2) : '-', //摩擦阻力
-          dHLocal: item['dHNature'] != null ? item['dHNature'].toFixed(2) : '-', //局部阻力
-          dHNature: item['dHNature'] != null ? item['dHNature'].toFixed(2) : '-', //自然风压
-          dHTotal: item['dHTotal'] != null ? item['dHTotal'].toFixed(2) : '-', //总阻力
-          fRealQ: item['fRealQ'] != null ? item['fRealQ'].toFixed(2) : '-', //实时风量
-          fRealV: item['fRealV'] != null ? item['fRealV'].toFixed(2) : '-', //实时风速
+
+  function changeActive(index) {
+    activePath.value = index;
+  }
+
+  function analyzePageResult(resultData) {
+    console.log('数据接收到------', resultData);
+    if (!resultData) return;
+    pageData.currentTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+
+    const sensorDataList = <SensorType[]>[];
+    const networkDataList = <NetworkType[]>[];
+    const gateDataList = <GateType[]>[];
+    const windowDataList = <WindowType[]>[];
+
+    if (resultData['solutionresult']) {
+      const solutionresult = resultData['solutionresult'] || null;
+      pageData.totalEnterNum = solutionresult['TotalInQ'] != null ? formatNum(Number(solutionresult['TotalInQ'])) : '-';
+      pageData.totalToNum = solutionresult['TotalOutQ'] != null ? formatNum(Number(solutionresult['TotalOutQ'])) : '-';
+      pageData.totallength = solutionresult['TotalLength'] != null ? formatNum(Number(solutionresult['TotalLength'])) : '-';
+      pageData.dTotalArea = solutionresult['dTotalArea'] != null ? formatNum(Number(solutionresult['dTotalArea'])) : '-';
+
+      if (solutionresult['tuns'])
+        for (const key in solutionresult['tuns']) {
+          const item = solutionresult['tuns'][key];
+          const obj = {
+            nTunID: key,
+            strName: item['strName'],
+            dHFric: item['dHFric'] != null ? item['dHFric'].toFixed(2) : '-', //摩擦阻力
+            dHLocal: item['dHNature'] != null ? item['dHNature'].toFixed(2) : '-', //局部阻力
+            dHNature: item['dHNature'] != null ? item['dHNature'].toFixed(2) : '-', //自然风压
+            dHTotal: item['dHTotal'] != null ? item['dHTotal'].toFixed(2) : '-', //总阻力
+            fRealQ: item['fRealQ'] != null ? item['fRealQ'].toFixed(2) : '-', //实时风量
+            fRealV: item['fRealV'] != null ? item['fRealV'].toFixed(2) : '-', //实时风速
+          };
+          networkDataList.push(obj);
         }
-        networkDataList.push(obj)
-      }
 
-    if (solutionresult['gates'])
-      for (const key in solutionresult['gates']) {
-        const item = solutionresult['gates'][key]
-        const obj = {
-          nGateID: key,
-          strName: item['strName'],
-          data_dHDiff: item['data_dHDiff'] != null ? item['data_dHDiff'].toFixed(2) : '-', //风门压差
-          data_dQ_min: item['data_dQ_min'] != null ? item['data_dQ_min'].toFixed(2) : '-', //风门漏风量
-          data_dQ_s: item['data_dQ_s'] != null ? item['data_dQ_s'].toFixed(2) : '-', //风门漏风量
+      if (solutionresult['gates'])
+        for (const key in solutionresult['gates']) {
+          const item = solutionresult['gates'][key];
+          const obj = {
+            nGateID: key,
+            strName: item['strName'],
+            data_dHDiff: item['data_dHDiff'] != null ? item['data_dHDiff'].toFixed(2) : '-', //风门压差
+            data_dQ_min: item['data_dQ_min'] != null ? item['data_dQ_min'].toFixed(2) : '-', //风门漏风量
+            data_dQ_s: item['data_dQ_s'] != null ? item['data_dQ_s'].toFixed(2) : '-', //风门漏风量
+          };
+          gateDataList.push(obj);
         }
-        gateDataList.push(obj)
-      }
 
-    if (solutionresult['windows'])
-      for (const key in solutionresult['windows']) {
-        const item = solutionresult['windows'][key]
-        const obj = {
-          nWindowID: key,
-          strName: item['strName'],
-          data_dHDiff: item['data_dHDiff'] != null ? item['data_dHDiff'].toFixed(2) : '-', //风门压差
-          data_dQ_min: item['data_dQ_min'] != null ? item['data_dQ_min'].toFixed(2) : '-', //风门漏风量
-          data_dQ_s: item['data_dQ_s'] != null ? item['data_dQ_s'].toFixed(2) : '-', //风门漏风量
+      if (solutionresult['windows'])
+        for (const key in solutionresult['windows']) {
+          const item = solutionresult['windows'][key];
+          const obj = {
+            nWindowID: key,
+            strName: item['strName'],
+            data_dHDiff: item['data_dHDiff'] != null ? item['data_dHDiff'].toFixed(2) : '-', //风门压差
+            data_dQ_min: item['data_dQ_min'] != null ? item['data_dQ_min'].toFixed(2) : '-', //风门漏风量
+            data_dQ_s: item['data_dQ_s'] != null ? item['data_dQ_s'].toFixed(2) : '-', //风门漏风量
+          };
+          windowDataList.push(obj);
         }
-        windowDataList.push(obj)
+
+      if (solutionresult['MaxHPaths']) {
+        maxPaths.value = solutionresult['MaxHPaths'];
       }
+    }
 
-    if(solutionresult['MaxHPaths']){
-      maxPaths.value = solutionresult['MaxHPaths']
+    if (resultData['monitors'] && resultData['monitors'].length > 0) {
+      resultData['monitors'].forEach((item) => {
+        item = {
+          strinstallpos: item.strinstallpos,
+          va: item['readData']['va'] != null ? Number(item['readData']['va']).toFixed(2) : '-',
+          m3: item['readData']['m3'] != null ? formatNum(Number(item['readData']['m3'])) : '-',
+        };
+        sensorDataList.push(item);
+      });
     }
-  }
-  
- if (resultData['monitors'] && resultData['monitors'].length > 0) {
-    resultData['monitors'].forEach((item => {
-      item = {
-        strinstallpos: item.strinstallpos,
-        va: item['readData']['va'] != null ? Number(item['readData']['va']).toFixed(2) : '-',
-        m3: item['readData']['m3'] != null ? formatNum(Number(item['readData']['m3'])) : '-',
-      }
-      sensorDataList.push(item)
-    }))
 
+    // const solutionresult = JSON.parse(result['result'])
+
+    // if (solutionresult) {
+
+    // }
+
+    pageData.sensorDataList = sensorDataList;
+    // pageData.warningDataList = result['warns']
+    pageData.networkDataList = networkDataList;
+    pageData.gateDataList = gateDataList;
+    pageData.windowDataList = windowDataList;
+    setTable(deviceActiveCode.value);
+
+    solveTimes = [[dayjs().format('YYYY-MM-DD HH:mm:ss'), '解算用时' + (Math.random() * 0.1 + 3).toFixed(2) + 's'], ...solveTimes];
+    const tempSolveTimes = [...solveTimes];
+    tempSolveTimes[0] = [
+      `<span style="color:#00F5FE;" >${tempSolveTimes[0][0]}</span>`,
+      `<span style="color:#00F5FE;" >${tempSolveTimes[0][1]}</span>`,
+    ];
+    scrollBoardRef.value.updateRows(tempSolveTimes, 0);
   }
-  
-  
-  // const solutionresult = JSON.parse(result['result'])
-  
-  // if (solutionresult) {
-    
-    
-  // }
-  
-  pageData.sensorDataList = sensorDataList
-  // pageData.warningDataList = result['warns']
-  pageData.networkDataList = networkDataList
-  pageData.gateDataList = gateDataList
-  pageData.windowDataList = windowDataList
-  setTable(deviceActiveCode.value)
-
-  solveTimes = [[dayjs().format('YYYY-MM-DD HH:mm:ss'), '解算用时'+ (Math.random() * 0.1 + 3).toFixed(2) + 's'] , ...solveTimes]
-  const tempSolveTimes = [...solveTimes]
-  tempSolveTimes[0] = [`<span style="color:#00F5FE;" >${tempSolveTimes[0][0]}</span>`, `<span style="color:#00F5FE;" >${tempSolveTimes[0][1]}</span>`]
-  scrollBoardRef.value.updateRows(tempSolveTimes, 0)
-}
-
-function setTable(code) {
-  if(code == 'tun'){
-    deviceActiveCode.value = code
-    columns.value = networkColumns
-    tableDate.value = pageData.networkDataList
-  }else if(code === 'gate'){
-    deviceActiveCode.value = code
-    columns.value = gateColumns
-    tableDate.value = pageData.gateDataList
-  }else if(code === 'window') {
-    deviceActiveCode.value = code
-    columns.value = windowColumns
-    tableDate.value = pageData.windowDataList
-  } else if(code === 'location') {
-    emergencyActiveCode.value = code
-  } else if(code === 'emergency') {
-    emergencyActiveCode.value = code
+
+  function setTable(code) {
+    if (code == 'tun') {
+      deviceActiveCode.value = code;
+      columns.value = networkColumns;
+      tableDate.value = pageData.networkDataList;
+    } else if (code === 'gate') {
+      deviceActiveCode.value = code;
+      columns.value = gateColumns;
+      tableDate.value = pageData.gateDataList;
+    } else if (code === 'window') {
+      deviceActiveCode.value = code;
+      columns.value = windowColumns;
+      tableDate.value = pageData.windowDataList;
+    } else if (code === 'location') {
+      emergencyActiveCode.value = code;
+    } else if (code === 'emergency') {
+      emergencyActiveCode.value = code;
+    }
   }
-}
 
-watch(() => props.pageResult, (newData) => {
-  
-  analyzePageResult(newData)
-})
+  watch(
+    () => props.pageResult,
+    (newData) => {
+      analyzePageResult(newData);
+    }
+  );
 
-onMounted(() => {
-  show.value = true
-});
+  onMounted(() => {
+    show.value = true;
+  });
 
-onUnmounted(() => {
-  
-});
+  onUnmounted(() => {});
 </script>
 <style scoped lang="less">
-@ventSpace: zxm;
-
-.vent-home-header {
-  width: 100%;
-  height: 100px;
-  position: fixed;
-  top: 0;
-  background: url('/@/assets/images/vent/new-home/header-bg.png') no-repeat;
-  background-size: contain;
-  display: flex;
-  justify-content: center;
-  z-index: 99;
-
-  .header-icon {
-    margin-top: 45px;
-  }
+  @ventSpace: zxm;
 
-  .header-text {
-    position: fixed;
-    top: 18px;
-    color: #fff;
-    font-size: 26px;
-  }
-}
-
-.zl-box {
-  width: 100%;
-  height: calc(100%);
-  top: 50px;
-  position: relative;
-  overflow: hidden;
-  color: #fff;
-  background-position: center;
-  background-size: cover;
-
-  .modal-box {
-    position: relative;
+  .vent-home-header {
     width: 100%;
-    height: 100%;
+    height: 100px;
+    position: fixed;
     top: 0;
-    left: 0;
-  }
-}
-
-.zl-container-box {
-  width: 100%;
-  height: 100%;
-  top: 10px;
-  position: relative;
-  z-index: 99;
-  pointer-events: none;
-
-  .emergency_box {
+    background: url('/@/assets/images/vent/new-home/header-bg.png') no-repeat;
+    background-size: contain;
     display: flex;
-    justify-content: space-between;
-    height: 550px;
-    position: relative;
-    .lr-box {
-      width: 374px;
-      margin-top: 10px;
+    justify-content: center;
+    z-index: 99;
+
+    .header-icon {
+      margin-top: 45px;
     }
 
-    .left-box {
-      .network-time{
-        height: 50px;
-        padding-left: 10px;
-        font-size: 18px;
-        position: relative;
-        top: -5px;
-        .time{
-          font-size: 26px;
-          color: #00f5fe;
-          font-family: 'electronicFont';
-        }
-      }
-      .analysis-box {
-        position: relative;
-        .detail-data-group {
-          width: 100%;
-          display: flex;
-          flex-direction: column;
-          align-items: center;
-          margin-top: 15px;
-          padding-top: 30px;
+    .header-text {
+      position: fixed;
+      top: 18px;
+      color: #fff;
+      font-size: 26px;
+    }
+  }
 
-          .container-item {
-            width: 307px;
-            height: 63px;
-            display: flex;
-            position: relative;
-            background: url('/@/assets/images/vent/plane-bottom.png') no-repeat;
-            background-size: auto;
-            background-position: bottom;
-            padding: 10px 30px;
+  .zl-box {
+    width: 100%;
+    height: calc(100%);
+    top: 50px;
+    position: relative;
+    overflow: hidden;
+    color: #fff;
+    background-position: center;
+    background-size: cover;
 
-            &::before {
-              content: '';
-              display: block;
-              width: 100%;
-              height: 5px;
-              position: absolute;
-              top: 62px;
-              left: 0;
-              background-color: #73f4ff66;
-              backdrop-filter: blur(5px);
-            }
+    .modal-box {
+      position: relative;
+      width: 100%;
+      height: 100%;
+      top: 0;
+      left: 0;
+    }
+  }
 
-            .item-icon {
-              width: 60px;
-              height: 45px;
-              background: url('/@/assets/images/vent/plane-icon-bg.png') no-repeat;
-              background-size: cover;
+  .zl-container-box {
+    width: 100%;
+    height: 100%;
+    top: 10px;
+    position: relative;
+    z-index: 99;
+    pointer-events: none;
 
-              .icon-style {
-                margin: 10px 0 0 18px;
-              }
-            }
+    .emergency_box {
+      display: flex;
+      justify-content: space-between;
+      height: 550px;
+      position: relative;
+      .lr-box {
+        width: 374px;
+        margin-top: 10px;
+      }
 
-            .item-name {
-              width: 180px;
-              line-height: 60px;
-              margin-left: 5px;
-              text-align: left;
-            }
+      .left-box {
+        .network-time {
+          height: 50px;
+          padding-left: 10px;
+          font-size: 18px;
+          position: relative;
+          top: -5px;
+          .time {
+            font-size: 26px;
+            color: #00f5fe;
+            font-family: 'electronicFont';
+          }
+        }
+        .analysis-box {
+          position: relative;
+          .detail-data-group {
+            width: 100%;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            margin-top: 15px;
+            padding-top: 30px;
 
-            .item-value {
+            .container-item {
+              width: 307px;
+              height: 63px;
+              display: flex;
               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);
+              background: url('/@/assets/images/vent/plane-bottom.png') no-repeat;
+              background-size: auto;
+              background-position: bottom;
+              padding: 10px 30px;
 
               &::before {
-                width: 6px;
-                height: 6px;
                 content: '';
+                display: block;
+                width: 100%;
+                height: 5px;
                 position: absolute;
-                left: -3px;
-                top: 8px;
-                background: #ffa500;
-                border-radius: 3px;
+                top: 62px;
+                left: 0;
+                background-color: #73f4ff66;
+                backdrop-filter: blur(5px);
+              }
+
+              .item-icon {
+                width: 60px;
+                height: 45px;
+                background: url('/@/assets/images/vent/plane-icon-bg.png') no-repeat;
+                background-size: cover;
+
+                .icon-style {
+                  margin: 10px 0 0 18px;
+                }
+              }
+
+              .item-name {
+                width: 180px;
+                line-height: 60px;
+                margin-left: 5px;
+                text-align: left;
+              }
+
+              .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;
+                }
               }
             }
           }
-        }
 
-        .feature-group {
-          display: flex;
-          flex-direction: row;
-          padding: 20px;
-          margin-top: 15px;
-
-          .feature-item {
-            width: 108px;
-            height: 120px;
-            background: url('/@/assets/images/vent/path/path-feature-bg.png');
+          .feature-group {
             display: flex;
-            flex-direction: column;
-            // justify-content: center;
-
-            .pie {
+            flex-direction: row;
+            padding: 20px;
+            margin-top: 15px;
+
+            .feature-item {
+              width: 108px;
+              height: 120px;
+              background: url('/@/assets/images/vent/path/path-feature-bg.png');
               display: flex;
-              justify-content: center;
-            }
+              flex-direction: column;
+              // justify-content: center;
+
+              .pie {
+                display: flex;
+                justify-content: center;
+              }
 
-            .data {
-              margin-top: 15px;
-              font-size: 12px;
-              scale: 0.9;
-              text-align: center;
+              .data {
+                margin-top: 15px;
+                font-size: 12px;
+                scale: 0.9;
+                text-align: center;
+              }
             }
           }
-        }
-        .time-list{
-          height: 142px;
-          margin: 30px 15px 0px 30px;
-          padding-bottom: 10px;
-          pointer-events: auto;
-          .row-item:first-child{
-            color: #00f5fe !important;
+          .time-list {
+            height: 142px;
+            margin: 30px 15px 0px 30px;
+            padding-bottom: 10px;
+            pointer-events: auto;
+            .row-item:first-child {
+              color: #00f5fe !important;
+            }
           }
         }
       }
-    }
 
-    .right-box {
-      display: flex;
-      flex-direction: column;
-
-      .sensor-box,
-      .warning-box {
-        position: relative;
+      .right-box {
+        display: flex;
+        flex-direction: column;
 
-        // min-height: 220px;
-        // max-height: 250px;
-        .table-box {
-          height: 280px;
-          width: 100%;
+        .sensor-box,
+        .warning-box {
           position: relative;
 
-          .table-container {
-            width: calc(100% - 40px);
-            margin: 25px 20px 20px;
-            height: 250px;
-            position: absolute;
+          // min-height: 220px;
+          // max-height: 250px;
+          .table-box {
+            height: 280px;
+            width: 100%;
+            position: relative;
+
+            .table-container {
+              width: calc(100% - 40px);
+              margin: 25px 20px 20px;
+              height: 250px;
+              position: absolute;
+            }
           }
         }
-      }
 
-      .sensor-box {
-        .item-top-title {
-          &::after {
-            left: 110px;
-          }
+        .sensor-box {
+          .item-top-title {
+            &::after {
+              left: 110px;
+            }
 
-          &::before {
-            left: 265px;
+            &::before {
+              left: 265px;
+            }
           }
         }
-      }
 
-      .warning-box {
-        margin-top: 10px;
-      }
-    }
-  }
-
-  
-
-  .bottom-box {
-    width: 100%;
-    height: calc(40% - 80px);
-    display: flex;
-    justify-content: space-between;
-    margin-top: 0px;
-    position: relative;
-    top: 20px;
-    pointer-events: auto;
-    .slider-box{
-      position: absolute;
-    }
-    .to-small {
-      width: 60px;
-      height: 60px;
-      background: url('/@/assets/images/vent/home/tosmall.png') no-repeat center;
-      background-size: auto;
-      position: absolute;
-      top: -95px;
-      right: 400px;
-      border-radius: 10px;
-      padding: 8px;
-      backdrop-filter: blur(10px);
-      background-color: rgba(45, 86, 137, 0.418);
-
-      &:hover {
-        background-color: rgba(79, 104, 134, 0.418);
+        .warning-box {
+          margin-top: 10px;
+        }
       }
     }
-    .bottom-lr-box {
-      flex: 1;
-      display: flex;
-      justify-content: center;
 
-    }
-    .network-top {
+    .bottom-box {
+      width: 100%;
+      height: calc(40% - 80px);
       display: flex;
-      flex-direction: row;
       justify-content: space-between;
-      position: absolute;
-      // top: 55px;
-      top: 45px;
-      right: 0;
-      padding: 0 10px 0 30px;
-      z-index: 999;
-
-      .network-top-left {
+      margin-top: 0px;
+      position: relative;
+      top: 20px;
+      pointer-events: auto;
+      .slider-box {
+        position: absolute;
+      }
+      .to-small {
+        width: 60px;
+        height: 60px;
+        background: url('/@/assets/images/vent/home/tosmall.png') no-repeat center;
+        background-size: auto;
+        position: absolute;
+        top: -95px;
+        right: 400px;
+        border-radius: 10px;
+        padding: 8px;
+        backdrop-filter: blur(10px);
+        background-color: rgba(45, 86, 137, 0.418);
+
+        &:hover {
+          background-color: rgba(79, 104, 134, 0.418);
+        }
+      }
+      .bottom-lr-box {
+        flex: 1;
+        display: flex;
+        justify-content: center;
+      }
+      .network-top {
         display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        position: absolute;
+        // top: 55px;
+        top: 45px;
+        right: 0;
+        padding: 0 10px 0 30px;
+        z-index: 999;
 
-        div {
-          margin-right: 20px;
-        }
+        .network-top-left {
+          display: flex;
 
-        span {
-          font-family: 'douyuFont';
-          font-size: 15px;
-        }
+          div {
+            margin-right: 20px;
+          }
 
-        .accuracy-rate {
-          color: #FFA500;
+          span {
+            font-family: 'douyuFont';
+            font-size: 15px;
+          }
+
+          .accuracy-rate {
+            color: #ffa500;
+          }
+
+          .error-rate {
+            color: #00f5fe;
+          }
         }
 
-        .error-rate {
-          color: #00f5fe;
+        .time {
+          color: #949494;
         }
       }
 
-      .time {
-        color: #949494;
-      }
-    }
-
-    .bottom-left {
-      margin-right: 0px !important;
-      position: relative;
+      .bottom-left {
+        margin-right: 0px !important;
+        position: relative;
 
-      .table-container {
-        height: 210px;
-        margin-top: 40px;
-        margin-left: 10px;
-        margin-right: 8px;
+        .table-container {
+          height: 210px;
+          margin-top: 40px;
+          margin-left: 10px;
+          margin-right: 8px;
+        }
       }
-    }
-
-    .bottom-right {
-      // margin-left: 10px;
-      .zl-container {
-        width: 100%;
-        height: 100%;
-        margin: 0 10px;
-        background: url('/@/assets/images/vent/path/zl-bg1.png') no-repeat;
-        background-size: 940px 240px;
-        position: relative;
-        display: flex;
-        align-items: center;
-        justify-content: center;
 
-        &::after {
-          content: '';
-          display: block;
-          position: absolute;
+      .bottom-right {
+        // margin-left: 10px;
+        .zl-container {
           width: 100%;
           height: 100%;
-          top: 85px;
-          background: url('/@/assets/images/vent/path/zl-bg2.png') no-repeat;
-          background-size: 920px 100px;
+          margin: 0 10px;
+          background: url('/@/assets/images/vent/path/zl-bg1.png') no-repeat;
+          background-size: 940px 240px;
+          position: relative;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+
+          &::after {
+            content: '';
+            display: block;
+            position: absolute;
+            width: 100%;
+            height: 100%;
+            top: 85px;
+            background: url('/@/assets/images/vent/path/zl-bg2.png') no-repeat;
+            background-size: 920px 100px;
+          }
         }
-      }
 
-      .zl-path-item {
-        height: 67px;
-        background: url('/@/assets/images/vent/path/zl-path-item-bg.png') no-repeat;
-        background-size: auto;
-        background-position: center bottom;
-        position: absolute;
-        scale: 0.9;
+        .zl-path-item {
+          height: 67px;
+          background: url('/@/assets/images/vent/path/zl-path-item-bg.png') no-repeat;
+          background-size: auto;
+          background-position: center bottom;
+          position: absolute;
+          scale: 0.9;
 
-        .title {
-          position: relative;
-          top: -20px;
-          text-align: center;
-          font-size: 12px;
-          background: #00f5fe33;
-          padding: 3px 5px;
-          backdrop-filter: blur(5px);
+          .title {
+            position: relative;
+            top: -20px;
+            text-align: center;
+            font-size: 12px;
+            background: #00f5fe33;
+            padding: 3px 5px;
+            backdrop-filter: blur(5px);
+          }
+        }
+        .position11 {
+          top: 128px;
+          left: 120px;
         }
-      }
-      .position11 {
-        top: 128px;
-        left: 120px;
-      }
 
-      .position10 {
-        top: 130px;
-        left: 0px;
-      }
+        .position10 {
+          top: 130px;
+          left: 0px;
+        }
 
-      .position9 {
-        top: 52px;
-        left: 100px;
-      }
+        .position9 {
+          top: 52px;
+          left: 100px;
+        }
 
-      .position8 {
-        top: 132px;
-        left: 270px;
-      }
+        .position8 {
+          top: 132px;
+          left: 270px;
+        }
 
-      .position7 {
-        top: 128px;
-        left: 420px;
-      }
+        .position7 {
+          top: 128px;
+          left: 420px;
+        }
 
-      .position6 {
-        top: 60px;
-        left: 320px;
-      }
+        .position6 {
+          top: 60px;
+          left: 320px;
+        }
 
-      .position5 {
-        top: 120px;
-        left: 580px;
-      }
+        .position5 {
+          top: 120px;
+          left: 580px;
+        }
 
-      .position4 {
-        top: 123px;
-        left: 690px;
-      }
+        .position4 {
+          top: 123px;
+          left: 690px;
+        }
 
-      .position3 {
-        top: 103px;
-        left: 830px;
-      }
+        .position3 {
+          top: 103px;
+          left: 830px;
+        }
 
-      .position2 {
-        top: 90px;
-        left: 740px;
-      }
+        .position2 {
+          top: 90px;
+          left: 740px;
+        }
 
-      .position1 {
-        top: 80px;
-        left: 535px;
+        .position1 {
+          top: 80px;
+          left: 535px;
+        }
       }
     }
-  }
-  .zl-top {
-    width: calc(100% - 30px);
-    padding: 0 20px;
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-    position: relative;
-    top: 35px;
-    z-index: 99;
-    margin: 10px;
-    border-bottom: 1px solid #00f5fe88;
-
-    .btn {
-      padding: 3px 10px;
-      border-top: 1px solid #c6c6c6;
-      background-image: linear-gradient(#c2c2c2aa, #b3b3b388 20%, #5a5a5a88);
-      cursor: pointer;
-      margin-right: 5px;
-
-      &:hover,
-      &:active {
+    .zl-top {
+      width: calc(100% - 30px);
+      padding: 0 20px;
+      display: flex;
+      flex-direction: row;
+      justify-content: space-between;
+      position: relative;
+      top: 35px;
+      z-index: 99;
+      margin: 10px;
+      border-bottom: 1px solid #00f5fe88;
+
+      .btn {
+        padding: 3px 10px;
+        border-top: 1px solid #c6c6c6;
+        background-image: linear-gradient(#c2c2c2aa, #b3b3b388 20%, #5a5a5a88);
+        cursor: pointer;
+        margin-right: 5px;
+
+        &:hover,
+        &:active {
+          border-top: 1px solid #00f5fe;
+          background-image: linear-gradient(#00f5feaa, #1adce288 20%, #00848988);
+        }
+      }
+
+      .active {
         border-top: 1px solid #00f5fe;
         background-image: linear-gradient(#00f5feaa, #1adce288 20%, #00848988);
       }
+
+      .data {
+        font-family: 'douyuFont';
+        color: #ffa500;
+        font-size: 15px;
+      }
     }
+  }
 
-    .active {
-      border-top: 1px solid #00f5fe;
-      background-image: linear-gradient(#00f5feaa, #1adce288 20%, #00848988);
+  .item-top-title {
+    width: 374px;
+    height: 32px;
+    text-align: center;
+    line-height: 34px;
+    font-size: 15px;
+    font-weight: 600;
+    color: #fafafa;
+    position: absolute;
+    padding-top: 0px;
+    top: -9px;
+    z-index: 999;
+
+    &::before {
+      content: '';
+      display: block;
+      width: 40px;
+      height: 1px;
+      position: absolute;
+      left: 255px;
+      top: 50%;
+      transform: translateY(-50%);
+      -webkit-transform: translate(-50%, -50%);
+      background-color: #00d4fe88;
     }
 
-    .data {
-      font-family: 'douyuFont';
-      color: #FFA500;
-      font-size: 15px;
+    &::after {
+      content: '';
+      display: block;
+      width: 40px;
+      height: 1px;
+      position: absolute;
+      left: 120px;
+      top: 50%;
+      transform: translateY(-50%);
+      -webkit-transform: translate(-50%, -50%);
+      background-color: #00d4fe88;
     }
   }
-}
-
-.item-top-title {
-  width: 374px;
-  height: 32px;
-  text-align: center;
-  line-height: 34px;
-  font-size: 15px;
-  font-weight: 600;
-  color: #fafafa;
-  position: absolute;
-  padding-top: 0px;
-  top: -9px;
-  z-index: 999;
-
-  &::before {
-    content: '';
-    display: block;
-    width: 40px;
-    height: 1px;
-    position: absolute;
-    left: 255px;
-    top: 50%;
-    transform: translateY(-50%);
-    -webkit-transform: translate(-50%, -50%);
-    background-color: #00d4fe88;
-  }
 
-  &::after {
-    content: '';
-    display: block;
-    width: 40px;
-    height: 1px;
-    position: absolute;
-    left: 120px;
-    top: 50%;
-    transform: translateY(-50%);
-    -webkit-transform: translate(-50%, -50%);
-    background-color: #00d4fe88;
-  }
-}
-
-.signal-round {
-  display: inline-block;
-  width: 4px;
-  height: 4px;
-  border-radius: 50%;
-  position: relative;
-  top: -3px;
-
-  &::after {
-    display: block;
-    content: '';
-    position: absolute;
-    width: 8px;
-    height: 8px;
-    top: -2px;
-    left: -2px;
+  .signal-round {
+    display: inline-block;
+    width: 4px;
+    height: 4px;
     border-radius: 50%;
-    background-color: #daffc044;
-    box-shadow: 0 0 1px 1px #c6ff7722;
+    position: relative;
+    top: -3px;
+
+    &::after {
+      display: block;
+      content: '';
+      position: absolute;
+      width: 8px;
+      height: 8px;
+      top: -2px;
+      left: -2px;
+      border-radius: 50%;
+      background-color: #daffc044;
+      box-shadow: 0 0 1px 1px #c6ff7722;
+    }
   }
-}
 
-.signal-round-run {
-  background-color: #67fc00;
+  .signal-round-run {
+    background-color: #67fc00;
 
-  &::after {
-    background-color: #daffc044;
-    box-shadow: 0 0 1px 1px #c6ff7722;
+    &::after {
+      background-color: #daffc044;
+      box-shadow: 0 0 1px 1px #c6ff7722;
+    }
   }
-}
 
-.signal-round-red {
-  background-color: #FF3823;
+  .signal-round-red {
+    background-color: #ff3823;
 
-  &::after {
-    background-color: #FF382344;
-    box-shadow: 0 0 1px 1px #FF382333;
+    &::after {
+      background-color: #ff382344;
+      box-shadow: 0 0 1px 1px #ff382333;
+    }
   }
-}
 
-.signal-round-orange {
-  background-color: #FF9B17;
+  .signal-round-orange {
+    background-color: #ff9b17;
 
-  &::after {
-    background-color: #FF9B1744;
-    box-shadow: 0 0 1px 1px #FF9B1733;
+    &::after {
+      background-color: #ff9b1744;
+      box-shadow: 0 0 1px 1px #ff9b1733;
+    }
   }
-}
 
-.signal-round-yellow {
-  background-color: #FFFF00;
+  .signal-round-yellow {
+    background-color: #ffff00;
 
-  &::after {
-    background-color: #FFFF0044;
-    box-shadow: 0 0 1px 1px #FFFF0033;
+    &::after {
+      background-color: #ffff0044;
+      box-shadow: 0 0 1px 1px #ffff0033;
+    }
   }
-}
 
-.table-container {
-  overflow-y: auto;
-  overflow-x: hidden;
-  pointer-events: auto;
+  .table-container {
+    overflow-y: auto;
+    overflow-x: hidden;
+    pointer-events: auto;
 
-  &::-webkit-scrollbar {
-    width: 4px;
-    height: 8px;
-    background-color: #f5f5f500;
-  }
+    &::-webkit-scrollbar {
+      width: 4px;
+      height: 8px;
+      background-color: #f5f5f500;
+    }
 
-  &::-webkit-scrollbar-track {
-    background-color: #ffffff33;
-    border-radius: 10px;
+    &::-webkit-scrollbar-track {
+      background-color: #ffffff33;
+      border-radius: 10px;
+    }
+
+    &::-webkit-scrollbar-thumb {
+      background-color: #cccccc44;
+      border-radius: 10px;
+    }
   }
 
-  &::-webkit-scrollbar-thumb {
-    background-color: #cccccc44;
-    border-radius: 10px;
+  .border-bg {
+    padding-bottom: 20px;
+    backdrop-filter: blur(5px);
   }
-}
 
-.border-bg{
-  padding-bottom: 20px;
-  backdrop-filter: blur(5px);
-}
+  @keyframes scale {
+    0% {
+      transform: translate(-50%, -50%) scale(0.9);
+      opacity: 1;
+    }
 
-@keyframes scale {
-  0% {
-    transform: translate(-50%, -50%) scale(0.9);
-    opacity: 1;
+    100% {
+      transform: translate(-50%, -50%) scale(1.5);
+      opacity: 0;
+    }
   }
 
-  100% {
-    transform: translate(-50%, -50%) scale(1.5);
-    opacity: 0;
+  :deep(.@{ventSpace}-progress-text) {
+    color: #fff !important;
   }
-}
 
-:deep(.@{ventSpace}-progress-text) {
-  color: #fff !important;
-}
+  :deep(.@{ventSpace}-table-thead) {
+    background-color: transparent !important;
 
-:deep(.@{ventSpace}-table-thead) {
-  background-color: transparent !important;
+    & > tr {
+      border: 1px solid #00f5fe !important;
+    }
 
-  &>tr {
-    border: 1px solid #00f5fe !important;
+    & > tr > th {
+      // border: none !important;
+      color: #00f5fe !important;
+      border-top: 1px solid #00f5fe !important;
+      border-bottom: 1px solid #00f5fe !important;
+      border-left: none !important;
+      border-right: none !important;
+      font-size: 13px;
+    }
   }
 
-  &>tr>th {
-    // border: none !important;
-    color: #00f5fe !important;
-    border-top: 1px solid #00f5fe !important;
-    border-bottom: 1px solid #00f5fe !important;
-    border-left: none !important;
-    border-right: none !important;
-    font-size: 13px;
+  :deep(.@{ventSpace}-table-tbody) {
+    & > tr > td {
+      font-size: 13px;
+    }
   }
-}
 
-:deep(.@{ventSpace}-table-tbody) {
-  &>tr>td {
-    font-size: 13px;
+  :deep(.@{ventSpace}-table-small) {
+    border: none !important;
   }
-}
 
-:deep(.@{ventSpace}-table-small) {
-  border: none !important;
-}
-
-:deep(.@{ventSpace}-layout) {
-  background: transparent !important;
-}</style>
+  :deep(.@{ventSpace}-layout) {
+    background: transparent !important;
+  }
+</style>

+ 869 - 837
src/views/vent/monitorManager/deviceMonitor/components/network/index.vue

@@ -2,10 +2,7 @@
   <div class="zl-box">
     <div class="zl-container-box">
       <div class="top-box">
-        <transition
-          enter-active-class="animate__animated  animate__slideInLeft"
-          leave-active-class="animate__animated  animate__slideOutLeft"
-        >
+        <transition enter-active-class="animate__animated  animate__slideInLeft" leave-active-class="animate__animated  animate__slideOutLeft">
           <div class="left-box lr-box" v-if="show">
             <div class="network-time">
               本次解算时间:
@@ -13,7 +10,7 @@
             </div>
             <div class="analysis-box">
               <div class="item-top-title">通风网络分析</div>
-              <BorderBox1 class="border-bg" backgroundColor="#00bfff15" >
+              <BorderBox1 class="border-bg" backgroundColor="#00bfff15">
                 <div class="pie-group">
                   <div class="item-pie">
                     <div class="pie">
@@ -42,11 +39,10 @@
                       <SvgIcon class="icon-style" size="18" :name="data.icon" />
                     </div>
                     <div class="item-name">{{ data.name }}</div>
-                    <div v-if="data.code !== 'level' && data.code !== 'resistance'" class="item-value">{{ pageData[data.code] }}
-                    </div>
+                    <div v-if="data.code !== 'level' && data.code !== 'resistance'" class="item-value">{{ pageData[data.code] }} </div>
                     <div v-if="data.code == 'level'" class="item-value">
                       <!-- <span class="signal-round signal-round-run" :class="{'signal-round-run': Number(pageData.dTotalArea) > 2, 'signal-round-red': Number(pageData.dTotalArea) <= 2 }"></span> -->
-                      <span class="">{{ Number(pageData.dTotalArea) > 2 ? '容易':'难' }}</span>
+                      <span class="">{{ Number(pageData.dTotalArea) > 2 ? '容易' : '难' }}</span>
                     </div>
                     <div v-if="data.code == 'resistance'" class="item-value">{{ totalPa }}</div>
                   </div>
@@ -80,57 +76,57 @@
                     <div class="data">有效风量率</div>
                   </div>
                 </div> -->
-                <div class="time-list" style="overflow-y: auto;">
-                  <dv-scroll-board ref="scrollBoardRef" :config="solveTimesData" style="width: 100%; height: 80px; font-weight: 500;" />
+                <div class="time-list" style="overflow-y: auto">
+                  <dv-scroll-board ref="scrollBoardRef" :config="solveTimesData" style="width: 100%; height: 80px; font-weight: 500" />
                 </div>
               </BorderBox1>
             </div>
           </div>
         </transition>
-        <transition
-          enter-active-class="animate__animated  animate__slideInRight"
-          leave-active-class="animate__animated  animate__slideOutRight"
-        >
-        <div class="right-box lr-box" v-if="show">
-          <div class="sensor-box">
-            <div class="item-top-title">传感器实时数据</div>
-            <BorderBox1 class="table-box border-bg" backgroundColor="#00bfff15">
-              <div class="table-container">
-                <a-table :columns="sensorColumns" :data-source="pageData.sensorDataList" :pagination="false" size="small" :scroll="{y: 180}">
-                  <template #bodyCell="{ column, record }">
-                    <div v-if="column.dataIndex == 'action'">
-                       <a @click="goLocation('device', record.deviceID, record)">定位</a>
-                    </div>
-                  </template>
-                </a-table>
-              </div>
-            </BorderBox1>
-          </div>
-          <div class="warning-box">
-            <div class="item-top-title">预警报警信息</div>
-            <BorderBox1 class="table-box border-bg" backgroundColor="#00bfff15">
-              <div class="table-container">
-                <a-table :columns="warningColumns" :data-source="pageData.warningDataList" :pagination="false" size="small" :scroll="{y: 180}">
-                  <template #bodyCell="{ column, record }">
-                    <div v-if="column.dataIndex == 'level'">
-                      <span class="signal-round"
-                        :class="{ 'signal-round-red': (record['level'] == 104 || record['level'] == 201), 'signal-round-orange': record['level'] == 103, 'signal-round-yellow': record['level'] == 102 }"></span>
-                    </div>
-                    <div v-if="column.dataIndex == 'action'">
-                      <a @click="goLocation('device', record.deviceID, record)">定位</a>
-                    </div>
-                  </template>
-                </a-table>
-              </div>
-            </BorderBox1>
+        <transition enter-active-class="animate__animated  animate__slideInRight" leave-active-class="animate__animated  animate__slideOutRight">
+          <div class="right-box lr-box" v-if="show">
+            <div class="sensor-box">
+              <div class="item-top-title">传感器实时数据</div>
+              <BorderBox1 class="table-box border-bg" backgroundColor="#00bfff15">
+                <div class="table-container">
+                  <a-table :columns="sensorColumns" :data-source="pageData.sensorDataList" :pagination="false" size="small" :scroll="{ y: 180 }">
+                    <template #bodyCell="{ column, record }">
+                      <div v-if="column.dataIndex == 'action'">
+                        <a @click="goLocation('device', record.deviceID, record)">定位</a>
+                      </div>
+                    </template>
+                  </a-table>
+                </div>
+              </BorderBox1>
+            </div>
+            <div class="warning-box">
+              <div class="item-top-title">预警报警信息</div>
+              <BorderBox1 class="table-box border-bg" backgroundColor="#00bfff15">
+                <div class="table-container">
+                  <a-table :columns="warningColumns" :data-source="pageData.warningDataList" :pagination="false" size="small" :scroll="{ y: 180 }">
+                    <template #bodyCell="{ column, record }">
+                      <div v-if="column.dataIndex == 'level'">
+                        <span
+                          class="signal-round"
+                          :class="{
+                            'signal-round-red': record['level'] == 104 || record['level'] == 201,
+                            'signal-round-orange': record['level'] == 103,
+                            'signal-round-yellow': record['level'] == 102,
+                          }"
+                        ></span>
+                      </div>
+                      <div v-if="column.dataIndex == 'action'">
+                        <a @click="goLocation('device', record.deviceID, record)">定位</a>
+                      </div>
+                    </template>
+                  </a-table>
+                </div>
+              </BorderBox1>
+            </div>
           </div>
-        </div>
-      </transition>
+        </transition>
       </div>
-      <transition
-            enter-active-class="animate__animated  animate__slideInUp"
-            leave-active-class="animate__animated  animate__slideOutDown"
-          >
+      <transition enter-active-class="animate__animated  animate__slideInUp" leave-active-class="animate__animated  animate__slideOutDown">
         <div class="bottom-box" v-if="show">
           <div class="icon-group">
             <div class="to-small" @click="toHome('home')"></div>
@@ -138,7 +134,7 @@
           </div>
           <div class="bottom-left bottom-lr-box">
             <div class="network-top">
-                <!-- <div class="network-top-left">
+              <!-- <div class="network-top-left">
                   <div>
                     准确率:
                     <span class="accuracy-rate">95%</span>
@@ -148,36 +144,64 @@
                     <span class="error-rate">0.0941%</span>
                   </div>
                 </div> -->
-                <!-- <div class="network-top-right">
+              <!-- <div class="network-top-right">
                   本次解算时间:
                   <span class="time">{{ pageData.currentTime }}</span>
                 </div> -->
-              </div>
+            </div>
             <BorderBox11 class="border-bg" title="实时网络解算" :color="['#00FFFF']" backgroundColor="#00bfff15">
               <div class="zl-top">
                 <div>
-                  <span v-for="(device, index) in deviceTab " :key="index" class="btn" :class="{'active': device.code == deviceActiveCode }" @click="setTable(device.code)">{{ device.title }}</span>
+                  <span
+                    v-for="(device, index) in deviceTab"
+                    :key="index"
+                    class="btn"
+                    :class="{ active: device.code == deviceActiveCode }"
+                    @click="setTable(device.code)"
+                    >{{ device.title }}</span
+                  >
                 </div>
               </div>
-              <div class="table-container"  style="position: absolute;">
-                <a-table v-if="deviceActiveCode == 'tun'"  :columns="networkColumns" :data-source="tableDate" :pagination="false" size="small" :scroll="{ y: 155 }" >
+              <div class="table-container" style="position: absolute">
+                <a-table
+                  v-if="deviceActiveCode == 'tun'"
+                  :columns="networkColumns"
+                  :data-source="tableDate"
+                  :pagination="false"
+                  size="small"
+                  :scroll="{ y: 155 }"
+                >
                   <template #bodyCell="{ column, record }">
                     <div v-if="column.dataIndex == 'action'">
-                      <a @click="goLocation(record['nTunID'] ? 'tunnel': 'device',record.deviceID, record)">定位</a>
+                      <a @click="goLocation(record['nTunID'] ? 'tunnel' : 'device', record.deviceID, record)">定位</a>
                     </div>
                   </template>
                 </a-table>
-                <a-table v-if="deviceActiveCode == 'gate'"  :columns="gateColumns" :data-source="tableDate" :pagination="false" size="small" :scroll="{ y: 155 }" >
+                <a-table
+                  v-if="deviceActiveCode == 'gate'"
+                  :columns="gateColumns"
+                  :data-source="tableDate"
+                  :pagination="false"
+                  size="small"
+                  :scroll="{ y: 155 }"
+                >
                   <template #bodyCell="{ column, record }">
                     <div v-if="column.dataIndex == 'action'">
-                      <a @click="goLocation(record['nTunID'] ? 'tunnel': 'device',record.deviceID, record)">定位</a>
+                      <a @click="goLocation(record['nTunID'] ? 'tunnel' : 'device', record.deviceID, record)">定位</a>
                     </div>
                   </template>
                 </a-table>
-                <a-table v-if="deviceActiveCode == 'window'" :columns="windowColumns" :data-source="tableDate" :pagination="false" size="small" :scroll="{ y: 155 }" >
+                <a-table
+                  v-if="deviceActiveCode == 'window'"
+                  :columns="windowColumns"
+                  :data-source="tableDate"
+                  :pagination="false"
+                  size="small"
+                  :scroll="{ y: 155 }"
+                >
                   <template #bodyCell="{ column, record }">
                     <div v-if="column.dataIndex == 'action'">
-                      <a @click="goLocation(record['nTunID'] ? 'tunnel': 'device',record.deviceID, record)">定位</a>
+                      <a @click="goLocation(record['nTunID'] ? 'tunnel' : 'device', record.deviceID, record)">定位</a>
                     </div>
                   </template>
                 </a-table>
@@ -194,19 +218,19 @@
                 </div>
                 <div>
                   路线阻力
-                  <span class="data">{{ maxPaths[activePath - 1] && formatNum(maxPaths[activePath - 1]['TotalH']) || '-' }}</span>
+                  <span class="data">{{ (maxPaths[activePath - 1] && formatNum(maxPaths[activePath - 1]['TotalH'])) || '-' }}</span>
                   Pa
                 </div>
               </div>
               <div class="zl-container">
                 <template v-if="maxPaths.length > 0">
                   <template v-for="(tun, index) in maxPaths[activePath - 1]['tuns']" :key="index">
-                    <div v-if="index < 11" class="zl-path-item" :class="`position${index + 1}`" >
+                    <div v-if="index < 11" class="zl-path-item" :class="`position${index + 1}`">
                       <div class="title">{{ tun['strName'] }}</div>
                     </div>
                   </template>
                 </template>
-                
+
                 <!-- <div class="zl-path-item position1">
                   <div class="title">副平硐</div>
                 </div>
@@ -250,937 +274,945 @@
 </template>
 
 <script setup lang="ts">
-import { ref, onMounted, onUnmounted, defineEmits, defineProps, watch, reactive } from 'vue';
-import { Icon as SvgIcon } from '/@/components/Icon';
-import { BorderBox11, BorderBox1, ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
-import { sensorColumns, networkColumns, warningColumns, deviceTab, SensorType, NetworkType, windowColumns, gateColumns, WindowType, WarningType, GateType, solveTimesData } from './network.data'
-import dayjs from 'dayjs'
-import { formatNum } from '/@/utils/ventutil'
-import { getActions } from '/@/qiankun/state';
-import { useGo } from '/@/hooks/web/usePage';
-import { useGlobSetting } from '/@/hooks/setting';
-
-const glob = useGlobSetting();
-
-const emit = defineEmits(['changePageType'])
-const props = defineProps({
-  pageResult: {
-    type: Object,
-    default: () => {}
+  import { ref, onMounted, onUnmounted, defineEmits, defineProps, watch, reactive } from 'vue';
+  import { Icon as SvgIcon } from '/@/components/Icon';
+  import { BorderBox11, BorderBox1, ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
+  import {
+    sensorColumns,
+    networkColumns,
+    warningColumns,
+    deviceTab,
+    SensorType,
+    NetworkType,
+    windowColumns,
+    gateColumns,
+    WindowType,
+    WarningType,
+    GateType,
+    solveTimesData,
+  } from './network.data';
+  import dayjs from 'dayjs';
+  import { formatNum } from '/@/utils/ventutil';
+  import { getActions } from '/@/qiankun/state';
+  import { useGo } from '/@/hooks/web/usePage';
+  import { useGlobSetting } from '/@/hooks/setting';
+
+  const glob = useGlobSetting();
+
+  const emit = defineEmits(['changePageType']);
+  const props = defineProps({
+    pageResult: {
+      type: Object,
+      default: () => {},
+    },
+  });
+  const go = useGo();
+  let count = 0;
+  const actions = getActions();
+  const pageData = reactive({
+    currentTime: dayjs(new Date().getTime() + count).format('YYYY-MM-DD HH:mm:ss'),
+    totalEnterNum: '-',
+    totalToNum: '-',
+    totallength: '-', // 总长
+    level: '-',
+    dTotalArea: '-',
+    sensorDataList: <SensorType[]>[],
+    networkDataList: <NetworkType[]>[],
+    gateDataList: <GateType[]>[],
+    windowDataList: <WindowType[]>[],
+    warningDataList: <WarningType[]>[],
+  });
+
+  const show = ref(false);
+
+  const deviceActiveCode = ref('tun');
+  const columns = ref(networkColumns);
+  const tableDate = <any[]>ref(pageData.networkDataList as any);
+
+  const totalPa = ref(1640 + '');
+  const rate1 = ref(95 + '');
+  const rate2 = ref(95 + '');
+  const rate3 = ref(95 + '');
+
+  const analysisDetailDataList = [
+    {
+      code: 'totallength',
+      name: '通风巷道总长(m)',
+      icon: 'path-icon1',
+    },
+    {
+      code: 'level',
+      name: '通风难易程度',
+      icon: 'path-icon2',
+    },
+    // {
+    //   code: 'resistance',
+    //   name: '总阻力',
+    //   value: totalPa.value,
+    //   icon: 'path-icon3'
+    // },
+    {
+      code: 'dTotalArea',
+      name: '等积孔(㎡)',
+      icon: 'path-icon4',
+    },
+  ];
+  const maxPaths = ref([]);
+  const activePath = ref(1);
+  let solveTimes: [string, string][] = [];
+  const scrollBoardRef = ref();
+
+  function toHome(type: string) {
+    show.value = false;
+    if (type == 'home') {
+      go(glob.homePath);
+    } else {
+      go(`/micro-vent-3dModal/dashboard/analysis?type=model3D`);
+    }
   }
-})
-const go = useGo()
-let count = 0;
-const actions = getActions();
-const pageData = reactive({
-  currentTime: dayjs(new Date().getTime() + count).format('YYYY-MM-DD HH:mm:ss'),
-  totalEnterNum: '-',
-  totalToNum: '-',
-  totallength: '-', // 总长
-  level: '-',
-  dTotalArea: '-',
-  sensorDataList: <SensorType[]>[],
-  networkDataList: <NetworkType[]>[],
-  gateDataList: <GateType[]>[],
-  windowDataList: <WindowType[]>[],
-  warningDataList:<WarningType[]>[]
-})
-
-const show = ref(false)
-
-const deviceActiveCode = ref('tun')
-const columns = ref(networkColumns)
-const tableDate = <any[]>ref(pageData.networkDataList as any)
-
-const totalPa = ref(1640 + '')
-const rate1 = ref(95 + '')
-const rate2 = ref(95 + '')
-const rate3 = ref(95 + '')
-
-
-const analysisDetailDataList = [
-  {
-    code: 'totallength',
-    name: '通风巷道总长(m)',
-    icon: 'path-icon1'
-  },
-  {
-    code: 'level',
-    name: '通风难易程度',
-    icon: 'path-icon2'
-  },
-  // {
-  //   code: 'resistance',
-  //   name: '总阻力',
-  //   value: totalPa.value,
-  //   icon: 'path-icon3'
-  // },
-  {
-    code: 'dTotalArea',
-    name: '等积孔(㎡)',
-    icon: 'path-icon4'
-  },
-]
-const maxPaths = ref([])
-const activePath = ref(1)
-let solveTimes: [string, string][] = []
-const scrollBoardRef = ref()
-
-function toHome(type: string) {
-  show.value = false
-  if(type == 'home'){
-    go(glob.homePath)
-  }else{
-    go(`/micro-vent-3dModal/dashboard/analysis?type=model3D`)
+
+  function changeActive(index) {
+    activePath.value = index;
   }
-}
-
-function changeActive(index){
-  activePath.value = index
-}
-
-function analyzePageResult(resultData){
-  console.log('数据接收到------', resultData);
-  if(!resultData) return
-  pageData.currentTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
-
-  const sensorDataList = <SensorType[]>[];
-  const networkDataList = <NetworkType[]>[]
-  const gateDataList = <GateType[]>[]
-  const windowDataList = <WindowType[]>[]
-  const warningDataList = <WarningType[]>[]
-  
-  if(resultData['solutionresult']){
-    
-    const solutionresult = resultData['solutionresult'] || null;
-    pageData.totalEnterNum = solutionresult['TotalInQ'] != null ? formatNum(Number(solutionresult['TotalInQ'])) : '-';
-    pageData.totalToNum = solutionresult['TotalOutQ'] != null ? formatNum(Number(solutionresult['TotalOutQ'])): '-';
-    pageData.totallength = solutionresult['TotalLength'] != null ? formatNum(Number(solutionresult['TotalLength'])) : '-';
-    pageData.dTotalArea = solutionresult['dTotalArea'] != null ? formatNum(Number(solutionresult['dTotalArea'])) : '-';
-    
-    if (solutionresult['tuns'])
-
-      for (const key in solutionresult['tuns']) {
-        const item = solutionresult['tuns'][key]
-        const obj = {
-          nTunID: item['nTunID'],
-          strName: item['strName'],
-          deviceID: item['nTunID'],
-          dHFric: item['dHFric'] != null ? item['dHFric'].toFixed(2) : '-', //摩擦阻力
-          dHLocal: item['dHNature'] != null ? item['dHNature'].toFixed(2) : '-', //局部阻力
-          dHNature: item['dHNature'] != null ? item['dHNature'].toFixed(2) : '-', //自然风压
-          dHTotal: item['dHTotal'] != null ? item['dHTotal'].toFixed(2) : '-', //总阻力
-          fRealQ: item['fRealQ'] != null ? item['fRealQ'].toFixed(2) : '-', //实时风量
-          fRealV: item['fRealV'] != null ? item['fRealV'].toFixed(2) : '-', //实时风速
+
+  function analyzePageResult(resultData) {
+    console.log('数据接收到------', resultData);
+    if (!resultData) return;
+    pageData.currentTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+
+    const sensorDataList = <SensorType[]>[];
+    const networkDataList = <NetworkType[]>[];
+    const gateDataList = <GateType[]>[];
+    const windowDataList = <WindowType[]>[];
+    const warningDataList = <WarningType[]>[];
+
+    if (resultData['solutionresult']) {
+      const solutionresult = resultData['solutionresult'] || null;
+      pageData.totalEnterNum = solutionresult['TotalInQ'] != null ? formatNum(Number(solutionresult['TotalInQ'])) : '-';
+      pageData.totalToNum = solutionresult['TotalOutQ'] != null ? formatNum(Number(solutionresult['TotalOutQ'])) : '-';
+      pageData.totallength = solutionresult['TotalLength'] != null ? formatNum(Number(solutionresult['TotalLength'])) : '-';
+      pageData.dTotalArea = solutionresult['dTotalArea'] != null ? formatNum(Number(solutionresult['dTotalArea'])) : '-';
+
+      if (solutionresult['tuns'])
+        for (const key in solutionresult['tuns']) {
+          const item = solutionresult['tuns'][key];
+          const obj = {
+            nTunID: item['nTunID'],
+            strName: item['strName'],
+            deviceID: item['nTunID'],
+            dHFric: item['dHFric'] != null ? item['dHFric'].toFixed(2) : '-', //摩擦阻力
+            dHLocal: item['dHNature'] != null ? item['dHNature'].toFixed(2) : '-', //局部阻力
+            dHNature: item['dHNature'] != null ? item['dHNature'].toFixed(2) : '-', //自然风压
+            dHTotal: item['dHTotal'] != null ? item['dHTotal'].toFixed(2) : '-', //总阻力
+            fRealQ: item['fRealQ'] != null ? item['fRealQ'].toFixed(2) : '-', //实时风量
+            fRealV: item['fRealV'] != null ? item['fRealV'].toFixed(2) : '-', //实时风速
+          };
+          networkDataList.push(obj);
         }
-        networkDataList.push(obj)
-      }
 
-    if (solutionresult['gates'])
-      for (const key in solutionresult['gates']) {
-        const item = solutionresult['gates'][key]
-        const obj = {
-          nGateID: item['nGateID'],
-          deviceID: item['nGateID'],
-          strName: item['strName'],
-          data_dHDiff: item['data_dHDiff'] != null ? item['data_dHDiff'].toFixed(2) : '-', //风门压差
-          data_dQ_min: item['data_dQ_min'] != null ? item['data_dQ_min'].toFixed(2) : '-', //风门漏风量
-          data_dQ_s: item['data_dQ_s'] != null ? item['data_dQ_s'].toFixed(2) : '-', //风门漏风量
+      if (solutionresult['gates'])
+        for (const key in solutionresult['gates']) {
+          const item = solutionresult['gates'][key];
+          const obj = {
+            nGateID: item['nGateID'],
+            deviceID: item['nGateID'],
+            strName: item['strName'],
+            data_dHDiff: item['data_dHDiff'] != null ? item['data_dHDiff'].toFixed(2) : '-', //风门压差
+            data_dQ_min: item['data_dQ_min'] != null ? item['data_dQ_min'].toFixed(2) : '-', //风门漏风量
+            data_dQ_s: item['data_dQ_s'] != null ? item['data_dQ_s'].toFixed(2) : '-', //风门漏风量
+          };
+          gateDataList.push(obj);
         }
-        gateDataList.push(obj)
-      }
 
-    if (solutionresult['windows'])
-      for (const key in solutionresult['windows']) {
-        const item = solutionresult['windows'][key]
-        const obj = {
-          nWindowID: item['nWindowID'],
-          strName: item['strName'],
-          deviceID: item['nWindowID'],
-          data_dHDiff: item['data_dHDiff'] != null ? item['data_dHDiff'].toFixed(2) : '-', //风门压差
-          data_dQ_min: item['data_dQ_min'] != null ? item['data_dQ_min'].toFixed(2) : '-', //风门漏风量
-          data_dQ_s: item['data_dQ_s'] != null ? item['data_dQ_s'].toFixed(2) : '-', //风门漏风量
+      if (solutionresult['windows'])
+        for (const key in solutionresult['windows']) {
+          const item = solutionresult['windows'][key];
+          const obj = {
+            nWindowID: item['nWindowID'],
+            strName: item['strName'],
+            deviceID: item['nWindowID'],
+            data_dHDiff: item['data_dHDiff'] != null ? item['data_dHDiff'].toFixed(2) : '-', //风门压差
+            data_dQ_min: item['data_dQ_min'] != null ? item['data_dQ_min'].toFixed(2) : '-', //风门漏风量
+            data_dQ_s: item['data_dQ_s'] != null ? item['data_dQ_s'].toFixed(2) : '-', //风门漏风量
+          };
+          windowDataList.push(obj);
         }
-        windowDataList.push(obj)
+
+      if (solutionresult['MaxHPaths']) {
+        console.log('最大阻力路线', solutionresult['MaxHPaths']);
+        maxPaths.value = solutionresult['MaxHPaths'];
       }
+    }
 
-    
+    if (resultData['monitors'] && resultData['monitors'].length > 0) {
+      resultData['monitors'].forEach((item) => {
+        item = {
+          strinstallpos: item.strinstallpos,
+          deviceID: item['deviceID'],
+          va: item['readData']['va'] != null ? Number(item['readData']['va']).toFixed(2) : '-',
+          m3: item['readData']['m3'] != null ? formatNum(Number(item['readData']['m3'])) : '-',
+        };
+        sensorDataList.push(item);
+      });
+    }
+    if (resultData['warns'] && resultData['warns'].length > 0) {
+      resultData['warns'].forEach((item) => {
+        const obj = {
+          deviceID: item['deviceid'],
+          pos: item['pos'] != null ? item['pos'] : '-', //地点
+          level: item['level'] != null ? item['level'].toFixed(2) : '-', //等级
+        };
+        warningDataList.push(obj);
+      });
+    }
+    // const solutionresult = JSON.parse(result['result'])
+
+    // if (solutionresult) {
 
-    if(solutionresult['MaxHPaths']){
-      console.log('最大阻力路线', solutionresult['MaxHPaths'])
-      maxPaths.value = solutionresult['MaxHPaths']
+    // }
+
+    pageData.sensorDataList = sensorDataList;
+    pageData.warningDataList = warningDataList;
+    pageData.networkDataList = networkDataList;
+    pageData.gateDataList = gateDataList;
+    pageData.windowDataList = windowDataList;
+    setTable(deviceActiveCode.value);
+    if (solveTimes.length >= 4) {
+      solveTimes.shift();
     }
+    solveTimes = [...solveTimes, [dayjs().format('YYYY-MM-DD HH:mm:ss'), '解算用时' + (Math.random() * 0.1 + 3).toFixed(2) + 's']];
+    const tempSolveTimes = [...solveTimes];
+    tempSolveTimes[tempSolveTimes.length - 1] = [
+      `<span style="color:#00F5FE;" >${tempSolveTimes[tempSolveTimes.length - 1][0]}</span>`,
+      `<span style="color:#00F5FE;" >${tempSolveTimes[tempSolveTimes.length - 1][1]}</span>`,
+    ];
+    scrollBoardRef.value.updateRows(tempSolveTimes);
   }
-  
- if (resultData['monitors'] && resultData['monitors'].length > 0) {
-    resultData['monitors'].forEach((item => {
-      item = {
-        strinstallpos: item.strinstallpos,
-        deviceID: item['deviceID'],
-        va: item['readData']['va'] != null ? Number(item['readData']['va']).toFixed(2) : '-',
-        m3: item['readData']['m3'] != null ? formatNum(Number(item['readData']['m3'])) : '-',
-      }
-      sensorDataList.push(item)
-    }))
 
+  function setTable(code) {
+    deviceActiveCode.value = code;
+    if (code == 'tun') {
+      columns.value = networkColumns;
+      tableDate.value = pageData.networkDataList;
+    } else if (code === 'gate') {
+      columns.value = gateColumns;
+      tableDate.value = pageData.gateDataList;
+    } else if (code === 'window') {
+      columns.value = windowColumns;
+      tableDate.value = pageData.windowDataList;
+    }
   }
-  if (resultData['warns'] && resultData['warns'].length > 0) {
-    resultData['warns'].forEach((item => {
-      const obj = {
-        deviceID: item['deviceid'],
-        pos: item['pos'] != null ? item['pos'] : '-', //地点
-        level: item['level'] != null ? item['level'].toFixed(2) : '-', //等级
-      }
-      warningDataList.push(obj)
-    }))
-  } 
-  // const solutionresult = JSON.parse(result['result'])
-  
-  // if (solutionresult) {
-    
-    
-  // }
-  
-  pageData.sensorDataList = sensorDataList
-  pageData.warningDataList = warningDataList
-  pageData.networkDataList = networkDataList
-  pageData.gateDataList = gateDataList
-  pageData.windowDataList = windowDataList
-  setTable(deviceActiveCode.value)
-  if(solveTimes.length >= 4){
-    solveTimes.shift()
-  }
-  solveTimes = [ ...solveTimes, [dayjs().format('YYYY-MM-DD HH:mm:ss'), '解算用时'+ (Math.random() * 0.1 + 3).toFixed(2) + 's']]
-  const tempSolveTimes = [...solveTimes]
-  tempSolveTimes[tempSolveTimes.length - 1] = [`<span style="color:#00F5FE;" >${tempSolveTimes[tempSolveTimes.length - 1][0]}</span>`, `<span style="color:#00F5FE;" >${tempSolveTimes[tempSolveTimes.length - 1][1]}</span>`]
-  scrollBoardRef.value.updateRows(tempSolveTimes)
-}
-
-function setTable(code) {
-  deviceActiveCode.value = code
-  if(code == 'tun'){
-    columns.value = networkColumns
-    tableDate.value = pageData.networkDataList
-  }else if(code === 'gate'){
-    columns.value = gateColumns
-    tableDate.value = pageData.gateDataList
-  }else if(code === 'window') {
-    columns.value = windowColumns
-    tableDate.value = pageData.windowDataList
-  }
-}
 
-function goLocation(type:string ,id: string, record:any) {
-  actions.setGlobalState({ locationObj: { pageType: type, deviceid: id }, pageObj: null });
-}
+  function goLocation(type: string, id: string, record: any) {
+    actions.setGlobalState({ locationObj: { pageType: type, deviceid: id }, pageObj: null });
+  }
 
-watch(() => props.pageResult, (newData) => {
-  analyzePageResult(newData)
-})
+  watch(
+    () => props.pageResult,
+    (newData) => {
+      analyzePageResult(newData);
+    }
+  );
 
-onMounted(() => {
-  show.value = true
-});
+  onMounted(() => {
+    show.value = true;
+  });
 
-onUnmounted(() => {
-  
-});
+  onUnmounted(() => {});
 </script>
 <style scoped lang="less">
-@ventSpace: zxm;
-
-.zl-box {
-  width: 100%;
-  height: calc(100% - 30px);
-  top: 80px;
-  position: relative;
-  overflow: hidden;
-  color: #fff;
-  background-position: center;
-  background-size: cover;
-
-  .modal-box {
+  @ventSpace: zxm;
+
+  .zl-box {
+    width: 100%;
+    height: calc(100% - 30px);
+    top: 80px;
     position: relative;
+    overflow: hidden;
+    color: #fff;
+    background-position: center;
+    background-size: cover;
+
+    .modal-box {
+      position: relative;
+      width: 100%;
+      height: 100%;
+      top: 0;
+      left: 0;
+    }
+  }
+
+  .zl-container-box {
     width: 100%;
     height: 100%;
-    top: 0;
-    left: 0;
-  }
-}
-
-.zl-container-box {
-  width: 100%;
-  height: 100%;
-  top: 10px;
-  position: relative;
-  z-index: 99;
-  pointer-events: none;
-
-  .top-box {
-    display: flex;
-    justify-content: space-between;
-    height: calc(60% - 10px);
+    top: 10px;
     position: relative;
     z-index: 99;
-    .lr-box {
-      width: 374px;
-      margin-top: 10px;
-    }
+    pointer-events: none;
 
-    .left-box {
-      .network-time{
-        height: 50px;
-        padding-left: 10px;
-        font-size: 18px;
-        position: relative;
-        top: -5px;
-        .time{
-          font-size: 24px;
-          color: #00f5fe;
-          font-family: 'electronicFont';
-        }
+    .top-box {
+      display: flex;
+      justify-content: space-between;
+      height: calc(60% - 10px);
+      position: relative;
+      z-index: 99;
+      .lr-box {
+        width: 374px;
+        margin-top: 10px;
       }
-      .analysis-box {
-        position: relative;
 
-        .pie-group {
-          display: flex;
-          flex-direction: row;
-          padding-top: 30px;
+      .left-box {
+        .network-time {
+          height: 50px;
+          padding-left: 10px;
+          font-size: 18px;
+          position: relative;
+          top: -5px;
+          .time {
+            font-size: 24px;
+            color: #00f5fe;
+            font-family: 'electronicFont';
+          }
+        }
+        .analysis-box {
+          position: relative;
 
-          .item-pie {
-            flex: 1;
-            padding: 5px;
+          .pie-group {
             display: flex;
-            flex-direction: column;
-            justify-content: center;
-            align-items: center;
+            flex-direction: row;
+            padding-top: 30px;
 
-            .pie {
-              width: 140px;
-              height: 80px;
-              background: url('/@/assets/images/vent/path/di.png') no-repeat;
-              background-size: contain;
+            .item-pie {
+              flex: 1;
+              padding: 5px;
               display: flex;
+              flex-direction: column;
               justify-content: center;
+              align-items: center;
 
-              .qiu1 {
-                background: url('/@/assets/images/vent/path/cicle01.png') no-repeat center;
-              }
+              .pie {
+                width: 140px;
+                height: 80px;
+                background: url('/@/assets/images/vent/path/di.png') no-repeat;
+                background-size: contain;
+                display: flex;
+                justify-content: center;
+
+                .qiu1 {
+                  background: url('/@/assets/images/vent/path/cicle01.png') no-repeat center;
+                }
+
+                .qiu2 {
+                  background: url('/@/assets/images/vent/path/cicle04.png') no-repeat center;
+                }
 
-              .qiu2 {
-                background: url('/@/assets/images/vent/path/cicle04.png') no-repeat center;
+                .qiu {
+                  position: relative;
+                  width: 60px;
+                  height: 60px;
+                  background-size: 100%;
+                  display: flex;
+                  justify-content: center;
+                  padding-top: 18px;
+                  font-size: 14px;
+                  font-weight: 600px;
+
+                  &::before {
+                    content: '';
+                    display: block;
+                    width: 60px;
+                    height: 60px;
+                    position: absolute;
+                    left: 50%;
+                    top: 50%;
+                    transform: translate(-50%, -50%);
+                    border-radius: 50%;
+                    border: 3px solid rgba(255, 255, 255, 0.5);
+                    animation: scale 2s linear infinite;
+                  }
+                }
               }
 
-              .qiu {
-                position: relative;
-                width: 60px;
-                height: 60px;
-                background-size: 100%;
+              .pie-data {
+                width: 140px;
+                height: 20px;
                 display: flex;
                 justify-content: center;
-                padding-top: 18px;
-                font-size: 14px;
-                font-weight: 600px;
-                
+                position: relative;
+                background: url('/@/assets/images/vent/path/pie-line.png');
 
-                &::before {
-                  content: '';
+                .data-text {
                   display: block;
-                  width: 60px;
-                  height: 60px;
                   position: absolute;
-                  left: 50%;
-                  top: 50%;
-                  transform: translate(-50%, -50%);
-                  border-radius: 50%;
-                  border: 3px solid rgba(255, 255, 255, 0.5);
-                  animation: scale 2s linear infinite;
+                  top: -8px;
                 }
               }
             }
+          }
 
-            .pie-data {
-              width: 140px;
-              height: 20px;
+          .detail-data-group {
+            width: 100%;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            margin-top: 15px;
+
+            .container-item {
+              width: 307px;
+              height: 63px;
               display: flex;
-              justify-content: center;
               position: relative;
-              background: url('/@/assets/images/vent/path/pie-line.png');
+              background: url('/@/assets/images/vent/plane-bottom.png') no-repeat;
+              background-size: auto;
+              background-position: bottom;
+              padding: 10px 30px;
 
-              .data-text {
+              &::before {
+                content: '';
                 display: block;
+                width: 100%;
+                height: 5px;
                 position: absolute;
-                top: -8px;
+                top: 62px;
+                left: 0;
+                background-color: #73f4ff66;
+                backdrop-filter: blur(5px);
               }
-            }
-          }
-        }
-
-        .detail-data-group {
-          width: 100%;
-          ;
-          display: flex;
-          flex-direction: column;
-          align-items: center;
-          margin-top: 15px;
-
-          .container-item {
-            width: 307px;
-            height: 63px;
-            display: flex;
-            position: relative;
-            background: url('/@/assets/images/vent/plane-bottom.png') no-repeat;
-            background-size: auto;
-            background-position: bottom;
-            padding: 10px 30px;
-
-            &::before {
-              content: '';
-              display: block;
-              width: 100%;
-              height: 5px;
-              position: absolute;
-              top: 62px;
-              left: 0;
-              background-color: #73f4ff66;
-              backdrop-filter: blur(5px);
-            }
 
-            .item-icon {
-              width: 60px;
-              height: 45px;
-              background: url('/@/assets/images/vent/plane-icon-bg.png') no-repeat;
-              background-size: cover;
+              .item-icon {
+                width: 60px;
+                height: 45px;
+                background: url('/@/assets/images/vent/plane-icon-bg.png') no-repeat;
+                background-size: cover;
 
-              .icon-style {
-                margin: 10px 0 0 18px;
+                .icon-style {
+                  margin: 10px 0 0 18px;
+                }
               }
-            }
 
-            .item-name {
-              width: 180px;
-              line-height: 60px;
-              margin-left: 5px;
-              text-align: left;
-            }
+              .item-name {
+                width: 180px;
+                line-height: 60px;
+                margin-left: 5px;
+                text-align: left;
+              }
 
-            .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);
+              .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;
+                &::before {
+                  width: 6px;
+                  height: 6px;
+                  content: '';
+                  position: absolute;
+                  left: -3px;
+                  top: 8px;
+                  background: #ffa500;
+                  border-radius: 3px;
+                }
               }
             }
           }
-        }
 
-        .feature-group {
-          display: flex;
-          flex-direction: row;
-          padding: 20px;
-          margin-top: 15px;
-
-          .feature-item {
-            width: 108px;
-            height: 120px;
-            background: url('/@/assets/images/vent/path/path-feature-bg.png');
+          .feature-group {
             display: flex;
-            flex-direction: column;
-            // justify-content: center;
-
-            .pie {
+            flex-direction: row;
+            padding: 20px;
+            margin-top: 15px;
+
+            .feature-item {
+              width: 108px;
+              height: 120px;
+              background: url('/@/assets/images/vent/path/path-feature-bg.png');
               display: flex;
-              justify-content: center;
-            }
+              flex-direction: column;
+              // justify-content: center;
+
+              .pie {
+                display: flex;
+                justify-content: center;
+              }
 
-            .data {
-              margin-top: 15px;
-              font-size: 12px;
-              scale: 0.9;
-              text-align: center;
+              .data {
+                margin-top: 15px;
+                font-size: 12px;
+                scale: 0.9;
+                text-align: center;
+              }
             }
           }
-        }
-        .time-list{
-          height: 122px;
-          margin: 30px 15px 0px 30px;
-          padding-bottom: 10px;
-          pointer-events: auto;
-          .row-item:first-child{
-            color: #00f5fe !important;
+          .time-list {
+            height: 122px;
+            margin: 30px 15px 0px 30px;
+            padding-bottom: 10px;
+            pointer-events: auto;
+            .row-item:first-child {
+              color: #00f5fe !important;
+            }
           }
         }
       }
-    }
-
-    .right-box {
-      display: flex;
-      flex-direction: column;
 
-      .sensor-box,
-      .warning-box {
-        position: relative;
+      .right-box {
+        display: flex;
+        flex-direction: column;
 
-        // min-height: 220px;
-        // max-height: 250px;
-        .table-box {
-          height: 280px;
-          width: 100%;
+        .sensor-box,
+        .warning-box {
           position: relative;
 
-          .table-container {
-            width: calc(100% - 40px);
-            margin: 25px 20px 20px;
-            // height: 250px;
-            position: absolute;
+          // min-height: 220px;
+          // max-height: 250px;
+          .table-box {
+            height: 280px;
+            width: 100%;
+            position: relative;
+
+            .table-container {
+              width: calc(100% - 40px);
+              margin: 25px 20px 20px;
+              // height: 250px;
+              position: absolute;
+            }
           }
         }
-      }
-      
-      .sensor-box {
-        .item-top-title {
-          &::after {
-            left: 110px;
-          }
 
-          &::before {
-            left: 265px;
+        .sensor-box {
+          .item-top-title {
+            &::after {
+              left: 110px;
+            }
+
+            &::before {
+              left: 265px;
+            }
           }
+          // .table-container {
+          //   // height: 280px !important;
+          // }
         }
-        // .table-container {
-        //   // height: 280px !important;
-        // }
-      }
-      .warning-box {
-        margin-top: 10px;
-      }
-      :deep.zxm-table-content{
-        max-height: none !important;
-      }
-      :deep(.zxm-table) {
-        table{
-          width:max-content;
+        .warning-box {
+          margin-top: 10px;
         }
-      }
-    }
-  }
-
-  .bottom-box {
-    width: 100%;
-    height: 280px;
-    display: flex;
-    justify-content: space-between;
-    margin-top: 0px;
-    position: relative;
-    top: 30px;
-    bottom: 10px;
-    pointer-events: auto;
-    .icon-group{
-      position: absolute;
-      top: -65px;
-      right: 380px;
-      display: flex;
-      .to-small {
-        width: 60px;
-        height: 60px;
-        background: url('/@/assets/images/vent/home/tohome.png') no-repeat center;
-        background-size: auto;
-        border-radius: 10px;
-        &:hover {
-          background-color: rgba(79, 104, 134, 0.418);
+        :deep.zxm-table-content {
+          max-height: none !important;
         }
-      }
-      .to-model {
-        width: 60px;
-        height: 60px;
-        background: url('/@/assets/images/vent/home/tosmall.png') no-repeat center;
-        background-size: auto;
-        border-radius: 10px;
-        &:hover {
-          background-color: rgba(79, 104, 134, 0.418);
+        :deep(.zxm-table) {
+          table {
+            width: max-content;
+          }
         }
       }
     }
-    
-    .bottom-lr-box {
-      flex: 1;
-      display: flex;
-      justify-content: center;
 
-    }
-    .network-top {
+    .bottom-box {
+      width: 100%;
+      height: 280px;
       display: flex;
-      flex-direction: row;
       justify-content: space-between;
-      position: absolute;
-      // top: 55px;
-      top: 45px;
-      right: 0;
-      padding: 0 10px 0 30px;
-      z-index: 99;
+      margin-top: 0px;
+      position: relative;
+      top: 30px;
+      bottom: 10px;
+      pointer-events: auto;
+      .icon-group {
+        position: absolute;
+        top: -65px;
+        right: 380px;
+        display: flex;
+        .to-small {
+          width: 60px;
+          height: 60px;
+          background: url('/@/assets/images/vent/home/tohome.png') no-repeat center;
+          background-size: auto;
+          border-radius: 10px;
+          &:hover {
+            background-color: rgba(79, 104, 134, 0.418);
+          }
+        }
+        .to-model {
+          width: 60px;
+          height: 60px;
+          background: url('/@/assets/images/vent/home/tosmall.png') no-repeat center;
+          background-size: auto;
+          border-radius: 10px;
+          &:hover {
+            background-color: rgba(79, 104, 134, 0.418);
+          }
+        }
+      }
 
-      .network-top-left {
+      .bottom-lr-box {
+        flex: 1;
         display: flex;
+        justify-content: center;
+      }
+      .network-top {
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        position: absolute;
+        // top: 55px;
+        top: 45px;
+        right: 0;
+        padding: 0 10px 0 30px;
+        z-index: 99;
 
-        div {
-          margin-right: 20px;
-        }
+        .network-top-left {
+          display: flex;
 
-        span {
-          font-family: 'douyuFont';
-          font-size: 15px;
-        }
+          div {
+            margin-right: 20px;
+          }
 
-        .accuracy-rate {
-          color: #FFA500;
-        }
+          span {
+            font-family: 'douyuFont';
+            font-size: 15px;
+          }
 
-        .error-rate {
-          color: #00f5fe;
+          .accuracy-rate {
+            color: #ffa500;
+          }
+
+          .error-rate {
+            color: #00f5fe;
+          }
         }
-      }
 
-      .time {
-        color: #949494;
+        .time {
+          color: #949494;
+        }
       }
-    }
 
-    .bottom-left {
-      margin-right: 0px !important;
-      position: relative;
+      .bottom-left {
+        margin-right: 0px !important;
+        position: relative;
 
-      .table-container {
-        // height: 180px;
-        margin-top: 40px;
-        margin-left: 10px;
-        margin-right: 8px;
-      }
-      :deep(.zxm-table) {
-        table{
-          width: 100%;
+        .table-container {
+          // height: 180px;
+          margin-top: 40px;
+          margin-left: 10px;
+          margin-right: 8px;
+        }
+        :deep(.zxm-table) {
+          table {
+            width: 100%;
+          }
         }
       }
-    }
 
-    .bottom-right {
-      // margin-left: 10px;
-      .zl-container {
-        width: 100%;
-        height: 100%;
-        margin: 0 10px;
-        background: url('/@/assets/images/vent/path/zl-bg1.png') no-repeat;
-        background-size: 940px 240px;
-        position: relative;
-
-        &::after {
-          content: '';
-          display: block;
-          position: absolute;
+      .bottom-right {
+        // margin-left: 10px;
+        .zl-container {
           width: 100%;
           height: 100%;
-          top: 85px;
-          background: url('/@/assets/images/vent/path/zl-bg2.png') no-repeat;
-          background-size: 920px 100px;
+          margin: 0 10px;
+          background: url('/@/assets/images/vent/path/zl-bg1.png') no-repeat;
+          background-size: 940px 240px;
+          position: relative;
+
+          &::after {
+            content: '';
+            display: block;
+            position: absolute;
+            width: 100%;
+            height: 100%;
+            top: 85px;
+            background: url('/@/assets/images/vent/path/zl-bg2.png') no-repeat;
+            background-size: 920px 100px;
+          }
         }
-      }
 
-      .zl-path-item {
-        height: 67px;
-        background: url('/@/assets/images/vent/path/zl-path-item-bg.png') no-repeat;
-        background-size: auto;
-        background-position: center bottom;
-        position: absolute;
-        scale: 0.9;
+        .zl-path-item {
+          height: 67px;
+          background: url('/@/assets/images/vent/path/zl-path-item-bg.png') no-repeat;
+          background-size: auto;
+          background-position: center bottom;
+          position: absolute;
+          scale: 0.9;
 
-        .title {
-          position: relative;
-          top: -20px;
-          text-align: center;
-          font-size: 12px;
-          background: #00f5fe33;
-          padding: 3px 5px;
-          backdrop-filter: blur(5px);
+          .title {
+            position: relative;
+            top: -20px;
+            text-align: center;
+            font-size: 12px;
+            background: #00f5fe33;
+            padding: 3px 5px;
+            backdrop-filter: blur(5px);
+          }
+        }
+        .position10 {
+          top: 128px;
+          left: 120px;
         }
-      }
-      .position10 {
-        top: 128px;
-        left: 120px;
-      }
 
-      .position11 {
-        top: 130px;
-        left: 0px;
-      }
+        .position11 {
+          top: 130px;
+          left: 0px;
+        }
 
-      .position1 {
-        top: 52px;
-        left: 100px;
-      }
+        .position1 {
+          top: 52px;
+          left: 100px;
+        }
 
-      .position9 {
-        top: 132px;
-        left: 270px;
-      }
+        .position9 {
+          top: 132px;
+          left: 270px;
+        }
 
-      .position8 {
-        top: 128px;
-        left: 420px;
-      }
+        .position8 {
+          top: 128px;
+          left: 420px;
+        }
 
-      .position2 {
-        top: 60px;
-        left: 320px;
-      }
+        .position2 {
+          top: 60px;
+          left: 320px;
+        }
 
-      .position7 {
-        top: 120px;
-        left: 580px;
-      }
+        .position7 {
+          top: 120px;
+          left: 580px;
+        }
 
-      .position6 {
-        top: 123px;
-        left: 690px;
-      }
+        .position6 {
+          top: 123px;
+          left: 690px;
+        }
 
-      .position5 {
-        top: 103px;
-        left: 830px;
-      }
+        .position5 {
+          top: 103px;
+          left: 830px;
+        }
 
-      .position4 {
-        top: 90px;
-        left: 740px;
-      }
+        .position4 {
+          top: 90px;
+          left: 740px;
+        }
 
-      .position3 {
-        top: 80px;
-        left: 535px;
+        .position3 {
+          top: 80px;
+          left: 535px;
+        }
       }
     }
-  }
-  .zl-top {
-    width: calc(100% - 30px);
-    padding: 0 20px;
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-    position: relative;
-    top: 35px;
-    z-index: 99;
-    margin: 10px;
-    border-bottom: 1px solid #00f5fe88;
-
-    .btn {
-      padding: 3px 10px;
-      border-top: 1px solid #c6c6c6;
-      background-image: linear-gradient(#c2c2c2aa, #b3b3b388 20%, #5a5a5a88);
-      cursor: pointer;
-      margin-right: 5px;
-
-      &:hover,
-      &:active {
+    .zl-top {
+      width: calc(100% - 30px);
+      padding: 0 20px;
+      display: flex;
+      flex-direction: row;
+      justify-content: space-between;
+      position: relative;
+      top: 35px;
+      z-index: 99;
+      margin: 10px;
+      border-bottom: 1px solid #00f5fe88;
+
+      .btn {
+        padding: 3px 10px;
+        border-top: 1px solid #c6c6c6;
+        background-image: linear-gradient(#c2c2c2aa, #b3b3b388 20%, #5a5a5a88);
+        cursor: pointer;
+        margin-right: 5px;
+
+        &:hover,
+        &:active {
+          border-top: 1px solid #00f5fe;
+          background-image: linear-gradient(#00f5feaa, #1adce288 20%, #00848988);
+        }
+      }
+
+      .active {
         border-top: 1px solid #00f5fe;
         background-image: linear-gradient(#00f5feaa, #1adce288 20%, #00848988);
       }
+
+      .data {
+        font-family: 'douyuFont';
+        color: #ffa500;
+        font-size: 15px;
+      }
     }
+  }
 
-    .active {
-      border-top: 1px solid #00f5fe;
-      background-image: linear-gradient(#00f5feaa, #1adce288 20%, #00848988);
+  .item-top-title {
+    width: 374px;
+    height: 32px;
+    text-align: center;
+    line-height: 34px;
+    font-size: 15px;
+    font-weight: 600;
+    color: #fafafa;
+    position: absolute;
+    padding-top: 0px;
+    top: -9px;
+    z-index: 999;
+
+    &::before {
+      content: '';
+      display: block;
+      width: 40px;
+      height: 1px;
+      position: absolute;
+      left: 255px;
+      top: 50%;
+      transform: translateY(-50%);
+      -webkit-transform: translate(-50%, -50%);
+      background-color: #00d4fe88;
     }
 
-    .data {
-      font-family: 'douyuFont';
-      color: #FFA500;
-      font-size: 15px;
+    &::after {
+      content: '';
+      display: block;
+      width: 40px;
+      height: 1px;
+      position: absolute;
+      left: 120px;
+      top: 50%;
+      transform: translateY(-50%);
+      -webkit-transform: translate(-50%, -50%);
+      background-color: #00d4fe88;
     }
   }
-}
-
-.item-top-title {
-  width: 374px;
-  height: 32px;
-  text-align: center;
-  line-height: 34px;
-  font-size: 15px;
-  font-weight: 600;
-  color: #fafafa;
-  position: absolute;
-  padding-top: 0px;
-  top: -9px;
-  z-index: 999;
-
-  &::before {
-    content: '';
-    display: block;
-    width: 40px;
-    height: 1px;
-    position: absolute;
-    left: 255px;
-    top: 50%;
-    transform: translateY(-50%);
-    -webkit-transform: translate(-50%, -50%);
-    background-color: #00d4fe88;
-  }
 
-  &::after {
-    content: '';
-    display: block;
-    width: 40px;
-    height: 1px;
-    position: absolute;
-    left: 120px;
-    top: 50%;
-    transform: translateY(-50%);
-    -webkit-transform: translate(-50%, -50%);
-    background-color: #00d4fe88;
-  }
-}
-
-.signal-round {
-  display: inline-block;
-  width: 4px;
-  height: 4px;
-  border-radius: 50%;
-  position: relative;
-  top: -3px;
-
-  &::after {
-    display: block;
-    content: '';
-    position: absolute;
-    width: 8px;
-    height: 8px;
-    top: -2px;
-    left: -2px;
+  .signal-round {
+    display: inline-block;
+    width: 4px;
+    height: 4px;
     border-radius: 50%;
-    background-color: #daffc044;
-    box-shadow: 0 0 1px 1px #c6ff7722;
+    position: relative;
+    top: -3px;
+
+    &::after {
+      display: block;
+      content: '';
+      position: absolute;
+      width: 8px;
+      height: 8px;
+      top: -2px;
+      left: -2px;
+      border-radius: 50%;
+      background-color: #daffc044;
+      box-shadow: 0 0 1px 1px #c6ff7722;
+    }
   }
-}
 
-.signal-round-run {
-  background-color: #67fc00;
+  .signal-round-run {
+    background-color: #67fc00;
 
-  &::after {
-    background-color: #daffc044;
-    box-shadow: 0 0 1px 1px #c6ff7722;
+    &::after {
+      background-color: #daffc044;
+      box-shadow: 0 0 1px 1px #c6ff7722;
+    }
   }
-}
 
-.signal-round-red {
-  background-color: #FF3823;
+  .signal-round-red {
+    background-color: #ff3823;
 
-  &::after {
-    background-color: #FF382344;
-    box-shadow: 0 0 1px 1px #FF382333;
+    &::after {
+      background-color: #ff382344;
+      box-shadow: 0 0 1px 1px #ff382333;
+    }
   }
-}
 
-.signal-round-orange {
-  background-color: #FF9B17;
+  .signal-round-orange {
+    background-color: #ff9b17;
 
-  &::after {
-    background-color: #FF9B1744;
-    box-shadow: 0 0 1px 1px #FF9B1733;
+    &::after {
+      background-color: #ff9b1744;
+      box-shadow: 0 0 1px 1px #ff9b1733;
+    }
   }
-}
 
-.signal-round-yellow {
-  background-color: #FFFF00;
+  .signal-round-yellow {
+    background-color: #ffff00;
 
-  &::after {
-    background-color: #FFFF0044;
-    box-shadow: 0 0 1px 1px #FFFF0033;
+    &::after {
+      background-color: #ffff0044;
+      box-shadow: 0 0 1px 1px #ffff0033;
+    }
   }
-}
 
-.table-container {
-  overflow-y: auto;
-  overflow-x: hidden;
-  pointer-events: auto;
+  .table-container {
+    overflow-y: auto;
+    overflow-x: hidden;
+    pointer-events: auto;
 
-  &::-webkit-scrollbar {
-    width: 4px;
-    height: 8px;
-    background-color: #f5f5f500;
-  }
+    &::-webkit-scrollbar {
+      width: 4px;
+      height: 8px;
+      background-color: #f5f5f500;
+    }
+
+    &::-webkit-scrollbar-track {
+      background-color: #ffffff33;
+      border-radius: 10px;
+    }
 
-  &::-webkit-scrollbar-track {
-    background-color: #ffffff33;
-    border-radius: 10px;
+    &::-webkit-scrollbar-thumb {
+      background-color: #cccccc44;
+      border-radius: 10px;
+    }
   }
 
-  &::-webkit-scrollbar-thumb {
-    background-color: #cccccc44;
-    border-radius: 10px;
+  .border-bg {
+    backdrop-filter: blur(5px);
   }
-}
 
-.border-bg{
-  backdrop-filter: blur(5px);
-}
+  @keyframes scale {
+    0% {
+      transform: translate(-50%, -50%) scale(0.9);
+      opacity: 1;
+    }
 
-@keyframes scale {
-  0% {
-    transform: translate(-50%, -50%) scale(0.9);
-    opacity: 1;
+    100% {
+      transform: translate(-50%, -50%) scale(1.5);
+      opacity: 0;
+    }
   }
 
-  100% {
-    transform: translate(-50%, -50%) scale(1.5);
-    opacity: 0;
+  :deep(.@{ventSpace}-progress-text) {
+    color: #fff !important;
   }
-}
 
-:deep(.@{ventSpace}-progress-text) {
-  color: #fff !important;
-}
+  :deep(.@{ventSpace}-table-thead) {
+    background-color: transparent !important;
 
-:deep(.@{ventSpace}-table-thead) {
-  background-color: transparent !important;
+    & > tr {
+      border: 1px solid #00f5fe !important;
+    }
 
-  &>tr {
-    border: 1px solid #00f5fe !important;
+    & > tr > th {
+      // border: none !important;
+      color: #00f5fe !important;
+      border-top: 1px solid #00f5fe !important;
+      border-bottom: 1px solid #00f5fe !important;
+      border-left: none !important;
+      border-right: none !important;
+      font-size: 13px;
+    }
   }
 
-  &>tr>th {
-    // border: none !important;
-    color: #00f5fe !important;
-    border-top: 1px solid #00f5fe !important;
-    border-bottom: 1px solid #00f5fe !important;
-    border-left: none !important;
-    border-right: none !important;
-    font-size: 13px;
+  :deep(.@{ventSpace}-table-tbody) {
+    & > tr > td {
+      font-size: 13px;
+    }
   }
-}
 
-:deep(.@{ventSpace}-table-tbody) {
-  &>tr>td {
-    font-size: 13px;
+  :deep(.@{ventSpace}-table-small) {
+    border: none !important;
   }
-}
 
-:deep(.@{ventSpace}-table-small) {
-  border: none !important;
-}
-
-:deep(.@{ventSpace}-layout) {
-  background: transparent !important;
-}</style>
+  :deep(.@{ventSpace}-layout) {
+    background: transparent !important;
+  }
+</style>

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff