Browse Source

1. 封装场景业务代码,新增瓦斯综合管控部分页面
2. 三维模型去掉电子显示屏播放动画
3. 风门开关门动画适配有开关到位和只有关到位两种点表的情况
4. 测风曾修改测风结果显示字段

hongrunxia 1 year ago
parent
commit
a7682db3d2
95 changed files with 1842 additions and 2037 deletions
  1. 2 2
      public/js/config.js
  2. 0 1
      public/js/webrtcstreamer.js
  3. BIN
      public/model/glft/fire/balancePress_2024-02-23.glb
  4. BIN
      public/model/glft/jbfj/jbfj-hd_2024-03-10.glb
  5. BIN
      src/assets/images/home-container/warn-icon.png
  6. BIN
      src/assets/images/home-container/warn-icon1.png
  7. BIN
      src/assets/images/home-container/warn-icon2.png
  8. BIN
      src/assets/images/home-container/warn-icon3.png
  9. BIN
      src/assets/images/home-container/warn1.png
  10. BIN
      src/assets/images/home-container/warn7.png
  11. BIN
      src/assets/images/home-container/warn8.png
  12. 3 3
      src/components/Form/src/components/FormItem.vue
  13. 6 6
      src/components/Form/src/jeecg/components/modal/PositionSelectModal.vue
  14. 142 147
      src/components/Form/src/jeecg/components/roleSelect/RoleSelectModal.vue
  15. 29 15
      src/components/Icon/src/IconPicker.vue
  16. 60 44
      src/components/jeecg/comment/MyComment.vue
  17. 0 1
      src/hooks/system/useListPage.ts
  18. 53 53
      src/layouts/default/header/components/user-dropdown/UpdateHome.vue
  19. 0 1
      src/router/guard/index.ts
  20. 1 0
      src/router/guard/permissionGuard.ts
  21. 3 0
      src/utils/event/index.ts
  22. 2 2
      src/utils/threejs/main.worker.ts
  23. 1 0
      src/utils/threejs/util.ts
  24. 1 1
      src/views/dashboard/Analysis/index.vue
  25. 1 1
      src/views/monitor/datalog/DataLogModal.vue
  26. 61 57
      src/views/vent/comment/EditRowTable.vue
  27. 0 150
      src/views/vent/comment/components/customHeader.vue
  28. 2 2
      src/views/vent/deviceManager/comment/FormModal.vue
  29. 45 49
      src/views/vent/deviceManager/comment/warningTabel/BaseModal1.vue
  30. 3 4
      src/views/vent/deviceManager/equipManager/component/FormModal.vue
  31. 2 1
      src/views/vent/deviceManager/fanTabel/fan.api.ts
  32. 43 36
      src/views/vent/home/clique/components/dialog-modal.vue
  33. 0 1
      src/views/vent/home/colliery/components/device-warn.vue
  34. 4 5
      src/views/vent/home/colliery/components/fan-monitor.vue
  35. 11 3
      src/views/vent/home/colliery/components/main-monitor.vue
  36. 1 1
      src/views/vent/monitorManager/alarmMonitor/index.vue
  37. 2 3
      src/views/vent/monitorManager/balancePressMonitor/balancePress.threejs.base.ts
  38. 0 9
      src/views/vent/monitorManager/balancePressMonitor/components/balancePressHome.vue
  39. 1 1
      src/views/vent/monitorManager/balancePressMonitor/index.vue
  40. 1 1
      src/views/vent/monitorManager/beltTunMonitor/beltTun.data.ts
  41. 0 1
      src/views/vent/monitorManager/beltTunMonitor/beltTun.threejs.base.ts
  42. 1 1
      src/views/vent/monitorManager/beltTunMonitor/index.vue
  43. 1 1
      src/views/vent/monitorManager/chamberMonitor/index.vue
  44. 35 10
      src/views/vent/monitorManager/comment/AlarmHistoryTable.vue
  45. 26 5
      src/views/vent/monitorManager/comment/HandlerHistoryTable.vue
  46. 3 3
      src/views/vent/monitorManager/comment/MonitorTable.vue
  47. 0 97
      src/views/vent/monitorManager/comment/MonitorTable1.vue
  48. 30 19
      src/views/vent/monitorManager/comment/WorkFaceAlarmHistoryTable.vue
  49. 43 31
      src/views/vent/monitorManager/comment/WorkFaceHandlerHistoryTable.vue
  50. 1 1
      src/views/vent/monitorManager/comment/components/reportInfo.vue
  51. 1 1
      src/views/vent/monitorManager/compreMonitor/index.vue
  52. 680 670
      src/views/vent/monitorManager/compressor/components/nitrogenHome_new.vue
  53. 2 1
      src/views/vent/monitorManager/compressor/index.vue
  54. 4 2
      src/views/vent/monitorManager/compressor/nitrogen.data.ts
  55. 64 0
      src/views/vent/monitorManager/deviceMonitor/components/device/device.data.ts
  56. 40 4
      src/views/vent/monitorManager/deviceMonitor/components/device/index.vue
  57. 2 1
      src/views/vent/monitorManager/deviceMonitor/components/network/index.vue
  58. 114 108
      src/views/vent/monitorManager/fanLocalMonitor/components/DetailModal.vue
  59. 7 61
      src/views/vent/monitorManager/fanLocalMonitor/fanLocal.three.ts
  60. 23 18
      src/views/vent/monitorManager/fanLocalMonitor/index.vue
  61. 1 1
      src/views/vent/monitorManager/fiberMonitor/fiber.data.ts
  62. 0 1
      src/views/vent/monitorManager/gasPumpMonitor/gasPump.threejs.under.ts
  63. 1 1
      src/views/vent/monitorManager/gasPumpMonitor/index.vue
  64. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.qd.ts
  65. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.two.ss.ts
  66. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.xr.ts
  67. 0 1
      src/views/vent/monitorManager/gateMonitor/gate.threejs.yy.ts
  68. 51 35
      src/views/vent/monitorManager/gateMonitor/index.vue
  69. 1 1
      src/views/vent/monitorManager/groutMonitor/index.vue
  70. 6 1
      src/views/vent/monitorManager/mainFanMonitor/index.vue
  71. 4 4
      src/views/vent/monitorManager/nitrogen/components/nitrogenHome.vue
  72. 4 8
      src/views/vent/monitorManager/nitrogen/index.vue
  73. 44 8
      src/views/vent/monitorManager/nitrogen/nitrogen.data.1.ts
  74. 0 38
      src/views/vent/monitorManager/nitrogen/nitrogen.data.ts
  75. 14 2
      src/views/vent/monitorManager/nitrogen/nitrogen.dishang.threejs.ts
  76. 4 4
      src/views/vent/monitorManager/nitrogen/nitrogen.threejs.ts
  77. 1 1
      src/views/vent/monitorManager/obfurageMonitor/index.vue
  78. 0 9
      src/views/vent/monitorManager/safetyMonitor/safety.data.ts
  79. 2 2
      src/views/vent/monitorManager/sensorMonitor/index.vue
  80. 1 1
      src/views/vent/monitorManager/tunFaceMonitor/index.vue
  81. 2 3
      src/views/vent/monitorManager/tunFaceMonitor/tunFace.data.ts
  82. 13 48
      src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts
  83. 21 49
      src/views/vent/monitorManager/windowMonitor/shuangdaoFc.threejs.ts
  84. 19 23
      src/views/vent/monitorManager/windrectMonitor/components/resultTable.vue
  85. 1 1
      src/views/vent/monitorManager/windrectMonitor/duisheFixed.threejs.ts
  86. 44 52
      src/views/vent/monitorManager/windrectMonitor/index.vue
  87. 1 55
      src/views/vent/monitorManager/windrectMonitor/windrect.data.ts
  88. 0 1
      src/views/vent/monitorManager/workFaceMonitor/components/workFaceHistory.vue
  89. 1 1
      src/views/vent/monitorManager/workFaceMonitor/index.vue
  90. 1 2
      src/views/vent/monitorManager/workFaceMonitor/workFace.data.ts
  91. 0 1
      src/views/vent/performance/comment/NormalTable.vue
  92. 1 1
      src/views/vent/performance/fileDetail/index.vue
  93. 1 1
      src/views/vent/performance/fileIndex/index.vue
  94. 35 28
      src/views/vent/reportManager/index.vue
  95. 11 15
      src/views/vent/sys/setting/index.vue

+ 2 - 2
public/js/config.js

@@ -9,7 +9,7 @@ const History_Type = {
 }
 
 const VENT_PARAM = {
-  simulatedPassword: '123456', //(simulatedPassword 为空时有密码输入框弹出,不为空时不弹出密码输入框,无需输入密码)
-  // simulatedPassword: '',
+  // simulatedPassword: '123456', //(simulatedPassword 为空时有密码输入框弹出,不为空时不弹出密码输入框,无需输入密码)
+  simulatedPassword: '',
   showReport: true
 }

+ 0 - 1
public/js/webrtcstreamer.js

@@ -47,7 +47,6 @@ WebRtcStreamer.prototype.connect =async function(videourl, audiourl, options, lo
 				.then((response) => { return response.json() })
 				.then((response) => this.onReceiveGetIceServers(response, videourl, audiourl, options, localstream))
 				.catch((error) => {
-					debugger
 					// new Error('WebRtcStreamer connect error')
 					return this.onError("getIceServers " + error)
 				})

BIN
public/model/glft/fire/balancePress_2024-02-23.glb


BIN
public/model/glft/jbfj/jbfj-hd_2024-03-10.glb


BIN
src/assets/images/home-container/warn-icon.png


BIN
src/assets/images/home-container/warn-icon1.png


BIN
src/assets/images/home-container/warn-icon2.png


BIN
src/assets/images/home-container/warn-icon3.png


BIN
src/assets/images/home-container/warn1.png


BIN
src/assets/images/home-container/warn7.png


BIN
src/assets/images/home-container/warn8.png


+ 3 - 3
src/components/Form/src/components/FormItem.vue

@@ -85,7 +85,7 @@
         }
         if (schema.component === 'Divider') {
           //update-begin---author:wangshuai---date:2023-09-22---for:【QQYUN-6603】分割线标题位置显示不正确---
-          componentProps = Object.assign({ type: 'horizontal',orientation:'left', plain: true, }, componentProps);
+          componentProps = Object.assign({ type: 'horizontal', orientation: 'left', plain: true }, componentProps);
           //update-end---author:wangshuai---date:2023-09-22---for:【QQYUN-6603】分割线标题位置显示不正确---
         }
         return componentProps as Recordable;
@@ -367,14 +367,14 @@
         }
 
         const { baseColProps = {} } = props.formProps;
-        // update-begin--author:liaozhiyang---date:20230803---for:【issues-641】调整表格搜索表单的span配置无效 
+        // update-begin--author:liaozhiyang---date:20230803---for:【issues-641】调整表格搜索表单的span配置无效
         const { getIsMobile } = useAppInject();
         let realColProps;
         if (colProps['span'] && !unref(getIsMobile)) {
           ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].forEach((name) => delete baseColProps[name]);
         }
         realColProps = { ...baseColProps, ...colProps };
-        // update-end--author:liaozhiyang---date:20230803---for:【issues-641】调整表格搜索表单的span配置无效 
+        // update-end--author:liaozhiyang---date:20230803---for:【issues-641】调整表格搜索表单的span配置无效
         const { isIfShow, isShow } = getShow();
         const values = unref(getValues);
 

+ 6 - 6
src/components/Form/src/jeecg/components/modal/PositionSelectModal.vue

@@ -102,12 +102,12 @@
         },
         //update-begin-author:liusq date:2023-10-30 for: [issues/5514]组件页面显示错位
         actionColOptions: {
-            xs: 24,
-            sm: 8,
-            md: 8,
-            lg: 8,
-            xl: 8,
-            xxl: 8,
+          xs: 24,
+          sm: 8,
+          md: 8,
+          lg: 8,
+          xl: 8,
+          xxl: 8,
         },
         //update-end-author:liusq date:2023-10-30 for: [issues/5514]组件页面显示错位
         schemas: [

+ 142 - 147
src/components/Form/src/jeecg/components/roleSelect/RoleSelectModal.vue

@@ -1,44 +1,42 @@
 <template>
-    <BasicModal
-        @register="register"
-        :getContainer="getContainer"
-        :canFullscreen="false"
-        :title="title"
-        :width="500"
-        destroyOnClose
-        @ok="handleOk"
-        wrapClassName="j-user-select-modal2" >
+  <BasicModal
+    @register="register"
+    :getContainer="getContainer"
+    :canFullscreen="false"
+    :title="title"
+    :width="500"
+    destroyOnClose
+    @ok="handleOk"
+    wrapClassName="j-user-select-modal2"
+  >
+    <div style="position: relative; min-height: 350px">
+      <div style="width: 100%">
+        <a-input v-model:value="searchText" allowClear style="width: 100%" placeholder="搜索">
+          <template #prefix>
+            <SearchOutlined style="color: #c0c0c0" />
+          </template>
+        </a-input>
+      </div>
 
-        <div style="position: relative; min-height: 350px">
-            <div style="width: 100%">
-                <a-input v-model:value="searchText" allowClear style="width: 100%" placeholder="搜索">
-                    <template #prefix>
-                        <SearchOutlined style="color: #c0c0c0" />
-                    </template>
-                </a-input>
-            </div>
-
-            <!-- tabs -->
-            <div class="modal-select-list-container">
-                <div class="scroll">
-                    <div class="content" style="right: -10px">
-                        
-                        <label class="item" v-for="item in showDataList" @click="(e)=>onSelect(e, item)">
-                            <a-checkbox v-model:checked="item.checked">
-                                <span class="text">{{ item.name }}</span>
-                            </a-checkbox>
-                        </label>
-                    </div>
-                    
-                </div>
-            </div>
-
-            <!-- 选中用户 -->
-            <div class="selected-users" style="width: 100%; overflow-x: hidden">
-                <SelectedUserItem v-for="item in selectedList" :info="item" @unSelect="unSelect" />
-            </div>
+      <!-- tabs -->
+      <div class="modal-select-list-container">
+        <div class="scroll">
+          <div class="content" style="right: -10px">
+            <label class="item" v-for="item in showDataList" @click="(e) => onSelect(e, item)">
+              <a-checkbox v-model:checked="item.checked">
+                <span class="text">{{ item.name }}</span>
+              </a-checkbox>
+            </label>
+          </div>
         </div>
-    </BasicModal>
+      </div>
+
+      <!-- 选中用户 -->
+      <div class="selected-users" style="width: 100%; overflow-x: hidden">
+        <SelectedUserItem v-for="item in selectedList" :info="item" @unSelect="unSelect" />
+      </div>
+    </div>
+  </BasicModal>
 </template>
 
 <script lang="ts">
@@ -65,7 +63,7 @@
         type: Function,
         default: null,
       },
-      title:{
+      title: {
         type: String,
         default: '',
       },
@@ -76,11 +74,10 @@
       appId: {
         type: String,
         default: '',
-      }
+      },
     },
     emits: ['selected', 'register'],
     setup(props, { emit }) {
-
       const searchText = ref('');
       const selectedIdList = computed(() => {
         let arr = selectedList.value;
@@ -91,23 +88,26 @@
         }
       });
 
