hongrunxia 1 year ago
parent
commit
9100e704a4
39 changed files with 329 additions and 207 deletions
  1. 1 1
      .env.development
  2. 5 5
      public/js/config.js
  3. 6 5
      src/components/Form/src/jeecg/components/MTreeSelect.vue
  4. 3 3
      src/components/Table/src/BasicTable.vue
  5. 1 1
      src/layouts/default/header/components/user-dropdown/index.vue
  6. 7 2
      src/layouts/page/index.vue
  7. 1 1
      src/locales/lang/zh-CN/layout.ts
  8. 14 9
      src/views/vent/comment/components/customHeader.vue
  9. 2 4
      src/views/vent/deviceManager/comment/NormalTable.vue
  10. 10 10
      src/views/vent/deviceManager/comment/pointTabel/point.data.ts
  11. 1 1
      src/views/vent/deviceManager/deviceTable/device.api.ts
  12. 1 3
      src/views/vent/deviceManager/deviceTable/index.vue
  13. 4 1
      src/views/vent/deviceManager/pointTabel/point.api.ts
  14. 0 22
      src/views/vent/deviceManager/pointTabel/point.data.ts
  15. 0 2
      src/views/vent/deviceManager/sensorTabel/index.vue
  16. 0 2
      src/views/vent/deviceManager/substationTabel/index.vue
  17. 4 1
      src/views/vent/deviceManager/tableColumns/tableColumns.api.ts
  18. 0 2
      src/views/vent/deviceManager/workingFace/index.vue
  19. 0 2
      src/views/vent/home/clique/components/echart-scene.vue
  20. 32 2
      src/views/vent/monitorManager/camera/index.vue
  21. 5 8
      src/views/vent/monitorManager/comment/DeviceEcharts.vue
  22. 90 15
      src/views/vent/monitorManager/comment/HistoryTable.vue
  23. 1 1
      src/views/vent/monitorManager/compressor/components/nitrogenHome1.vue
  24. 5 2
      src/views/vent/monitorManager/deviceMonitor/components/device/index.vue
  25. 15 40
      src/views/vent/monitorManager/deviceMonitor/components/device/modal/mainPath.vue
  26. 1 1
      src/views/vent/monitorManager/deviceMonitor/index.vue
  27. 2 1
      src/views/vent/monitorManager/fanLocalMonitor/index.vue
  28. 1 1
      src/views/vent/monitorManager/gateMonitor/index.vue
  29. 41 12
      src/views/vent/monitorManager/mainFanMonitor/index.vue
  30. 11 8
      src/views/vent/monitorManager/mainFanMonitor/main.threejs.ts
  31. 16 13
      src/views/vent/monitorManager/mainFanMonitor/mainWind.threejs.ts
  32. 1 0
      src/views/vent/monitorManager/nitrogen/nitrogen.data.ts
  33. 1 0
      src/views/vent/monitorManager/nitrogen/nitrogen.dishang.threejs.ts
  34. 22 14
      src/views/vent/monitorManager/nitrogen/nitrogen.threejs.ts
  35. 1 1
      src/views/vent/monitorManager/obfurage1Monitor/index.vue
  36. 1 1
      src/views/vent/monitorManager/windowMonitor/modal.vue
  37. 10 5
      src/views/vent/monitorManager/windrectMonitor/duishe.threejs.ts
  38. 11 3
      src/views/vent/monitorManager/windrectMonitor/index.vue
  39. 2 2
      src/views/vent/performance/fileDetail/index.vue

+ 1 - 1
.env.development

@@ -26,5 +26,5 @@ VITE_GLOB_API_URL_PREFIX=
 
 #微前端qiankun应用,命名必须以VITE_APP_SUB_开头,jeecg-app-1为子应用的项目名称,也是子应用的路由父路径
 #VITE_APP_SUB_APP = [["micro-need-air", "//182.92.126.35:8099/"], ["micro-vent-3dModal", "//localhost:8091/"], ["micro-fire-front", "//localhost:8090/"]]
-VITE_APP_SUB_APP = [["micro-vent-3dModal", "//localhost:8091/"], ["micro-need-air", "//localhost:8099/"], ["micro-fire-front", "//localhost:8090/"]]
+VITE_APP_SUB_APP = [["micro-vent-3dModal", "//182.92.126.35:8091/"], ["micro-need-air", "//localhost:8099/"], ["micro-fire-front", "//localhost:8090/"]]
 

+ 5 - 5
public/js/config.js

@@ -1,15 +1,15 @@
 const VUE_APP_URL = {
-  // baseUrl: "http://182.92.126.35:9999", // 后台地址
   baseUrl: "http://182.92.126.35:9999", // 后台地址
+  // baseUrl: "http://192.168.159.158:9999", // 后台地址
   webRtcUrl: '//192.168.183.216:8000' // rtsp服务器IP地址
 }
 const History_Type = {
-  // type: 'remote', // remote、vent
-  type: 'vent', // remote、vent
+  type: 'remote', // remote、vent  (remote 代表的是历史查询走的装备院的接口,vent是走的咱们的,目前神东的项目都用remote, 其他矿用vent)
+  // type: 'vent', // remote、vent
   deviceType: []
 }
 
 const VENT_PARAM = {
-  simulatedPassword: '123456'
-  // simulatedPassword: ''
+  // simulatedPassword: '123456' //(simulatedPassword 为空时有密码输入框弹出,不为空时不弹出密码输入框,无需输入密码)
+  simulatedPassword: ''
 }

+ 6 - 5
src/components/Form/src/jeecg/components/MTreeSelect.vue

@@ -84,11 +84,12 @@ import { onMounted, nextTick } from 'vue';
     } else if (value instanceof Array) {
       emitValue(value.map((item) => item.value).join(','));
     } else {
-      if(props.isSearch){
-        emitValue(value + '*');
-      }else{
-        emitValue(value);
-      }
+      // if(props.isSearch){
+      //   emitValue(value + '*');
+      // }else{
+      //   emitValue(value);
+      // }
+      emitValue(value);
     }
     treeValue.value = value;
     console.log(treeValue.value);

+ 3 - 3
src/components/Table/src/BasicTable.vue

@@ -465,9 +465,9 @@
         left: 0px !important;
         top: 34px !important;
         // background: #ffffff !important;
-        background: transparent !important;
-        backdrop-filter: blur(50px);
-        color: #fff !important;
+        // background: transparent !important;
+        // backdrop-filter: blur(50px);
+        color: #000000 !important;
       }
     }
   }

+ 1 - 1
src/layouts/default/header/components/user-dropdown/index.vue

@@ -11,7 +11,7 @@
 
     <template #overlay>
       <Menu @click="handleMenuClick">
-        <MenuItem key="doc" :text="t('layout.header.dropdownItemDoc')" icon="ion:document-text-outline" v-if="getShowDoc" />
+        <!-- <MenuItem key="doc" :text="t('layout.header.dropdownItemDoc')" icon="ion:document-text-outline" v-if="getShowDoc" /> -->
         <MenuDivider v-if="getShowDoc" />
         <MenuItem key="account" :text="t('layout.header.dropdownItemSwitchAccount')" icon="ant-design:setting-outlined" />
         <MenuItem key="password" :text="t('layout.header.dropdownItemSwitchPassword')" icon="ant-design:edit-outlined" />

