2 Commits ec7d222c3e ... 746ed5e8ed

Author SHA1 Message Date
  houzekong 746ed5e8ed [Feat 0000] 防火门模型对接及控制对接 2 days ago
  houzekong b3b8050832 [Fix 0000] 文件格式问题修复 2 days ago

+ 18 - 10
src/views/vent/home/configurable/components/header.vue

@@ -1,20 +1,29 @@
 <!-- eslint-disable vue/multi-word-component-names -->
 <template>
   <!-- Header部分 -->
-  <div v-if="headerConfig.show" class="w-100% flex costume-header" :class="headerConfig.selector.toggleIcon ? 'costume-headerToggleIcon' : 'costume-header' ">
+  <div
+    v-if="headerConfig.show"
+    class="w-100% flex costume-header"
+    :class="headerConfig.selector.toggleIcon ? 'costume-headerToggleIcon' : 'costume-header'"
+  >
     <!-- 选择下拉框,自动填充剩余空间,这种实现是因为 Select 不支持 suffix -->
     <Dropdown
       v-if="headerConfig.selector.show"
-      class="flex-grow-1 "
+      class="flex-grow-1"
       :class="!headerConfig.selector.toggleIcon ? 'costume-header_left' : ''"
       :trigger="['click']"
       :bordered="false"
       @open-change="visible = $event"
     >
       <div class="flex-basis-100% flex flex-items-center" @click.prevent>
-         <img style="margin-right:10px" v-if="headerConfig.selector.toggleIcon" src="@/assets/images/home-container/configurable/electroChamper/2-2.png" alt=""></img>
+        <img
+          style="margin-right: 10px"
+          v-if="headerConfig.selector.toggleIcon"
+          src="@/assets/images/home-container/configurable/electroChamper/2-2.png"
+          alt=""
+        />
         <SwapOutlined v-else class="w-30px" />
-       
+
         <div class="w-100px flex-grow-1 overflow-hidden whitespace-nowrap text-ellipsis">
           {{ selectedDeviceLabel }}
         </div>
@@ -80,15 +89,14 @@
 <style scoped>
   @import '/@/design/theme.less';
 
-
   .costume-header {
     height: 30px;
     background-image: linear-gradient(90deg, var(--vent-base-light-bg-opcity), transparent 20%, transparent 80%, var(--vent-base-light-bg-opcity));
   }