-      watch(()=>props.appId, async (val)=>{
-        if(val){
-          await loadDataList();
-        }
-      }, {immediate: true});
-      
-      
+      watch(
+        () => props.appId,
+        async (val) => {
+          if (val) {
+            await loadDataList();
+          }
+        },
+        { immediate: true }
+      );
+
       // 弹窗事件
       const [register] = useModalInner((data) => {
         let list = dataList.value;
-        if(!list || list.length ==0 ){
-        }else{
+        if (!list || list.length == 0) {
+        } else {
           let selectedIdList = data.list || [];
-          for(let item of list){
-            if(selectedIdList.indexOf(item.id)>=0){
+          for (let item of list) {
+            if (selectedIdList.indexOf(item.id) >= 0) {
               item.checked = true;
-            }else{
+            } else {
               item.checked = false;
             }
           }
@@ -119,58 +119,58 @@
         let arr = toRaw(selectedIdList.value);
         emit('selected', arr, toRaw(selectedList.value));
       }
-      
+
       const dataList = ref<any[]>([]);
-      const showDataList = computed(()=>{
+      const showDataList = computed(() => {
         let list = dataList.value;
-        if(!list || list.length ==0 ){
-          return []
+        if (!list || list.length == 0) {
+          return [];
         }
         let text = searchText.value;
-        if(!text){
-          return list
+        if (!text) {
+          return list;
         }
-        return list.filter(item=>item.name.indexOf(text)>=0)
+        return list.filter((item) => item.name.indexOf(text) >= 0);
       });
-  
-      const selectedList = computed(()=>{
+
+      const selectedList = computed(() => {
         let list = dataList.value;
-        if(!list || list.length ==0 ){
-          return []
+        if (!list || list.length == 0) {
+          return [];
         }
-        return list.filter(item=>item.checked)
+        return list.filter((item) => item.checked);
       });
 
       function unSelect(id) {
         let list = dataList.value;
-        if(!list || list.length ==0 ){
+        if (!list || list.length == 0) {
           return;
         }
-        let arr = list.filter(item=>item.id == id);
+        let arr = list.filter((item) => item.id == id);
         arr[0].checked = false;
       }
-      
+
       async function loadDataList() {
         let params = {
           pageNo: 1,
           pageSize: 200,
           column: 'createTime',
-          order: 'desc'
+          order: 'desc',
         };
         const url = '/sys/role/listByTenant';
         const data = await defHttp.get({ url, params }, { isTransformResponse: false });
         if (data.success) {
           const { records } = data.result;
-          let arr:any[] = [];
-          if(records && records.length>0){
-            for(let item of records){
+          let arr: any[] = [];
+          if (records && records.length > 0) {
+            for (let item of records) {
               arr.push({
                 id: item.id,
                 name: item.name || item.roleName,
                 code: item.roleCode,
                 selectType: props.type,
-                checked: false
-              })
+                checked: false,
+              });
             }
           }
           dataList.value = arr;
@@ -180,14 +180,13 @@
         console.log('loadDataList', data);
       }
 
-
       function onSelect(e, item) {
         prevent(e);
         console.log('onselect');
         // 单选判断 只能选中一条数据 其余数据置false
-        if(props.multi === false){
+        if (props.multi === false) {
           let list = dataList.value;
-          for(let item of list){
+          for (let item of list) {
             item.checked = false;
           }
         }
@@ -207,90 +206,86 @@
         selectedList,
         selectedIdList,
         unSelect,
-        onSelect
-      
+        onSelect,
       };
     },
   };
 </script>
 <style scoped lang="less">
-    .modal-select-list-container{
-        height: 352px;
-        margin-top: 12px;
-        overflow: auto;
-        .scroll{
-            height: 100%;
-            position: relative;
-            width: 100%;
-            overflow: hidden;
-            .content{
-                bottom: 0;
-                left: 0;
-                overflow: scroll;
-                overflow-x: hidden;
-                position: absolute;
-                right: 0;
-                top: 0;
-                .item{
-                    padding: 7px 5px;
-                    cursor: pointer;
-                    display: block;
-                    &:hover{
-                        background-color: #f5f5f5;
-                    }
-                }
-               
-            }
+  .modal-select-list-container {
+    height: 352px;
+    margin-top: 12px;
+    overflow: auto;
+    .scroll {
+      height: 100%;
+      position: relative;
+      width: 100%;
+      overflow: hidden;
+      .content {
+        bottom: 0;
+        left: 0;
+        overflow: scroll;
+        overflow-x: hidden;
+        position: absolute;
+        right: 0;
+        top: 0;
+        .item {
+          padding: 7px 5px;
+          cursor: pointer;
+          display: block;
+          &:hover {
+            background-color: #f5f5f5;
+          }
         }
-
-       
+      }
     }
+  }
 </style>
 
 <style lang="less">
-    .j-user-select-modal2 {
-        .depart-select {
-            .ant-select-selector {
-                color: #fff !important;
-                background-color: #409eff !important;
-                border-radius: 5px !important;
-            }
-            .ant-select-selection-item,
-            .ant-select-arrow {
-                color: #fff !important;
-            }
-        }
-        .my-search {
-            position: absolute;
-            top: 14px;
-            z-index: 1;
-            &.all-width {
-                width: 100%;
-            }
+  .j-user-select-modal2 {
+    .depart-select {
+      .ant-select-selector {
+        color: #fff !important;
+        background-color: #409eff !important;
+        border-radius: 5px !important;
+      }
+      .ant-select-selection-item,
+      .ant-select-arrow {
+        color: #fff !important;
+      }
+    }
+    .my-search {
+      position: absolute;
+      top: 14px;
+      z-index: 1;
+      &.all-width {
+        width: 100%;
+      }
 
-            .anticon {
-                cursor: pointer;
-                &:hover {
-                    color: #0a8fe9 !important;
-                }
-            }
-            .hidden {
-                display: none;
-            }
+      .anticon {
+        cursor: pointer;
+        &:hover {
+          color: #0a8fe9 !important;
         }
+      }
+      .hidden {
+        display: none;
+      }
+    }
 
-        .my-tabs {
-        }
+    .my-tabs {
+    }
 
-        .selected-users {
-            display: flex;
-            flex-wrap: wrap;
-            flex-direction: row;
-            padding-top: 15px;
-        }
+    .selected-users {
+      display: flex;
+      flex-wrap: wrap;
+      flex-direction: row;
+      padding-top: 15px;
+    }
 
-        .scroll-container {
-            padding-bottom: 0 !important;
-        }
+    .scroll-container {
+      padding-bottom: 0 !important;
     }
+  }
 </style>

+ 29 - 15
src/components/Icon/src/IconPicker.vue

@@ -1,10 +1,17 @@
 <template>
-  <a-input :disabled="disabled" :style="{ width }" readOnly :placeholder="t('component.icon.placeholder')" :class="prefixCls" v-model:value="currentSelect">
+  <a-input
+    :disabled="disabled"
+    :style="{ width }"
+    readOnly
+    :placeholder="t('component.icon.placeholder')"
+    :class="prefixCls"
+    v-model:value="currentSelect"
+  >
     <template #addonAfter>
       <a-popover placement="bottomLeft" trigger="click" v-model="visible" :overlayClassName="`${prefixCls}-popover`">
         <template #title>
           <div class="flex justify-between">
-            <a-input :placeholder="t('component.icon.search')" v-model:value="searchIconValue"  @change="debounceHandleSearchChange" allowClear />
+            <a-input :placeholder="t('component.icon.search')" v-model:value="searchIconValue" @change="debounceHandleSearchChange" allowClear />
           </div>
         </template>
 
@@ -27,7 +34,15 @@
               </ul>
             </ScrollContainer>
             <div class="flex py-2 items-center justify-center" v-if="getTotal >= pageSize">
-              <a-pagination showLessItems v-model:current="current" :page-size-options="pageSizeOptions" size="small" v-model:pageSize="pageSize" v-model:total="getTotal" @change="handlePageChange" />
+              <a-pagination
+                showLessItems
+                v-model:current="current"
+                :page-size-options="pageSizeOptions"
+                size="small"
+                v-model:pageSize="pageSize"
+                v-model:total="getTotal"
+                @change="handlePageChange"
+              />
             </div>
           </div>
           <template v-else
@@ -36,9 +51,9 @@
         </template>
 
         <span class="cursor-pointer px-2 py-1 flex items-center" v-if="isSvgMode && currentSelect">
-          <SvgIcon :name="currentSelect" @click="currentSelectClick"/>
+          <SvgIcon :name="currentSelect" @click="currentSelectClick" />
         </span>
-        <Icon :icon="currentSelect || 'ion:apps-outline'" class="cursor-pointer px-2 py-1" v-else @click="currentSelectClick"/>
+        <Icon :icon="currentSelect || 'ion:apps-outline'" class="cursor-pointer px-2 py-1" v-else @click="currentSelectClick" />
       </a-popover>
     </template>
   </a-input>
@@ -88,7 +103,7 @@
     copy: propTypes.bool.def(false),
     mode: propTypes.oneOf<('svg' | 'iconify')[]>(['svg', 'iconify']).def('iconify'),
     disabled: propTypes.bool.def(true),
-    clearSelect: propTypes.bool.def(false)
+    clearSelect: propTypes.bool.def(false),
   });
 
   const emit = defineEmits(['change', 'update:value']);
@@ -111,7 +126,7 @@
   //每页条数
   const pageSize = ref<number>(140);
   //下拉分页显示
-  const pageSizeOptions = ref<any>(['10', '20', '50', '100', '140'])
+  const pageSizeOptions = ref<any>(['10', '20', '50', '100', '140']);
   //下拉搜索值
   const searchIconValue = ref<string>('');
 
@@ -129,7 +144,7 @@
     }
   );
 
-  function handlePageChange(page: number,size: number) {
+  function handlePageChange(page: number, size: number) {
     //update-begin---author:wangshuai ---date:20230522  for:【issues/4947】菜单编辑页面菜单图标选择模板,每页显示数量切换无效------------
     current.value = page;
     pageSize.value = size;
@@ -139,13 +154,13 @@
   }
 
   function handleClick(icon: string) {
-    if(props.clearSelect === true){
-      if(currentSelect.value===icon){
-        currentSelect.value = ''
-      }else{
+    if (props.clearSelect === true) {
+      if (currentSelect.value === icon) {
+        currentSelect.value = '';
+      } else {
         currentSelect.value = icon;
       }
-    }else{
+    } else {
       currentSelect.value = icon;
       if (props.copy) {
         clipboardRef.value = icon;
@@ -154,7 +169,6 @@
         }
       }
     }
-    
   }
 
   function handleSearchChange(e: ChangeEvent) {
@@ -169,7 +183,7 @@
     }
     currentList.value = icons.filter((item) => item.includes(value));
   }
-  
+
   //update-begin---author:wangshuai ---date:20230522  for:【issues/4947】菜单编辑页面菜单图标选择模板,每页显示数量切换无效,输入框后面的图标点击之后清空数据------------
   /**
    * 图标点击重置页数

+ 60 - 44
src/components/jeecg/comment/MyComment.vue

@@ -1,7 +1,21 @@
 <template>
-  <div :class="{'comment-active': commentActive}" style="border: 1px solid #eee; margin: 0; position: relative" @click="handleClickBlank">
-    <textarea ref="commentRef" v-model="myComment" @keyup.enter="sendComment" @input="handleCommentChange" @blur="handleBlur" class="comment-content" :rows="3" placeholder="请输入你的评论,可以@成员" />
-    <div class="comment-content comment-html-shower" :class="{'no-content':noConent, 'top-div': showHtml, 'bottom-div': showHtml == false }" v-html="commentHtml" @click="handleClickHtmlShower"></div>
+  <div :class="{ 'comment-active': commentActive }" style="border: 1px solid #eee; margin: 0; position: relative" @click="handleClickBlank">
+    <textarea
+      ref="commentRef"
+      v-model="myComment"
+      @keyup.enter="sendComment"
+      @input="handleCommentChange"
+      @blur="handleBlur"
+      class="comment-content"
+      :rows="3"
+      placeholder="请输入你的评论,可以@成员"
+    ></textarea>
+    <div
+      class="comment-content comment-html-shower"
+      :class="{ 'no-content': noConent, 'top-div': showHtml, 'bottom-div': showHtml == false }"
+      v-html="commentHtml"
+      @click="handleClickHtmlShower"
+    ></div>
     <div class="comment-buttons" v-if="commentActive">
       <div style="cursor: pointer">
         <Tooltip title="选择@用户">
@@ -22,30 +36,30 @@
         <a-button type="primary" @click="sendComment" :loading="buttonLoading" :disabled="disabledButton">发 送</a-button>
       </div>
     </div>
-    <upload-chunk ref="uploadRef" :visible="uploadVisible" @select="selectFirstFile"></upload-chunk>
+    <upload-chunk ref="uploadRef" :visible="uploadVisible" @select="selectFirstFile" />
   </div>
-  <UserSelectModal labelKey="realname" rowKey="username" @register="registerModal" @getSelectResult="setValue" isRadioSelection></UserSelectModal>
+  <UserSelectModal labelKey="realname" rowKey="username" @register="registerModal" @getSelectResult="setValue" isRadioSelection />
   <a-modal v-model:visible="visibleEmoji" :footer="null" wrapClassName="emoji-modal" :closable="false" :width="490">
     <template #title>
       <span></span>
     </template>
     <Picker
-      :pickerStyles="pickerStyles" 
-      :i18n="optionsName" 
+      :pickerStyles="pickerStyles"
+      :i18n="optionsName"
       :data="emojiIndex"
       emoji="grinning"
-      :showPreview="false" 
-      :infiniteScroll="false" 
-      :showSearch="false" 
-      :showSkinTones="false" 
-      set="apple" 
-      @select="showEmoji">
-    </Picker>
+      :showPreview="false"
+      :infiniteScroll="false"
+      :showSearch="false"
+      :showSkinTones="false"
+      set="apple"
+      @select="showEmoji"
+    />
   </a-modal>
 </template>
 
 <script lang="ts">
-  import {ref, watch, computed, inject} from 'vue';
+  import { ref, watch, computed, inject } from 'vue';
   import { propTypes } from '/@/utils/propTypes';
   import { UserAddOutlined, PaperClipOutlined, SmileOutlined } from '@ant-design/icons-vue';
   import { Tooltip } from 'ant-design-vue';
@@ -53,7 +67,7 @@
   import { useModal } from '/@/components/Modal';
   import UploadChunk from './UploadChunk.vue';
   import 'emoji-mart-vue-fast/css/emoji-mart.css';
-  import {getGloablEmojiIndex, useEmojiHtml} from './useComment';
+  import { getGloablEmojiIndex, useEmojiHtml } from './useComment';
 
   const optionsName = {
     categories: {
@@ -185,7 +199,7 @@
         myComment.value = temp;
         emojiButton.value.click();
       }
-      
+
       const visibleEmoji = ref(false);
       function showEmoji(e) {
         let temp = myComment.value || '';
@@ -199,7 +213,7 @@
       }
 
       const pickerStyles = {
-        width: '490px'
+        width: '490px',
         /* height: '350px',
         top: '0px',
         left: '-75px',
@@ -219,9 +233,9 @@
         e.stopPropagation();
         visibleEmoji.value = !visibleEmoji.value;
       }
-      
+
       //const emojiIndex = inject('$globalEmojiIndex')
-      const emojiIndex = getGloablEmojiIndex()
+      const emojiIndex = getGloablEmojiIndex();
       const { getHtml } = useEmojiHtml(emojiIndex);
 
       const commentHtml = computed(() => {
@@ -244,27 +258,27 @@
       function handleBlur() {
         showHtml.value = true;
       }
-      
+
       const commentActive = ref(false);
-      const noConent = computed(()=>{
-        if(myComment.value.length>0){
+      const noConent = computed(() => {
+        if (myComment.value.length > 0) {
           return false;
         }
         return true;
       });
-      function changeActive(){
-        if(myComment.value.length==0){
-          commentActive.value = false
+      function changeActive() {
+        if (myComment.value.length == 0) {
+          commentActive.value = false;
           uploadVisible.value = false;
         }
       }
-      
-      function selectFirstFile(fileName){
-        if(myComment.value.length==0){
+
+      function selectFirstFile(fileName) {
+        if (myComment.value.length == 0) {
           myComment.value = fileName;
         }
       }
-      
+
       return {
         myComment,
         sendComment,
@@ -294,7 +308,7 @@
         commentActive,
         noConent,
         changeActive,
-        selectFirstFile
+        selectFirstFile,
       };
     },
   };
@@ -353,33 +367,35 @@
     }
   }
 
-  .emoji-modal  {
-   > .@{ventSpace}-modal{
+  .emoji-modal {
+    > .@{ventSpace}-modal {
       right: 25% !important;
       margin-right: 16px !important;
     }
-    .@{ventSpace}-modal-header{
+    .@{ventSpace}-modal-header {
       padding: 0 !important;
     }
-    .emoji-mart-bar{
+    .emoji-mart-bar {
       display: none;
     }
-    h3.emoji-mart-category-label{
-    /*  display: none;*/
+    h3.emoji-mart-category-label {
+      /*  display: none;*/
       border-bottom: 1px solid #eee;
     }
   }
-  
-  .comment-active{
+
+  .comment-active {
     border-color: #1e88e5 !important;
-    box-shadow: 0 1px 1px 0 #90caf9, 0 1px 6px 0 #90caf9;
+    box-shadow:
+      0 1px 1px 0 #90caf9,
+      0 1px 6px 0 #90caf9;
   }
-  .no-content{
-    color: #a1a1a1
+  .no-content {
+    color: #a1a1a1;
   }
-  
+
   /**聊天表情本地化*/
   .emoji-type-image.emoji-set-apple {
-    background-image: url("./image/emoji.png");
+    background-image: url('./image/emoji.png');
   }
 </style>

+ 0 - 1
src/hooks/system/useListPage.ts

@@ -63,7 +63,6 @@ export function useListPage(options: ListPageOptions) {
 
   // 导出 excel
   async function onExportXls(selectForm?) {
-    debugger;
     //update-begin---author:wangshuai ---date:20220411  for:导出新增自定义参数------------
     const { url, name, params } = options?.exportConfig ?? {};
     const realUrl = typeof url === 'function' ? url() : url;

+ 53 - 53
src/layouts/default/header/components/user-dropdown/UpdateHome.vue

@@ -4,63 +4,63 @@
   </BasicModal>
 </template>
 <script lang="ts" setup>
-import { ref, unref, defineExpose } from 'vue';
-import { BasicModal, useModalInner } from '/@/components/Modal';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { useMessage } from '/@/hooks/web/useMessage';
-// 声明Emits
-const emit = defineEmits(['register']);
-const $message = useMessage();
-const formRef = ref();
-//表单配置
-const [registerForm, { validate }] = useForm({
-  schemas: [
-    {
-      label: '页面风格',
-      field: 'pageType',
-      component: 'RadioGroup',
-      defaultValue: 1,
-      componentProps: {
-        options: [
-          {
-            label: '6.0',
-            value: 1,
-          },
-          {
-            label: '5.5',
-            value: 0,
-          },
-        ],
+  import { ref, unref, defineExpose } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, useForm } from '/@/components/Form/index';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  // 声明Emits
+  const emit = defineEmits(['register']);
+  const $message = useMessage();
+  const formRef = ref();
+  //表单配置
+  const [registerForm, { validate }] = useForm({
+    schemas: [
+      {
+        label: '页面风格',
+        field: 'pageType',
+        component: 'RadioGroup',
+        defaultValue: 1,
+        componentProps: {
+          options: [
+            {
+              label: '6.0',
+              value: 1,
+            },
+            {
+              label: '5.5',
+              value: 0,
+            },
+          ],
+        },
       },
-    },
-  ],
-  showActionButtonGroup: false,
-});
-//表单赋值
-const [registerModal, { setModalProps, closeModal }] = useModalInner();
+    ],
+    showActionButtonGroup: false,
+  });
+  //表单赋值
+  const [registerModal, { setModalProps, closeModal }] = useModalInner();
 
-//表单提交事件
-async function handleSubmit() {
-  try {
-    const values = await validate();
-    setModalProps({ confirmLoading: true });
-    //设置页面风格
-    if(values['pageType'] == 1){
-      // 6.0页面
-    }else if(values['pageType'] == 0) {
-      // 5.5页面
+  //表单提交事件
+  async function handleSubmit() {
+    try {
+      const values = await validate();
+      setModalProps({ confirmLoading: true });
+      //设置页面风格
+      if (values['pageType'] == 1) {
+        // 6.0页面
+      } else if (values['pageType'] == 0) {
+        // 5.5页面
+      }
+      closeModal();
+    } finally {
+      setModalProps({ confirmLoading: false });
     }
-    closeModal();
-  } finally {
-    setModalProps({ confirmLoading: false });
   }
-}
 
-async function show() {
-  await setModalProps({ visible: true });
-}
+  async function show() {
+    await setModalProps({ visible: true });
+  }
 
-defineExpose({
-  show,
-});
+  defineExpose({
+    show,
+  });
 </script>

+ 0 - 1
src/router/guard/index.ts

@@ -65,7 +65,6 @@ function createPageLoadingGuard(router: Router) {
   const appStore = useAppStoreWithOut();
   const { getOpenPageLoading } = useTransitionSetting();
   router.beforeEach(async (to, from) => {
-    
     if (!userStore.getToken) {
       return true;
     }

+ 1 - 0
src/router/guard/permissionGuard.ts

@@ -54,6 +54,7 @@ export function createPermissionGuard(router: Router) {
     ) {
       // mountMicroApp(userStore.getUserInfo.homePath);
       next(userStore.getUserInfo.homePath);
+      document.title = '首页';
       return;
     }
 

+ 3 - 0
src/utils/event/index.ts

@@ -42,6 +42,9 @@ export function triggerWindowResize() {
 }
 
 export function setDivHeight(e: MouseEvent, minHeight, scroll, scrollClientMaxHeight = 175, scrollClientHeight = 100) {
+  if (e && e.target && e.target['className'].includes('input')) {
+    return;
+  }
   e.preventDefault();
   e.stopPropagation();
   const divObject = e.currentTarget as HTMLElement;

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

@@ -43,7 +43,7 @@ export function initModalWorker() {
     // 'cf/dsmove_2023-06-02.glb',
     // 'cf/fixedCf_2023-11-29.glb',
 
-    'jbfj/jbfj-hd_2024-03-10.glb',
+    'jbfj/jbfj-hd_2024-03-14.glb',
     'jbfj/jbfj-fm_2023-06-02.glb',
     'jbfj/jbfj-fc_2023-06-02.glb',
     'ztfj/dj1_2023-06-02.glb',
@@ -62,7 +62,7 @@ export function initModalWorker() {
     'fire/nitrogenUnderground_2023-09-15.glb',
     'fire/grout_2023-06-02.glb',
     'fire/Bertai_2023-11-29.glb', //lxh
-    'fire/balancePress_2024-02-23.glb',
+    'fire/balancePress_2024-03-14.glb',
     'yafeng/compressor_2023-07-10.glb',
     'gas/gasPump_2024-03-04.glb',
     'gas/gasPumpUnder_2023-10-05.glb',

+ 1 - 0
src/utils/threejs/util.ts

@@ -29,6 +29,7 @@ export const setModalCenter = (group, modal?) => {
   group.position.x = group.position.x - center.x;
   group.position.y = group.position.y - center.y;
   group.position.z = group.position.z - center.z;
+  debugger;
 };
 
 // 获取一个canvas 图文纹理

+ 1 - 1
src/views/dashboard/Analysis/index.vue

@@ -30,7 +30,7 @@
   import { bottomBtnList } from './home.data';
   import workerFace from './homePage/workerFace.vue';
   import netWork from './homePage/network.vue';
-  import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+  import customHeader from '/@/components/vent/customHeader.vue';
 
   const activeColors = [];
   const noActiveColors = ['#aaa', '#aaa'];

+ 1 - 1
src/views/monitor/datalog/DataLogModal.vue

@@ -40,7 +40,7 @@
         </a-form>
       </a-spin>
     </BasicModal>
-    <DataLogCompareModal @register="registerDataLogCompareModal"></DataLogCompareModal>
+    <DataLogCompareModal @register="registerDataLogCompareModal" />
   </div>
 </template>
 <script lang="ts" setup>

+ 61 - 57
src/views/vent/comment/EditRowTable.vue

@@ -6,7 +6,6 @@
         <div class="vent-flex-row">
           <TableAction :actions="createActions(record, column)" />
         </div>
-        
       </template>
       <template #bodyCell="{ column, record }">
         <slot name="filterCell" v-bind="{ column, record }"> </slot>
@@ -15,7 +14,7 @@
   </div>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, nextTick, watch} from 'vue';
+  import { defineComponent, ref, nextTick, watch } from 'vue';
   import { BasicTable, useTable, TableAction, BasicColumn, ActionItem, EditRecordRow } from '/@/components/Table';
   import { useMessage } from '/@/hooks/web/useMessage';
   // import { nextTick } from 'process';
@@ -32,7 +31,7 @@
       },
       searchFormSchema: {
         type: Array,
-        default: () => []
+        default: () => [],
       },
       list: {
         type: Function,
@@ -45,58 +44,60 @@
       },
       scroll: {
         type: Object,
-        default: {}
+        default: {},
       },
     },
     emits: ['saveOrUpdate', 'deleteById', 'rowChange'],
     setup(props, { emit, expose }) {
       const { createMessage: msg } = useMessage();
       const currentEditKeyRef = ref('');
-      const dataList = ref<any[]>([])
-      const refresh = ref(true)
+      const dataList = ref<any[]>([]);
+      const refresh = ref(true);
 
-      const tableScroll = props.scroll.y ? ref({ y: props.scroll.y }) : ref({})
+      const tableScroll = props.scroll.y ? ref({ y: props.scroll.y }) : ref({});
 
-      const [registerTable, { insertTableDataRecord, reload, getSelectRows, getDataSource, setTableData, clearSelectedRowKeys }] = !props.list ?  useTable({
-        title: '',
-        dataSource: props.dataSource,
-        rowKey: 'id',
-        clickToRowSelect: false,
-        columns: props.columns as BasicColumn[],
-        showIndexColumn: false,
-        showTableSetting: false,
-        rowSelection: !props.isRadio ? undefined : { type: 'radio', onChange: rowChange },
-        tableSetting: { fullScreen: true },
-        scroll: tableScroll,
-        formConfig: {
-          labelWidth: 120,
-          schemas: props.searchFormSchema,
-          autoSubmitOnEnter: true,
-        },
-        actionColumn: {
-          width: 160,
-          title: '操作',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-        },
-        }) : useTable({
-          title: '',
-          api: props.list,
-          rowKey: 'id',
-          clickToRowSelect: false,
-          columns: props.columns as BasicColumn[],
-          showIndexColumn: false,
-          showTableSetting: false,
-          scroll: tableScroll,
-          rowSelection: !props.isRadio ? undefined : { type: 'radio', onChange: rowChange },
-          tableSetting: { fullScreen: true },
-          actionColumn: {
-            width: 160,
-            title: '操作',
-            dataIndex: 'action',
-            slots: { customRender: 'action' },
-          },
-      });
+      const [registerTable, { insertTableDataRecord, reload, getSelectRows, getDataSource, setTableData, clearSelectedRowKeys }] = !props.list
+        ? useTable({
+            title: '',
+            dataSource: props.dataSource,
+            rowKey: 'id',
+            clickToRowSelect: false,
+            columns: props.columns as BasicColumn[],
+            showIndexColumn: false,
+            showTableSetting: false,
+            rowSelection: !props.isRadio ? undefined : { type: 'radio', onChange: rowChange },
+            tableSetting: { fullScreen: true },
+            scroll: tableScroll,
+            formConfig: {
+              labelWidth: 120,
+              schemas: props.searchFormSchema,
+              autoSubmitOnEnter: true,
+            },
+            actionColumn: {
+              width: 160,
+              title: '操作',
+              dataIndex: 'action',
+              slots: { customRender: 'action' },
+            },
+          })
+        : useTable({
+            title: '',
+            api: props.list,
+            rowKey: 'id',
+            clickToRowSelect: false,
+            columns: props.columns as BasicColumn[],
+            showIndexColumn: false,
+            showTableSetting: false,
+            scroll: tableScroll,
+            rowSelection: !props.isRadio ? undefined : { type: 'radio', onChange: rowChange },
+            tableSetting: { fullScreen: true },
+            actionColumn: {
+              width: 160,
+              title: '操作',
+              dataIndex: 'action',
+              slots: { customRender: 'action' },
+            },
+          });
 
       function rowChange(e) {
         emit('rowChange', e[0], getSelectRows()[0]);
@@ -139,7 +140,7 @@
           try {
             //TODO 此处将数据提交给服务器保存
             emit('saveOrUpdate', Object.assign(record, record.editValueRefs), reload);
-            refresh.value = false
+            refresh.value = false;
             // 保存之后提交编辑状态
             const pass = await record.onEdit?.(false, true);
             if (pass) {
@@ -153,9 +154,9 @@
           msg.error({ content: '请填写正确的数据', key: 'saving' });
         }
         nextTick(() => {
-          refresh.value = true
-          clearSelectedRowKeys()
-        })
+          refresh.value = true;
+          clearSelectedRowKeys();
+        });
       }
 
       function createActions(record: EditRecordRow, column: BasicColumn): ActionItem[] {
@@ -219,12 +220,15 @@
         // console.log(column, value, record);
       }
 
-      watch(() => props.dataSource, (newVal:any[]) => {
-        setTableData(newVal)
-      })
+      watch(
+        () => props.dataSource,
+        (newVal: any[]) => {
+          setTableData(newVal);
+        }
+      );
 
       expose({
-        reload
+        reload,
       });
 
       return {
@@ -236,7 +240,7 @@
         addRow,
         reload,
         getDataSource,
-        dataList
+        dataList,
       };
     },
   });
@@ -244,7 +248,7 @@
 <style scoped lang="less">
   @ventSpace: zxm;
   @vent-table-no-hover: #00bfff10;
-  
+
   :deep(.@{ventSpace}-table-body) {
     height: auto !important;
   }

+ 0 - 150
src/views/vent/comment/components/customHeader.vue

@@ -1,150 +0,0 @@
-<template>
-  <div class="vent-custom-header">
-    <div class="vent-home-header">
-      <!-- <Decoration5 class="header-icon" :dur="2" :color="['#21437F', '#2CF7FE']" style="width:500px;height:40px;" /> -->
-      <div class="header-text"><slot></slot></div>
-    </div>
-    <div class="container-title" v-if="fieldNames">
-      <a-select
-        class="title-select"
-        ref="select"
-        v-model:value="currentTitleValue"
-        @change="handleTitleChange"
-        dropdownClassName="drop"
-        :field-names="fieldNames"
-        :options="options"
-        :dropdownStyle="{ background: 'transparent', borderBottom: '1px solid #ececec66', backdropFilter: 'blur(50px)', color: '#fff' }"
-      >
-        <!-- <a-select-option value="2">15212工作面</a-select-option>
-        <a-select-option value="1598491318007898113">采煤工作面</a-select-option>
-        <a-select-option value="3">掘进工作面</a-select-option> -->
-      </a-select>
-    </div>
-  </div>
-</template>
-<script lang="ts">
-  import { defineComponent, computed } from 'vue';
-  import { Decoration5 } from '@kjgl77/datav-vue3';
-  export default defineComponent({
-    name: 'CustomHeader',
-    components: { Decoration5 },
-    props: {
-      optionValue: {
-        type: String,
-      },
-      fieldNames: {
-        type: Object,
-        default: () => {},
-      },
-      options: {
-        type: Array,
-        default: () => [],
-      },
-    },
-    emits: ['change'],
-    setup(props, { emit }) {
-      const currentTitleValue = computed(() => props.optionValue);
-      // 标题选择
-      function handleTitleChange(value) {
-        emit('change', value);
-      }
-      return {
-        currentTitleValue,
-        handleTitleChange,
-      };
-    },
-  });
-</script>
-<style lang="less">
-  @import '/@/design/vent/modal.less';
-
-  .@{ventSpace}-select-dropdown.drop {
-    background-color: transparent !important;
-
-    .@{ventSpace}-select-item-option-selected,
-    .@{ventSpace}-select-item-option-active {
-      background-color: #ffffff33 !important;
-    }
-    .@{ventSpace}-select-item {
-      color: inherit;
-      &:hover {
-        background-color: #ffffff33 !important;
-      }
-    }
-    .@{ventSpace}-select-tree {
-      .@{ventSpace}-select-tree-treenode {
-        color: inherit;
-      }
-      .@{ventSpace}-select-tree-switcher-icon {
-        color: inherit;
-      }
-    }
-  }
-</style>
-<style lang="less" scoped>
-  @ventSpace: zxm;
-  .vent-custom-header {
-    width: 100%;
-    height: fit-content;
-    .vent-home-header {
-      width: 100%;
-
-      position: fixed;
-      top: 0;
-      // background: url('/@/assets/images/vent/new-home/header-bg.png') no-repeat;
-      // height: 100px;
-      background: url('/@/assets/images/vent/vent-header1.png') no-repeat;
-      height: 89px;
-      background-size: contain;
-      display: flex;
-      justify-content: center;
-      .header-icon {
-        margin-top: 45px;
-      }
-      .header-text {
-        position: fixed;
-        top: 5px;
-        color: #fff;
-        font-size: 32px;
-        font-family: 'ysbtFont';
-        background-image: linear-gradient(#ffffff 50%, #60f4ff);
-        -webkit-background-clip: text;
-        color: transparent;
-      }
-    }
-    .container-title {
-      width: 398px;
-      height: 34px;
-      top: 60px;
-      background: url('/@/assets/images/vent/new-home/container-title-bg.png') no-repeat;
-      background-size: contain;
-      padding: 0 0 0 180px;
-      font-size: 20px;
-      pointer-events: auto;
-      position: relative;
-      z-index: 9999;
-      .title-select {
-        width: 228px;
-        position: absolute;
-
-        top: 0;
-        left: 160px;
-      }
-    }
-  }
-  :deep(.zxm-select) {
-    width: 300px;
-    .@{ventSpace}-select-selector {
-      background: transparent !important;
-      border: none !important;
-      box-shadow: none !important;
-      .zxm-select-selection-item {
-        color: #fff !important;
-        font-size: 20px;
-      }
-    }
-    .@{ventSpace}-select-arrow {
-      color: #fff !important;
-    }
-  }
-</style>

+ 2 - 2
src/views/vent/deviceManager/comment/FormModal.vue

@@ -57,9 +57,9 @@
   }
   .vent-form {
     // width: 100%;
-    max-height: 700px; 
+    max-height: 700px;
     overflow-y: auto;
-    
+
     .@{ventSpace}-select-selection-item {
       color: rgba(255, 255, 255, 1) !important;
     }

+ 45 - 49
src/views/vent/deviceManager/comment/warningTabel/BaseModal1.vue

@@ -1,10 +1,12 @@
 <template>
   <BasicModal @register="register" :title="title" :width="800" :min-height="400" v-bind="$attrs" @ok="onSubmit">
-    <BasicForm @register="registerForm" >
-      <template #monitor="{ model, field }" >
+    <BasicForm @register="registerForm">
+      <template #monitor="{ model, field }">
         <div class="vent-flex-row-between">
-          <Select ref="selectRef" disabled v-model:value="pointData" :options="option" style="width: calc(100% - 65px);" />
-          <a-button class="vent-margin-b-5" type="primary" @click="selectPoint(model['strtype'])" style="position: absolute; right: 0; top: 1px;">选择</a-button>
+          <Select ref="selectRef" disabled v-model:value="pointData" :options="option" style="width: calc(100% - 65px)" />
+          <a-button class="vent-margin-b-5" type="primary" @click="selectPoint(model['strtype'])" style="position: absolute; right: 0; top: 1px"
+            >选择</a-button
+          >
         </div>
       </template>
     </BasicForm>
@@ -13,44 +15,44 @@
 </template>
 <script lang="ts" setup>
   import { onMounted, ref, defineEmits, unref, nextTick } from 'vue';
-import { BasicForm, useForm } from '/@/components/Form/index';
-import { BasicModal, useModalInner, useModal } from '/@/components/Modal';
-import type { FormSchema } from '/@/components/Form/src/types/form';
-import { Select, message } from 'ant-design-vue';
-import DevicePointTable from './DevicePointTable.vue';
-import { workFacePointList } from './warning.api'
+  import { BasicForm, useForm } from '/@/components/Form/index';
+  import { BasicModal, useModalInner, useModal } from '/@/components/Modal';
+  import type { FormSchema } from '/@/components/Form/src/types/form';
+  import { Select, message } from 'ant-design-vue';
+  import DevicePointTable from './DevicePointTable.vue';
+  import { workFacePointList } from './warning.api';
 
   const props = defineProps({
     formSchemas: {
       type: Array as PropType<FormSchema[]>,
-      default: () => ([]),
+      default: () => [],
     },
     deviceId: { type: String },
     monitorType: {
       type: String,
-      default: '2'
-    }
-  })
-  const emit = defineEmits(['add', 'update', 'register'])
-  const option = ref<any[]>([])
-  const devicePointList = ref<any[]>([])
-  const pointData = ref<String[]>([])
-  const title = ref('')
-  const isUpdate = ref(false)
+      default: '2',
+    },
+  });
+  const emit = defineEmits(['add', 'update', 'register']);
+  const option = ref<any[]>([]);
+  const devicePointList = ref<any[]>([]);
+  const pointData = ref<String[]>([]);
+  const title = ref('');
+  const isUpdate = ref(false);
   // 注册 form
   const [registerForm, { resetFields, setFieldsValue, validate, getFieldsValue }] = useForm({
     schemas: props.formSchemas,
     showActionButtonGroup: false,
   });
-  
+
   // 注册 modal
   const [register, { setModalProps }] = useModalInner(async (data) => {
     isUpdate.value = unref(data.isUpdate);
     title.value = unref(data.title);
     await resetFields();
-    if(data.isUpdate){
+    if (data.isUpdate) {
       await setFieldsValue({ ...data.record });
-      pointData.value = [data.record['monitorId']]
+      pointData.value = [data.record['monitorId']];
 
       // debugger
       // 初始打开有数据时候要查点表
@@ -60,9 +62,7 @@ import { workFacePointList } from './warning.api'
       //     setPoint([item])
       //   }
       // })
-      
-
-    }else if(data.record){
+    } else if (data.record) {
       await setFieldsValue({ relId: data.record['relId'] || data.record['id'], monitorId: '' });
     }
   });
@@ -72,23 +72,23 @@ import { workFacePointList } from './warning.api'
   async function getDevicePointList(strtype) {
     try {
       const result = await workFacePointList({ deviceType: strtype, valueType: props.monitorType });
-      devicePointList.value = result
+      devicePointList.value = result;
     } catch (error) {
-      devicePointList.value = []
+      devicePointList.value = [];
     }
-  };
+  }
 
   async function onSubmit() {
     try {
-      const data = await getFieldsValue()
-      await setFieldsValue({...data, monitorId: pointData.value[0] })
+      const data = await getFieldsValue();
+      await setFieldsValue({ ...data, monitorId: pointData.value[0] });
       const values = await validate();
       setModalProps({ confirmLoading: true });
       // 提交表单
       if (!isUpdate.value) {
-        emit('add', 'add', values)
+        emit('add', 'add', values);
       } else {
-        emit('update', 'update',values)
+        emit('update', 'update', values);
       }
       // //关闭弹窗
       // closeModal();
@@ -100,31 +100,27 @@ import { workFacePointList } from './warning.api'
   }
 
   async function selectPoint(strtype) {
-    if(strtype){
-
-      await getDevicePointList(strtype)
-      openModal()
-    }else{
-      message.info('请先选择设备!')
+    if (strtype) {
+      await getDevicePointList(strtype);
+      openModal();
+    } else {
+      message.info('请先选择设备!');
     }
   }
 
   function setPoint(value) {
-    const data = value[0]
+    const data = value[0];
     option.value = [
       {
         value: data.id,
-        label: data.valuename
-      }
-    ]
+        label: data.valuename,
+      },
+    ];
     nextTick(() => {
-      pointData.value = [data.id]
-    })
+      pointData.value = [data.id];
+    });
   }
 
-  onMounted(async () => {
-    
-  });
-
+  onMounted(async () => {});
 </script>
 <style scoped lang="less"></style>

+ 3 - 4
src/views/vent/deviceManager/equipManager/component/FormModal.vue

@@ -15,7 +15,7 @@
   // 声明Emits
   const props = defineProps({
     formSchema: { type: Array },
-    record: {type: Object}
+    record: { type: Object },
   });
 
   const emit = defineEmits(['saveOrUpdate']);
@@ -50,7 +50,6 @@
       // setModalProps({ confirmLoading: false });
     }
   }
-
 </script>
 <style lang="less" scoped>
   @ventSpace: zxm;
@@ -62,9 +61,9 @@
     bottom: 0px !important;
   }
   .vent-form {
-    max-height: 700px; 
+    max-height: 700px;
     overflow-y: auto;
-    
+
     .@{ventSpace}-select-selection-item {
       color: rgba(255, 255, 255, 1) !important;
     }

+ 2 - 1
src/views/vent/deviceManager/fanTabel/fan.api.ts

@@ -2,7 +2,8 @@ import { defHttp } from '/@/utils/http/axios';
 import { Modal } from 'ant-design-vue';
 
 enum Api {
-  list = '/safety/ventanalyFan/list',
+  // list = '/safety/ventanalyFan/list',
+  list = '/safety/ventanalyDeviceInfo/list',
   save = '/safety/ventanalyFan/add',
   edit = '/safety/ventanalyFan/edit',
   deleteById = '/safety/ventanalyFan/delete',

+ 43 - 36
src/views/vent/home/clique/components/dialog-modal.vue

@@ -77,18 +77,18 @@
   </div>
 </template>
 <script lang="ts" setup>
-  import { ref, reactive,defineProps,watch } from 'vue';
+  import { ref, reactive, defineProps, watch } from 'vue';
   import { SvgIcon } from '/@/components/Icon';
   import { getAssetURL } from '/@/utils/ui';
 
-  let props=defineProps({
-    centerDetail:{
-      type:Object,
-      default:()=>{
-        return {}
-      }
-    }
-  })
+  let props = defineProps({
+    centerDetail: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  });
 
   // let modalTitle = ref('榆家梁矿');
   let modalTitle = ref('yjl');
@@ -157,33 +157,40 @@
     emit('closeDialog', false);
   }
 
-  watch(()=>props.centerDetail,(newC,oldC)=>{
-    console.log(newC,'地图区域详情数据-------')
-   if(JSON.stringify(newC)!='{}'){
-    modalCard[0]['value']=newC.sys_data.totallength
-    modalCard[1]['value']=0
-    modalCard[2]['value']=0
-    
-    labelM.value=newC.majorpath_data[0].deviceName
-    valueM.value=newC.majorpath_data[0].majorpath.drag_total
-    zlList[0]['value']=newC.majorpath_data[0].majorpath.drag_1
-    zlList[1]['value']=newC.majorpath_data[0].majorpath.drag_2
-    zlList[2]['value']=newC.majorpath_data[0].majorpath.drag_3
-    zlList[0]['percent']=(( zlList[0]['value'] / valueM.value )*100).toFixed(2)
-    zlList[1]['percent']=(( zlList[1]['value'] / valueM.value )*100).toFixed(2)
-    zlList[2]['percent']=(( zlList[2]['value'] / valueM.value )*100).toFixed(2)
-
-    windLfList[0].value=(newC.sys_data.xufengliang / parseFloat(newC.sys_data.zongfengliang) * 100).toFixed(2)
-    windLfList[1].value=((parseFloat(newC.sys_data.zongfengliang) - parseFloat(newC.sys_data.zonghuifeng)) / parseFloat(newC.sys_data.zonghuifeng) * 100 ).toFixed(2)
-
-    vent.value = newC.majorpath_data[0].majorpath.drag_total
-    gas.value = newC.majorpath_data[0].majorpath.m3_total
-    fire.value = Math.round(((1.19 *  gas.value) / 60 / Math.sqrt(vent.value)) * 100) / 100
-   }
-  },{
-    immediate:true,
-    deep:true
-  })
+  watch(
+    () => props.centerDetail,
+    (newC, oldC) => {
+      console.log(newC, '地图区域详情数据-------');
+      if (JSON.stringify(newC) != '{}') {
+        modalCard[0]['value'] = newC.sys_data.totallength;
+        modalCard[1]['value'] = 0;
+        modalCard[2]['value'] = 0;
+
+        labelM.value = newC.majorpath_data[0].deviceName;
+        valueM.value = newC.majorpath_data[0].majorpath.drag_total;
+        zlList[0]['value'] = newC.majorpath_data[0].majorpath.drag_1;
+        zlList[1]['value'] = newC.majorpath_data[0].majorpath.drag_2;
+        zlList[2]['value'] = newC.majorpath_data[0].majorpath.drag_3;
+        zlList[0]['percent'] = ((zlList[0]['value'] / valueM.value) * 100).toFixed(2);
+        zlList[1]['percent'] = ((zlList[1]['value'] / valueM.value) * 100).toFixed(2);
+        zlList[2]['percent'] = ((zlList[2]['value'] / valueM.value) * 100).toFixed(2);
+
+        windLfList[0].value = ((newC.sys_data.xufengliang / parseFloat(newC.sys_data.zongfengliang)) * 100).toFixed(2);
+        windLfList[1].value = (
+          ((parseFloat(newC.sys_data.zongfengliang) - parseFloat(newC.sys_data.zonghuifeng)) / parseFloat(newC.sys_data.zonghuifeng)) *
+          100
+        ).toFixed(2);
+
+        vent.value = newC.majorpath_data[0].majorpath.drag_total;
+        gas.value = newC.majorpath_data[0].majorpath.m3_total;
+        fire.value = Math.round(((1.19 * gas.value) / 60 / Math.sqrt(vent.value)) * 100) / 100;
+      }
+    },
+    {
+      immediate: true,
+      deep: true,
+    }
+  );
 </script>
 <style lang="less" scoped>
   @font-face {

+ 0 - 1
src/views/vent/home/colliery/components/device-warn.vue

@@ -35,7 +35,6 @@
   import { ref, reactive, defineProps, watch } from 'vue';
   import { SvgIcon } from '/@/components/Icon';
   import { getAssetURL } from '/@/utils/ui';
-  const modules = await import.meta.glob('/src/assets/images/home-container/warning/*', { eager: true });
   let props = defineProps({
     warnData: Array,
   });

+ 4 - 5
src/views/vent/home/colliery/components/fan-monitor.vue

@@ -35,7 +35,6 @@
 </template>
 
 <script lang="ts" setup>
-
   import { ref, reactive, onMounted, nextTick, defineProps, watch } from 'vue';
   import { SvgIcon } from '/@/components/Icon';
   import * as echarts from 'echarts';
@@ -72,15 +71,15 @@
           : selectData.readData.Fan2StartStatus && selectData.readData.Fan2StartStatus == '1'
           ? '2号风机'
           : '断开';
-      echartData.xdata = selectData.readData.windQuantity1;
-      echartData.ydata = selectData.readData.windQuantity2;
+      echartData.xdata = selectData.readData.windQuantity1 || selectData.readData.windQuantity1_merge;
+      echartData.ydata = selectData.readData.windQuantity2 || selectData.readData.windQuantity2_merge;
       getOption();
       // if (echartData.xdata && echartData.ydata) {
       //   getOption();
       // } else {
       //   isShowGif.value = true;
       // }
-    }else {
+    } else {
       isShowGif.value = true;
     }
   }
@@ -291,7 +290,7 @@
   watch(
     () => props.fandata,
     (val) => {
-      console.log('000999',val)
+      console.log('000999', val);
       fanList = val[0];
       fanTypeList.length = 0;
       fanList.forEach((el) => {

+ 11 - 3
src/views/vent/home/colliery/components/main-monitor.vue

@@ -27,7 +27,7 @@
       <div class="point-des-box">
         <div>工况点</div>
         <div>负压: {{ selectDataObj.dataH }}</div>
-        <div>风量: {{ selectDataObj.dataQ }}</div>
+        <div>风量: {{ selectDataObj.dataQ * 60 }}</div>
       </div>
       <div class="main" ref="main"></div>
     </div>
@@ -57,6 +57,7 @@
   let main = ref<any>();
   //echart图表数据
   let echartData = reactive<any>({
+    xdata: [],
     ydata: [],
     ydata1: [],
   });
@@ -157,7 +158,7 @@
         color: ['#00bb00', '#ffbb00', '#ff0000', '#0000ff'],
         xAxis: [
           {
-            name: '风量\r\n(m³/s)\r\n',
+            name: '风量\r\n(m³/min)\r\n',
             nameTextStyle: {
               color: '#3df6ff',
               fontSize: 12,
@@ -182,6 +183,9 @@
                 color: '#b3b8cc',
                 fontSize: 14,
               },
+              formatter: function (value) {
+                return value * 60 + '';
+              },
             },
             type: 'value',
             min: 0,
@@ -219,7 +223,8 @@
             },
             type: 'value',
             min: 0,
-            max: 400,
+            // max: 400,
+            data: echartData.xdata,
           },
         ],
         yAxis: [
@@ -320,6 +325,7 @@
     let data = [];
     // 风压特性曲线2
     let data2 = [];
+    let datax = [];
 
     for (let i = 30; i <= 400; i++) {
       let x = i;
@@ -330,7 +336,9 @@
       let x = i;
       let y = (H1 / Q1 / Q1) * x * x;
       data.push([x, y]);
+      datax.push(x * 60);
     }
+    echartData.xdata = datax;
     echartData.ydata = data;
     echartData.ydata1 = data2;
     echartData.ydata2 = [[Q1, H1]];

+ 1 - 1
src/views/vent/monitorManager/alarmMonitor/index.vue

@@ -333,7 +333,7 @@
 
 <script setup lang="ts">
   import { ref, onMounted, onUnmounted, reactive } from 'vue';
-  import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+  import customHeader from '/@/components/vent/customHeader.vue';
   import DetailModal from './DetailModal.vue';
   import DetailModalFire from './DetailModalFire.vue'; //火灾监测弹窗
   import { getTotalList } from './alarm.api';

+ 2 - 3
src/views/vent/monitorManager/balancePressMonitor/balancePress.threejs.base.ts

@@ -226,8 +226,8 @@ class balancePressBase {
 
     const outCurve = [
       {
-        path0: new THREE.Vector3(-7555.818, -23.02, -54190.152).applyMatrix4(mesh.matrix),
-        path1: new THREE.Vector3(-7555.818, -23.02, -74165.96).applyMatrix4(mesh.matrix),
+        path0: new THREE.Vector3(-7555.818, -23.02, 11190.152).applyMatrix4(mesh.matrix),
+        path1: new THREE.Vector3(-7555.818, -23.02, 165.96).applyMatrix4(mesh.matrix),
         isSpread: true,
         spreadDirection: 1, // 1是由小变大,-1是由大变小
       },
@@ -314,7 +314,6 @@ class balancePressBase {
           setModalCenter(this.group);
           resolve(null);
           this.addLight();
-          this.addVideo();
         }
       });
     });

+ 0 - 9
src/views/vent/monitorManager/balancePressMonitor/components/balancePressHome.vue

@@ -74,9 +74,6 @@
             </template>
           </ventBox1>
         </div>
-        <div class="item-box vent-margin-t-10">
-          <LivePlayer id="fm-player1" style="height: 250px" ref="player1" :videoUrl="flvURL1()" muted live loading controls />
-        </div>
       </div>
     </div>
   </a-spin>
@@ -88,7 +85,6 @@
   import { mountedThree, destroy, setModelType, updateText, play } from '../balancePress.threejs';
   import { settingParam1, settingParam2, settingParam3, windowParam, localFanParam } from '../balancePress.data';
   import { list } from '../balancePress.api';
-  import LivePlayer from '@liveqing/liveplayer-v3';
 
   const props = defineProps({
     deviceId: {
@@ -114,11 +110,6 @@
     //
   };
 
-  const flvURL1 = () => {
-    return `https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv`;
-    // return ''
-  };
-
   // https获取监测数据
   let timer: null | NodeJS.Timeout = null;
   function getMonitor(flag?) {

+ 1 - 1
src/views/vent/monitorManager/balancePressMonitor/index.vue

@@ -37,7 +37,7 @@
 </template>
 
 <script setup lang="ts">
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import { onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw } from 'vue';
 import { list, getTableList } from './balancePress.api';
 import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';

+ 1 - 1
src/views/vent/monitorManager/beltTunMonitor/beltTun.data.ts

@@ -241,7 +241,7 @@ export const windColumns: BasicColumn[] = [
   },
   {
     title: '风量',
-    dataIndex: 'm³',
+    dataIndex: 'm3',
     width: 80,
     align: 'center',
   },

+ 0 - 1
src/views/vent/monitorManager/beltTunMonitor/beltTun.threejs.base.ts

@@ -269,7 +269,6 @@ class BeltFace {
 
   /* 点击 */
   mousedownModel(rayCaster: THREE.Raycaster) {
-    debugger;
     // const outlinePass = this.outlinePass;
     // const selectedObjects = [];
     // outlinePass.selectedObjects = selectedObjects;

+ 1 - 1
src/views/vent/monitorManager/beltTunMonitor/index.vue

@@ -49,7 +49,7 @@ import { onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw } from 'vue
 import { mountedThree, destroy, setModelType } from './beltTun.threejs';
 import { list, systemList, getTableList } from './beltTun.api';
 import { monitorNav } from './beltTun.data'
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';
 import beltTunVentHome from './components/beltTunVentHome.vue';
 import beltTunHome from './components/beltTunHome.vue';

+ 1 - 1
src/views/vent/monitorManager/chamberMonitor/index.vue

@@ -37,7 +37,7 @@
 </template>
 
 <script setup lang="ts">
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import { onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw } from 'vue';
 import { list } from './chamber.api';
 import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';

+ 35 - 10
src/views/vent/monitorManager/comment/AlarmHistoryTable.vue

@@ -16,6 +16,7 @@
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
   import { defHttp } from '/@/utils/http/axios';
   import dayjs from 'dayjs';
+  import { getAutoScrollContainer } from '/@/utils/common/compUtils';
 
   const props = defineProps({
     columnsType: {
@@ -75,8 +76,8 @@
         params: { sysId: props.sysId, deviceType: props.deviceType.startsWith('vehicle') ? 'location_normal' : props.deviceType },
       });
     }
+    deviceOptions.value = [];
     if (result) {
-      deviceOptions.value = [];
       deviceOptions.value = result.map((item) => {
         return {
           label: item['strinstallpos'],
@@ -87,10 +88,11 @@
         };
         // return { label: item['strname'], value: item['id']}
       });
-      globalConfig.History_Type == 'vent' && deviceOptions.value[0]
-        ? getForm().setFieldsValue({ gdeviceid: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '' })
-        : getForm().setFieldsValue({ deviceId: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '' });
     }
+    deviceOptions.value.unshift({ label: '--请选择设备--', value: '*', strtype: '', strinstallpos: '', devicekind: '' });
+    globalConfig.History_Type == 'vent' && deviceOptions.value[0]
+      ? getForm().setFieldsValue({ gdeviceid: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '' })
+      : getForm().setFieldsValue({ deviceId: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '' });
   }
 
   watch(
@@ -157,12 +159,33 @@
         // autoAdvancedCol: 2,
         schemas: [
           {
-            label: '时间范围',
-            field: 'createTime',
-            component: 'RangePicker',
-            defaultValue: [dayjs().subtract(1, 'day'), dayjs()],
+            field: 'createTime_begin',
+            label: '开始时间',
+            component: 'DatePicker',
+            defaultValue: dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'),
+            required: true,
             componentProps: {
+              showTime: true,
               valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+            colProps: {
+              span: 4,
+            },
+          },
+          {
+            field: 'createTime_end',
+            label: '结束时间',
+            component: 'DatePicker',
+            defaultValue: dayjs(),
+            required: true,
+            componentProps: {
+              showTime: true,
+              valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+            colProps: {
+              span: 4,
             },
           },
           {
@@ -170,13 +193,15 @@
             field: 'gdeviceid',
             component: 'Select',
             defaultValue: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '',
-            required: true,
             componentProps: {
               options: deviceOptions,
             },
+            colProps: {
+              span: 4,
+            },
           },
         ],
-        fieldMapToTime: [['createTime', ['createTime_begin', 'createTime_end'], '']],
+        // fieldMapToTime: [['createTime', ['createTime_begin', 'createTime_end'], '']],
       },
       fetchSetting: {
         listField: 'records',

+ 26 - 5
src/views/vent/monitorManager/comment/HandlerHistoryTable.vue

@@ -12,6 +12,7 @@
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
   import { defHttp } from '/@/utils/http/axios';
   import dayjs from 'dayjs';
+  import { getAutoScrollContainer } from '/@/utils/common/compUtils';
 
   const list = (params) => defHttp.get({ url: '/safety/ventanalyDevicesetLog/list', params });
 
@@ -106,12 +107,33 @@
         },
         schemas: [
           {
-            label: '时间范围',
-            field: 'createTime',
-            component: 'RangePicker',
-            defaultValue: [dayjs().subtract(1, 'day'), dayjs()],
+            field: 'createTime_begin',
+            label: '开始时间',
+            component: 'DatePicker',
+            defaultValue: dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'),
+            required: true,
             componentProps: {
+              showTime: true,
               valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+            colProps: {
+              span: 4,
+            },
+          },
+          {
+            field: 'createTime_end',
+            label: '结束时间',
+            component: 'DatePicker',
+            defaultValue: dayjs(),
+            required: true,
+            componentProps: {
+              showTime: true,
+              valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+            colProps: {
+              span: 4,
             },
           },
           // {
@@ -126,7 +148,6 @@
           //   },
           // },
         ],
-        fieldMapToTime: [['createTime', ['createTime_begin', 'createTime_end'], '']],
       },
       fetchSetting: {
         listField: 'records',

+ 3 - 3
src/views/vent/monitorManager/comment/MonitorTable.vue

@@ -164,13 +164,13 @@
       },
       pagination: props.isShowPagination ? {
         current: 1,
-        pageSize: 10,
-        pageSizeOptions: ['10', '30', '50', '100'],
+        pageSize: 50,
+        pageSizeOptions: ['10', '30', '50', '100', '500'],
         showQuickJumper: false
       } : false,
       beforeFetch: (params) => {
         if(props.deviceType?.startsWith('safetymonitor')){
-          return Object.assign(params, { filterParams: {'dataTypeName': params['dataTypeName'], strinstallpos: params['strinstallpos'] } });
+          return Object.assign(params, { filterParams: {'dataTypeName': params['dataTypeName'], strinstallpos: '*'+params['strinstallpos']+'*' } });
         }else{
           return Object.assign(params, { column: 'createTime' });
         }

+ 0 - 97
src/views/vent/monitorManager/comment/MonitorTable1.vue

@@ -1,97 +0,0 @@
-<template>
-  <div class="monitor-table">
-    <!-- <BasicTable @register="registerTable" :rowSelection="rowSelection">
-      <template #action="{ record }">
-        <TableAction :actions="getActions(record)" :dropDownActions="getDropDownAction(record)" />
-      </template>
-    </BasicTable> -->
-    <!-- <a-table :row-selection="rowSelection" :columns="columns.value" :data-source="dataTableSource" row-key="dataIndex">
-      <template #name="{ text }">
-        <a>{{ text }}</a>
-      </template>
-    </a-table> -->
-  </div>
-</template>
-
-<script lang="ts" name="system-user" setup>
-  //ts语法
-  import { computed } from '@vue/reactivity';
-  import { debug } from 'console';
-  import { defineExpose, toRaw, watch, ref } from 'vue';
-  import { BasicColumn } from '/@/components/Table';
-  import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
-
-  const props = defineProps({
-    columnsType: {
-      type: String,
-      required: true,
-    },
-    dataSource: {
-      type: Array,
-      required: true,
-    },
-    searchFormSchema: {
-      type: Array,
-      default: () => [],
-    },
-    list: {
-      type: Function,
-      // required: true,
-    },
-    designScope: {
-      type: String,
-    },
-    title: {
-      type: String,
-    },
-  });
-  const dataTableSource = ref([]);
-  watch(
-    () => props.dataSource,
-    (newVal) => {
-      const list = [];
-      newVal.forEach((item) => {
-        list.push(toRaw(item));
-      });
-      dataTableSource.value = list;
-    }
-  );
-  const columns = getTableHeaderColumns(props.columnsType);
-
-  /**
-   * 操作列定义
-   * @param record
-   */
-  function getActions(record) {
-    return [
-      {
-        label: '详情',
-        onClick: openDetail.bind(null, record),
-      },
-    ];
-  }
-
-  const rowSelection = {
-    onChange: (selectedRowKeys: [], selectedRows: BasicColumn[]) => {
-      console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
-    },
-    // getCheckboxProps: (record: BasicColumn) => ({
-    //   disabled: record.name === 'Disabled User', // Column configuration not to be checked
-    //   name: record.name,
-    // }),
-  };
-
-  function openDetail(record) {
-    record;
-  }
-</script>
-
-<style scoped lang="less">
-  @ventSpace: zxm;
-  :deep(.@{ventSpace}-table-body) {
-    height: auto !important;
-  }
-  .monitor-table {
-    width: 100%;
-  }
-</style>

+ 30 - 19
src/views/vent/monitorManager/comment/WorkFaceAlarmHistoryTable.vue

@@ -16,6 +16,7 @@
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
   import { defHttp } from '/@/utils/http/axios';
   import dayjs from 'dayjs';
+  import { getAutoScrollContainer } from '/@/utils/common/compUtils';
 
   const globalConfig = inject('globalConfig');
 
@@ -79,7 +80,6 @@
 
   async function getDeviceList() {
     let result;
-    debugger;
     if (globalConfig.History_Type == 'vent') {
       if (props.deviceListApi) {
         result = await props.deviceListApi();
@@ -131,37 +131,48 @@
         // autoAdvancedCol: 2,
         schemas: [
           {
-            label: '时间范围',
-            field: 'createTime',
-            component: 'RangePicker',
-            defaultValue: [dayjs().subtract(1, 'day'), dayjs()],
+            field: 'createTime_begin',
+            label: '开始时间',
+            component: 'DatePicker',
+            defaultValue: dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'),
+            required: true,
             componentProps: {
+              showTime: true,
               valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+            colProps: {
+              span: 4,
+            },
+          },
+          {
+            field: 'createTime_end',
+            label: '结束时间',
+            component: 'DatePicker',
+            defaultValue: dayjs(),
+            required: true,
+            componentProps: {
+              showTime: true,
+              valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+            colProps: {
+              span: 4,
             },
           },
           {
             label: '查询设备',
-            field: 'deviceId',
+            field: 'gdeviceid',
             component: 'Select',
             defaultValue: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '',
-            required: true,
             componentProps: {
               options: deviceOptions,
             },
+            colProps: {
+              span: 4,
+            },
           },
-          // {
-          //   label: '查询设备',
-          //   field: 'deviceId',
-          //   component: 'ApiSelect',
-          //   componentProps: {
-          //     api: props.deviceListApi,
-          //     resultField: 'records',
-          //     labelField: 'strname',
-          //     valueField: 'id',
-          //   },
-          // },
         ],
-        fieldMapToTime: [['createTime', ['starttime', 'endtime'], '']],
       },
       fetchSetting: {
         listField: 'records',

+ 43 - 31
src/views/vent/monitorManager/comment/WorkFaceHandlerHistoryTable.vue

@@ -11,7 +11,8 @@
   import { useListPage } from '/@/hooks/system/useListPage';
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
   import { defHttp } from '/@/utils/http/axios';
-
+  import { getAutoScrollContainer } from '/@/utils/common/compUtils';
+  import dayjs from 'dayjs';
 
   const list = (params) => defHttp.get({ url: '/safety/ventanalyDevicesetLog/list', params });
 
@@ -35,36 +36,36 @@
     },
     scroll: {
       type: Object,
-      default: () => {}
-    }
+      default: () => {},
+    },
   });
-  
-  const handlerHistory = ref()
-  const columns = ref([])
+
+  const handlerHistory = ref();
+  const columns = ref([]);
 
   watch(
     () => {
       return props.columnsType;
     },
     (newVal) => {
-      const column = getTableHeaderColumns(newVal)
+      const column = getTableHeaderColumns(newVal);
       if (column && column.length < 1) {
-        const arr = newVal.split('_')
+        const arr = newVal.split('_');
         const columnKey = arr.reduce((prev, cur, index) => {
           if (index !== arr.length - 2) {
-            return prev + '_' + cur
+            return prev + '_' + cur;
           } else {
-            return prev
+            return prev;
           }
-        })
+        });
         columns.value = getTableHeaderColumns(arr[0] + '_history');
       } else {
-        columns.value = column
+        columns.value = column;
       }
-      if (handlerHistory.value) reload()
+      if (handlerHistory.value) reload();
     },
     {
-      immediate: true
+      immediate: true,
     }
   );
 
@@ -93,24 +94,35 @@
         },
         schemas: [
           {
-            label: '时间范围',
-            field: 'createTime',
-            component: 'RangePicker',
+            field: 'createTime_begin',
+            label: '开始时间',
+            component: 'DatePicker',
+            defaultValue: dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'),
+            required: true,
             componentProps: {
+              showTime: true,
               valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+            colProps: {
+              span: 4,
+            },
+          },
+          {
+            field: 'createTime_end',
+            label: '结束时间',
+            component: 'DatePicker',
+            defaultValue: dayjs(),
+            required: true,
+            componentProps: {
+              showTime: true,
+              valueFormat: 'YYYY-MM-DD HH:mm:ss',
+              getPopupContainer: getAutoScrollContainer,
+            },
+            colProps: {
+              span: 4,
             },
           },
-          // {
-          //   label: '查询设备',
-          //   field: 'gdeviceid',
-          //   component: 'ApiSelect',
-          //   componentProps: {
-          //     api: props.deviceListApi,
-          //     resultField: 'records',
-          //     labelField: 'strname',
-          //     valueField: 'id',
-          //   },
-          // },
         ],
         fieldMapToTime: [['createTime', ['createTime_begin', 'createTime_end'], '']],
       },
@@ -132,7 +144,7 @@
   });
   //注册table数据
   const [registerTable, { reload, setLoading }] = tableContext;
-  defineExpose({ setLoading })
+  defineExpose({ setLoading });
 </script>
 
 <style scoped lang="less">
@@ -141,8 +153,8 @@
   // :deep(.@{ventSpace}-table-body) {
   //   height: auto !important;
   // }
-  :deep(.zxm-picker){
-      height: 30px !important;
+  :deep(.zxm-picker) {
+    height: 30px !important;
   }
   .handler-history-table {
     width: 100%;

+ 1 - 1
src/views/vent/monitorManager/comment/components/reportInfo.vue

@@ -84,4 +84,4 @@ watch(() => props.editID, (newV, oldV) => {
 
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped></style>

+ 1 - 1
src/views/vent/monitorManager/compreMonitor/index.vue

@@ -45,7 +45,7 @@
 
 <script setup lang="ts">
 import { ref, onMounted, onUnmounted } from 'vue';
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import { param, httpParam, result1, result2 } from './compre.data'
 import { list } from './compre.api'
 import { formatNum } from '/@/utils/ventutil'

+ 680 - 670
src/views/vent/monitorManager/compressor/components/nitrogenHome_new.vue

@@ -1,19 +1,23 @@
 <template>
-    <div id="nitrogen3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"></div>
-    <div id="nitrogenCss3D" class="threejs-Object-CSS"
-        style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 2; top: 0px; left: 0px">
-        <a-spin :spinning="loading" />
-        <div v-for="groupNum in monitorDataGroupNum" :key="groupNum" class="modal-monitor">
-            <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
-                <div class="title">空压机{{ groupNum }} </div>
-                <template v-for="(preMonitor, preMonitorIndex) in preMonitorList" :key="preMonitorIndex">
-                    <div v-if="preMonitor.code !== 'signal'" class="monitor-item">
-                        <span class="monitor-title">{{ preMonitor.title }}:</span>
-                        <span class="monitor-val"><span class="val">{{ monitorData[groupNum] ?
-            monitorData[groupNum][preMonitor.code] : '-' }}</span><span class="unit">{{
-            preMonitor.unit }}</span></span>
-                    </div>
-                    <!-- <div v-else class="signal-item">
+  <div id="nitrogen3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"></div>
+  <div
+    id="nitrogenCss3D"
+    class="threejs-Object-CSS"
+    style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 2; top: 0px; left: 0px"
+  >
+    <a-spin :spinning="loading" />
+    <div v-for="groupNum in monitorDataGroupNum" :key="groupNum" class="modal-monitor">
+      <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
+        <div class="title">空压机{{ groupNum }} </div>
+        <template v-for="(preMonitor, preMonitorIndex) in preMonitorList" :key="preMonitorIndex">
+          <div v-if="preMonitor.code !== 'signal'" class="monitor-item">
+            <span class="monitor-title">{{ preMonitor.title }}:</span>
+            <span class="monitor-val"
+              ><span class="val">{{ monitorData[groupNum] ? monitorData[groupNum][preMonitor.code] : '-' }}</span
+              ><span class="unit">{{ preMonitor.unit }}</span></span
+            >
+          </div>
+          <!-- <div v-else class="signal-item">
                         <div class="signal" v-for="(signal, childIndex) in preMonitor.child" :key="childIndex">
                             <span class="monitor-title">{{ signal.title }}</span>
                             <span style="display: inline-block; width: 30px; text-align: center"
@@ -34,281 +38,287 @@
             }"></span>
                         </div>
                     </div> -->
-                </template>
-            </fourBorderBg>
-        </div>
+        </template>
+      </fourBorderBg>
     </div>
-    <div class="nitrogen-home">
-        <div class="nitrogen-container">
-            <div class="top-box">
-                <!-- 中间区域控制按钮 -->
-                <div class="center-item-box">
-                    <div class="top-left">
-                        <div class="button-box" @click="handlerDevice(airCompressorState, '制氮机启动')">制氮机启动</div>
-                        <div class="button-box" @click="handlerDevice(airCompressorState, '制氮机停止')">制氮机停止</div>
-                        <div class="button-box" @click="handlerDevice(airCompressorState, '空压机启动')">空压机启动</div>
-                        <div class="button-box" @click="handlerDevice(airCompressorState, '空压机停止')">空压机停止</div>
-                    </div>
-                    <div class="top-center">
-                        <div class="top-c-label">通信状态:</div>
-                        <!-- <div class="top-c-val">{{ monitorData['netStatus'] == 1 ? '连接' : monitorData['netStatus'] == 0 ?
+  </div>
+  <div class="nitrogen-home">
+    <div class="nitrogen-container">
+      <div class="top-box">
+        <!-- 中间区域控制按钮 -->
+        <div class="center-item-box">
+          <div class="top-left">
+            <div class="button-box" @click="handlerDevice(airCompressorState, '制氮机启动')">制氮机启动</div>
+            <div class="button-box" @click="handlerDevice(airCompressorState, '制氮机停止')">制氮机停止</div>
+            <div class="button-box" @click="handlerDevice(airCompressorState, '空压机启动')">空压机启动</div>
+            <div class="button-box" @click="handlerDevice(airCompressorState, '空压机停止')">空压机停止</div>
+          </div>
+          <div class="top-center">
+            <div class="top-c-label">通信状态:</div>
+            <!-- <div class="top-c-val">{{ monitorData['netStatus'] == 1 ? '连接' : monitorData['netStatus'] == 0 ?
             '断开' : '未知' }}</div> -->
-                        <div class="top-c-val">{{ '未知' }}</div>
-                    </div>
-                    <div class="top-right">
-                        <div class="control-type">
-                            <div class="control-title">空压机状态切换:</div>
-                            <a-radio-group v-model:value="statusKyj">
-                                <a-radio :value="`1`">工作</a-radio>
-                                <a-radio :value="`0`">停机</a-radio>
-                            </a-radio-group>
-                        </div>
-                        <div class="control-type">
-                            <div class="control-title">制氮机远近控切换:</div>
-                            <a-radio-group v-model:value="statusZdj">
-                                <a-radio :value="`1`">远程</a-radio>
-                                <a-radio :value="`0`">就地</a-radio>
-                            </a-radio-group>
-                        </div>
-                    </div>
-                </div>
-                <!-- 左边监测数据 -->
-                <div class="lr-box left-box">
-                    <ventBox1>
-                        <template #title>
-                            <div>注氮机监测</div>
-                        </template>
-                        <template #container>
-                            <div class="input-item" v-for="(preFan, index) in nitrogenMonitorData" :key="index">
-                                <div class="title">{{ preFan.title }}</div>
-                                <div v-if="preFan.unit !== 'signal'" class="value">{{
-            monitorData[0] ? formatNum(Number(monitorData[0][preFan.code])) :
-                '-'
-        }}</div>
-                                <div v-else :class="{
-                'signal-round': true,
-                'signal-round-warning': monitorData[0][preFan.code] == '1',
-                'signal-round-gry': monitorData[0][preFan.code] != '1',
-            }"></div>
-                                <div class="unit">{{ preFan.unit !== 'signal' ? `(${preFan.unit})` : '' }}</div>
-                            </div>
-                        </template>
-                    </ventBox1>
-                    <div class="item item-l" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
-                        <ventBox1>
-                            <template #title>
-                                <div>空压机{{ groupNum }}</div>
-                            </template>
-                            <template #container>
-                                <div class="monitor-box">
-                                    <div class="monitor-item">
-                                        <div class="state-item" v-for="(preFan, index) in preFanMonitorData"
-                                            :key="index">
-                                            <div class="state-title">{{ preFan.title + (preFan.unit !== 'signal' &&
-            preFan.unit !== '' ? `(${preFan.unit})` : '') }}</div>
-                                            <div v-if="preFan.unit !== 'signal'" class="state-val">{{
-            monitorData[groupNum] ?
-                monitorData[groupNum][preFan.code] : '-'
-        }}</div>
-                                            <div v-else :class="{
-                'signal-round': true,
-                'signal-round-warning': monitorData[groupNum][preFan.code] != '',
-                            'signal-round-gry': monitorData[groupNum][preFan.code] == '',
-                          }"></div>
-                                        </div>
-                                    </div>
-                                </div>
-                            </template>
-                        </ventBox1>
+            <div class="top-c-val">{{ '未知' }}</div>
+          </div>
+          <div class="top-right">
+            <div class="control-type">
+              <div class="control-title">空压机状态切换:</div>
+              <a-radio-group v-model:value="statusKyj">
+                <a-radio :value="`1`">工作</a-radio>
+                <a-radio :value="`0`">停机</a-radio>
+              </a-radio-group>
+            </div>
+            <div class="control-type">
+              <div class="control-title">制氮机远近控切换:</div>
+              <a-radio-group v-model:value="statusZdj">
+                <a-radio :value="`1`">远程</a-radio>
+                <a-radio :value="`0`">就地</a-radio>
+              </a-radio-group>
+            </div>
+          </div>
+        </div>
+        <!-- 左边监测数据 -->
+        <div class="lr-box left-box">
+          <ventBox1>
+            <template #title>
+              <div>注氮机监测</div>
+            </template>
+            <template #container>
+              <div class="input-item" v-for="(preFan, index) in nitrogenMonitorData" :key="index">
+                <div class="title">{{ preFan.title }}</div>
+                <div v-if="preFan.unit !== 'signal'" class="value">{{ monitorData[0] ? formatNum(Number(monitorData[0][preFan.code])) : '-' }}</div>
+                <div
+                  v-else
+                  :class="{
+                    'signal-round': true,
+                    'signal-round-warning': monitorData[0][preFan.code] == '1',
+                    'signal-round-gry': monitorData[0][preFan.code] != '1',
+                  }"
+                ></div>
+                <div class="unit">{{ preFan.unit !== 'signal' ? `(${preFan.unit})` : '' }}</div>
+              </div>
+            </template>
+          </ventBox1>
+          <div class="item item-l" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
+            <ventBox1>
+              <template #title>
+                <div>空压机{{ groupNum }}</div>
+              </template>
+              <template #container>
+                <div class="monitor-box">
+                  <div class="monitor-item">
+                    <div class="state-item" v-for="(preFan, index) in preFanMonitorData" :key="index">
+                      <div class="state-title">{{ preFan.title + (preFan.unit !== 'signal' && preFan.unit !== '' ? `(${preFan.unit})` : '') }}</div>
+                      <div v-if="preFan.unit !== 'signal'" class="state-val">{{
+                        monitorData[groupNum] ? monitorData[groupNum][preFan.code] : '-'
+                      }}</div>
+                      <div
+                        v-else
+                        :class="{
+                          'signal-round': true,
+                          'signal-round-warning': monitorData[groupNum][preFan.code] != '',
+                          'signal-round-gry': monitorData[groupNum][preFan.code] == '',
+                        }"
+                      ></div>
                     </div>
+                  </div>
                 </div>
-                <!-- 右边控制状态 -->
-                <div class="lr-box right-box">
-                    <ventBox1 class="vent-margin-t-10">
-                        <template #title>
-                            <div>设备实时监测曲线</div>
-                        </template>
-                        <template #container>
-                            <BarAndLine v-if="chartsColumns.length > 0" xAxisPropType="readTime"
-                                :dataSource="echartData" height="340px" :chartsColumns="chartsColumns"
-                                chartsType="listMonitor" :option="echatsOption" />
-                        </template>
-                    </ventBox1>
-                    <div ref="playerRef" style="height: auto; width: 100%; margin-top: 10px"></div>
-                </div>
-            </div>
+              </template>
+            </ventBox1>
+          </div>
+        </div>
+        <!-- 右边控制状态 -->
+        <div class="lr-box right-box">
+          <ventBox1 class="vent-margin-t-10">
+            <template #title>
+              <div>设备实时监测曲线</div>
+            </template>
+            <template #container>
+              <BarAndLine
+                v-if="chartsColumns.length > 0"
+                xAxisPropType="readTime"
+                :dataSource="echartData"
+                height="340px"
+                :chartsColumns="chartsColumns"
+                chartsType="listMonitor"
+                :option="echatsOption"
+              />
+            </template>
+          </ventBox1>
+          <div ref="playerRef" style="height: auto; width: 100%; margin-top: 10px"></div>
         </div>
+      </div>
     </div>
+  </div>
 </template>
 <script lang="ts" setup name="nitrogenHome">
-import { onMounted, onUnmounted, ref, watch, reactive, defineProps, nextTick, inject } from 'vue';
-import ventBox1 from '/@/components/vent/ventBox1.vue';
-import fourBorderBg from '../../../comment/components/fourBorderBg.vue';
-import { mountedThree, destroy, setModelType } from '../nitrogen.threejs';
-import { getDevice } from '../nitrogen.api';
-import BarAndLine from '/@/components/chart/BarAndLine.vue';
-import { deviceControlApi } from '/@/api/vent/index';
-import { preMonitorList, preFanMonitorData, nitrogenMonitorData } from '../nitrogen.data.new';
-import { formatNum } from '/@/utils/ventutil';
-import { useCamera } from '/@/hooks/system/useCamera';
-import { message } from 'ant-design-vue';
-import lodash from 'lodash';
-// import ceshi from '../ceshi.json'
-const globalConfig = inject('globalConfig');
-
-const props = defineProps({
+  import { onMounted, onUnmounted, ref, watch, reactive, defineProps, nextTick, inject } from 'vue';
+  import ventBox1 from '/@/components/vent/ventBox1.vue';
+  import fourBorderBg from '../../../comment/components/fourBorderBg.vue';
+  import { mountedThree, destroy, setModelType } from '../nitrogen.threejs';
+  import { getDevice } from '../nitrogen.api';
+  import BarAndLine from '/@/components/chart/BarAndLine.vue';
+  import { deviceControlApi } from '/@/api/vent/index';
+  import { preMonitorList, preFanMonitorData, nitrogenMonitorData } from '../nitrogen.data.new';
+  import { formatNum } from '/@/utils/ventutil';
+  import { useCamera } from '/@/hooks/system/useCamera';
+  import { message } from 'ant-design-vue';
+  import lodash from 'lodash';
+  // import ceshi from '../ceshi.json'
+  const globalConfig = inject('globalConfig');
+
+  const props = defineProps({
     deviceId: {
-        type: String,
-        require: true,
+      type: String,
+      require: true,
     },
     modalType: {
-        type: String,
-        require: true,
+      type: String,
+      require: true,
     },
-});
-const playerRef = ref();
-const refresh = ref(false);
-const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
-const modalType = ref(''); // 模态框内容显示类型,设备操作类型
-const modalIsShow = ref<boolean>(false); // 是否显示模态框
-const loading = ref(true);
-let kzParam = reactive<any>({
+  });
+  const playerRef = ref();
+  const refresh = ref(false);
+  const modalTitle = ref(''); // 模态框标题显示内容,根据设备操作类型决定
+  const modalType = ref(''); // 模态框内容显示类型,设备操作类型
+  const modalIsShow = ref<boolean>(false); // 是否显示模态框
+  const loading = ref(true);
+  let kzParam = reactive<any>({
     data: {},
     isFw: null,
-});
+  });
 
-// const kyjs = ['1号空压机', '1号空压机', '1号空压机', '1号空压机'];
-const flvURL1 = () => {
+  // const kyjs = ['1号空压机', '1号空压机', '1号空压机', '1号空压机'];
+  const flvURL1 = () => {
     // return `https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv`;
     return '';
-};
-const colors = ['#FDB146', '#EE6666', '#9BCB75', '#03C2EC', '#DA3914', '#9C83D9'];
-const echatsOption = {
+  };
+  const colors = ['#FDB146', '#EE6666', '#9BCB75', '#03C2EC', '#DA3914', '#9C83D9'];
+  const echatsOption = {
     grid: {
-        top: '35%',
-        left: '15%',
-        right: '20px',
-        bottom: '8%',
-        // containLabel: true
+      top: '35%',
+      left: '15%',
+      right: '20px',
+      bottom: '8%',
+      // containLabel: true
     },
     toolbox: {
-        feature: {},
+      feature: {},
     },
-};
+  };
 
-const monitorDataGroupNum = ref(0);
-const statusKyj = ref('')//空压机工作状态
-const statusZdj = ref('')//制氮机远近程状态
+  const monitorDataGroupNum = ref(0);
+  const statusKyj = ref(''); //空压机工作状态
+  const statusZdj = ref(''); //制氮机远近程状态
 
-let airCompressorState = reactive<any[]>([]);
+  let airCompressorState = reactive<any[]>([]);
 
-const chartsColumns = ref([
+  const chartsColumns = ref([
     {
-        legend: '氮气流量',
-        seriesName: '(m³/h)',
-        ymax: 1000,
-        yname: 'm³/h',
-        linetype: 'line',
-        yaxispos: 'left',
-        color: '#FDB146',
-        sort: 1,
-        xRotate: 0,
-        dataIndex: 'nitrogen_flow_rate',
+      legend: '氮气流量',
+      seriesName: '(m³/h)',
+      ymax: 1000,
+      yname: 'm³/h',
+      linetype: 'line',
+      yaxispos: 'left',
+      color: '#FDB146',
+      sort: 1,
+      xRotate: 0,
+      dataIndex: 'nitrogen_flow_rate',
     },
-]);
-const { getCamera, webRtcServer } = useCamera();
+  ]);
+  const { getCamera, webRtcServer } = useCamera();
 
-const monitorData = reactive<any[]>([]);
+  const monitorData = reactive<any[]>([]);
 
-//图表数据
-let echartData = ref<any>([]);
+  //图表数据
+  let echartData = ref<any>([]);
 
-// https获取监测数据
-let timer: null | NodeJS.Timeout = null;
-async function getMonitor(flag?) {
+  // https获取监测数据
+  let timer: null | NodeJS.Timeout = null;
+  async function getMonitor(flag?) {
     if (Object.prototype.toString.call(timer) === '[object Null]') {
-        timer = await setTimeout(
-            async () => {
-                if (props.deviceId) {
-                    await getDataSource(props.deviceId);
-                }
-                if (timer) {
-                    timer = null;
-                }
-                await getMonitor();
-            },
-            flag ? 0 : 3000
-        );
+      timer = await setTimeout(
+        async () => {
+          if (props.deviceId) {
+            await getDataSource(props.deviceId);
+          }
+          if (timer) {
+            timer = null;
+          }
+          await getMonitor();
+        },
+        flag ? 0 : 3000
+      );
     }
-}
+  }
 
-async function getDataSource(systemID) {
+  async function getDataSource(systemID) {
     const res = await getDevice({ devicetype: 'sys', systemID, type: 'all' });
     if (res) {
-        const result = res;
-        if (!result || result.msgTxt.length < 1) return;
-        result.msgTxt.forEach((item) => {
-            if (item.type && item.type.startsWith('nitrogen')) {
-                airCompressorState.length = 0;
-                // let netStatus = 0;
-                // monitorData.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData']);
-                monitorData.length = 0
-                item.datalist.forEach(el => {
-                    if (el.deviceType == 'nitrogen_auto') {
-                        monitorData.splice(0, 0, Object.assign(el, el.readData))
-                    } else {
-                        monitorData.push({ ...el, ...el.readData })
-                    }
-                })
-                statusKyj.value = monitorData[1]['operation_shutdown']
-                statusZdj.value = monitorData[0]['remote_local']
-                monitorDataGroupNum.value = monitorData.length - 1
-                console.log(monitorData, ' monitorData--------')
-                // if (monitorData['netStatus'] == 1) {
-                //     netStatus = 1;
-                // }
-                airCompressorState.push({
-                    id: monitorData[1]['deviceID'],
-                    deviceType: monitorData[1]['deviceType'],
-                });
-                const airCompressor = { readTime: monitorData[0]['readTime'].substring(11) };
-                const dataArr = lodash.cloneDeep(echartData.value);
-                //图表数据
-                if (dataArr.length <= 5) {
-                    airCompressor[`nitrogen_flow_rate`] = monitorData[0]['nitrogen_flow_rate'] || 0;
-                    dataArr.push(airCompressor);
-                } else {
-                    dataArr.shift();
-                    dataArr.push(airCompressor);
-                }
-                echartData.value = dataArr;
+      const result = res;
+      if (!result || result.msgTxt.length < 1) return;
+      result.msgTxt.forEach((item) => {
+        if (item.type && item.type.startsWith('nitrogen')) {
+          airCompressorState.length = 0;
+          // let netStatus = 0;
+          // monitorData.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData']);
+          monitorData.length = 0;
+          item.datalist.forEach((el) => {
+            if (el.deviceType == 'nitrogen_auto') {
+              monitorData.splice(0, 0, Object.assign(el, el.readData));
+            } else {
+              monitorData.push({ ...el, ...el.readData });
             }
-        });
-        refresh.value = true;
-        nextTick(() => {
-            refresh.value = false;
-        });
+          });
+          statusKyj.value = monitorData[1]['operation_shutdown'];
+          statusZdj.value = monitorData[0]['remote_local'];
+          monitorDataGroupNum.value = monitorData.length - 1;
+          console.log(monitorData, ' monitorData--------');
+          // if (monitorData['netStatus'] == 1) {
+          //     netStatus = 1;
+          // }
+          airCompressorState.push({
+            id: monitorData[1]['deviceID'],
+            deviceType: monitorData[1]['deviceType'],
+          });
+          const airCompressor = { readTime: monitorData[0]['readTime'].substring(11) };
+          const dataArr = lodash.cloneDeep(echartData.value);
+          //图表数据
+          if (dataArr.length <= 5) {
+            airCompressor[`nitrogen_flow_rate`] = monitorData[0]['nitrogen_flow_rate'] || 0;
+            dataArr.push(airCompressor);
+          } else {
+            dataArr.shift();
+            dataArr.push(airCompressor);
+          }
+          echartData.value = dataArr;
+        }
+      });
+      refresh.value = true;
+      nextTick(() => {
+        refresh.value = false;
+      });
     }
-}
+  }
 
-function handlerDevice(data, bol) {
+  function handlerDevice(data, bol) {
     kzParam.data = data;
     kzParam.isFw = bol;
     if (bol == '制氮机启动' || bol == '空压机启动') {
-        modalTitle.value = bol;
-        modalType.value = '1';
-        modalIsShow.value = true;
-        kzParam.data.start = true;
-        kzParam.data.stop = false;
+      modalTitle.value = bol;
+      modalType.value = '1';
+      modalIsShow.value = true;
+      kzParam.data.start = true;
+      kzParam.data.stop = false;
     } else {
-        modalTitle.value = bol;
-        modalType.value = '2';
-        modalIsShow.value = true;
-        kzParam.data.start = false;
-        kzParam.data.stop = true;
+      modalTitle.value = bol;
+      modalType.value = '2';
+      modalIsShow.value = true;
+      kzParam.data.start = false;
+      kzParam.data.stop = true;
     }
-}
-function handleOK(passWord, handlerState) {
+  }
+  function handleOK(passWord, handlerState) {
     console.log(kzParam, 'kz----------');
     // if (passWord !== '123456') {
     //   message.warning('密码不正确,请重新输入');
@@ -317,95 +327,95 @@ function handleOK(passWord, handlerState) {
 
     let data = {};
     if (kzParam.isFw == '制氮机启动' || kzParam.isFw == '空压机启动') {
-        data = {
-            deviceid: kzParam.data.id,
-            devicetype: kzParam.data.deviceType,
-            password: passWord,
-            start: kzParam.data.start,
-        };
+      data = {
+        deviceid: kzParam.data.id,
+        devicetype: kzParam.data.deviceType,
+        password: passWord,
+        start: kzParam.data.start,
+      };
     } else {
-        data = {
-            deviceid: kzParam.data.id,
-            password: passWord,
-            devicetype: kzParam.data.deviceType,
-            stop: kzParam.data.stop,
-        };
+      data = {
+        deviceid: kzParam.data.id,
+        password: passWord,
+        devicetype: kzParam.data.deviceType,
+        stop: kzParam.data.stop,
+      };
     }
 
     deviceControlApi(data).then((res) => {
-        // 模拟时开启
-        if (res.success) {
-            modalIsShow.value = false;
-            getDataSource(props.deviceId);
-            if (globalConfig.History_Type == 'remote') {
-                message.success('指令已下发至生产管控平台成功!');
-            } else {
-                message.success('指令已下发成功!');
-            }
+      // 模拟时开启
+      if (res.success) {
+        modalIsShow.value = false;
+        getDataSource(props.deviceId);
+        if (globalConfig.History_Type == 'remote') {
+          message.success('指令已下发至生产管控平台成功!');
+        } else {
+          message.success('指令已下发成功!');
         }
+      }
     });
-}
-function handleCancel() {
+  }
+  function handleCancel() {
     modalIsShow.value = false;
     modalTitle.value = '';
     modalType.value = '';
-}
+  }
 
-watch([monitorDataGroupNum, loading], ([newMonitorDataGroupNum, newLoading]) => {
+  watch([monitorDataGroupNum, loading], ([newMonitorDataGroupNum, newLoading]) => {
     nextTick(() => {
-        if (newMonitorDataGroupNum && !newLoading) {
-            setModelType(props.modalType, newMonitorDataGroupNum);
-        }
+      if (newMonitorDataGroupNum && !newLoading) {
+        setModelType(props.modalType, newMonitorDataGroupNum);
+      }
     });
-});
+  });
 
-onMounted(async () => {
+  onMounted(async () => {
     await getMonitor(true);
     await mountedThree().then(() => {
-        loading.value = false;
+      loading.value = false;
     });
     await getCamera(props.deviceId, playerRef.value);
-});
+  });
 
-onUnmounted(() => {
+  onUnmounted(() => {
     destroy();
     if (webRtcServer.length > 0) {
-        webRtcServer.forEach((item) => {
-            item.disconnect();
-        });
+      webRtcServer.forEach((item) => {
+        item.disconnect();
+      });
     }
     if (timer) {
-        clearTimeout(timer);
-        timer = undefined;
+      clearTimeout(timer);
+      timer = undefined;
     }
-});
+  });
 </script>
 
 <style lang="less" scoped>
-@ventSpace: zxm;
+  @ventSpace: zxm;
 
-.nitrogen-box {
+  .nitrogen-box {
     width: 100%;
     height: 100%;
     display: flex;
     justify-content: center;
-}
+  }
 
-#nitrogenCss3D {
+  #nitrogenCss3D {
     .modal-monitor {
-        width: 200px;
-        position: absolute;
-        left: 0px;
-        top: 0px;
+      width: 200px;
+      position: absolute;
+      left: 0px;
+      top: 0px;
     }
 
     &:deep(.win) {
-        margin: 0 !important;
-        background: #00000044;
+      margin: 0 !important;
+      background: #00000044;
     }
-}
+  }
 
-.nitrogen-home {
+  .nitrogen-home {
     width: 100%;
     height: 100%;
     position: fixed;
@@ -418,440 +428,440 @@ onUnmounted(() => {
     top: 20px;
 
     .nitrogen-container {
+      width: 100%;
+      height: calc(100% - 100px);
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 100px;
+
+      .device-state {
+        width: 100%;
+        position: absolute;
+        top: 20px;
+        color: #e90000;
+        display: flex;
+        justify-content: center;
+        font-size: 20px;
+      }
+
+      .top-box {
         width: 100%;
-        height: calc(100% - 100px);
+        padding: 10px;
+        overflow: hidden;
         display: flex;
         justify-content: space-between;
-        margin-bottom: 100px;
+        // margin-top: 40px;
+
+        .center-item-box {
+          position: absolute;
+          left: 50%;
+          top: 50px;
+          transform: translate(-48%, 0);
+          width: calc(100% - 720px);
+          height: 50px;
+          display: flex;
+          align-items: center;
+          pointer-events: auto;
+
+          .top-left {
+            display: flex;
+            width: 40%;
+            color: #fff;
+
+            .button-box {
+              position: relative;
+              width: auto;
+              height: 32px;
+              display: flex;
+              align-items: center;
+              justify-content: center;
+              border-radius: 5px;
+              color: #fff;
+              padding: 10px 15px;
+              margin: 0px 10px;
+              box-sizing: border-box;
+              cursor: pointer;
+              background: linear-gradient(#1fa6cb, #127cb5);
+
+              &:hover {
+                background: linear-gradient(#1fa6cbcc, #127cb5cc);
+              }
+            }
+          }
 
-        .device-state {
-            width: 100%;
-            position: absolute;
-            top: 20px;
-            color: #e90000;
+          .top-center {
             display: flex;
+            //   flex: 1;
+            width: 15%;
             justify-content: center;
+            align-items: center;
             font-size: 20px;
+            color: #fff;
+
+            .top-c-label {
+              color: yellow;
+            }
+          }
+
+          .top-right {
+            display: flex;
+            //   flex: 2;
+            width: 45%;
+            justify-content: right;
+            align-items: center;
+            color: #fff;
+
+            .control-type {
+              display: flex;
+              color: #fff;
+
+              .control-title {
+                color: #73e8fe;
+              }
+            }
+          }
         }
 
-        .top-box {
+        .lr-box {
+          height: 100%;
+          display: flex;
+          flex-direction: column;
+          position: relative;
+          // overflow: hidden;
+          z-index: 9999;
+          pointer-events: auto;
+          overflow-y: auto;
+          overflow-x: hidden;
+          height: calc(100% - 70px);
+        }
+
+        .item {
+          width: 305px;
+          height: auto;
+          position: relative;
+          border-radius: 5px;
+          margin-top: 10px;
+          margin-bottom: 0px;
+          pointer-events: auto;
+          color: #fff;
+          // overflow: hidden;
+
+          &:first-child {
+            margin-top: 0px;
+          }
+
+          .base-title {
+            color: #fff;
+            margin-bottom: 8px;
+            padding-left: 10px;
+            position: relative;
+            font-size: 16px;
+
+            &::after {
+              content: '';
+              position: absolute;
+              display: block;
+              width: 4px;
+              height: 12px;
+              top: 7px;
+              left: 0px;
+              background: #45d3fd;
+              border-radius: 4px;
+            }
+          }
+
+          .monitor-item {
             width: 100%;
-            padding: 10px;
-            overflow: hidden;
             display: flex;
-            justify-content: space-between;
-            // margin-top: 40px;
+            flex-direction: row;
+            flex-wrap: wrap;
+
+            .state-item {
+              width: 50%;
+              padding: 5px;
+              display: flex;
+              align-items: center;
+              justify-content: space-between;
+
+              .state-title {
+                width: 100px;
+                color: #ffffffdd;
+                flex: 9;
+                font-size: 14px;
 
-            .center-item-box {
-                position: absolute;
-                left: 50%;
-                top: 50px;
-                transform: translate(-48%, 0);
-                width: calc(100% - 720px);
-                height: 50px;
-                display: flex;
-                align-items: center;
-                pointer-events: auto;
-
-                .top-left {
-                    display: flex;
-                    width: 40%;
-                    color: #fff;
-
-                    .button-box {
-                        position: relative;
-                        width: auto;
-                        height: 32px;
-                        display: flex;
-                        align-items: center;
-                        justify-content: center;
-                        border-radius: 5px;
-                        color: #fff;
-                        padding: 10px 15px;
-                        margin: 0px 10px;
-                        box-sizing: border-box;
-                        cursor: pointer;
-                        background: linear-gradient(#1fa6cb, #127cb5);
-
-                        &:hover {
-                            background: linear-gradient(#1fa6cbcc, #127cb5cc);
-                        }
-                    }
+                .unit {
+                  // color: #ffffffbb;
                 }
+              }
 
-                .top-center {
-                    display: flex;
-                    //   flex: 1;
-                    width: 15%;
-                    justify-content: center;
-                    align-items: center;
-                    font-size: 20px;
-                    color: #fff;
-
-                    .top-c-label {
-                        color: yellow;
-                    }
-                }
+              .state-val {
+                flex: 1;
+                color: #e4a300;
+                margin-right: 5px;
+                text-align: right;
+                font-size: 14px;
+              }
+            }
+          }
 
-                .top-right {
-                    display: flex;
-                    //   flex: 2;
-                    width: 45%;
-                    justify-content: right;
-                    align-items: center;
-                    color: #fff;
-
-                    .control-type {
-                        display: flex;
-                        color: #fff;
-
-                        .control-title {
-                            color: #73e8fe;
-                        }
-                    }
-                }
+          .signal-box {
+            margin: 5px 0;
+            display: flex;
+            align-items: center;
+
+            .signal-title {
+              color: #7af5ff;
+              margin: 0 5px;
             }
 
-            .lr-box {
-                height: 100%;
-                display: flex;
-                flex-direction: column;
-                position: relative;
-                // overflow: hidden;
-                z-index: 9999;
-                pointer-events: auto;
-                overflow-y: auto;
-                overflow-x: hidden;
-                height: calc(100% - 70px);
+            &:last-child {
+              margin-right: 0px;
             }
+          }
 
-            .item {
-                width: 305px;
-                height: auto;
-                position: relative;
-                border-radius: 5px;
-                margin-top: 10px;
-                margin-bottom: 0px;
-                pointer-events: auto;
-                color: #fff;
-                // overflow: hidden;
-
-                &:first-child {
-                    margin-top: 0px;
-                }
+          .list-item {
+            padding: 0 10px;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
 
-                .base-title {
-                    color: #fff;
-                    margin-bottom: 8px;
-                    padding-left: 10px;
-                    position: relative;
-                    font-size: 16px;
-
-                    &::after {
-                        content: '';
-                        position: absolute;
-                        display: block;
-                        width: 4px;
-                        height: 12px;
-                        top: 7px;
-                        left: 0px;
-                        background: #45d3fd;
-                        border-radius: 4px;
-                    }
-                }
+            .item-data-key {
+              color: #ffffff99;
+            }
+          }
 
-                .monitor-item {
-                    width: 100%;
-                    display: flex;
-                    flex-direction: row;
-                    flex-wrap: wrap;
-
-                    .state-item {
-                        width: 50%;
-                        padding: 5px;
-                        display: flex;
-                        align-items: center;
-                        justify-content: space-between;
-
-                        .state-title {
-                            width: 100px;
-                            color: #ffffffdd;
-                            flex: 9;
-                            font-size: 14px;
-
-                            .unit {
-                                // color: #ffffffbb;
-                            }
-                        }
-
-                        .state-val {
-                            flex: 1;
-                            color: #e4a300;
-                            margin-right: 5px;
-                            text-align: right;
-                            font-size: 14px;
-                        }
-                    }
-                }
+          .item-data-box {
+            color: #fff;
 
-                .signal-box {
-                    margin: 5px 0;
-                    display: flex;
-                    align-items: center;
+            .state-icon {
+              display: inline-block;
+              width: 12px;
+              height: 12px;
+              border-radius: 12px;
+            }
 
-                    .signal-title {
-                        color: #7af5ff;
-                        margin: 0 5px;
-                    }
+            .open {
+              border: 5px solid #133a56;
+              background: #4ecb73;
+            }
 
-                    &:last-child {
-                        margin-right: 0px;
-                    }
-                }
+            .close {
+              border: 5px solid #192961;
+              background: #6d7898;
+            }
+          }
+        }
 
-                .list-item {
-                    padding: 0 10px;
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
+        .item-l {
+          width: 100%;
 
-                    .item-data-key {
-                        color: #ffffff99;
-                    }
-                }
+          .monitor-box {
+            width: 100%;
 
-                .item-data-box {
-                    color: #fff;
-
-                    .state-icon {
-                        display: inline-block;
-                        width: 12px;
-                        height: 12px;
-                        border-radius: 12px;
-                    }
-
-                    .open {
-                        border: 5px solid #133a56;
-                        background: #4ecb73;
-                    }
-
-                    .close {
-                        border: 5px solid #192961;
-                        background: #6d7898;
-                    }
-                }
-            }
+            .parameter-title {
+              position: relative;
+              width: 100%;
+              height: 14px;
+              margin-top: 10px;
 
-            .item-l {
-                width: 100%;
-
-                .monitor-box {
-                    width: 100%;
-
-                    .parameter-title {
-                        position: relative;
-                        width: 100%;
-                        height: 14px;
-                        margin-top: 10px;
-
-                        .icon,
-                        span {
-                            position: absolute;
-                            top: -10px;
-                        }
-                    }
-
-                    .group-parameter-title {
-                        background-image: linear-gradient(to right, #39a3ff50, #39a3ff00);
-
-                        .icon {
-                            left: -12px;
-                            top: -17px;
-                        }
-
-                        span {
-                            left: 18px;
-                        }
-
-                        .item-col {
-                            background-image: linear-gradient(to right, #39a3ff00, #39a3ff10);
-                        }
-                    }
-
-                    .device-parameter-title {
-                        background-image: linear-gradient(to right, #3df6ff40, #3df6ff00);
-
-                        .icon {
-                            left: -10px;
-                            top: -14px;
-                        }
-
-                        span {
-                            left: 18px;
-                        }
-
-                        .item-col {
-                            background-image: linear-gradient(to right, #3df6ff10, #3df6ff00);
-                        }
-                    }
-                }
+              .icon,
+              span {
+                position: absolute;
+                top: -10px;
+              }
             }
 
-            .right-box {
-                width: 300px;
-                margin-top: 50px;
+            .group-parameter-title {
+              background-image: linear-gradient(to right, #39a3ff50, #39a3ff00);
+
+              .icon {
+                left: -12px;
+                top: -17px;
+              }
+
+              span {
+                left: 18px;
+              }
+
+              .item-col {
+                background-image: linear-gradient(to right, #39a3ff00, #39a3ff10);
+              }
             }
 
-            .left-box {
-                width: 335px;
-                margin-top: 80px;
-
-                .input-item {
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
-                    padding: 4px 8px;
-                    margin: 6px 0;
-                    background-image: linear-gradient(to right, #39deff15, #3977e500);
-
-                    .title {
-                        width: 200px;
-                    }
-
-                    .title-auto {
-                        width: auto;
-                    }
-
-                    .input-value {
-                        width: 80px;
-                        height: 28px;
-                        line-height: 28px !important;
-                        background: transparent !important;
-                        border-color: #228da2 !important;
-                        color: #fff !important;
-                    }
-
-                    .value {
-                        width: 100px;
-                        color: #00d8ff;
-                        padding-right: 20px;
-                    }
-
-                    .unit {
-                        width: 80px;
-                    }
-                }
+            .device-parameter-title {
+              background-image: linear-gradient(to right, #3df6ff40, #3df6ff00);
+
+              .icon {
+                left: -10px;
+                top: -14px;
+              }
+
+              span {
+                left: 18px;
+              }
+
+              .item-col {
+                background-image: linear-gradient(to right, #3df6ff10, #3df6ff00);
+              }
             }
+          }
         }
 
-        &:deep(.win) {
-            width: 100%;
-            margin: 0 !important;
+        .right-box {
+          width: 300px;
+          margin-top: 50px;
+        }
+
+        .left-box {
+          width: 335px;
+          margin-top: 80px;
+
+          .input-item {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            padding: 4px 8px;
+            margin: 6px 0;
+            background-image: linear-gradient(to right, #39deff15, #3977e500);
+
+            .title {
+              width: 200px;
+            }
+
+            .title-auto {
+              width: auto;
+            }
+
+            .input-value {
+              width: 80px;
+              height: 28px;
+              line-height: 28px !important;
+              background: transparent !important;
+              border-color: #228da2 !important;
+              color: #fff !important;
+            }
+
+            .value {
+              width: 100px;
+              color: #00d8ff;
+              padding-right: 20px;
+            }
+
+            .unit {
+              width: 80px;
+            }
+          }
         }
+      }
+
+      &:deep(.win) {
+        width: 100%;
+        margin: 0 !important;
+      }
     }
-}
+  }
 
-&:deep(.main) {
+  &:deep(.main) {
     .title {
-        height: 34px;
-        text-align: center;
-        font-weight: 600;
-        color: #7af5ff;
-        // background-image: url('../../../assets/img/yfj/light.png');
-        background-repeat: no-repeat;
-        background-position-x: center;
-        background-position-y: 100%;
-        background-size: 80%;
-        font-size: 16px;
+      height: 34px;
+      text-align: center;
+      font-weight: 600;
+      color: #7af5ff;
+      // background-image: url('../../../assets/img/yfj/light.png');
+      background-repeat: no-repeat;
+      background-position-x: center;
+      background-position-y: 100%;
+      background-size: 80%;
+      font-size: 16px;
     }
 
     .monitor-item {
-        width: 200px;
+      width: 200px;
+      display: flex;
+      flex-direction: row;
+      width: auto;
+      margin-bottom: 3px;
+
+      .monitor-val {
+        color: #ffb700;
         display: flex;
-        flex-direction: row;
         width: auto;
-        margin-bottom: 3px;
 
-        .monitor-val {
-            color: #ffb700;
-            display: flex;
-            width: auto;
-
-            .val {
-                width: 80px;
-                font-size: 14px;
-            }
+        .val {
+          width: 80px;
+          font-size: 14px;
+        }
 
-            .unit {
-                color: #ffffffbb;
-                font-size: 14px;
-            }
+        .unit {
+          color: #ffffffbb;
+          font-size: 14px;
         }
+      }
     }
 
     .monitor-title {
-        // width: 100px;
-        width: 125px;
-        color: #7af5ff;
-        font-weight: 400;
-        font-size: 14px;
+      // width: 100px;
+      width: 125px;
+      color: #7af5ff;
+      font-weight: 400;
+      font-size: 14px;
     }
 
     .signal-item {
-        display: flex;
-        justify-content: space-between;
-
-        // margin-bottom: 5px;
-        .signal-round {
-            display: inline-block;
-            width: 8px;
-            height: 8px;
-            border-radius: 50%;
-            margin: 0 10px;
-            position: relative;
-
-            &::after {
-                display: block;
-                content: '';
-                position: absolute;
-                width: 12px;
-                height: 12px;
-                top: -2px;
-                left: -2px;
-                border-radius: 50%;
-            }
+      display: flex;
+      justify-content: space-between;
+
+      // margin-bottom: 5px;
+      .signal-round {
+        display: inline-block;
+        width: 8px;
+        height: 8px;
+        border-radius: 50%;
+        margin: 0 10px;
+        position: relative;
+
+        &::after {
+          display: block;
+          content: '';
+          position: absolute;
+          width: 12px;
+          height: 12px;
+          top: -2px;
+          left: -2px;
+          border-radius: 50%;
         }
+      }
 
-        .signal-round-gry {
-            background-color: #858585;
+      .signal-round-gry {
+        background-color: #858585;
 
-            &::after {
-                background-color: #85858544;
-                box-shadow: 0 0 1px 1px #85858599;
-            }
+        &::after {
+          background-color: #85858544;
+          box-shadow: 0 0 1px 1px #85858599;
         }
+      }
 
-        .signal-round-run {
-            background-color: #67fc00;
+      .signal-round-run {
+        background-color: #67fc00;
 
-            &::after {
-                background-color: #67fc0044;
-                box-shadow: 0 0 1px 1px #c6ff77;
-            }
+        &::after {
+          background-color: #67fc0044;
+          box-shadow: 0 0 1px 1px #c6ff77;
         }
+      }
 
-        .signal-round-warning {
-            background-color: #e9170b;
+      .signal-round-warning {
+        background-color: #e9170b;
 
-            &::after {
-                background-color: #e9170b44;
-                box-shadow: 0 0 1px 1px #e9170b;
-            }
+        &::after {
+          background-color: #e9170b44;
+          box-shadow: 0 0 1px 1px #e9170b;
         }
+      }
     }
-}
+  }
 
-:deep(.zxm-radio-wrapper) {
+  :deep(.zxm-radio-wrapper) {
     color: #fff !important;
-}
-</style>
+  }
+</style>

+ 2 - 1
src/views/vent/monitorManager/compressor/index.vue

@@ -11,7 +11,7 @@
 </template>
 <script lang="ts" setup>
 import { ref, onMounted, onUnmounted, nextTick } from 'vue'
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import nitrogenEcharts from './components/nitrogenEcharts.vue'
 import nitrogenHistory from './components/nitrogenHistory.vue'
 import nitrogenHandleHistory from './components/nitrogenHandleHistory.vue'
@@ -22,6 +22,7 @@ import { navList, getMonitorComponent } from './nitrogen.data'
 import { getTableList, systemList,  } from "./nitrogen.api";
 
 const nitrogenHome = getMonitorComponent()
+debugger;
 type DeviceType = { deviceType: string, deviceName: string, datalist: any[] };
 
 const { currentRoute } = useRouter();

+ 4 - 2
src/views/vent/monitorManager/compressor/nitrogen.data.ts

@@ -201,7 +201,8 @@ export const zhudanOption = reactive({
 
 export function getMonitorComponent() {
   const { sysOrgCode } = useGlobSetting();
-  console.log(sysOrgCode,'sysOrgCode----------------------')
+  debugger;
+  console.log(sysOrgCode, 'sysOrgCode----------------------');
   let nitrogenHome;
   switch (sysOrgCode) {
     case 'sdmtjtdltmk': //大柳塔井
@@ -218,7 +219,8 @@ export function getMonitorComponent() {
       return nitrogenHome;
     default:
       // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_dltj.vue'));
-      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_new.vue'));
+      // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_new.vue'));
+      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_bet.vue'));
       return nitrogenHome;
   }
 }

+ 64 - 0
src/views/vent/monitorManager/deviceMonitor/components/device/device.data.ts

@@ -325,6 +325,70 @@ export const haveDetailArr = [
   'safetymonitor',
   'nitrogen',
 ];
+
+export const locationFormConfig = {
+  labelAlign: 'left',
+  showAdvancedButton: false,
+  showResetButton: true,
+  showSubmitButton: false,
+  size: 'small',
+  // baseColProps: {
+  //   // offset: 0.5,
+  //   xs: 24,
+  //   sm: 24,
+  //   md: 24,
+  //   lg: 9,
+  //   xl: 7,
+  //   xxl: 4,
+  // },
+  schemas: [
+    {
+      label: '人员名称',
+      field: 'strname',
+      component: 'Input',
+    },
+    {
+      label: '分站名称',
+      field: 'stationname',
+      component: 'Input',
+    },
+  ],
+  colProps: {
+    span: 4,
+  },
+};
+
+export const vehicleFormConfig = {
+  labelAlign: 'left',
+  showAdvancedButton: false,
+  showResetButton: true,
+  showSubmitButton: false,
+  // size: 'small',
+  // baseColProps: {
+  //   // offset: 0.5,
+  //   xs: 24,
+  //   sm: 24,
+  //   md: 24,
+  //   lg: 9,
+  //   xl: 7,
+  //   xxl: 4,
+  // },
+  schemas: [
+    {
+      label: '车辆名称',
+      field: 'strname',
+      component: 'Input',
+    },
+    {
+      label: '分站名称',
+      field: 'stationname',
+      component: 'Input',
+    },
+  ],
+  colProps: {
+    span: 4,
+  },
+};
 export const haveHandlerArr = ['windrect', 'window', 'gate', 'fanlocal', 'fanmain', 'pump', 'obfurage', 'nitrogen', 'pulping', 'spray', 'dustdev']; // table无操作
 export const noWarningArr = ['location', 'vehicle', 'cheliang']; // 无预警详情的
 export const haveSysDetailArr = ['']; //有场景详情的

+ 40 - 4
src/views/vent/monitorManager/deviceMonitor/components/device/index.vue

@@ -45,7 +45,7 @@
         </div>
       </div>
     </div>
-
+    
     <div class="bottom-tabs-box" @mousedown="setDivHeight($event, 230, scroll, 125)" id="monitorBox">
       <!-- <dv-border-box8 :dur="5"  :style="`padding: 5px; height: ${scroll.y + 100}px`" > -->
       <div :style="`padding: 5px; height: ${scroll.y + 100}px`">
@@ -94,7 +94,7 @@
               <a-table :columns="majorColumns" :data-source="dataSource" bordered :scroll="{ y: scroll.y - 30 }" :pagination="false"></a-table>
             </template>
             <template v-else-if="deviceType.startsWith('safetymonitor') && activeKey == '1'">
-              <MonitorTable ref="monitorTable" :columnsType="`${deviceType}_monitor`" :dataSource="dataSource"
+              <MonitorTable ref="monitorTable" :columnsType="`${deviceType}_monitor`" :deviceType="deviceType" :dataSource="dataSource"
                 design-scope="device_monitor" :isShowActionColumn="true" :isShowSelect="false" title="设备监测" 
                 :form-config="formConfig" :scroll="{ y: scroll.y - 110 }">
                 <template #action="{ record }">
@@ -127,6 +127,34 @@
                 </template>
               </MonitorTable>
             </template>
+            <template v-else-if="deviceType.startsWith('location') && activeKey == '1'">
+              <MonitorTable ref="monitorTable" :columnsType="`${deviceType}_monitor`" :deviceType="deviceType" :dataSource="dataSource"
+                design-scope="device_monitor" :isShowActionColumn="true" :isShowSelect="false" title="设备监测" 
+                :form-config="locationFormConfig" :scroll="{ y: scroll.y - 110 }">
+                <template #action="{ record }">
+                  <TableAction :actions=" [
+                    {
+                      label: '定位',
+                      onClick: goLocation.bind(null, record),
+                    },
+                  ]" />
+                </template>
+              </MonitorTable>
+            </template>
+            <template v-else-if="deviceType.startsWith('vehicle') && activeKey == '1'">
+              <MonitorTable ref="monitorTable" :columnsType="`${deviceType}_monitor`" :deviceType="deviceType" :dataSource="dataSource"
+                design-scope="device_monitor" :isShowActionColumn="true" :isShowSelect="false" title="设备监测" 
+                :form-config="vehicleFormConfig" :scroll="{ y: scroll.y - 110 }">
+                <template #action="{ record }">
+                  <TableAction :actions=" [
+                    {
+                      label: '定位',
+                      onClick: goLocation.bind(null, record),
+                    },
+                  ]" />
+                </template>
+              </MonitorTable>
+            </template>
             <template v-else>
               <!-- 工作面echarts图标 -->
               <BarAndLine
@@ -298,7 +326,7 @@ import { SvgIcon } from '/@/components/Icon';
 import { getActions } from '/@/qiankun/state';
 import { useRouter } from 'vue-router';
 import { setDivHeight } from '/@/utils/event';
-import { majorColumns, haveSysDetailArr, haveDetailArr, haveHandlerArr, noWarningArr, surfaceChartsColumns, noHistoryArr, getMonitorComponent } from  './device.data'
+import { majorColumns, haveSysDetailArr, haveDetailArr, haveHandlerArr, noWarningArr, surfaceChartsColumns, noHistoryArr, getMonitorComponent, locationFormConfig, vehicleFormConfig } from  './device.data'
 import mainPath from './modal/mainPath.vue'
 import { formConfig } from '../../../safetyMonitor/safety.data'
 import { getDictItemsByCode } from '/@/utils/dict';
@@ -530,7 +558,15 @@ async function getDataSource() {
         // 安全监控
         const formData = monitorTable.value.getForm()
         searchForm = formData.getFieldsValue()
-        resultData = await list({ devicetype: deviceType.value, pagetype: 'normal', filterParams: { ...searchForm } })
+        if(deviceType.value.startsWith('safetymonitor')){
+          resultData = await list({ devicetype: deviceType.value, pagetype: 'normal', filterParams: { ...searchForm } })
+        }else if(deviceType.value.startsWith('location') || deviceType.value.startsWith('vehicle')) {
+          const {strname, stationname} = searchForm
+          // resultData = await list({ devicetype: deviceType.value, pagetype: 'normal', strname: strname? '*'+strname+'*':'', stationname: stationname? '*'+stationname+'*':''  })
+          resultData = await list({ devicetype: deviceType.value, pagetype: 'normal', ...searchForm})
+        }else{
+          resultData = await list({ devicetype: deviceType.value, pagetype: 'normal'})
+        }
       }else{
         // 非安全监控
         resultData = await list({ devicetype: deviceType.value, pagetype: 'normal'})

+ 2 - 1
src/views/vent/monitorManager/deviceMonitor/components/network/index.vue

@@ -45,7 +45,8 @@
                     <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="signal-round signal-round-run" :class="{'signal-round-run': Number(pageData.dTotalArea) <= 2, 'signal-round-red': Number(pageData.dTotalArea) > 2 }"></span> -->
+                      <span class="signal-round signal-round-run"></span>
                     </div>
                     <div v-if="data.code == 'resistance'" class="item-value">{{ totalPa }}</div>
                   </div>

+ 114 - 108
src/views/vent/monitorManager/fanLocalMonitor/components/DetailModal.vue

@@ -1,8 +1,8 @@
 <template>
-  <BasicModal @register="register"  title="风机详情" width="1600px" v-bind="$attrs" @ok="onSubmit" @cancel="onSubmit" :defaultFullscreen="true">
+  <BasicModal @register="register" title="风机详情" width="1600px" v-bind="$attrs" @ok="onSubmit" @cancel="onSubmit" :defaultFullscreen="true">
     <div class="detail-box">
       <div class="left-box">
-        <SvgPreview :data-model="data_model" :canvas-drag="false"/>
+        <SvgPreview :data-model="data_model" :canvas-drag="false" />
       </div>
       <div class="right-box" v-if="activeBox == 1">
         <div class="right-title">二部胶带机移变移动变电站控制详情</div>
@@ -16,7 +16,7 @@
           <div class="right-detail-box">
             <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
               <a-tab-pane key="1" tab="运行状态">
-                <div class=" detail-state">
+                <div class="detail-state">
                   <div class="detail-item">
                     <div class="item-title">高压侧</div>
                     <div class="vent-flex-row-between detail-item-row">
@@ -59,34 +59,33 @@
               </a-tab-pane>
               <a-tab-pane key="2" tab="保护使能">
                 <div class="detail-state">
-                    <div class="detail-item">
-                      <div class="item-title">高压侧</div>
-                      <div class="vent-flex-row-between detail-item-row">
-                        <div>运行状态</div>
-                        <div>正常</div>
-                      </div>
-                      <div v-for="(item, key) in protectionEnableH" :key="key" class="vent-flex-row-between detail-item-row">
-                        <div>{{ item.title }}</div>
-                        <div>-</div>
-                      </div>
+                  <div class="detail-item">
+                    <div class="item-title">高压侧</div>
+                    <div class="vent-flex-row-between detail-item-row">
+                      <div>运行状态</div>
+                      <div>正常</div>
                     </div>
-                    <div class="detail-item">
-                      <div class="item-title">低压侧</div>
-                      <div class="vent-flex-row-between detail-item-row">
-                        <div>运行状态</div>
-                        <div>正常</div>
-                      </div>
-                      <div v-for="(item, key) in protectionEnableL" :key="key" class="vent-flex-row-between detail-item-row">
-                        <div>{{ item.title }}</div>
-                        <div>-</div>
-                      </div>
+                    <div v-for="(item, key) in protectionEnableH" :key="key" class="vent-flex-row-between detail-item-row">
+                      <div>{{ item.title }}</div>
+                      <div>-</div>
                     </div>
                   </div>
+                  <div class="detail-item">
+                    <div class="item-title">低压侧</div>
+                    <div class="vent-flex-row-between detail-item-row">
+                      <div>运行状态</div>
+                      <div>正常</div>
+                    </div>
+                    <div v-for="(item, key) in protectionEnableL" :key="key" class="vent-flex-row-between detail-item-row">
+                      <div>{{ item.title }}</div>
+                      <div>-</div>
+                    </div>
+                  </div>
+                </div>
               </a-tab-pane>
             </a-tabs>
           </div>
         </div>
-        
       </div>
       <div class="right-box" v-if="activeBox == 2">
         <div class="right-title">电光馈电</div>
@@ -99,9 +98,11 @@
           <div class="right-detail-box">
             <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
               <a-tab-pane key="1" tab="运行状态">
-                <template v-for="(electric, key) in electricMonitor " :key="index">
+                <template v-for="(electric, key) in electricMonitor" :key="index">
                   <div class="padding-20">
-                    <a-divider style="border-color: #1580CC; color: #49b3ff; font-weight: 600; font-size: 14px;"  orientation="left">{{ key }}</a-divider>
+                    <a-divider style="border-color: #1580cc; color: #49b3ff; font-weight: 600; font-size: 14px" orientation="left">{{
+                      key
+                    }}</a-divider>
                     <div class="data-group">
                       <div class="data-item" v-for="(item, index) in electric" :key="index">
                         <div class="title">{{ item.title }}</div>
@@ -116,7 +117,7 @@
               </a-tab-pane>
               <a-tab-pane key="2" tab="定值设定">
                 <div class="padding-20">
-                  <a-divider style="border-color: #1580CC; color: #49b3ff; font-weight: 600; font-size: 14px;"  orientation="left">保护状态</a-divider>
+                  <a-divider style="border-color: #1580cc; color: #49b3ff; font-weight: 600; font-size: 14px" orientation="left">保护状态</a-divider>
                   <div class="data-group">
                     <div class="data-item" v-for="(item, index) in electricState" :key="index">
                       <div class="title">{{ item.title }}</div>
@@ -140,26 +141,30 @@
           <div class="right-detail-box">
             <a-tabs class="tabs-box" v-model:activeKey="activeKey" @change="tabChange">
               <a-tab-pane key="1" tab="运行状态">
-                <div class=" detail-state">
+                <div class="detail-state">
                   <div class="detail-item">
                     <div class="item-title">备风机</div>
-                    <template v-for="(fanState, key) in fanControlState1 " :key="index">
-                    <div class="padding-20">
-                      <a-divider style="border-color: #1580CC; color: #49b3ff; font-weight: 600; font-size: 14px;"  orientation="left">{{ key }}</a-divider>
-                      <div class="data-group data-group1">
-                        <div class="data-item" v-for="(item, key1) in fanState" :key="key1">
-                          <div class="title">{{ key1 }}</div>
-                          <div class="value" v-for="(obj, key2) in item" :key="key2">{{ obj.value }}</div>
+                    <template v-for="(fanState, key) in fanControlState1" :key="index">
+                      <div class="padding-20">
+                        <a-divider style="border-color: #1580cc; color: #49b3ff; font-weight: 600; font-size: 14px" orientation="left">{{
+                          key
+                        }}</a-divider>
+                        <div class="data-group data-group1">
+                          <div class="data-item" v-for="(item, key1) in fanState" :key="key1">
+                            <div class="title">{{ key1 }}</div>
+                            <div class="value" v-for="(obj, key2) in item" :key="key2">{{ obj.value }}</div>
+                          </div>
                         </div>
                       </div>
-                    </div>
-                  </template>
+                    </template>
                   </div>
                   <div class="detail-item">
                     <div class="item-title">主风机</div>
-                    <template v-for="(fanState, key) in fanControlState2 " :key="index">
+                    <template v-for="(fanState, key) in fanControlState2" :key="index">
                       <div class="padding-20">
-                        <a-divider style="border-color: #1580CC; color: #49b3ff; font-weight: 600; font-size: 14px;"  orientation="left">{{ key }}</a-divider>
+                        <a-divider style="border-color: #1580cc; color: #49b3ff; font-weight: 600; font-size: 14px" orientation="left">{{
+                          key
+                        }}</a-divider>
                         <div class="data-group data-group1">
                           <div class="data-item" v-for="(item, key1) in fanState" :key="key1">
                             <div class="title">{{ key1 }}</div>
@@ -173,77 +178,80 @@
               </a-tab-pane>
               <a-tab-pane key="2" tab="保护使能">
                 <div class="detail-state">
-                    <div class="detail-item">
-                      <div class="item-title">主风机</div>
-                      <div v-for="(item, key) in fanSetting1" :key="key" class="vent-flex-row-between detail-item-row">
-                        <div>{{ item.title }}</div>
-                        <div class="value">{{ item.value }}</div>
-                      </div>
+                  <div class="detail-item">
+                    <div class="item-title">主风机</div>
+                    <div v-for="(item, key) in fanSetting1" :key="key" class="vent-flex-row-between detail-item-row">
+                      <div>{{ item.title }}</div>
+                      <div class="value">{{ item.value }}</div>
                     </div>
-                    <div class="detail-item">
-                      <div class="item-title">备风机</div>
-                      <div v-for="(item, key) in fanSetting2" :key="key" class="vent-flex-row-between detail-item-row">
-                        <div>{{ item.title }}</div>
-                        <div class="value">{{ item.value }}</div>
-                      </div>
+                  </div>
+                  <div class="detail-item">
+                    <div class="item-title">备风机</div>
+                    <div v-for="(item, key) in fanSetting2" :key="key" class="vent-flex-row-between detail-item-row">
+                      <div>{{ item.title }}</div>
+                      <div class="value">{{ item.value }}</div>
                     </div>
                   </div>
+                </div>
               </a-tab-pane>
             </a-tabs>
           </div>
         </div>
-      
       </div>
     </div>
   </BasicModal>
 </template>
 <script lang="ts" setup>
+  import { onMounted, ref, defineEmits, onUnmounted, watch } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import {
+    transformMobileH,
+    transformMobileL,
+    protectionEnableH,
+    protectionEnableL,
+    electricMonitor,
+    electricState,
+    fanControlState1,
+    fanControlState2,
+    fanSetting1,
+    fanSetting2,
+    data_model,
+  } from '../fanLocal.data.ts';
+  import { SvgPreview } from 'mky-svg';
 
-import { onMounted, ref, defineEmits, onUnmounted, watch } from 'vue';
-import { BasicModal, useModalInner } from '/@/components/Modal';
-import { transformMobileH, transformMobileL, protectionEnableH, protectionEnableL, electricMonitor, electricState, fanControlState1, fanControlState2, fanSetting1, fanSetting2, data_model } from '../fanLocal.data.ts'
-import { SvgPreview } from 'mky-svg'
-
-const emit = defineEmits(['close', 'register'])
-const props = defineProps({
-  
-})
-const activeKey = ref('1')
-const activeBox = ref(3)
-// 注册 modal
-const [register, { closeModal }] = useModalInner();
-
-const tabChange = (key) => {
-  activeKey.value = key
-}
-
-async function onSubmit() {
-  emit('close')
-  closeModal();
-}
+  const emit = defineEmits(['close', 'register']);
+  const props = defineProps({});
+  const activeKey = ref('1');
+  const activeBox = ref(3);
+  // 注册 modal
+  const [register, { closeModal }] = useModalInner();
 
-onMounted(async () => {
+  const tabChange = (key) => {
+    activeKey.value = key;
+  };
 
-});
-onUnmounted(() => {
+  async function onSubmit() {
+    emit('close');
+    closeModal();
+  }
 
-});
+  onMounted(async () => {});
+  onUnmounted(() => {});
 </script>
 <style scoped lang="less">
-
   @import '/@/design/vent/color.less';
   @import '/@/design/vent/modal.less';
   @import 'mky-svg/style.css';
-  
+
   @ventSpace: zxm;
-  .detail-box{
+  .detail-box {
     width: 100%;
     height: 100%;
     padding: 10px;
     display: flex;
     justify-content: space-between;
-    
-    .left-box{
+
+    .left-box {
       width: 800px;
       height: 100%;
       // height: initial;
@@ -254,10 +262,10 @@ onUnmounted(() => {
       font-size: 30px;
       margin-right: 10px;
     }
-    .right-box{
+    .right-box {
       flex: 1;
       height: 100%;
-      .right-title{
+      .right-title {
         line-height: 60px;
         background: #ffffff11;
         margin-bottom: 2px;
@@ -266,12 +274,12 @@ onUnmounted(() => {
         letter-spacing: 2px;
         color: #f0f0f0;
       }
-      .detail-container{
+      .detail-container {
         height: calc(100% - 60px);
         display: flex;
         justify-content: space-between;
-        
-        .detail-control{
+
+        .detail-control {
           width: 300px;
           height: initial;
           display: flex;
@@ -279,77 +287,75 @@ onUnmounted(() => {
           background: #ffffff11;
           margin-right: 10px;
           padding: 10px;
-          .control-item{
-
+          .control-item {
           }
         }
-        .right-detail-box{
+        .right-detail-box {
           flex: 1;
           background: #ffffff11;
           padding-bottom: 40px;
-          .detail-state{
+          .detail-state {
             width: 100%;
             display: flex;
             justify-content: space-between;
           }
-          .detail-item{
+          .detail-item {
             flex: 1;
             padding: 0 40px;
             color: #fff;
-            .item-title{
+            .item-title {
               line-height: 60px;
               font-size: 24px;
               text-align: center;
             }
-            .detail-item-row{
+            .detail-item-row {
               padding: 10px 0;
             }
           }
-          
         }
       }
-      .value{
+      .value {
         color: #00eefffe;
       }
     }
   }
 
-  .data-group{
+  .data-group {
     display: flex;
     flex-wrap: wrap;
     justify-content: space-between;
     padding: 0 20px 8px 20px;
     color: #fff;
-    .data-item{
+    .data-item {
       width: calc(50% - 20px);
       display: flex;
       justify-content: space-between;
       line-height: 24px;
-      background-image: linear-gradient(to right, #39A3FF00, #39A3FF10, #39A3FF02);
+      background-image: linear-gradient(to right, #39a3ff00, #39a3ff10, #39a3ff02);
       margin: 4px 0;
     }
-    .value{
+    .value {
       color: #00eefffe;
     }
-    .data-item1{
+    .data-item1 {
       width: 100%;
       line-height: 24px;
-      background-image: linear-gradient(to right, #39A3FF00, #39A3FF10, #39A3FF02);
+      background-image: linear-gradient(to right, #39a3ff00, #39a3ff10, #39a3ff02);
       margin: 4px 0;
     }
   }
-  .data-group1{
-    .data-item{
+  .data-group1 {
+    .data-item {
       width: calc(100% - 20px);
-      .title{
+      .title {
         width: 80px;
       }
     }
   }
-  .padding-20{
+  .padding-20 {
     padding: 20px;
   }
-  .tabs-box{
+  .tabs-box {
     width: 100%;
   }
   :deep(.@{ventSpace}-tabs-nav) {

+ 7 - 61
src/views/vent/monitorManager/fanLocalMonitor/fanLocal.three.ts

@@ -420,23 +420,23 @@ const initFly = async () => {
     {
       path0: new THREE.Vector3(93.164, 0.85, -12.962),
       path1: new THREE.Vector3(86.39, 0.827, -12.962),
-      isSpread: true,
-      spreadDirection: 1,
+      isSpread: false,
+      spreadDirection: 0,
     },
     {
       path0: new THREE.Vector3(86.39, 0.827, -12.962),
-      path1: new THREE.Vector3(83.341, 0.847, -16.281),
+      path1: new THREE.Vector3(83.341, 0.847, -17.658),
       isSpread: false,
       spreadDirection: 0,
     },
     {
-      path0: new THREE.Vector3(83.341, 0.847, -16.858),
-      path1: new THREE.Vector3(-29.077, 0.847, -16.227),
+      path0: new THREE.Vector3(83.341, 0.847, -17.658),
+      path1: new THREE.Vector3(-29.077, 0.847, -17.658),
       isSpread: false,
       spreadDirection: 0,
     },
     {
-      path0: new THREE.Vector3(-29.077, 0.847, -16.227),
+      path0: new THREE.Vector3(-29.077, 0.847, -17.658),
       path1: new THREE.Vector3(-29.64, 0.827, -39.047),
       isSpread: false,
       spreadDirection: 0,
@@ -457,7 +457,7 @@ const initFly = async () => {
   }
 
   if (!returnSmoke) {
-    returnSmoke = new Smoke('/model/img/texture-smoke.png', '#777777', 0, 0.8, 0.5, 200);
+    returnSmoke = new Smoke('/model/img/texture-smoke.png', '#777777', 0, 0.5, 1.5, 200);
     returnSmoke.setPath(returnCurve);
     await returnSmoke.setPoints();
     group?.add(returnSmoke.points);
@@ -550,16 +550,6 @@ const mouseEvent = (event) => {
     mouseDownFn(<UseThree>model, <THREE.Object3D>group, event, (intersects) => {
       intersects.find((intersect) => {
         const mesh = intersect.object;
-        if (mesh.name === 'player1') {
-          if (new Date().getTime() - playerStartClickTime1 < 400) {
-            // 双击,视频放大
-            if (player1) {
-              player1.requestFullscreen();
-            }
-          }
-          playerStartClickTime1 = new Date().getTime();
-          return true;
-        }
       });
     });
     console.log('摄像头控制信息', model?.orbitControls, model?.camera);
@@ -613,50 +603,6 @@ export const mountedThree = (playerVal1) => {
       // fmFanObj = new fmFan(model);
       // await fmFanObj.mountedThree();
 
-      const videoPlayer1 = document.getElementById('jb-player1')?.getElementsByClassName('vjs-tech')[0];
-      if (videoPlayer1) {
-        const mesh = renderVideo(group, videoPlayer1, 'player1');
-        if (mesh) {
-          mesh.scale.set(0.222, 0.19, 0.2);
-          mesh.position.set(-84.87, 0.298, 24.76);
-          mesh.rotation.y = -Math.PI / 2;
-          group.add(mesh);
-        }
-      } else {
-        const textArr = [
-          {
-            text: `无信号输入`,
-            font: 'normal 40px Arial',
-            color: '#009900',
-            strokeStyle: '#002200',
-            x: 170,
-            y: 40,
-          },
-        ];
-        getTextCanvas(560, 346, textArr, '').then((canvas: HTMLCanvasElement) => {
-          const textMap = new THREE.CanvasTexture(canvas); // 关键一步
-          const textMaterial = new THREE.MeshBasicMaterial({
-            map: textMap, // 设置纹理贴图
-            transparent: true,
-            side: THREE.DoubleSide, // 这里是双面渲染的意思
-          });
-          textMaterial.blending = THREE.CustomBlending;
-          const monitorPlane = group?.getObjectByName('noPlayer');
-          if (monitorPlane) {
-            monitorPlane.material = textMaterial;
-          } else {
-            const planeGeometry = new THREE.PlaneGeometry(100, 100); // 平面3维几何体PlaneGeometry
-            const planeMesh = new THREE.Mesh(planeGeometry, textMaterial);
-            if (!videoPlayer1) {
-              planeMesh.name = 'noPlayer';
-              planeMesh.scale.set(0.07, 0.05, 0.07);
-              planeMesh.position.set(-84.82, -1.53, 24.94);
-              planeMesh.rotation.y = -Math.PI / 2;
-              group?.add(planeMesh.clone());
-            }
-          }
-        });
-      }
       startAnimation();
       resolve(model);
     });

+ 23 - 18
src/views/vent/monitorManager/fanLocalMonitor/index.vue

@@ -292,7 +292,14 @@
             </div>
           </a-tab-pane>
         </a-tabs>
-        <a-button type="primary" size="small" preIcon="ant-design:download-outlined" style="position: absolute;right:15px;top:10px" @click="reportDown">
+        <a-button
+          v-if="globalConfig.showReport"
+          type="primary"
+          size="small"
+          preIcon="ant-design:download-outlined"
+          style="position: absolute; right: 15px; top: 10px"
+          @click="reportDown"
+        >
           报表导出
         </a-button>
       </dv-border-box8>
@@ -393,8 +400,8 @@
       </div>
     </div>
   </a-modal>
-  <DeviceBaseInfo @register="registerModal"  :device-type="selectData['deviceType']" />
- <reportInfo @register="registerModal1" :editID="editID" :fileType="fileType"></reportInfo>
+  <DeviceBaseInfo @register="registerModal" :device-type="selectData['deviceType']" />
+  <reportInfo @register="registerModal1" :editID="editID" :fileType="fileType" />
 </template>
 
 <script setup lang="ts">
@@ -412,11 +419,9 @@
   import { list as baseList } from '../../deviceManager/fanTabel/fan.api';
   import { chartsColumns, chartsColumns1 } from './fanLocal.data';
   import { deviceControlApi } from '/@/api/vent/index';
-  import LivePlayer from '@liveqing/liveplayer-v3';
   import { setDivHeight } from '/@/utils/event';
   import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
   import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
-  import { SvgIcon } from '/@/components/Icon';
   import { useRouter } from 'vue-router';
   import { useModal } from '/@/components/Modal';
   import type { BasicColumn } from '/@/components/Table/src/types/table';
@@ -429,11 +434,11 @@
   import { usePermission } from '/@/hooks/web/usePermission';
   import { DownloadOutlined } from '@ant-design/icons-vue';
   import reportInfo from '../comment/components/reportInfo.vue';
-  import {save,reportList} from '../../reportManager/reportManager.api'
+  import { save, reportList } from '../../reportManager/reportManager.api';
   const { hasPermission } = usePermission();
   const globalConfig = inject('globalConfig');
   const [registerModal, { openModal, closeModal }] = useModal();
-  const [registerModal1, { openModal:openModal1, closeModal: closeModal1}] = useModal();
+  const [registerModal1, { openModal: openModal1, closeModal: closeModal1 }] = useModal();
   const { currentRoute } = useRouter();
 
   const modalTypeArr = reactive({
@@ -605,8 +610,8 @@
   let btnClick = ref(true); // 判断按钮是否可点
 
   //报表导出
-  let editID=ref<any>('')
-  let fileType=ref('')
+  let editID = ref<any>('');
+  let fileType = ref('');
 
   const { getCamera, removeCamera } = useCamera();
 
@@ -660,16 +665,16 @@
   };
 
   //报表导出点击
-  async function reportDown(){
+  async function reportDown() {
+    openModal1();
+    let res = await save({ reportType: 'fanlocal' });
+    console.log(res, 'res-----------');
+    let list = await reportList({ id: res.id });
+    console.log(list, 'list-----------');
+    let index = list.records[0].fileName.indexOf('.');
+    fileType.value = list.records[0].fileName.substring(index + 1);
+    editID.value = list.records[0].id;
     openModal1();
-   let res=await save({reportType:'fanlocal'})
-   console.log(res,'res-----------')
-   let list=await reportList({id:res.id})
-   console.log(list,'list-----------')
-   let index = list.records[0].fileName.indexOf('.');
-  fileType.value = list.records[0].fileName.substring(index + 1);
-   editID.value=list.records[0].id
-   openModal1();
   }
 
   //详情

+ 1 - 1
src/views/vent/monitorManager/fiberMonitor/fiber.data.ts

@@ -122,7 +122,7 @@ export const innerResultColumns: BasicColumn[] = [
   },
   {
     title: '风量',
-    dataIndex: 'm³',
+    dataIndex: 'm3',
     align: 'center',
     width: 100,
   },

+ 0 - 1
src/views/vent/monitorManager/gasPumpMonitor/gasPump.threejs.under.ts

@@ -35,7 +35,6 @@ class gasPumpUnder {
   }
 
   addCssText = () => {
-    debugger;
     if (!this.group) return;
     if (!this.group.getObjectByName('text1')) {
       const element = document.getElementById('FlowSensor') as HTMLElement;

+ 1 - 1
src/views/vent/monitorManager/gasPumpMonitor/index.vue

@@ -26,7 +26,7 @@
 </template>
 
 <script setup lang="ts">
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import { onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw } from 'vue';
 import { list } from './gasPump.api';
 import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';

+ 0 - 1
src/views/vent/monitorManager/gateMonitor/gate.threejs.qd.ts

@@ -535,7 +535,6 @@ class Fm3 {
         if (this.frontDamperClosedMesh) this.frontDamperClosedMesh.visible = true;
 
         resolve(this.model);
-        this.initCamera(playerDom);
       });
     });
   }

+ 0 - 1
src/views/vent/monitorManager/gateMonitor/gate.threejs.two.ss.ts

@@ -526,7 +526,6 @@ class FmTwoSs {
         this.model.animate();
 
         resolve(this.model);
-        this.initCamera(playerDom);
       });
     });
   }

+ 0 - 1
src/views/vent/monitorManager/gateMonitor/gate.threejs.xr.ts

@@ -527,7 +527,6 @@ class FmXR {
         this.model.animate();
 
         resolve(this.model);
-        this.initCamera(playerDom);
       });
     });
   }

+ 0 - 1
src/views/vent/monitorManager/gateMonitor/gate.threejs.yy.ts

@@ -537,7 +537,6 @@ class Fm1 {
         if (this.frontDamperClosedMesh) this.frontDamperClosedMesh.visible = true;
 
         resolve(this.model);
-        this.initCamera(playerDom);
       });
     });
   }

+ 51 - 35
src/views/vent/monitorManager/gateMonitor/index.vue

@@ -594,33 +594,25 @@
   // let isRearCloseRunning = false; //开关门动作是否在进行
   let isMidOpenRunning = false; //中间门动作是否在进行
   // let isMidCloseRunning = false; //中间门动作是否在进行
+  // 0 关闭 1 正在打开 2 打开 3正在关闭
   let frontDeviceState = 0; //记录设备状态,为了与下一次监测数据做比较
   let rearDeviceState = 0; //记录设备状态,为了与下一次监测数据做比较
   let midDeviceState = 0; //记录设备状态,为了与下一次监测数据做比较
   function monitorAnimation(selectData) {
     const timeScale = 0.005;
 
-    // if (selectData.frontGateOpen == '0' && selectData.frontGateClose == '0') {
-    //   //正在运行
-    //   // if (!isFrontOpenRunning) {
-    //   //   frontDoorIsOpen.value = true;
-    //   //   backDoorIsOpen.value = true;
-    //   //   isFrontOpenRunning = true;
-    //   //   play(1, timeScale);
-    //   //   frontDeviceState = 1;
-    //   // }
-    // }
-
-    if (
-      (selectData.frontGateOpen == '0' && selectData.frontGateClose == '0') ||
-      (selectData.rearGateOpen == '0' && selectData.rearGateClose == '0') ||
-      (selectData.midGateOpen == '0' && selectData.midGateClose == '0')
-    ) {
-      isOpenRunning = true;
-    } else {
-      isOpenRunning = false;
+    if (selectData.frontGateOpen == '1' && selectData.frontGateClose == '0' && !isFrontOpenRunning) {
+      isFrontOpenRunning = true;
+      if (frontDeviceState != 1) {
+        // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(1, timeScale) : play(1);
+        play(1, timeScale);
+        frontDeviceState = 1;
+        frontDoorIsOpen.value = false;
+        backDoorIsOpen.value = true;
+      }
     }
-    if (selectData.frontGateOpen == 1 && selectData.frontGateClose == '0' && !isFrontOpenRunning) {
+
+    if (selectData.frontGateOpen == '0' && selectData.frontGateClose == '0' && !isFrontOpenRunning) {
       isFrontOpenRunning = true;
       if (frontDeviceState != 1) {
         // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(1, timeScale) : play(1);
@@ -630,21 +622,33 @@
         backDoorIsOpen.value = true;
       }
     }
-    if (selectData.frontGateClose == 1 && selectData.frontGateOpen == '0' && isFrontOpenRunning) {
+
+    if (selectData.frontGateClose == '1' && selectData.frontGateOpen == '0' && isFrontOpenRunning) {
       isFrontOpenRunning = false;
-      if (frontDeviceState != 2) {
+      if (frontDeviceState != 0) {
         // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(2, timeScale) : play(2);
         play(2, timeScale);
-        frontDeviceState = 2;
+        frontDeviceState = 0;
         frontDoorIsOpen.value = false;
         // backDoorIsOpen.value = false
       }
     }
-    if (selectData.rearGateOpen == 1 && selectData.rearGateClose == '0' && !isRearOpenRunning) {
+    if (selectData.rearGateOpen == '1' && selectData.rearGateClose == '0' && !isRearOpenRunning) {
+      isRearOpenRunning = true;
+
+      if (rearDeviceState != 1) {
+        rearDeviceState = 1;
+        // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(3, timeScale) : play(3);
+        play(3, timeScale);
+        backDoorIsOpen.value = false;
+        frontDoorIsOpen.value = true;
+      }
+    }
+    if (selectData.rearGateOpen == '0' && selectData.rearGateClose == '0' && !isRearOpenRunning) {
       isRearOpenRunning = true;
 
-      if (rearDeviceState != 3) {
-        rearDeviceState = 3;
+      if (rearDeviceState != 1) {
+        rearDeviceState = 1;
         // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(3, timeScale) : play(3);
         play(3, timeScale);
         backDoorIsOpen.value = false;
@@ -652,21 +656,33 @@
       }
     }
 
-    if (selectData.rearGateClose == 1 && selectData.rearGateOpen == '0' && isRearOpenRunning) {
+    if (selectData.rearGateClose == '1' && selectData.rearGateOpen == '0' && isRearOpenRunning) {
       isRearOpenRunning = false;
-      if (rearDeviceState != 4) {
-        rearDeviceState = 4;
+      if (rearDeviceState != 0) {
+        rearDeviceState = 0;
         // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(4, timeScale) : play(4);
         play(4, timeScale);
         backDoorIsOpen.value = false;
       }
     }
 
-    if (selectData.midGateOpen == 1 && selectData.midGateClose == '0' && !isMidOpenRunning) {
+    if (selectData.midGateOpen == '1' && selectData.midGateClose == '0' && !isMidOpenRunning) {
+      isMidOpenRunning = true;
+
+      if (midDeviceState != 1) {
+        midDeviceState = 1;
+        // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(3, timeScale) : play(3);
+        play(8, timeScale);
+        backDoorIsOpen.value = false;
+        frontDoorIsOpen.value = true;
+      }
+    }
+
+    if (selectData.midGateOpen == '0' && selectData.midGateClose == '0' && !isMidOpenRunning) {
       isMidOpenRunning = true;
 
-      if (midDeviceState != 8) {
-        midDeviceState = 8;
+      if (midDeviceState != 1) {
+        midDeviceState = 1;
         // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(3, timeScale) : play(3);
         play(8, timeScale);
         backDoorIsOpen.value = false;
@@ -674,10 +690,10 @@
       }
     }
 
-    if (selectData.midGateClose == 1 && selectData.midGateOpen == '0' && isMidOpenRunning) {
+    if (selectData.midGateClose == '1' && selectData.midGateOpen == '0' && isMidOpenRunning) {
       isMidOpenRunning = false;
-      if (midDeviceState != 9) {
-        midDeviceState = 9;
+      if (midDeviceState != 0) {
+        midDeviceState = 0;
         // import.meta.env.VITE_GLOB_IS_SIMULATE ? play(4, timeScale) : play(4);
         play(9, timeScale);
         backDoorIsOpen.value = false;

+ 1 - 1
src/views/vent/monitorManager/groutMonitor/index.vue

@@ -34,7 +34,7 @@
 </template>
 
 <script setup lang="ts">
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import { ref, onMounted, onUnmounted, reactive, toRaw } from 'vue';
 import { systemList, getTableList } from './grout.api';
 import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';

+ 6 - 1
src/views/vent/monitorManager/mainFanMonitor/index.vue

@@ -280,7 +280,12 @@
           </a-tab-pane> -->
           <a-tab-pane key="3" tab="历史数据">
             <div class="tab-item" v-if="activeKey === '3'">
-              <HistoryTable device-type="fanmain" :device-list-api="baseList" designScope="fanmain-history" :scroll="scroll" />
+              <HistoryTable
+                device-type="fanmain"
+                :device-list-api="baseList.bind(null, { devicekind: 'fanmain' })"
+                designScope="fanmain-history"
+                :scroll="scroll"
+              />
             </div>
           </a-tab-pane>
           <a-tab-pane key="4" tab="报警历史">

+ 4 - 4
src/views/vent/monitorManager/nitrogen/components/nitrogenHome.vue

@@ -12,7 +12,7 @@
     <div v-show="monitorDataGroupFlag == sysIndex + 1" :id="`nitrogenMonitorBox${sysIndex}`">
       <div v-for="(groupNum, index) in sysItem" :key="index" class="modal-monitor">
         <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
-          <div class="title">{{ kyjs[index] }} </div>
+          <div class="title">{{ `空压机${groupNum}` }} </div>
           <template v-for="(preMonitor, preMonitorIndex) in preMonitorList" :key="preMonitorIndex">
             <div v-if="preMonitor.code !== 'signal'" class="monitor-item">
               <span class="monitor-title">{{ preMonitor.title }}:</span>
@@ -42,7 +42,7 @@
           </template>
         </fourBorderBg>
         <fourBorderBg :class="`cqg${groupNum}`" :id="`cqgMonitor${groupNum}`">
-          <div class="title">{{ cqgs[index] }}</div>
+          <div class="title">{{ `风包${groupNum}` }}</div>
           <template v-for="(cqgMonitor, cqgMonitorIndex) in cqgMonitorList" :key="cqgMonitorIndex">
             <div class="monitor-item">
               <span class="monitor-title">{{ cqgMonitor.title }}:</span>
@@ -62,7 +62,7 @@
   </div>
 
   <div class="nitrogen-home">
-    <div style="position: absolute; color: #fff; top: 30px; pointer-events: auto; display: flex">
+    <div style="position: absolute; color: #fff; top: 30px; pointer-events: auto; display: flex" v-if="monitorDataGroupArr.length > 1">
       <div
         v-for="(sysItem, sysIndex) in monitorDataGroupArr"
         :key="sysIndex"
@@ -102,7 +102,7 @@
       <div class="top-box">
         <!-- 左边监测数据 -->
         <div class="lr-box left-box">
-          <div class="left-container">
+          <div class="left-container" v-if="preFanMonitorData.length > 0">
             <div class="item item-l" v-for="(groupNum, index) in monitorDataGroup" :key="index">
               <div class="monitor-box">
                 <ventBox1>

+ 4 - 8
src/views/vent/monitorManager/nitrogen/index.vue

@@ -2,9 +2,6 @@
   <div class="nitrogen-box">
     <customHeader>智能压风管控系统</customHeader>
     <template v-if="btnActive == 'nitrogen_page'">
-      <!-- 补连塔(两套点表) -->
-      <nitrogenHomeBLT v-if="sysOrgCode === 'sdmtjtbltmk'" />
-      <!-- 一个系统一套点表的 -->
       <nitrogenHome />
     </template>
     <nitrogenEcharts v-if="btnActive == 'yfj_monitor_echarts'" />
@@ -16,16 +13,15 @@
 </template>
 <script lang="ts" setup>
   import { ref } from 'vue';
-  import nitrogenHome from './components/nitrogenHome.vue';
-  import nitrogenHomeBLT from './components/nitrogenHomeBLT.vue';
   import nitrogenEcharts from './components/nitrogenEcharts.vue';
   import nitrogenHistory from './components/nitrogenHistory.vue';
   import nitrogenHandleHistory from './components/nitrogenHandleHistory.vue';
   import nitrogenAlarmHistory from './components/nitrogenAlarmHistory.vue';
-  import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+  import customHeader from '/@/components/vent/customHeader.vue';
   import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';
-  import { useGlobSetting } from '/@/hooks/setting';
-  const { sysOrgCode } = useGlobSetting();
+  import { getNitrogenHome } from './nitrogen.data.1';
+
+  const nitrogenHome = getNitrogenHome();
   const btnActive = ref('nitrogen_page');
   const navList = ref([
     {

+ 44 - 8
src/views/vent/monitorManager/nitrogen/nitrogen.data.1.ts

@@ -1,4 +1,4 @@
-import { ref } from 'vue';
+import { ref, defineAsyncComponent } from 'vue';
 import { useGlobSetting } from '/@/hooks/setting';
 import {
   monitorDataGroupArr as monitorDataGroupArr_Jj,
@@ -31,6 +31,16 @@ import {
 } from './nitrogen.dataDlt'; // 大柳塔
 
 import {
+  monitorDataGroupArr as monitorDataGroupArr_Hsw,
+  preFanMonitorData as preFanMonitorData_Hsw,
+  preMonitorList as preMonitorList_Hsw,
+  cqgMonitorList as cqgMonitorList_Hsw,
+  prefix as prefix_Hsw,
+  getSysState as getSysState_Hsw,
+  totalData as totalData_Hsw,
+} from './nitrogen.dataHsw'; // 大柳塔
+
+import {
   monitorDataGroupArr as monitorDataGroupArr_Hjt,
   preFanMonitorData as preFanMonitorData_Hjt,
   preMonitorList as preMonitorList_Hjt,
@@ -50,10 +60,26 @@ import {
   totalData as totalData_YJ,
 } from './nitrogen.dataYJ'; // 窑街
 
+export function getNitrogenHome() {
+  const { sysOrgCode } = useGlobSetting();
+  debugger;
+  console.log(sysOrgCode, 'sysOrgCode----------------------');
+  let nitrogenHome;
+  switch (sysOrgCode) {
+    case 'sdmtjtbltmk': //补连塔
+      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHomeBLT.vue'));
+      return nitrogenHome;
+    default:
+      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome.vue'));
+      return nitrogenHome;
+  }
+}
+
 export type State = {
   isRun: boolean;
   fault: boolean;
 };
+
 export const bottomBtnList = ref([
   {
     text: '监控界面',
@@ -140,6 +166,16 @@ export function getMonitorData() {
         getSysState: getSysState_Jj,
         totalData: totalData_Ji,
       };
+    case 'yjmdhswmk': // 锦界
+      return {
+        monitorDataGroupArr: monitorDataGroupArr_Hsw,
+        preFanMonitorData: preFanMonitorData_Hsw,
+        preMonitorList: preMonitorList_Hsw,
+        cqgMonitorList: cqgMonitorList_Hsw,
+        prefix: prefix_Hsw,
+        getSysState: getSysState_Hsw,
+        totalData: totalData_Hsw,
+      };
     default: //默认锦界
       // return {
       //   monitorDataGroupArr: monitorDataGroupArr_Bet,
@@ -151,13 +187,13 @@ export function getMonitorData() {
       //   totalData: totalData_Bet,
       // };
       return {
-        monitorDataGroupArr: monitorDataGroupArr_Dlt,
-        preFanMonitorData: preFanMonitorData_Dlt,
-        preMonitorList: preMonitorList_Dlt,
-        cqgMonitorList: cqgMonitorList_Dlt,
-        prefix: prefix_Dlt,
-        getSysState: getSysState_Dlt,
-        totalData: totalData_Dlt,
+        monitorDataGroupArr: monitorDataGroupArr_Hsw,
+        preFanMonitorData: preFanMonitorData_Hsw,
+        preMonitorList: preMonitorList_Hsw,
+        cqgMonitorList: cqgMonitorList_Hsw,
+        prefix: prefix_Hsw,
+        getSysState: getSysState_Hsw,
+        totalData: totalData_Hsw,
       };
   }
 }

+ 0 - 38
src/views/vent/monitorManager/nitrogen/nitrogen.data.ts

@@ -79,41 +79,3 @@ export const monitorData = ref(
     controlModel: 'LOC',
   })
 );
-
-// dataInfo: {
-//   controlModel: false
-// };
-// videoUrl: '',
-// isDestroyVideo: false,
-// navList: [
-//   {
-//     title: '监控界面',
-//     pathName: 'nitrogen_page_lh'
-//   },
-//   // {
-//   //   title: '关键节点监测',
-//   //   pathName: 'critical_node'
-//   // },
-//   {
-//     title: '实时曲线',
-//     pathName: 'yfj_monitor_echarts_cy'
-//   },
-//   {
-//     title: '压风机历史记录',
-//     pathName: 'yfj_history'
-//   },
-//   {
-//     title: '操作历史记录',
-//     pathName: 'yfj_handler_history'
-//   },
-//   {
-//     title: '故障诊断历史记录',
-//     pathName: 'yfj_faultRecord'
-//   }
-// ],
-// kyjMonitorDataKey: new Map(
-//   [
-//     ['压力', 'pressure'],
-//     ['温度', 'temp'],
-//   ]
-// ),

+ 14 - 2
src/views/vent/monitorManager/nitrogen/nitrogen.dishang.threejs.ts

@@ -148,11 +148,17 @@ class Nitrogen {
             compressorElement.style.left = '0px';
             const compressorMonitorCSS3D = new CSS3DSprite(compressorElement);
             compressorMonitorCSS3D.name = 'monitorNitrogenText' + n;
-            compressorMonitorCSS3D.scale.set(0.003, 0.003, 0.003);
+            if (monitorDataGroup.length > 4) {
+              compressorMonitorCSS3D.scale.set(0.0035, 0.0035, 0.0035);
+            } else {
+              compressorMonitorCSS3D.scale.set(0.003, 0.003, 0.003);
+            }
             if (i == 0) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0);
             if (i == 1) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0.04);
             if (i == 2) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0.08);
             if (i == 3) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0.12);
+            if (i == 4) compressorMonitorCSS3D.position.set(-0.89, 0.31, 0.16);
+
             cssGroup.add(compressorMonitorCSS3D);
           }
           const cqgElement = document.getElementById('cqgMonitor' + n) as HTMLElement;
@@ -161,11 +167,17 @@ class Nitrogen {
             cqgElement.style.left = '0px';
             const cqgMonitorCSS3D = new CSS3DSprite(cqgElement);
             cqgMonitorCSS3D.name = 'cqgMonitorText' + n;
-            cqgMonitorCSS3D.scale.set(0.003, 0.003, 0.003);
+
             if (i == 0) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.0);
             if (i == 1) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.04);
             if (i == 2) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.08);
             if (i == 3) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.12);
+            if (i == 4) cqgMonitorCSS3D.position.set(1.24, 0.31, 0.16);
+            if (monitorDataGroup.length > 4) {
+              cqgMonitorCSS3D.scale.set(0.0035, 0.0035, 0.0035);
+            } else {
+              cqgMonitorCSS3D.scale.set(0.003, 0.003, 0.003);
+            }
             cssGroup.add(cqgMonitorCSS3D);
           }
           this.cssGroupParent.add(cssGroup);

+ 4 - 4
src/views/vent/monitorManager/nitrogen/nitrogen.threejs.ts

@@ -89,11 +89,11 @@ export const setModelType = (modalTypeName) => {
     let newCameraPosition = { x: 0, y: 0, z: 0 },
       newControlsPosition = { x: 0, y: 0, z: 0 };
     if (group?.children.length == 6) {
-      newCameraPosition = { x: -1.7434040517387115, y: 46.41089142470955, z: 114.33388865672832 };
-      newControlsPosition = { x: -1.6994314417499141, y: -12.38981035037152, z: 10.110013648346193 };
+      newCameraPosition = { x: -107.33215442283758, y: 44.57609039633937, z: 2.0459979417299334 };
+      newControlsPosition = { x: -4.615459422837561, y: -16.819491603660634, z: 1.9862299417299336 };
     } else if (group?.children.length == 5) {
-      newCameraPosition = { x: -0.4773363503066604, y: 48.162643926217974, z: 115.96473651982045 };
-      newControlsPosition = { x: -0.973402832301181, y: -19.990725369597676, z: 2.8781944582956025 };
+      newCameraPosition = { x: -107.33215442283758, y: 44.57609039633937, z: 2.0459979417299334 };
+      newControlsPosition = { x: -4.615459422837561, y: -16.819491603660634, z: 1.9862299417299336 };
     } else if (group?.children.length == 4) {
       newCameraPosition = { x: -2.0540155219473597, y: 40.869414434737195, z: 97.8637568969557 };
       newControlsPosition = { x: -2.01631417107236, y: -9.544836585137801, z: 8.50481206883075 };

+ 1 - 1
src/views/vent/monitorManager/obfurageMonitor/index.vue

@@ -37,7 +37,7 @@
 </template>
 
 <script setup lang="ts">
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import { onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw } from 'vue';
 import { list } from './obfurage.api';
 import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';

+ 0 - 9
src/views/vent/monitorManager/safetyMonitor/safety.data.ts

@@ -12,15 +12,6 @@ export const formConfig = {
   labelAlign: 'left',
   showAdvancedButton: false,
   showResetButton: false,
-  baseColProps: {
-    // offset: 0.5,
-    // xs: 24,
-    // sm: 24,
-    // md: 24,
-    // lg: 9,
-    // xl: 7,
-    // xxl: 4,
-  },
   schemas: [
     {
       label: '设备类型',

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

@@ -53,8 +53,8 @@
         <a-tab-pane key="2" tab="历史数据">
           <div class="tab-item table-box box-bg padding-0">
             <HistoryTable
-              columns-type="modelsensor"
-              device-type="modelsensor"
+              :columns-type="deviceKind"
+              :device-type="deviceKind"
               :device-list-api="baseList"
               @change="historyDataSourceChange"
               designScope="modelsensor-history"

+ 1 - 1
src/views/vent/monitorManager/tunFaceMonitor/index.vue

@@ -49,7 +49,7 @@ import { onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw } from 'vue
 import { mountedThree, destroy, setModelType } from './tunFace.threejs';
 import { systemList, getTableList } from './tunFace.api';
 import { monitorNav } from './tunFace.data'
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';
 import tunFaceVentHome from './components/tunFaceVentHome.vue';
 import tunFaceHome from './components/tunFaceHome.vue';

+ 2 - 3
src/views/vent/monitorManager/tunFaceMonitor/tunFace.data.ts

@@ -295,7 +295,7 @@ export const windColumns: BasicColumn[] = [
   },
   {
     title: '风量',
-    dataIndex: 'm³',
+    dataIndex: 'm3',
     width: 80,
     align: 'center',
   },
@@ -816,6 +816,5 @@ export const gasPump = [
 ];
 export const gasPumpCtr = reactive({
   gasPump1Open: '0',
-  gasPump2Open: '0'
+  gasPump2Open: '0',
 });
-

+ 13 - 48
src/views/vent/monitorManager/windowMonitor/dandaoFc.threejs.ts

@@ -47,7 +47,7 @@ class singleWindow {
         y: 90,
       },
       {
-        text: `过风量(m³/min):`,
+        text: `${selectData.OpenDegree ? '开度值' : selectData.forntArea ? '过风面积(m2)' : '过风面积(m2)'}:`,
         font: 'normal 30px Arial',
         color: '#009900',
         strokeStyle: '#002200',
@@ -55,15 +55,19 @@ class singleWindow {
         y: 145,
       },
       {
-        text: selectData.fWindowM3 ? Number(`${selectData.fWindowM3}`).toFixed(0) : '-',
+        text: selectData.OpenDegree
+          ? Number(`${selectData.OpenDegree}`).toFixed(2)
+          : selectData.forntArea
+          ? Number(`${selectData.forntArea}`).toFixed(2)
+          : '-',
         font: 'normal 30px Arial',
         color: '#009900',
         strokeStyle: '#002200',
-        x: 225,
+        x: 330,
         y: 145,
       },
       {
-        text: `${selectData.maxarea == 100 ? '当前开度(%):' : '过风面积(m2):'} `,
+        text: `${selectData.frontRearDP ? '风窗压差(Pa):' : '通信状态:'}:`,
         font: 'normal 30px Arial',
         color: '#009900',
         strokeStyle: '#002200',
@@ -71,15 +75,15 @@ class singleWindow {
         y: 200,
       },
       {
-        text: `${selectData.forntArea ? selectData.forntArea : '-'}`,
+        text: `${selectData.frontRearDP ? selectData.frontRearDP : selectData.netStatus == '0' ? '断开' : '连接'}`,
         font: 'normal 30px Arial',
         color: '#009900',
         strokeStyle: '#002200',
-        x: 200,
+        x: 330,
         y: 200,
       },
       {
-        text: `风窗压差(Pa):`,
+        text: `风窗道数: `,
         font: 'normal 30px Arial',
         color: '#009900',
         strokeStyle: '#002200',
@@ -87,50 +91,12 @@ class singleWindow {
         y: 256,
       },
       {
-        text: `${selectData.frontRearDP ? selectData.frontRearDP : '-'}`,
-        font: 'normal 30px Arial',
-        color: '#009900',
-        strokeStyle: '#002200',
-        x: 200,
-        y: 256,
-      },
-      {
-        text: `调节精度:`,
+        text: `${selectData.nwindownum}`,
         font: 'normal 30px Arial',
         color: '#009900',
         strokeStyle: '#002200',
         x: 330,
-        y: 145,
-      },
-      {
-        // text: `1% FS`,
-        text: `-`,
-        font: 'normal 30px Arial',
-        color: '#009900',
-        strokeStyle: '#002200',
-        x: 470,
-        y: 145,
-      },
-      {
-        text: `调节范围:`,
-        font: 'normal 30px Arial',
-        color: '#009900',
-        strokeStyle: '#002200',
-        x: 330,
-        y: 200,
-      },
-      {
-        text:
-          selectData.maxarea && selectData.maxarea !== '-'
-            ? selectData.maxarea == 100
-              ? `0~${selectData.maxarea}`
-              : `0~${selectData.maxarea}`
-            : '-',
-        font: 'normal 30px Arial',
-        color: '#009900',
-        strokeStyle: '#002200',
-        x: 470,
-        y: 200,
+        y: 256,
       },
       {
         text: History_Type['type'] == 'remote' ? `国能神东煤炭集团监制` : '煤炭科学技术研究院有限公司研制',
@@ -324,7 +290,6 @@ class singleWindow {
         this.setModalPosition();
         this.initAnimation();
         resolve(null);
-        this.initCamera(playerDom);
       });
     });
   }

+ 21 - 49
src/views/vent/monitorManager/windowMonitor/shuangdaoFc.threejs.ts

@@ -23,7 +23,7 @@ class doubleWindow {
 
   // 设置模型位置
   setModalPosition() {
-    this.group.getObjectByName(this.modelName)?.scale.set(9, 9, 9);
+    // this.group.getObjectByName(this.modelName)?.scale.set(9, 9, 9);
     this.group?.scale.set(22, 22, 22);
     this.group?.position.set(-15, 25, 15);
   }
@@ -42,7 +42,7 @@ class doubleWindow {
         y: 97,
       },
       {
-        text: `过风量(m³/min):`,
+        text: `${selectData.OpenDegree ? '开度值' : selectData.forntArea ? '过风面积(m2)' : '过风面积(m2)'}:`,
         font: 'normal 28px Arial',
         color: '#009900',
         strokeStyle: '#002200',
@@ -50,85 +50,57 @@ class doubleWindow {
         y: 150,
       },
       {
-        text: selectData.forntm3 ? Number(`${selectData.forntm3}`).toFixed(0) : '-',
+        text: selectData.OpenDegree
+          ? Number(`${selectData.OpenDegree}`).toFixed(2)
+          : selectData.forntArea
+          ? Number(`${selectData.forntArea}`).toFixed(2)
+          : '-',
         font: 'normal 28px Arial',
         color: '#009900',
         strokeStyle: '#002200',
-        x: 215,
+        x: 330,
         y: 150,
       },
       {
-        text: `过风面积(m2): `,
+        text: `${selectData.frontRearDP ? '风窗压差(Pa):' : '通信状态:'}:`,
         font: 'normal 28px Arial',
         color: '#009900',
         strokeStyle: '#002200',
         x: 5,
-        y: 205,
+        y: 210,
       },
       {
-        text: `${selectData.forntArea ? selectData.forntArea : '-'}`,
+        text: `${selectData.frontRearDP ? selectData.frontRearDP : selectData.netStatus == '0' ? '断开' : '连接'}`,
         font: 'normal 28px Arial',
         color: '#009900',
         strokeStyle: '#002200',
-        x: 200,
-        y: 205,
+        x: 325,
+        y: 210,
       },
       {
-        text: `风窗压差(Pa):`,
+        text: `风窗道数: `,
         font: 'normal 28px Arial',
         color: '#009900',
         strokeStyle: '#002200',
         x: 5,
-        y: 256,
+        y: 266,
       },
       {
-        text: `${selectData.frontRearDP ? selectData.frontRearDP : '-'}`,
-        font: 'normal 28px Arial',
-        color: '#009900',
-        strokeStyle: '#002200',
-        x: 200,
-        y: 256,
-      },
-      {
-        text: `调节精度:`,
+        text: `${selectData.nwindownum}`,
         font: 'normal 28px Arial',
         color: '#009900',
         strokeStyle: '#002200',
         x: 330,
-        y: 150,
-      },
-      {
-        // text: `1% FS`,
-        text: `-`,
-        font: 'normal 28px Arial',
-        color: '#009900',
-        strokeStyle: '#002200',
-        x: 460,
-        y: 150,
-      },
-      {
-        text: `调节范围(㎡):`,
-        font: 'normal 28px Arial',
-        color: '#009900',
-        strokeStyle: '#002200',
-        x: 330,
-        y: 205,
-      },
-      {
-        text: `0~${selectData.maxarea ? selectData.maxarea : '-'}`,
-        font: 'normal 28px Arial',
-        color: '#009900',
-        strokeStyle: '#002200',
-        x: 500,
-        y: 205,
+        y: 266,
       },
+
       {
         text: History_Type['type'] == 'remote' ? `国能神东煤炭集团监制` : '煤炭科学技术研究院有限公司研制',
         font: 'normal 28px Arial',
         color: '#009900',
         strokeStyle: '#002200',
         x: History_Type['type'] == 'remote' ? 120 : 60,
-        y: 302,
+        y: 322,
       },
     ];
 
@@ -149,7 +121,7 @@ class doubleWindow {
         const planeMesh = new THREE.Mesh(planeGeometry, textMaterial);
         planeMesh.name = 'monitorText';
         planeMesh.scale.set(0.0018, 0.0018, 0.0018);
-        planeMesh.position.set(3.63, 0.158, -0.2);
+        planeMesh.position.set(4.04, 0.178, -0.2);
         this.group?.add(planeMesh);
       }
       textMap.dispose();
@@ -353,7 +325,7 @@ class doubleWindow {
         this.setModalPosition();
         this.initAnimation();
         resolve(null);
-        this.initCamera(playerDom);
+        // this.initCamera(playerDom);
       });
     });
   }

+ 19 - 23
src/views/vent/monitorManager/windrectMonitor/components/resultTable.vue

@@ -4,79 +4,75 @@
       <TableAction :actions="createActions(record, column)" />
     </template>
   </BasicTable> -->
-  <a-table :columns="resultColumns" :data-source="dataSource" rowKey="id" class="components-table-demo-nested"  :loading="loading"  size="small" >
+  <a-table :columns="resultColumns" :data-source="dataSource" rowKey="id" class="components-table-demo-nested" :loading="loading" size="small">
     <template #bodyCell="{ record, column }">
-        <template v-if="column.dataIndex === 'action'">
-          <TableAction :actions="createActions(record, column)" />
-          <!-- <a href="javascript:void(0)" ><Icon icon="ant-design:delete-outlined"></Icon></a> -->
-        </template>
-        
+      <template v-if="column.dataIndex === 'action'">
+        <TableAction :actions="createActions(record, column)" />
+        <!-- <a href="javascript:void(0)" ><Icon icon="ant-design:delete-outlined"></Icon></a> -->
+      </template>
     </template>
-    <template #expandedRowRender="{record}">
-      <a-empty v-if="record.testDetail && record.testDetail.length < 1"/>
-      <a-table v-else :columns="innerResultColumns" :data-source="record.testDetail" rowKey="id"  size="small" :pagination="false">
+    <template #expandedRowRender="{ record }">
+      <a-empty v-if="record.testDetail && record.testDetail.length < 1" />
+      <a-table v-else :columns="innerResultColumns" :data-source="record.testDetail" rowKey="id" size="small" :pagination="false">
         <template #bodyCell="{ record, column }">
           <template v-if="record[column.dataIndex] === null">
             <span>-</span>
           </template>
-      </template>
+        </template>
       </a-table>
     </template>
     <!-- <template></template> -->
-    
   </a-table>
 </template>
 <script lang="ts">
   import { resultList } from '/@/views/vent/monitorManager/windrectMonitor/windrect.api';
-  import { ref, onMounted } from "vue";
+  import { ref, onMounted } from 'vue';
   import { resultColumns, innerResultColumns } from '../windrect.data';
   import { BasicTable, TableAction, BasicColumn, ActionItem, EditRecordRow } from '/@/components/Table';
-  import { getExportUrl } from '../windrect.api'
+  import { getExportUrl } from '../windrect.api';
   import { useMethods } from '/@/hooks/system/useMethods';
 
   export default {
     name: 'ResultTable',
+    components: { TableAction },
     props: {
       deviceType: {
         type: String,
         required: true,
       },
     },
-    components: { TableAction },
     setup() {
-      const loading = ref(false)
+      const loading = ref(false);
       const dataSource = ref([]);
       const { handleExportXls } = useMethods();
 
       const getMonitor = () => {
         resultList({}).then((res) => {
-          loading.value = false
-          dataSource.value = res.records
+          loading.value = false;
+          dataSource.value = res.records;
         });
       };
 
-
       function createActions(record: EditRecordRow, column: BasicColumn): ActionItem[] {
         return [
           {
             label: '导出',
-            onClick: handleExportXls.bind(null, '测风报表导出', getExportUrl, { testid : record.id}),
+            onClick: handleExportXls.bind(null, '测风报表导出', getExportUrl, { testid: record.id }),
           },
         ];
       }
 
       onMounted(() => {
-        loading.value = true
+        loading.value = true;
         getMonitor();
-
       });
-      
+
       return {
         dataSource,
         resultColumns,
         innerResultColumns,
         loading,
-        createActions
+        createActions,
       };
     },
   };

+ 1 - 1
src/views/vent/monitorManager/windrectMonitor/duisheFixed.threejs.ts

@@ -274,7 +274,7 @@ class fixedWindRect {
         this.setModalPosition();
         this.addLight();
         this.initAnimation();
-        this.initCamera(playerDom);
+        // this.initCamera(playerDom);
         resolve(null);
       });
     });

+ 44 - 52
src/views/vent/monitorManager/windrectMonitor/index.vue

@@ -6,7 +6,7 @@
   <div class="scene-box">
     <div class="top-box">
       <div class="top-center row">
-        <div v-if="globalConfig?.simulatedPassword" class="button-box" @click="startRun()">启动测风</div>
+        <div v-if="hasPermission('btn:testWind')" class="button-box" @click="startRun()">启动测风</div>
         <!-- <div v-if="globalConfig?.simulatedPassword" class="button-box" @click="testPlay('')">模拟动画</div> -->
         <!-- <div class="button-box" @click="testPlay('')">模拟动画</div> -->
         <!-- <div class="button-box" @click="start(0)">复位</div> -->
@@ -138,7 +138,7 @@
               />
             </div>
           </a-tab-pane>
-          <a-tab-pane v-if="globalConfig?.simulatedPassword" key="6" tab="测风结果">
+          <a-tab-pane key="6" tab="测风结果">
             <ResultTable deviceType="windrect_list" :scroll="scroll" />
           </a-tab-pane>
         </a-tabs>
@@ -146,18 +146,6 @@
     </div>
   </div>
   <div ref="playerRef" style="z-index: 999; position: absolute; top: 100px; right: 10px; width: 300px; height: 280px; margin: auto"></div>
-  <LivePlayer
-    id="cf-player1"
-    style="height: 220px; width: 300px; position: absolute; top: 0px; z-index: -1"
-    ref="player1"
-    :videoUrl="flvURL1()"
-    muted
-    loading
-    autoplay
-    controls
-    loop
-    fluent
-  />
   <BasicModal v-bind="$attrs" @register="registerModal" title="一键测风" width="900px" @ok="handleOk" @cancel="handleCancel">
     <div class="head-line">
       <div class="vent-flex-row">
@@ -198,17 +186,18 @@
   import AlarmHistoryTable from '../comment/AlarmHistoryTable.vue';
   import HandlerHistoryTable from '../comment/HandlerHistoryTable.vue';
   import { deviceControlApi } from '/@/api/vent/index';
-  import { mountedThree, destroy, addMonitorText, play, setModelType, playCamera, initCameraCanvas } from './windrect.threejs';
-  import { list, pathList, deviceList, testWind, cameraAddrList, cameraList, exportXls } from './windrect.api';
+  import { mountedThree, destroy, addMonitorText, play, setModelType, playCamera } from './windrect.threejs';
+  import { list, pathList, deviceList, testWind, exportXls } from './windrect.api';
   import { list as baseList } from '../../deviceManager/windfindingTabel/windfinding.api';
   import { message, Progress } from 'ant-design-vue';
   import { chartsColumns } from './windrect.data';
   import { setDivHeight } from '/@/utils/event';
   import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
   import { useRouter } from 'vue-router';
-  import LivePlayer from '@liveqing/liveplayer-v3';
   import { useModal } from '/@/components/Modal';
   import { useCamera } from '/@/hooks/system/useCamera';
+  import { usePermission } from '/@/hooks/web/usePermission';
+  const { hasPermission } = usePermission();
 
   const globalConfig = inject('globalConfig');
 
@@ -253,11 +242,6 @@
   // });
 
   const dataSource = ref([]);
-  const flvURL1 = () => {
-    // return ''
-    return `/video/wind.mp4`;
-  };
-
   const [regModal, { openModal }] = useModal();
 
   const { getCamera, removeCamera } = useCamera();
@@ -622,7 +606,7 @@
       if (selectRow.deviceType.startsWith('windrect_ds_four')) {
         type = 'dsWindRect_four';
       }
-      if (selectRow.deviceType.startsWith('windrect_ds_two')) {
+      if (selectRow.deviceType.startsWith('windrect_ds_two') || selectRow.deviceType.startsWith('windrect_ds_sut')) {
         type = 'duisheFixed';
       }
 
@@ -668,36 +652,44 @@
   }
 
   function controlDevice(passWord, type) {
-    if (type == 'sing') {
-      testWind({ ids: [selectData.deviceID], maxnum: runNum.value, password: passWord || globalConfig?.simulatedPassword }).then((res) => {
-        message.success('开始测风。。。');
-      });
-    } else if (type == 'multiple') {
-      const ids = toRaw(modalTable.value.selectedRowKeys);
-      testWind({ ids: ids, maxnum: runNum.value, password: passWord || globalConfig?.simulatedPassword }).then((res) => {
-        message.success(res);
-        setModalProps({ visible: false });
-        modalTable.value.clearSelectedRowKeys();
-      });
-    } else if (type == 'autoClear') {
-      const data = {
-        deviceid: selectData.deviceID,
-        devicetype: selectData.deviceType,
-        paramcode: 'autoClear',
-        value: null,
-        password: passWord || globalConfig?.simulatedPassword,
-        masterComputer: selectData.masterComputer,
-      };
-      deviceControlApi(data).then((res) => {
-        // 模拟时开启
-        if (res.success) {
-          if (globalConfig.History_Type == 'remote') {
-            message.success('指令已下发至生产管控平台成功!');
-          } else {
-            message.success('指令已下发成功!');
+    try {
+      if (type == 'sing') {
+        testWind({ ids: [selectData.deviceID], maxnum: runNum.value, password: passWord || globalConfig?.simulatedPassword }).then((res) => {
+          message.success('开始测风。。。');
+          modalIsShow.value = false;
+        });
+      } else if (type == 'multiple') {
+        const ids = toRaw(modalTable.value.selectedRowKeys);
+        testWind({ ids: ids, maxnum: runNum.value, password: passWord || globalConfig?.simulatedPassword }).then((res) => {
+          message.success(res);
+          setModalProps({ visible: false });
+          modalTable.value.clearSelectedRowKeys();
+          modalIsShow.value = false;
+        });
+      } else if (type == 'autoClear') {
+        const data = {
+          deviceid: selectData.deviceID,
+          devicetype: selectData.deviceType,
+          paramcode: 'autoClear',
+          value: null,
+          password: passWord || globalConfig?.simulatedPassword,
+          masterComputer: selectData.masterComputer,
+        };
+        deviceControlApi(data).then((res) => {
+          // 模拟时开启
+          if (res.success) {
+            if (globalConfig.History_Type == 'remote') {
+              message.success('指令已下发至生产管控平台成功!');
+            } else {
+              message.success('指令已下发成功!');
+            }
           }
-        }
-      });
+          modalIsShow.value = false;
+        });
+      }
+    } catch (error) {
+      message.error('测风失败,请联系管理员。。。');
+      modalIsShow.value = false;
     }
   }
 

+ 1 - 55
src/views/vent/monitorManager/windrectMonitor/windrect.data.ts

@@ -61,60 +61,6 @@ export const innerResultColumns: BasicColumn[] = [
     width: 120,
   },
   {
-    title: 'v1a',
-    dataIndex: 'v1a',
-    align: 'center',
-    width: 100,
-  },
-  {
-    title: 'v1b',
-    dataIndex: 'v1b',
-    align: 'center',
-    width: 100,
-  },
-  {
-    title: 'v1c',
-    dataIndex: 'v1c',
-    align: 'center',
-    width: 100,
-  },
-  {
-    title: 'v2a',
-    dataIndex: 'v2a',
-    align: 'center',
-    width: 80,
-  },
-  {
-    title: 'v2b',
-    dataIndex: 'v2b',
-    align: 'center',
-    width: 100,
-  },
-  {
-    title: 'v2c',
-    dataIndex: 'v2c',
-    align: 'center',
-    width: 100,
-  },
-  {
-    title: 'v3a',
-    dataIndex: 'v3a',
-    align: 'center',
-    width: 100,
-  },
-  {
-    title: 'v3b',
-    dataIndex: 'v3b',
-    align: 'center',
-    width: 80,
-  },
-  {
-    title: 'v3c',
-    dataIndex: 'v3c',
-    align: 'center',
-    width: 100,
-  },
-  {
     title: '平均风速',
     dataIndex: 'va',
     align: 'center',
@@ -122,7 +68,7 @@ export const innerResultColumns: BasicColumn[] = [
   },
   {
     title: '风量',
-    dataIndex: 'm³',
+    dataIndex: 'm3',
     align: 'center',
     width: 100,
   },

+ 0 - 1
src/views/vent/monitorManager/workFaceMonitor/components/workFaceHistory.vue

@@ -12,7 +12,6 @@
 <script setup lang="ts">
   import { ref, defineProps } from 'vue';
   import HistoryTable from '../../comment/HistoryTable.vue';
-  import { getDeviceList } from '../workFace.api';
 
   const props = defineProps({
     deviceType: {

+ 1 - 1
src/views/vent/monitorManager/workFaceMonitor/index.vue

@@ -50,7 +50,7 @@ import { onBeforeMount, ref, onMounted, onUnmounted, nextTick } from 'vue';
 import { mountedThree, destroy, setModelType, clearCss3D, showOrHideGasPlane } from './wokeFace.threejs';
 import { getTableList, systemList } from './workFace.api';
 import { monitorNav } from './workFace.data'
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+import customHeader from '/@/components/vent/customHeader.vue';
 import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';
 import workFaceVentHome from './components/workFaceVentHome.vue';
 import workFaceHome from './components/workFaceHome.vue';

+ 1 - 2
src/views/vent/monitorManager/workFaceMonitor/workFace.data.ts

@@ -256,7 +256,7 @@ export const windColumns: BasicColumn[] = [
   },
   {
     title: '风量',
-    dataIndex: 'm³',
+    dataIndex: 'm3',
     width: 80,
     align: 'center',
   },
@@ -736,4 +736,3 @@ export const gasUnitDetail = [
   //   code: 'unitTotalMass',
   // },
 ];
-

+ 0 - 1
src/views/vent/performance/comment/NormalTable.vue

@@ -164,7 +164,6 @@
   function handleDownLoad(record) {
     console.log(record, '下载');
     props.downLoad({ id: record.id }).then((res) => {
-      debugger;
       console.log('11111');
       console.log(res, '文件下载成功');
       let filename = `${record.fileName}`;

+ 1 - 1
src/views/vent/performance/fileDetail/index.vue

@@ -78,7 +78,7 @@
   </div>
 </template>
 <script lang="ts" setup name="system-user">
-  import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+  import customHeader from '/@/components/vent/customHeader.vue';
   import { useRouter } from 'vue-router';
   import { useMessage } from '/@/hooks/web/useMessage';
   import fileSystem from './commen/fileSystem.vue';

+ 1 - 1
src/views/vent/performance/fileIndex/index.vue

@@ -28,7 +28,7 @@
   import leftImg from '../../../../assets/images/files/homes/file.svg';
   import rightImg from '../../../../assets/images/files/homes/sp.svg';
   import { list } from './fileIndex.api';
-  import customHeader from '/@/views/vent/comment/components/customHeader.vue';
+  import customHeader from '/@/components/vent/customHeader.vue';
   let router = useRouter(); //路由
   let active = ref(); //当前选中项
   let titleList = reactive<any[]>([]);

+ 35 - 28
src/views/vent/reportManager/index.vue

@@ -1,45 +1,52 @@
 <template>
-    <div class="reportManager">
-        <customHeader>报表管理中心</customHeader>
-        <div class="content">
-            <NormalTable v-if="refesh"  :columns="columns" :searchFormSchema="searchFormSchema"
-                :deleteById="deleteById" :downLoad="downLoad" :list="reportList" designScope="device-tabel" title="报表管理"
-                :showTab="true" @saveAdd="saveAdd" />
-        </div>
+  <div class="reportManager">
+    <customHeader>报表管理中心</customHeader>
+    <div class="content">
+      <NormalTable
+        v-if="refesh"
+        :columns="columns"
+        :searchFormSchema="searchFormSchema"
+        :deleteById="deleteById"
+        :downLoad="downLoad"
+        :list="reportList"
+        designScope="device-tabel"
+        title="报表管理"
+        :showTab="true"
+        @saveAdd="saveAdd"
+      />
     </div>
+  </div>
 </template>
 
 <script setup lang="ts">
-import { ref, nextTick } from 'vue'
-import customHeader from '/@/views/vent/comment/components/customHeader.vue';
-import NormalTable from './comment/NormalTable.vue';
-import { columns, searchFormSchema } from './reportManager.data';
-import { reportList, save, deleteById,downLoad } from './reportManager.api'
+  import { ref, nextTick } from 'vue';
+  import customHeader from '/@/components/vent/customHeader.vue';
+  import NormalTable from './comment/NormalTable.vue';
+  import { columns, searchFormSchema } from './reportManager.data';
+  import { reportList, save, deleteById, downLoad } from './reportManager.api';
 
-let refesh = ref(true)
-async function saveAdd(params) {
-    let res = await save({ ...params })
-    console.log(res, '新增成功-------')
-    refesh.value = false
+  let refesh = ref(true);
+  async function saveAdd(params) {
+    let res = await save({ ...params });
+    console.log(res, '新增成功-------');
+    refesh.value = false;
     nextTick(() => {
-        refesh.value = true
-    })
-}
-
-
+      refesh.value = true;
+    });
+  }
 </script>
 
 <style lang="less" scoped>
-.reportManager {
+  .reportManager {
     width: calc(100% - 20px);
     height: calc(100% - 90px);
     position: relative;
     margin: 80px 10px 10px 10px;
 
     .content {
-        width: 100%;
-        height: calc(100% - 30px);
-        position: relative;
+      width: 100%;
+      height: calc(100% - 30px);
+      position: relative;
     }
-}
-</style>
+  }
+</style>

+ 11 - 15
src/views/vent/sys/setting/index.vue

@@ -7,7 +7,7 @@
         </template>
         <template v-if="column.dataIndex === 'logoIcon' || column.dataIndex === 'loginBack'">
           <span>{{ record[column.dataIndex] }}</span>
-          <img width="50" height="50" :src=" urlStr + '/sys/common/static/'+ record[column.dataIndex]">
+          <img width="50" height="50" :src="urlStr + '/sys/common/static/' + record[column.dataIndex]" />
         </template>
       </template>
     </a-table>
@@ -24,20 +24,19 @@
   const globSetting = useGlobSetting();
   const baseUploadUrl = globSetting.uploadUrl;
 
-  let urlStr = ''
+  let urlStr = '';
   if (import.meta.env.PROD) {
-    urlStr = VUE_APP_URL.baseUrl
+    urlStr = VUE_APP_URL.baseUrl;
   } else {
-    urlStr = baseUploadUrl || ''
+    urlStr = baseUploadUrl || '';
   }
 
   const [register, { openModal: openDetail }] = useModal();
-  const dataSource = ref<any[]>([])
-  
+  const dataSource = ref<any[]>([]);
 
   async function getDataSource() {
-    const result = await getList({})
-    dataSource.value = [result]
+    const result = await getList({});
+    dataSource.value = [result];
   }
 
   /**
@@ -50,14 +49,12 @@
     });
   }
 
-  onMounted(async() => {
-    await getDataSource()
-  })
-
-
+  onMounted(async () => {
+    await getDataSource();
+  });
 </script>
 <style lang="less" scoped>
-  .setting-box{
+  .setting-box {
     margin: 10px 8px;
     height: calc(100% - 72px);
     padding-bottom: 10px;
@@ -67,5 +64,4 @@
     background-color: #ffffff11;
     overflow-y: auto;
   }
-
 </style>