+ 7 - 2
src/layouts/page/index.vue

@@ -16,9 +16,14 @@
         <!--        appear-->
         <!--      >-->
         <keep-alive v-if="openCache" :include="getCaches">
-          <component :is="Component" :key="route.fullPath" />
+          <Suspense>
+            <component :is="Component" :key="route.fullPath" />
+          </Suspense>
         </keep-alive>
-        <component v-else :is="Component" :key="route.fullPath" />
+        <Suspense v-else >
+          <component :is="Component" :key="route.fullPath" />
+        </Suspense>
+        
         <!--      </transition>-->
       </template>
     </RouterView>

+ 1 - 1
src/locales/lang/zh-CN/layout.ts

@@ -2,7 +2,7 @@ export default {
   footer: { onlinePreview: 'JEECG首页', onlineDocument: '在线文档' },
   header: {
     // user dropdown
-    dropdownItemDoc: '官网',
+    // dropdownItemDoc: '官网',
     dropdownItemLoginOut: '退出系统',
     dropdownItemSwitchPassword: '密码修改',
     // dropdownItemSwitchHome: '切换风格',

+ 14 - 9
src/views/vent/comment/components/customHeader.vue

@@ -13,7 +13,7 @@
         popupClassName="drop"
         :field-names="fieldNames"
         :options="options"
-        :dropdownStyle="{ background : 'transparent',  borderBottom: '1px solid #ececec66', backdropFilter: 'blur(50px)', color: '#fff !important'}"
+        :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>
@@ -64,8 +64,19 @@ export default defineComponent({
   .@{ventSpace}-select-item-option-active {
     background-color: #ffffff33 !important;
   }
-  .@{ventSpace}-select-item:hover {
-    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>
@@ -119,14 +130,8 @@ export default defineComponent({
       }
     }
   }
-  .custom-drop{
-      border-bottom: 1px solid #ececec66 !important;
-      background: transparent !important;
-      backdrop-filter: blur(50px) !important;
-  }
   :deep(.zxm-select){
     width: 300px;
-  
     .@{ventSpace}-select-selector{
       background: transparent !important;
       border: none !important;

+ 2 - 4
src/views/vent/deviceManager/comment/NormalTable.vue

@@ -3,8 +3,8 @@
     <BasicTable @register="registerTable" :rowSelection="rowSelection">
       <template #tableTitle>
         <a-button preIcon="ant-design:plus-outlined" type="primary" @click="handleAdd">新增</a-button>
-        <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
-        <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
+        <a-button v-if="getExportUrl" type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
+        <j-upload-button v-if="getImportUrl" type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
         <a-dropdown v-if="selectedRowKeys.length > 0" :getPopupContainer="getPopupContainer">
           <template #overlay>
             <a-menu>
@@ -75,11 +75,9 @@ const props = defineProps({
   },
   getImportUrl: {
     type: String,
-    required: true,
   },
   getExportUrl: {
     type: String,
-    required: true,
   },
   deleteById: {
     type: Function,

+ 10 - 10
src/views/vent/deviceManager/comment/pointTabel/point.data.ts

@@ -165,14 +165,14 @@ export const workFaceColumns: BasicColumn[] = [
     edit: true,
     editComponent: 'InputNumber',
   },
-  {
-    title: '是否参与计算风量',
-    width: 100,
-    dataIndex: 'windflag',
-    edit: true,
-    editComponent: 'Switch',
-    editValueMap: (value) => {
-      return value ? '是' : '否';
-    },
-  },
+  // {
+  //   title: '是否参与计算风量',
+  //   width: 100,
+  //   dataIndex: 'windflag',
+  //   edit: true,
+  //   editComponent: 'Switch',
+  //   editValueMap: (value) => {
+  //     return value ? '是' : '否';
+  //   },
+  // },
 ];

+ 1 - 1
src/views/vent/deviceManager/deviceTable/device.api.ts

@@ -8,7 +8,7 @@ enum Api {
   deleteById = '/safety/ventanalyDeviceInfo/delete',
   deleteBatch = '/safety/ventanalyDeviceInfo/deleteBatch',
   importExcel = '/sys/user/importExcel',
-  exportXls = '/sys/user/exportXls',
+  exportXls = '/safety/ventanalyMonitorParams/exportXls',
 }
 /**
  * 导出api

+ 1 - 3
src/views/vent/deviceManager/deviceTable/index.vue

@@ -5,8 +5,6 @@
       :columns="columns"
       :searchFormSchema="searchFormSchema"
       :list="list"
-      :getImportUrl="getImportUrl"
-      :getExportUrl="getExportUrl"
       :formSchema="formSchema"
       :deleteById="deleteById"
       :batchDelete="batchDeleteById"
@@ -25,7 +23,7 @@
   import { FormSchema } from '/@/components/Table';
   import NormalTable from '../comment/NormalTable.vue';
   import { searchFormSchema } from './device.data';
-  import { list, getImportUrl, getExportUrl, deleteById, batchDeleteById, saveOrUpdate } from './device.api';
+  import { list, deleteById, batchDeleteById, saveOrUpdate } from './device.api';
   import { getFormSchemaColumns, getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
   import { list as substationList } from '../substationTabel/substation.api';
   import { useRouter } from 'vue-router';

+ 4 - 1
src/views/vent/deviceManager/pointTabel/point.api.ts

@@ -33,7 +33,10 @@ export const queryDeviceList = (params) => defHttp.get({ url: Api.queryDevice, p
  * 列表接口
  * @param params
  */
-export const list = (params) => defHttp.get({ url: Api.list, params });
+export const list = (params) => {
+  if (params['devicetype']) params['devicetype'] = params['devicetype'] + '*';
+  return defHttp.get({ url: Api.list, params });
+};
 
 /**
  * 设备类型查询接口

+ 0 - 22
src/views/vent/deviceManager/pointTabel/point.data.ts

@@ -74,28 +74,6 @@ export const searchFormSchema: FormSchema[] = [
     component: 'MTreeSelect',
     colProps: { span: 6 },
   },
-  {
-    label: '值类型',
-    field: 'valuetype',
-    component: 'JDictSelectTag',
-    componentProps: {
-      dictCode: 'valuetype',
-      placeholder: '请选择设备类型',
-      stringToNumber: true,
-    },
-  },
-  {
-    label: '值名称',
-    field: 'valuename',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
-  {
-    label: '值code',
-    field: 'valuecode',
-    component: 'Input',
-    colProps: { span: 6 },
-  },
 ];
 
 export const formSchema: FormSchema[] = [

+ 0 - 2
src/views/vent/deviceManager/sensorTabel/index.vue

@@ -4,8 +4,6 @@
       :columns="columns"
       :searchFormSchema="searchFormSchema"
       :list="list"
-      :getImportUrl="getImportUrl"
-      :getExportUrl="getExportUrl"
       :formSchema="formSchema"
       :deleteById="deleteById"
       :batchDelete="batchDeleteById"

+ 0 - 2
src/views/vent/deviceManager/substationTabel/index.vue

@@ -5,8 +5,6 @@
       :columns="columns"
       :searchFormSchema="searchFormSchema"
       :list="list"
-      :getImportUrl="getImportUrl"
-      :getExportUrl="getExportUrl"
       :formSchema="formSchema"
       :deleteById="deleteById"
       :batchDelete="batchDeleteById"

+ 4 - 1
src/views/vent/deviceManager/tableColumns/tableColumns.api.ts

@@ -23,7 +23,10 @@ export const getImportUrl = Api.importExcel;
  * 列表接口
  * @param params
  */
-export const list = (params) => defHttp.get({ url: Api.list, params });
+export const list = (params) => {
+  if (params['devicetype']) params['devicetype'] = params['devicetype'] + '*';
+  return defHttp.get({ url: Api.list, params });
+};
 
 /**
  * 设备类型查询接口

+ 0 - 2
src/views/vent/deviceManager/workingFace/index.vue

@@ -4,8 +4,6 @@
       :columns="[]"
       :searchFormSchema="searchFormSchema"
       :list="list"
-      :getImportUrl="getImportUrl"
-      :getExportUrl="getExportUrl"
       :formSchema="formSchema"
       :deleteById="deleteById"
       :batchDelete="batchDeleteById"

+ 0 - 2
src/views/vent/home/clique/components/echart-scene.vue

@@ -33,8 +33,6 @@ let percent = reactive({
     hf: 0,
 })
 
-
-
 function getOption() {
     nextTick(() => {
         let placeHolderStyle = {

+ 32 - 2
src/views/vent/monitorManager/camera/index.vue

@@ -5,6 +5,7 @@
       <div>
         <template v-if="item.addr.startsWith('rtsp://')">
           <video :id="`video${index}`" muted autoplay></video>
+          <div class="click-box" @dblclick="goFullScreen(`video${index}`)"></div>
         </template>
         <template v-else>
           <LivePlayer :videoUrl="item.addr" muted live loading/>
@@ -18,6 +19,7 @@
   import {onMounted, onUnmounted, ref } from 'vue';
   import { list } from './camera.api'
   import LivePlayer from '@liveqing/liveplayer-v3';
+  import { Icon } from '/@/components/Icon';
 
   const webRtcServerList = <any[]>[]
   let addrList = ref<{ name: string, addr: string }[]>([])
@@ -31,7 +33,7 @@
 
   function getVideo() {
     const ip = VUE_APP_URL.webRtcUrl;
-    for(let i =1; i<= addrList.value.length; i++){
+    for(let i =0; i < addrList.value.length; i++){
       const item = addrList.value[i]
       if(item.addr.startsWith('rtsp://')){
         const dom = document.getElementById('video' + i) as HTMLVideoElement
@@ -44,6 +46,23 @@
     }
   }
 
+  function goFullScreen(domId) {
+    const videoDom = document.getElementById(domId) as HTMLVideoElement
+    if(videoDom.requestFullscreen){
+      videoDom.requestFullscreen()
+      videoDom.play()
+    } else if(videoDom.mozRequestFullscreen){
+      videoDom.mozRequestFullscreen()
+      videoDom.play()
+    } else if (videoDom.webkitRequestFullscreen) {
+      videoDom.webkitRequestFullscreen()
+      videoDom.play()
+    } else if (videoDom.msRequestFullscreen) {
+      videoDom.msRequestFullscreen()
+      videoDom.play()
+    }
+  }
+
   onMounted(async() => {
     await getVideoAddrs()
     getVideo()
@@ -84,7 +103,18 @@
         text-overflow: ellipsis;
         z-index: 999;
       }
+      .click-box{
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        top: 0;
+        left: 0;
+      }
     }
   }
-  
+  // :deep(video){
+  //   width: 100% !important;
+  //   height: 100% !important;
+  //   object-fit: cover !important;
+  // }
 </style>

+ 5 - 8
src/views/vent/monitorManager/comment/DeviceEcharts.vue

@@ -1,12 +1,12 @@
 <template>
   <div class="charts-container">
-    <a-select ref="select" size="small" v-model:value="chartsType" style="position: absolute; z-index: 99; top: 2px; left: 2px; width: 98px">
+    <a-select ref="select" v-model:value="chartsType" style="position: absolute; z-index: 99; top: 2px; left: 2px; width: 98px">
       <a-select-option value="listMonitor">实时监测</a-select-option>
       <a-select-option value="detail">详情监测</a-select-option>
       <a-select-option value="history">历史记录</a-select-option>
     </a-select>
 
-    <div class="charts-box" v-if="chartsType === 'listMonitor'">
+    <div class="charts-box" v-if="chartsType === 'listMonitor'" style="position: absolute; top: 20px;">
       <BarAndLine
         :chartsColumnsType="chartsColumnsType"
         :xAxisPropType="xAxisPropType"
@@ -39,28 +39,24 @@
         :fieldNames="{ label: 'strname', value: 'id' }"
         v-model:value="deviceId"
         placeholder="请选择查看的设备"
-        size="small"
         style="position: absolute; z-index: 99; left: 102px; width: 150px; top: 2px"
       />
       <a-date-picker
         v-model:value="historyParams.tData"
-        size="small"
         valueFormat="YYYY-MM-DD"
         placeholder="请选择查询日期"
         style="position: absolute; z-index: 99; left: 254px; width: 150px; top: 2px"
       />
       <a-time-range-picker
         v-model:value="historyParams.ttime"
-        size="small"
         valueFormat="HH:mm:ss"
         style="position: absolute; z-index: 99; left: 406px; width: 200px; top: 2px"
       />
       <a-select
         ref="select"
-        size="small"
         v-model:value="historyParams.skip"
         placeholder="请选择间隔时间"
-        style="position: absolute; z-index: 99; top: 2px; left: 608px; width: 100px"
+        style="position: absolute; z-index: 99; top: 2px; left: 608px; width: 150px"
       >
         <a-select-option value="1">5秒</a-select-option>
         <a-select-option value="2">10秒</a-select-option>
@@ -83,6 +79,7 @@
         height="100%"
         :option="echartsOption1"
         chartsType="history"
+        style="margin-top: 20px;"
       />
     </div>
   </div>
@@ -265,7 +262,7 @@
       height: 100%;
       position: absolute;
       bottom: 0;
-      top: 20px;
+      top: 0px;
     }
     .@{ventSpace}-picker,
     .@{ventSpace}-select-selector {

+ 90 - 15
src/views/vent/monitorManager/comment/HistoryTable.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="history-table">
+  <div class="history-table" v-if="loading">
     <BasicTable ref="historyTable" @register="registerTable" >
       <template #bodyCell="{ column, record }">
         <slot name="filterCell" v-bind="{ column, record }"></slot>
@@ -18,12 +18,13 @@
   import { defHttp } from '/@/utils/http/axios';
   import dayjs from 'dayjs';
   import { getAutoScrollContainer } from '/@/utils/common/compUtils';
+import { onMounted } from 'vue';
 
   const globalConfig = inject('globalConfig');
   
   const historyTable = ref();
   const dataSource = ref([])
-
+  const loading = ref(false)
   const list = (params) => {
     if(globalConfig.History_Type == 'vent') {
       return defHttp.get({ url: '/safety/ventanalyMonitorData/list', params })
@@ -63,8 +64,11 @@
       default: () => []
     }
   });
+  const historyType = ref('')
   const columns = ref([])
   const tableScroll = props.scroll.y ? ref({ y: props.scroll.y - 100 }) : ref({})
+  let deviceOptions = <any[]>[]
+  let deviceList = <any[]>[]
 
   watch(
     () => {
@@ -88,6 +92,20 @@
     }
   );
 
+  watch(historyType, (type) => {
+    debugger
+    if (!type) return
+    // if (historyTable.value) getForm().resetFields()
+    const column = getTableHeaderColumns(type.includes('_history') ? type : type + '_history')
+    if (column && column.length < 1) {
+      const arr = type.split('_')
+      columns.value = getTableHeaderColumns(arr[0] + '_history');
+    } else {
+      columns.value = column
+    }
+    setColumns(columns.value)
+  })
+
   watch(() => props.scroll.y, (newVal) => {
     if(newVal){
       tableScroll.value = {y: newVal - 100 }
@@ -96,7 +114,25 @@
     }
   })
 
-
+  async function getDeviceList() {
+    let result;
+    if(globalConfig.History_Type == 'vent'){
+      result = await defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType } })
+    }else {
+      result = await defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType.startsWith('vehicle') ? 'location_normal' : props.deviceType } })
+    }
+    if(result){
+      deviceOptions = []
+      deviceOptions = result.map((item) => {
+        return {label: item['strname'], value: item['id'], strtype: item['strtype'], devicekind: item['devicekind'] }
+        // return { label: item['strname'], value: item['id']}
+      })
+      
+    }
+  }
+  
+  await getDeviceList()
+  loading.value = true
   // 列表页面公共参数、方法
   const { tableContext } = useListPage(
     globalConfig.History_Type == 'vent' ? {
@@ -150,14 +186,31 @@
             {
               label: '查询设备',
               field: 'gdeviceid',
-              component: 'ApiSelect',
+              component: 'Select',
+              defaultValue: deviceOptions[0] ?  deviceOptions[0]['value'] : '',
               required: true,
+              // componentProps: ({ formModel }) => {
+              //   return {
+              //     options: deviceOptions.value,
+              //     // api: () => defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType } }),
+              //     // resultField: 'result',
+              //     // labelField: 'strinstallpos',
+              //     // valueField: 'id',
+              //     // onChange: (e, option) => {
+              //     //   if (option && (option['strtype'] || option['devicekind'])) historyType.value = option['strtype'] || option['devicekind']
+              //     // },
+              //   }
+              // },
               componentProps: {
-                api: () => defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType } }),
-                // resultField: 'result',
-                labelField: 'strinstallpos',
-                valueField: 'id',
-                // numberToString: true,
+                options: deviceOptions,
+                // api: () => defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType } }),
+                // // resultField: 'result',
+                // labelField: 'strinstallpos',
+                // valueField: 'id',
+                onChange: (e, option) => {
+                  debugger
+                  if (option && (option['strtype'] || option['devicekind'])) historyType.value = option['strtype'] || option['devicekind']
+                },
               },
               colProps: {
                 span: 4,
@@ -274,15 +327,32 @@
           {
             label: '查询设备',
             field: 'deviceId',
-            component: 'ApiSelect',
+            component: 'Select',
+            defaultValue: deviceOptions[0] ? deviceOptions[0]['value'] : '',
             required: true,
             componentProps: {
-              api: () => defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType.startsWith('vehicle') ? 'location_normal' : props.deviceType } }),
-              // resultField: 'result',
-              labelField: 'strinstallpos',
-              valueField: 'id',
+              options: deviceOptions,
+              // api: () => defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType.startsWith('vehicle') ? 'location_normal' : props.deviceType } }),
+              // // resultField: 'result',
+              // labelField: 'strinstallpos',
+              // valueField: 'id',
               // numberToString: true,
+              onChange: (e, option) => {
+                if(option && (option['strtype'] || option['devicekind'])) historyType.value = option['strtype'] || option['devicekind']
+              },
             },
+            // componentProps: ({ formModel }) => {
+            //   return {
+            //     options: deviceOptions.value,
+            //     // api: () => defHttp.get({ url: '/safety/ventanalyManageSystem/linkdevicelist', params: { sysId: props.sysId, deviceType: props.deviceType.startsWith('vehicle') ? 'location_normal' : props.deviceType } }),
+            //     // resultField: 'result',
+            //     // labelField: 'strinstallpos',
+            //     // valueField: 'id',
+            //     // onChange: (e, option) => {
+            //     //   if(option && (option['strtype'] || option['devicekind'])) historyType.value = option['strtype'] || option['devicekind']
+            //     // },
+            //   }
+            // },
           },
           {
             label: '间隔时间',
@@ -366,7 +436,7 @@
   );
 
   //注册table数据
-  const [registerTable, { getDataSource, reload, setLoading, getForm }] = tableContext;
+  const [registerTable, { getDataSource, reload, setLoading, getForm, setColumns }] = tableContext;
 
   watchEffect(() => {
     if (historyTable.value && getDataSource) {
@@ -375,6 +445,11 @@
       console.log('[ data ] >', data);
     }
   });
+  onMounted(() => {
+    if (!props.columnsType) {
+      historyType.value = deviceOptions[0]['strtype'] || deviceOptions[0]['devicekind']
+    }
+  })
   defineExpose({ setLoading })
 </script>
 

+ 1 - 1
src/views/vent/monitorManager/compressor/components/nitrogenHome1.vue

@@ -434,7 +434,7 @@
     justify-content: center;
     align-items: center;
     pointer-events: none;
-    top: 60px;
+    top: 20px;
 
     .nitrogen-container {
       width: 100%;

+ 5 - 2
src/views/vent/monitorManager/deviceMonitor/components/device/index.vue

@@ -224,7 +224,7 @@
         <!-- </dv-border-box8> -->
       </div>
     </div>
-    <mainPath v-if="deviceType == 'majorpath'" :line-list="dataSource" style="width: 300px; height: 300px; position: absolute; left: 250px;"/>
+    <mainPath v-if="deviceType == 'majorpath'" :dataSource="majorPathEchartsData" style="width: 300px; height: 300px; position: absolute; left: 250px;"/>
     <component v-if="modalVisible" :is="currentModal" v-model:visible="modalVisible" :dataSource="dataSource"
       :activeID="activeID" />
   </div>
@@ -288,6 +288,7 @@ const deviceList = ref<DeviceType[]>([]) //关联设备列表
 const deviceActive = ref('')
 const activeKey = ref('1'); // tab key
 const dataSource = shallowRef([]) // 实时监测数据
+const majorPathEchartsData = ref({})
 const activeID = ref('') // 打开详情modal时监测的设备id
 const deviceType = ref('') // 监测设备类型
 const systemType = ref('')
@@ -393,6 +394,7 @@ async function getDataSource() {
       if (item.type != 'sys') {
         if(item.type === 'majorpath'){
           deviceArr.unshift({ deviceType: item.type, deviceName: item['typeName'], datalist: item['datalist'][0]['paths'] })
+          majorPathEchartsData.value = item['datalist'][0]
         }else {
           deviceArr.unshift({ deviceType: item.type, deviceName: item['typeName'] ? item['typeName'] : item['datalist'][0]['typeName'], datalist: data })
         }
@@ -425,6 +427,7 @@ async function getDataSource() {
           if (item.type != 'sys') {
             if (item.type.startsWith('majorpath') && item.type == deviceType.value) {
               dataSource.value = item['datalist'][0]['paths']
+               majorPathEchartsData.value = item['datalist'][0]
               return
             } else if(item.type == deviceType.value) {
               dataSource.value = data
@@ -1217,7 +1220,7 @@ onUnmounted(() => {
 
 :deep(.zxm-select-dropdown) {
   left: 0 !important;
-  color: #fff !important;
+  color: #000000 !important;
 }
 // :deep(.@{ventSpace}-pagination){
 //   margin-right: 20px !important;

+ 15 - 40
src/views/vent/monitorManager/deviceMonitor/components/device/modal/mainPath.vue

@@ -41,12 +41,12 @@
 
 <script lang="ts" setup>
 import { ref, reactive, onMounted, nextTick, defineProps, watch } from 'vue';
-import { SvgIcon } from '/@/components/Icon';
 import * as echarts from 'echarts';
+import { formatNum } from '/@/utils/ventutil'
 const emit = defineEmits(['goDetail'])
 
 let props = defineProps({
-  lineList: Array,
+  dataSource: Object,
 });
 
 //获取dom节点
@@ -78,42 +78,16 @@ function getDetail() {
 }
 //选项切换
 function changeSelect(val) {
-  switch (val) {
-    case '1号回风斜井':
-      // echartData[0].value = lineData[0].majorpath.drag_1;
-      // echartData[1].value = lineData[0].majorpath.drag_2;
-      // echartData[2].value = lineData[0].majorpath.drag_3;
-      // tabList[0].val = lineData[0].majorpath.drag_total;
-      // tabList[1].val = lineData[0].majorpath.m3_total;
-      echartData[0].value = Math.floor(Math.random() * (629 - 620 + 1)) + 620;
-      echartData[1].value = Math.floor(Math.random() * (949 - 940 + 1)) + 940;
-      echartData[2].value = Math.floor(Math.random() * (855 - 850 + 1)) + 850;
-      tabList[0].val = Math.floor(Math.random() * (10700 - 10600 + 1)) + 10600;
-      tabList[1].val = Math.floor(Math.random() * (2433 - 2423 + 1)) + 2423;
-      tabList[2].val = 0.56;
-      percentF.value = ((echartData[0].value / (echartData[0].value + echartData[1].value + echartData[2].value)) * 100).toFixed(2);
-      percentT.value = ((echartData[1].value / (echartData[0].value + echartData[1].value + echartData[2].value)) * 100).toFixed(2);
-      percentE.value = ((echartData[2].value / (echartData[0].value + echartData[1].value + echartData[2].value)) * 100).toFixed(2);
-      getOption();
-      break;
-    case '2号回风立井':
-      // echartData[0].value = lineData[1].majorpath.drag_1;
-      // echartData[1].value = lineData[1].majorpath.drag_2;
-      // echartData[2].value = lineData[1].majorpath.drag_3;
-      // tabList[0].val = lineData[1].majorpath.drag_total;
-      // tabList[1].val = lineData[1].majorpath.m3_total;
-      echartData[0].value = Math.floor(Math.random() * (830 - 820 + 1)) + 820;
-      echartData[1].value = Math.floor(Math.random() * (620 - 600 + 1)) + 600;
-      echartData[2].value = Math.floor(Math.random() * (860 - 800 + 1)) + 800;
-      tabList[0].val = Math.floor(Math.random() * (10100 - 10000 + 1)) + 10000;
-      tabList[1].val = Math.floor(Math.random() * (2310 - 2210 + 1)) + 2210;
-      tabList[2].val = 0.78;
-      percentF.value = ((echartData[0].value / (echartData[0].value + echartData[1].value + echartData[2].value)) * 100).toFixed(2);
-      percentT.value = ((echartData[1].value / (echartData[0].value + echartData[1].value + echartData[2].value)) * 100).toFixed(2);
-      percentE.value = ((echartData[2].value / (echartData[0].value + echartData[1].value + echartData[2].value)) * 100).toFixed(2);
-      getOption();
-      break;
-  }
+  echartData[0].value = (val['drag_1'] || Math.floor(Math.random() * (629 - 620 + 1)) + 620).toFixed(2);
+  echartData[1].value = (val['drag_2'] || Math.floor(Math.random() * (949 - 940 + 1)) + 940).toFixed(2);
+  echartData[2].value = (val['drag_3'] || Math.floor(Math.random() * (855 - 850 + 1)) + 850).toFixed(2);
+  tabList[0].val = ((val['m3_total'] / 60) || (Math.floor(Math.random() * (10700 - 10600 + 1)) + 10600)).toFixed(2);
+  tabList[1].val = (val['drag_total'] || Math.floor(Math.random() * (2433 - 2423 + 1)) + 2423).toFixed(2);
+  tabList[2].val = formatNum(1.19 * Number(tabList[0].val) / Math.sqrt(Number(tabList[1].val)));
+  percentF.value = formatNum((Number(echartData[0].value) / (Number(echartData[0].value) + Number(echartData[1].value) + Number(echartData[2].value))) * 100);
+  percentT.value = formatNum((Number(echartData[1].value) / (Number(echartData[0].value) + Number(echartData[1].value) + Number(echartData[2].value))) * 100)
+  percentE.value = formatNum((echartData[2].value / (Number(echartData[0].value) + Number(echartData[1].value) + Number(echartData[2].value))) * 100)
+  getOption();
 }
 
 function getOption() {
@@ -273,9 +247,9 @@ function getOption() {
 }
 
 watch(
-  () => props.lineList,
+  () => props.dataSource,
   (val) => {
-    changeSelect('1号回风斜井');
+    changeSelect(val)
   },
   {
     deep: true,
@@ -408,6 +382,7 @@ onMounted(() => { });
         position: relative;
         width: 105px;
         height: 58px;
+        margin: 0 1px;
         margin-top: 20px;
         background: url('/@/assets/images/home-container/line-val.png') no-repeat;
         background-size: 100% 90%;

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

@@ -646,5 +646,5 @@ onUnmounted(() => {
 
 :deep(.zxm-select-dropdown) {
   left: 0 !important;
-  color: #fff !important;
+  color: #000000 !important;
 }</style>

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

@@ -318,7 +318,7 @@
 </template>
 
 <script setup lang="ts">
-  import { ExclamationCircleFilled, SendOutlined } from '@ant-design/icons-vue';
+  import { ExclamationCircleFilled } from '@ant-design/icons-vue';
   import { onBeforeMount, ref, watch, onMounted, nextTick, toRaw, reactive, onUnmounted, inject } from 'vue';
   import BarSingle from '../../../../components/chart/BarSingle.vue';
   import GroupMonitorTable from '../comment/GroupMonitorTable.vue';
@@ -568,6 +568,7 @@
             MonitorDataTable.value.setSelectedRowKeys(dataSource.value[0]['deviceID'])
           }
         }
+        lodash.omit(selectData, lodash.keys(selectData))
         if(dataSource.value.length > 0 && dataSource.value[selectRowIndex.value] ){
           Object.assign(selectData, dataSource.value[selectRowIndex.value])
           deviceType.value = selectData['deviceType']

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

@@ -369,7 +369,7 @@ function playAnimation(handlerState) {
 
   
   if(globalConfig?.simulatedPassword){
-    handleOK(globalConfig?.simulatedPassword, handlerState+'')
+    handleOK('', handlerState+'')
   }
 };
 

+ 41 - 12
src/views/vent/monitorManager/mainFanMonitor/index.vue

@@ -11,18 +11,18 @@
         <div class="elementTag" id="inputBox">
           <div class="elementContent elementContent-r" v-if="selectData.DataPa && backMonitorIsShow">
             <div class="element-item"><span class="data-title">风机气压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div>
-            <div class="element-item"><span class="data-title">风机压(Pa):</span><span>{{ selectData.Fan2Negative ? selectData.Fan2Negative : '-' }}</span></div>
+            <div class="element-item"><span class="data-title">风机压(Pa):</span><span>{{ selectData.Fan2Negative ? selectData.Fan2Negative : '-' }}</span></div>
             <div class="element-item"><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan2m3 ? selectData.Fan2m3 : '-' }}</span></div>
           </div>
         </div>
         <div class="elementTag" id="inputBox1">
           <div class="elementContent elementContent-r" v-if="selectData.DataPa && frontMonitorIsShow">
             <div class="element-item"><span class="data-title">风机全压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div>
-            <div class="element-item"><span class="data-title">风机压(Pa):</span><span>{{ selectData.Fan1Negative ? selectData.Fan1Negative : '-' }}</span></div>
+            <div class="element-item"><span class="data-title">风机压(Pa):</span><span>{{ selectData.Fan1Negative ? selectData.Fan1Negative : '-' }}</span></div>
             <div class="element-item"><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan1m3 ? selectData.Fan1m3 : '-' }}</span></div>
           </div>
         </div>
-        <div class="elementTag" id="fbm">
+        <!-- <div class="elementTag" id="fbm">
           <div class="elementContent elementContent-r fbm-box">
             <div class="fbm-video">
               <LivePlayer id="main-player2" ref="player2" :videoUrl="flvURL2()" muted live/>
@@ -66,7 +66,7 @@
               </div>
             </div>
           </div>
-        </div>
+        </div> -->
       </div>
     </div>
     <div id="main3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"> </div>
@@ -75,8 +75,9 @@
 
   <div class="scene-box" style="z-index: 999">
     <div class="title-text" style="position: absolute; z-index: 9999; width: 100%; text-align: center">{{ selectData.strname }}</div>
-    <div class="top-box control-group">
-      <div class="button-box" v-for="(item, index) in modalTypeArr.centerBtnArr" :key="index" @click="showModal(item)">{{ item.value }}</div>
+    <div class="top-box control-group" v-if="globalConfig?.simulatedPassword">
+      <div class="button-box" v-for="(item, index) in modalTypeArr.centerBtnArr" :key="index">{{ item.value }}</div>
+      <!-- <div class="button-box" v-for="(item, index) in modalTypeArr.centerBtnArr" :key="index" @click="showModal(item)">{{ item.value }}</div> -->
     </div>
     <div class="data-show-box">
       <div class="data-item">
@@ -92,7 +93,7 @@
           </div>
           <div class="container-group container-group-l">
             <template v-if="deviceType">
-              <div class="container-item" v-for="(data, index) in getTableHeaderColumns(deviceType + '_monitor_left')" :key="index">
+              <div class="container-item" v-for="(data, index) in leftColumns" :key="index">
                 <div class="item-icon">
                   <SvgIcon class="icon-style" size="18" name="temperature" />
                 </div>
@@ -137,7 +138,7 @@
             </div>
             <div class="warning-group">
               <template v-if="deviceType">
-                <div class="warning-item" v-for="(state, index) in getTableHeaderColumns(deviceType + '_monitor_right')" :key="index">
+                <div class="warning-item" v-for="(state, index) in rightColumns" :key="index">
                   <div class="item-name"><div class="icon"></div> {{ state.title }}</div>
                   <div v-if="state.dataIndex.startsWith('Fan')">
                     <div class="signal-item" v-if="warningMonitorRowIndex == 0">
@@ -210,7 +211,7 @@
           </a-tab-pane> -->
           <a-tab-pane key="3" tab="历史数据">
             <div class="tab-item" v-if="activeKey === '3'">
-              <HistoryTable columns-type="fanmain" device-type="fanmain" :device-list-api="baseList" designScope="fanmain-history" :scroll="scroll"/>
+              <HistoryTable device-type="fanmain" :device-list-api="baseList" designScope="fanmain-history" :scroll="scroll"/>
             </div>
           </a-tab-pane>
           <a-tab-pane key="4" tab="报警历史">
@@ -311,7 +312,7 @@
 <script setup lang="ts">
   import { ExclamationCircleFilled } from '@ant-design/icons-vue';
   import FanEchrats from '/@/views/vent/monitorManager/mainFanMonitor/fanEchrats.vue';
-  import { onBeforeMount, computed, ref, onMounted, nextTick, onUnmounted, reactive, toRaw, watch } from 'vue';
+  import { onBeforeMount, computed, ref, onMounted, inject, onUnmounted, reactive, toRaw, watch } from 'vue';
   import GroupMonitorTable from '../comment/GroupMonitorTable.vue';
   import HistoryTable from '../comment/HistoryTable.vue';
   import AlarmHistoryTable from '../comment/AlarmHistoryTable.vue';
@@ -331,6 +332,9 @@
   import { useRouter } from 'vue-router';
   import ConditionAssistance from './components/conditionAssistance.vue'
   import { useModal } from '/@/components/Modal';
+  import type { BasicColumn } from '/@/components/Table/src/types/table';
+  import lodash from 'lodash';
+  const globalConfig = inject('globalConfig');
   
   const [registerModal, { openModal, closeModal }] = useModal();
   const { currentRoute } = useRouter();
@@ -372,7 +376,19 @@
     deviceType: '',
   });
 
-  const deviceType = computed(() => selectData.deviceType);
+  const deviceType = ref(selectData.deviceType)
+  const rightColumns = ref<BasicColumn[]>([])
+  const leftColumns = ref<BasicColumn[]>([])
+  watch(deviceType, (type) => {
+    rightColumns.value = getTableHeaderColumns(type + '_monitor_right') as []
+    if (rightColumns.value && rightColumns.value.length < 1) {
+      rightColumns.value = getTableHeaderColumns(type.split('_')[0] + '_monitor_right') as []
+    }
+    leftColumns.value = getTableHeaderColumns(type + '_monitor_left') as []
+    if (leftColumns.value && leftColumns.value.length < 1) {
+      leftColumns.value = getTableHeaderColumns(type.split('_')[0] + '_monitor_left') as []
+    }
+  })
 
   const flvURL1 = () => {
     // return `https://muiplayer.js.org/media/media.m3u8`;
@@ -432,6 +448,7 @@
             MonitorDataTable.value.setSelectedRowKeys(dataSource.value[0]['deviceID'])
           }
         }
+        lodash.omit(selectData, lodash.keys(selectData))
         Object.assign(selectData, deviceBaseList.value, dataSource.value[selectRowIndex.value]);
         if (selectData['Fan1StartStatus'] == 1 && selectData['Fan2StartStatus'] == 0) {
           frontMonitorIsShow.value = true
@@ -442,7 +459,8 @@
         } else {
           // 正在运行
         }
-
+        
+        deviceType.value = selectData.deviceType
         addText();
         playAnimate(selectData);
         if (timer) {
@@ -638,6 +656,8 @@
           })
         }
       }
+    } else if(selectData['Fan2StartStatus'] == 0 && selectData['Fan1StartStatus'] == 0){
+
     } else if (modalType.value == 'changeSmoke') {
       // 不听风倒机
       if ((selectData['Fan1StartStatus'] == 1 && selectData['Fan2StartStatus'] == 0)) {
@@ -848,6 +868,15 @@
         top: 35px !important;
       }
     }
+    .button-box-disable{
+      border: 1px solid #65dbea !important;
+      &:hover {
+        background: none !important;
+      }
+      &:before {
+        background: linear-gradient(#5897c299, #4a92a899) !important;
+      }
+    }
   }
   .data-show-box {
     position: relative;

+ 11 - 8
src/views/vent/monitorManager/mainFanMonitor/main.threejs.ts

@@ -221,14 +221,10 @@ export const playAnimate = async (selectData, duration?) => {
   if (!mainWindObj) return;
   if (modalType === 'mainWindRect') {
     if (selectData) {
-      if (selectData.Fan1FreqHz !== undefined) {
-        // 主风机频率设置
-        mainWindObj.resetSmokeParam('front', selectData.Fan1FreqHz, duration);
-      }
-      if (selectData.Fan2FreqHz !== undefined) {
-        // 主风机频率设置
-        mainWindObj.resetSmokeParam('back', selectData.Fan2FreqHz, duration);
-      }
+      if (selectData['Fan1FreqHz'] == undefined || selectData['Fan1FreqHz'] == null) selectData['Fan1FreqHz'] = 50;
+      if (selectData['Fan2FreqHz'] == undefined || selectData['Fan2FreqHz'] == null) selectData['Fan2FreqHz'] = 50;
+      mainWindObj.resetSmokeParam('front', selectData.Fan1FreqHz, duration);
+      mainWindObj.resetSmokeParam('back', selectData.Fan2FreqHz, duration);
       if (selectData.Fan1StartStatus == 1) {
         // 主风机开启
         mainWindObj?.lookMotor('front', 'open', duration);
@@ -243,6 +239,10 @@ export const playAnimate = async (selectData, duration?) => {
           // 主风机反转
           mainWindObj.startGearAnimation('front', 'open', 'tubInversePath', selectData.Fan1FreqHz, duration);
           await mainWindObj.setSmokeDirection('front', 'tubInversePath');
+        } else {
+          // 默认主风机正转
+          mainWindObj.startGearAnimation('front', 'open', 'tubPositivePath', selectData.Fan1FreqHz, duration);
+          await mainWindObj.setSmokeDirection('front', 'tubPositivePath');
         }
 
         if (!mainWindObj?.frontSmoke?.frameId) mainWindObj?.frontSmoke?.startSmoke(duration);
@@ -264,6 +264,9 @@ export const playAnimate = async (selectData, duration?) => {
           // 主风机反转
           mainWindObj.startGearAnimation('back', 'open', 'tubInversePath', selectData.Fan2FreqHz, duration);
           await mainWindObj.setSmokeDirection('back', 'tubInversePath');
+        } else {
+          mainWindObj.startGearAnimation('back', 'open', 'tubPositivePath', selectData.Fan2FreqHz, duration);
+          await mainWindObj.setSmokeDirection('back', 'tubPositivePath');
         }
 
         if (!mainWindObj?.backSmoke?.frameId) mainWindObj?.backSmoke?.startSmoke(duration);

+ 16 - 13
src/views/vent/monitorManager/mainFanMonitor/mainWind.threejs.ts

@@ -82,14 +82,18 @@ class mainWindRect {
     if (!this.group.getObjectByName('monitorText3')) {
       const worldPosition = new THREE.Vector3();
       const fbmGroup = this.group?.getObjectByName('fbm') as THREE.Group;
-      fbmGroup?.getObjectByName('Box022')?.getWorldPosition(worldPosition);
-      const element = document.getElementById('fbm') as HTMLElement;
-      const mainCSS3D = new CSS3DObject(element);
-      mainCSS3D.name = 'monitorText3';
-      mainCSS3D.scale.set(0.07, 0.07, 0.07);
-      mainCSS3D.position.set(worldPosition.x + 20, worldPosition.y - 8, worldPosition.z - 20);
-      mainCSS3D.lookAt(worldPosition.x + 20, worldPosition.y - 0, worldPosition.z + 2);
-      this.group.add(mainCSS3D);
+      if (fbmGroup) {
+        fbmGroup?.getObjectByName('Box022')?.getWorldPosition(worldPosition);
+        const element = document.getElementById('fbm') as HTMLElement;
+        if (element) {
+          const mainCSS3D = new CSS3DObject(element);
+          mainCSS3D.name = 'monitorText3';
+          mainCSS3D.scale.set(0.07, 0.07, 0.07);
+          mainCSS3D.position.set(worldPosition.x + 20, worldPosition.y - 8, worldPosition.z - 20);
+          mainCSS3D.lookAt(worldPosition.x + 20, worldPosition.y - 0, worldPosition.z + 2);
+          this.group.add(mainCSS3D);
+        }
+      }
     }
   }
 
@@ -501,7 +505,6 @@ class mainWindRect {
       h();
     };
     if (flag === 'changeDirection') {
-
       if (gearDirection == -1 * gearObj.gear1Direction) {
         // 齿轮正在转,需要停止后再反方向转
         gsap.to(gearObj, {
@@ -728,10 +731,10 @@ class mainWindRect {
         const fbmGroup = this.group?.getObjectByName('fbm') as THREE.Group;
         const fcGroup = this.group?.getObjectByName('ztfj-fc') as THREE.Group;
         const dzpGroup = this.group?.getObjectByName('dzp') as THREE.Group;
-        ztfjGroup.position.z = ztfjGroup.position.z + 5;
-        fbmGroup.position.z = fbmGroup.position.z + 5;
-        fcGroup.position.z = fcGroup.position.z + 5;
-        dzpGroup.position.set(68.6, 4.2, 0);
+        if (ztfjGroup) ztfjGroup.position.z = ztfjGroup.position.z + 5;
+        if (fbmGroup) fbmGroup.position.z = fbmGroup.position.z + 5;
+        if (fcGroup) fcGroup.position.z = fcGroup.position.z + 5;
+        if (dzpGroup) dzpGroup.position.set(68.6, 4.2, 0);
 
         const mesh1 = ztfjGroup?.getObjectByName('TWO00'); //前
         const mesh2 = ztfjGroup?.getObjectByName('ONE00'); //后

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

@@ -33,6 +33,7 @@ export const bottomBtnList = ref([
 ]);
 export const monitorDataGroupNum1 = [1, 2, 3];
 export const monitorDataGroupNum2 = [4, 5];
+export const monitorDataGroupNum3 = [1,2,3,4];
 export const monitorDataGroupNum = ref(3)
 export const airCompressorState = ref([
   {

+ 1 - 0
src/views/vent/monitorManager/nitrogen/nitrogen.dishang.threejs.ts

@@ -237,6 +237,7 @@ class Nitrogen {
 
   mountedThree(monitorDataGroup, dom) {
     return new Promise((resolve) => {
+      debugger
       this.CSSCanvasContainer = document.querySelector(dom);
       if (this.CSSCanvasContainer) {
         this.css3dRender = new CSS3DRenderer() as CSS3DRenderer;

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

@@ -29,6 +29,7 @@ const mouseEvent = (event) => {
       if (modalType === 'compressor2') {
         compressorObj2?.mousedownModel.call(compressorObj2, intersects);
       }
+      console.log('摄像头控制信息', model?.orbitControls, model?.camera);
     });
   }
 };
@@ -56,11 +57,11 @@ const render = () => {
 /* 添加监控数据 */
 export const addText = () => {
   if (!compressorObj1) return;
-  if (modalType === 'compressor1') {
-    return compressorObj1.addCssText.call(compressorObj1);
-  } else if (modalType === 'compressor2') {
-    return compressorObj2.addCssText.call(compressorObj2);
-  }
+  // if (modalType === 'compressor1' && compressorObj1) {
+  //   return compressorObj1.addCssText;
+  // } else if (modalType === 'compressor2' && compressorObj2) {
+  //   return compressorObj2.addCssText;
+  // }
 };
 
 export const play = () => {
@@ -74,6 +75,7 @@ export const play = () => {
 
 // 切换风窗类型
 export const setModelType = (type) => {
+  debugger;
   modalType = type;
 
   if (group) {
@@ -112,8 +114,8 @@ export const setModelType = (type) => {
       newCameraPosition = { x: -1.7434040517387115, y: 46.41089142470955, z: 114.33388865672832 };
       newControlsPosition = { x: -1.6994314417499141, y: -12.38981035037152, z: 10.110013648346193 };
     } else if (group?.children.length == 5) {
-      newCameraPosition = { x: -1.2741159124866441, y: 46.04318455197148, z: 95.25814325750986 };
-      newControlsPosition = { x: -1.699431, y: -12.38981, z: -1.699431 };
+      newCameraPosition = { x: -0.4773363503066604, y: 48.162643926217974, z: 115.96473651982045 };
+      newControlsPosition = { x: -0.973402832301181, y: -19.990725369597676, z: 2.8781944582956025 };
     } 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 };
@@ -142,20 +144,26 @@ export const clearCssText = () => {
   }
 };
 
-export const mountedThree = (monitorDataGroupNum1, monitorDataGroupNum2) => {
+export const mountedThree = (monitorDataGroupNum1?, monitorDataGroupNum2?) => {
   return new Promise(async (resolve) => {
+    debugger;
     model = new UseThree('#compressor3D');
     model.setEnvMap('test1');
     model.renderer.toneMappingExposure = 1.0;
     model.canvasContainer?.addEventListener('mousedown', mouseEvent);
     model.canvasContainer?.addEventListener('pointerup', mouseUp);
-    compressorObj1 = new Nitrogen(model);
-    await compressorObj1.mountedThree(monitorDataGroupNum1, '#compressorCss3D');
-    compressorObj1.modelName = 'compressor1';
 
-    compressorObj2 = new Nitrogen(model);
-    await compressorObj2.mountedThree(monitorDataGroupNum2, '#compressorCss3D1');
-    compressorObj2.modelName = 'compressor2';
+    if (monitorDataGroupNum1) {
+      compressorObj1 = new Nitrogen(model);
+      await compressorObj1.mountedThree(monitorDataGroupNum1, '#compressorCss3D');
+      compressorObj1.modelName = 'compressor1';
+    }
+    if (monitorDataGroupNum2) {
+      compressorObj2 = new Nitrogen(model);
+      await compressorObj2.mountedThree(monitorDataGroupNum2, '#compressorCss3D1');
+      compressorObj2.modelName = 'compressor2';
+    }
+    debugger
     resolve(null);
     // render();
     model.animate();

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

@@ -367,7 +367,7 @@ function playAnimation(handlerState) {
   }
 
   if (globalConfig?.simulatedPassword) {
-    handleOK(globalConfig?.simulatedPassword, handlerState + '')
+    handleOK('', handlerState + '')
   }
 };
 

+ 1 - 1
src/views/vent/monitorManager/windowMonitor/modal.vue

@@ -56,7 +56,7 @@
   function handleOk() {
 
     if(globalConfig?.simulatedPassword){
-      emit('handleOk', globalConfig?.simulatedPassword, type.value, area.value);
+      emit('handleOk', '', type.value, area.value);
     }else{
       emit('handleOk', passWord.value, type.value, area.value);
     }

+ 10 - 5
src/views/vent/monitorManager/windrectMonitor/duishe.threejs.ts

@@ -279,11 +279,16 @@ class dsWindRect {
         duration: Math.abs(dsTanTou['position']['y'] + 0.32) * 21,
         overwrite: true,
         onComplete: function () {
-          gsap.to(dsTanTou['position'], {
-            y: 0.45,
-            duration: 0.77 * 21,
-            overwrite: true,
-          });
+          setTimeout(() => {
+            gsap.to(dsTanTou['position'], {
+              y: 0.45,
+              duration: 0.77 * 21,
+              overwrite: true,
+              // onComplete: function () {
+              //   _this.isRun = false;
+              // },
+            });
+          }, 5000);
         },
       });
       // setTimeout(() => {

+ 11 - 3
src/views/vent/monitorManager/windrectMonitor/index.vue

@@ -266,7 +266,7 @@
   let deviceRunState = '', tanTouRunState= '';
   // 根据3个点位分别执行动画
   function palyAnimation(selectData) {
-    if (selectData.deviceType == "windrect_fold") {
+    if (selectData.deviceType == "windrect_normal") {
       if (selectData['apparatusRun'] == 1) {
         const flag = selectData.sign == 0 ? 'up' : selectData.sign == 1 ? 'center' : selectData.sign == 2 ? 'down' : null
         if (flag) play(flag);
@@ -497,7 +497,6 @@
     if (selectData.deviceType == "windrect_ds") {
       if (selectData['apparatusRun'] == 1) {
         if(!deviceRunState) {
-          
           deviceRunState = 'start'
           play('start')
         }
@@ -523,7 +522,7 @@
         play('up')
       }, 10000)
     }
-    if(selectData.deviceType == 'windrect_fold') {
+    if(selectData.deviceType == 'windrect_normal') {
       setTimeout(() => {
         play('up')
       }, 0)
@@ -546,11 +545,17 @@
   function clearPlay() {
     modalType.value = 'autoClear'
     modalIsShow.value = true
+    if (globalConfig?.simulatedPassword) {
+      controlDevice('', modalType.value)
+    }
   }
 
   function startRun() {
     modalType.value = 'sing'
     modalIsShow.value = true
+    if (globalConfig?.simulatedPassword) {
+      controlDevice('', modalType.value)
+    }
   }
 
   async function getCamera() {
@@ -623,6 +628,9 @@
   function handleOk() {
     modalType.value = 'multiple'
     modalIsShow.value = true
+    if (globalConfig?.simulatedPassword) {
+      controlDevice('', modalType.value)
+    }
   };
 
   /* 打开一键测风弹窗 */

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

@@ -438,8 +438,8 @@
     // background: #ffffff !important;
     // left: 0px !important;
     // backdrop-filter: blur(50px);
-    background: transparent !important;
-    backdrop-filter: blur(50px);
+    // background: transparent !important;
+    // backdrop-filter: blur(50px);
 
 
     .@{ventSpace}-select-item-option-selected,