-  .costume-headerToggleIcon{
-     height: 30px;
-     background: url('@/assets/images/home-container/configurable/electroChamper/2-1.png') ;
-     background-size: 100% 100%;
+  .costume-headerToggleIcon {
+    height: 30px;
+    background: url('@/assets/images/home-container/configurable/electroChamper/2-1.png');
+    background-size: 100% 100%;
   }
   .costume-header_left {
     border-left: 3px solid;
@@ -101,7 +109,7 @@
     border-image-source: linear-gradient(to top, #00000033, var(--vent-base-light-bg), #00000033);
     border-image-slice: 1;
   }
-  img{
+  img {
     width: 16px;
     height: 16px;
     margin-left: 8px;

+ 22 - 8
src/views/vent/monitorManager/fireDoorMonitor/fireDoor.threejs.ssl.ts

@@ -68,7 +68,7 @@ class FireDoorSsl {
       return;
     }
     if (this.mixers && this.fmClock.running) {
-      this.mixers.update(2);
+      this.mixers.update(1);
     }
   }
 
@@ -144,13 +144,6 @@ class FireDoorSsl {
           this.clipActionArr.juanlianmen.timeScale = timeScale;
           // this.clipActionArr.juanlianmen.clampWhenFinished = true;
           this.clipActionArr.juanlianmen.play();
-          if (!this.clipActionArr.gaiban) return;
-          this.clipActionArr.gaiban.paused = true;
-          this.clipActionArr.gaiban.reset();
-          this.clipActionArr.gaiban.time = 0.1;
-          this.clipActionArr.gaiban.timeScale = timeScale;
-          // this.clipActionArr.gaiban.clampWhenFinished = true;
-          this.clipActionArr.gaiban.play();
           this.fmClock.start();
 
           // 显示打开前门文字
@@ -166,6 +159,27 @@ class FireDoorSsl {
           this.clipActionArr.juanlianmen.timeScale = -timeScale;
           // this.clipActionArr.juanlianmen.clampWhenFinished = true;
           this.clipActionArr.juanlianmen.play();
+          this.fmClock.start();
+
+          if (this.damperOpenMesh) this.damperOpenMesh.visible = false;
+        };
+        break;
+      case 3: // 打开盖板
+        handler = () => {
+          if (!this.clipActionArr.gaiban) return;
+          this.clipActionArr.gaiban.paused = true;
+          this.clipActionArr.gaiban.reset();
+          this.clipActionArr.gaiban.time = 0.1;
+          this.clipActionArr.gaiban.timeScale = timeScale;
+          // this.clipActionArr.gaiban.clampWhenFinished = true;
+          this.clipActionArr.gaiban.play();
+          this.fmClock.start();
+
+          if (this.damperOpenMesh) this.damperOpenMesh.visible = false;
+        };
+        break;
+      case 4: // 关闭盖板
+        handler = () => {
           if (!this.clipActionArr.gaiban) return;
           this.clipActionArr.gaiban.paused = true;
           this.clipActionArr.gaiban.reset(); //

+ 7 - 3
src/views/vent/monitorManager/fireDoorMonitor/fireDoor.threejs.ts

@@ -89,8 +89,6 @@ export const setModelType = (type) => {
     fireDoorRed.resetAnimate();
   }
 
-  fhmType = type;
-
   const fhmConfigurations = {
     fireDoor: {
       render: fireDoor ? () => fireDoor.render() : null,
@@ -118,6 +116,10 @@ export const setModelType = (type) => {
     },
   };
 
+  const oldConfig = fhmConfigurations[fhmType];
+  const config = fhmConfigurations[type];
+  fhmType = type;
+
   if (type == 'fireDoor' || type == 'fireDoorF') {
     model.orbitControls.maxPolarAngle = Math.PI / 2;
     model.orbitControls.minPolarAngle = Math.PI / 3;
@@ -133,9 +135,11 @@ export const setModelType = (type) => {
     model.orbitControls.update();
   }
 
-  const config = fhmConfigurations[fhmType];
   const oldCameraPosition = { x: -1000, y: 100, z: 500 };
   return new Promise((resolve) => {
+    if (oldConfig && oldConfig.group) {
+      model.scene?.remove(oldConfig.group);
+    }
     if (config && config.group) {
       model.startAnimation = config.render;
       group = config.group;

+ 47 - 9
src/views/vent/monitorManager/fireDoorMonitor/index.vue

@@ -6,9 +6,14 @@
   <div class="scene-box">
     <div class="top-box">
       <div class="top-center row">
-        <div v-if="hasPermission('btn:control')" class="button-box" @click="setControl('frontGateOpen_S', '打开')">打开防火门</div>
-        <div v-if="hasPermission('btn:control')" class="button-box" @click="setControl('frontGateClose_S', '关闭')">关闭防火门</div>
-        <div v-if="hasPermission('btn:stopControl')" class="button-box" @click="setControl('frontGateStop_S', '停止')">关闭防火门</div>
+        <template v-if="selectData.modelType == 'fireDoorSsl'">
+          <div v-if="hasPermission('btn:control')" class="button-box" @click="() => modalContext1.openModal()"> 防火门控制 </div>
+        </template>
+        <template v-else>
+          <div v-if="hasPermission('btn:control')" class="button-box" @click="setControl('frontGateOpen_S', '打开')">打开防火门</div>
+          <div v-if="hasPermission('btn:control')" class="button-box" @click="setControl('frontGateClose_S', '关闭')">关闭防火门</div>
+          <div v-if="hasPermission('btn:stopControl')" class="button-box" @click="setControl('frontGateStop_S', '停止')">停止</div>
+        </template>
       </div>
       <!-- 控制模式 -->
       <div class="top-right row">
@@ -181,6 +186,28 @@
     @handle-cancel="handleCancel"
   />
   <DeviceBaseInfo @register="registerModal" :device-type="selectData['deviceType']" />
+  <BasicModal @register="registerModal1">
+    <div class="flex justify-around mt-20px mb-20px">
+      <div>防火门打开</div>
+      <div>防火门关闭</div>
+      <div>停止</div>
+    </div>
+    <div class="flex justify-around mt-20px mb-20px">
+      <Button type="primary" class="w-120px" @click="setControl('frontGateOpen_S', true)">卷帘门开启</Button>
+      <Button type="primary" class="w-120px" @click="setControl('frontGateClose_S', true)">卷帘门关闭</Button>
+      <Button type="primary" class="w-120px" @click="setControl('frontGateStop_S', true)">卷帘门停止</Button>
+    </div>
+    <div class="flex justify-around mt-20px mb-20px">
+      <Button type="primary" class="w-120px" @click="setControl('MBOpen_S', true)">皮带密闭开启</Button>
+      <Button type="primary" class="w-120px" @click="setControl('MBClose_S', true)">皮带密闭关闭</Button>
+      <Button type="primary" class="w-120px" @click="setControl('MBStop_S', true)">皮带密闭停止</Button>
+    </div>
+    <div class="flex justify-around mt-20px mb-20px">
+      <Button type="primary" class="w-120px" @click="setControl('AllOpen_S', true)">同时开启</Button>
+      <Button type="primary" class="w-120px" @click="setControl('AllClose_S', true)">同时关闭</Button>
+      <Button type="primary" class="w-120px" @click="setControl('AllStop_S', true)">同时停止</Button>
+    </div>
+  </BasicModal>
 </template>
 
 <script setup lang="ts">
@@ -193,13 +220,13 @@
   import DeviceBaseInfo from '../comment/components/DeviceBaseInfo.vue';
   import { mountedThree, play, destroy, setModelType } from './fireDoor.threejs';
   import { deviceControlApi } from '/@/api/vent/index';
-  import { message } from 'ant-design-vue';
+  import { message, Button } from 'ant-design-vue';
   import { list, getTableList } from './fireDoor.api';
   import lodash from 'lodash';
   import { setDivHeight } from '/@/utils/event';
   import { BorderBox8 as DvBorderBox8 } from '@kjgl77/datav-vue3';
   import { useRouter } from 'vue-router';
-  import { useModal } from '/@/components/Modal';
+  import { useModal, BasicModal } from '/@/components/Modal';
   import { useCamera } from '/@/hooks/system/useCamera';
   import { usePermission } from '/@/hooks/web/usePermission';
   import { getDictItems } from '/@/api/common/api';
@@ -232,6 +259,7 @@
 
   const deviceBaseList = ref([]); // 设备基本信息
   const [registerModal, { openModal, closeModal }] = useModal();
+  const [registerModal1, modalContext1] = useModal();
 
   const { getCamera, removeCamera } = useCamera();
 
@@ -391,12 +419,12 @@
   let isOpenRunning = false; //开关门动作是否在进行
   /** 开关门动画调用 */
   let isdoorOpenRunning = false; //开关门动作是否在进行
-  // let isMidCloseRunning = false; //中间门动作是否在进行
+  let isMBRunning = false; //密闭门动作是否在进行
   // 0 关闭 1 正在打开 2 打开 3正在关闭
   let doorDeviceState = 0; //记录设备状态,为了与下一次监测数据做比较
   function monitorAnimation(selectData) {
     const timeScale = 0.005;
-    // 打开
+    // 打开(普通门或卷帘门)
     if (selectData.frontGateOpen == '1' && !isdoorOpenRunning) {
       isdoorOpenRunning = true;
       if (doorDeviceState != 1) {
@@ -406,7 +434,7 @@
         doorIsOpen.value = true;
       }
     }
-    // 关闭
+    // 关闭(普通门或卷帘门)
     if (selectData.frontGateOpen == '0' && isdoorOpenRunning) {
       isdoorOpenRunning = false;
       if (doorDeviceState != 0) {
@@ -416,6 +444,16 @@
         doorIsOpen.value = false;
       }
     }
+    // 皮带密闭开
+    if (selectData.MBOpen == '1' && !isMBRunning) {
+      isMBRunning = true;
+      play(3, timeScale);
+    }
+    // 皮带密闭关
+    if (selectData.MBOpen == '0' && isMBRunning) {
+      isMBRunning = false;
+      play(4, timeScale);
+    }
   }
 
   function handleCancel() {
@@ -449,7 +487,7 @@
     destroy();
   });
 </script>
-,
+
 <style lang="less" scoped>
   @import '/@/design/vent/modal.less';
   .scene-box {