Jelajahi Sumber

fix:定时器调用bug处理

chenzhen2 1 tahun lalu
induk
melakukan
e153c5fbb6

+ 1 - 0
src/styles/index.scss

@@ -193,6 +193,7 @@ div:focus {
 
 
 .switch-btn {
+  margin-top: 2px;
   width: 48px !important;
   height: 24px !important;
 

+ 8 - 2
src/views/envmonitor/components/Air/index.vue

@@ -224,6 +224,7 @@ export default defineComponent({
     const domAirOpeen: any = false;
     const proxyData = reactive({
       loadingAir: false,
+      distroyFlag: false,
       temperature: props.temperature,
       userIsControl: props.userIsControl,
       forceOverTimeFlag: props.forceOverTimeFlag,
@@ -295,7 +296,9 @@ export default defineComponent({
           clearTimeout(proxyData.airTimer);
         }
         proxyData.airTimer = setTimeout(function () {
-          proxyData.getAirInfo();
+          if (!proxyData.distroyFlag) {
+            proxyData.getAirInfo();
+          }
         }, timerLong);
       },
       // 定时调文案的接口
@@ -533,8 +536,9 @@ export default defineComponent({
           // 空间id改变的重新获取值调用接口
           // 定时调空间信息
           proxyData.spaceId = newProps[1];
+          proxyData.distroyFlag = false;
           // proxyData.getAirInfoToTimer(0);
-          proxyData.getAirInfo()
+          proxyData.getAirInfo();
           // proxyData.getEquipmentListHttp();
         }
         if (newProps[0]) {
@@ -549,6 +553,7 @@ export default defineComponent({
       }
     );
     onBeforeUnmount(() => {
+      proxyData.distroyFlag = true;
       if (proxyData.airTimer) {
         clearTimeout(proxyData.airTimer);
         proxyData.airTimer = null;
@@ -561,6 +566,7 @@ export default defineComponent({
     onMounted(() => {
       // 获取空调信息
       proxyData.firstLoadingAir = true;
+      proxyData.distroyFlag = false;
       proxyData.getAirInfo();
       proxyData.getEquipmentListHttp();
     });

+ 20 - 7
src/views/envmonitor/components/Air/manualIndex.vue

@@ -209,7 +209,7 @@
             {{ childItem.localName }}
           </div>
           <img
-            :style="{ opacity: childItem.isOpen ? '1' : '0.3' }"
+            :class="childItem.isOpen ? '' : 'img-disabled'"
             :src="lightColorImg"
             alt=""
           />
@@ -337,6 +337,7 @@ export default defineComponent({
       showAirVolumeBtn: false, // 是否展示风量调节按钮
       showDialog: false,
       airTimer: airTimer,
+      distroyFlag: false,
       airSetText: {
         // 空调反馈文案
         notice: "",
@@ -505,9 +506,11 @@ export default defineComponent({
           clearTimeout(proxyData.airTimer);
           proxyData.airTimer = null;
         }
-        proxyData.airTimer = setTimeout(function () {
-          if (!proxyData.loadingNum) {
-            proxyData.getAirInfo();
+        proxyData.airTimer = setTimeout(() => {
+          if (!proxyData.distroyFlag) {  // 销毁是同事销毁http请求
+            if (!proxyData.loadingNum) {
+              proxyData.getAirInfo();
+            }
           }
         }, timerLong);
       },
@@ -997,6 +1000,7 @@ export default defineComponent({
         if (newProps[1] && newProps[1] != oldProps[1]) {
           proxyData.spaceId = newProps[1];
           proxyData.swiperIinit = false;
+          proxyData.distroyFlag = false;
           proxyData.getAirInfoToTimer(0);
         }
       },
@@ -1009,10 +1013,13 @@ export default defineComponent({
       if (proxyData.airTimer) {
         clearTimeout(proxyData.airTimer);
         proxyData.airTimer = null;
+        proxyData.distroyFlag = true;
+        console.log("定时器销毁了--");
       }
     });
     onMounted(() => {
       proxyData.spaceId = props.spaceId;
+      proxyData.distroyFlag = false;
       proxyData.getAirInfoToTimer(0);
       // 获取空调信息
     });
@@ -1132,7 +1139,7 @@ export default defineComponent({
     padding-bottom: 16px;
     .top-nav {
       height: 28px;
-      line-height: 28px;
+      // line-height: 28px;
       border-radius: 21px;
       background: #f1f4f6;
       span {
@@ -1142,9 +1149,10 @@ export default defineComponent({
         font-style: normal;
         font-weight: 400;
         font-size: 14px;
-        padding: 5px 8px;
+        // padding: 5px 8px;
+        padding: 0px 8px;
         height: 28px;
-        line-height: 14px;
+        line-height: 28px;
         color: #424c59;
       }
       .nav-active {
@@ -1255,8 +1263,13 @@ export default defineComponent({
         img {
           width: 20px;
           height: 20px;
+          opacity: 1;
           cursor: pointer;
         }
+        .img-disabled {
+          opacity: 0.3;
+          cursor: no-drop;
+        }
       }
     }
   }

+ 28 - 6
src/views/envmonitor/components/FloorHeating/index.vue

@@ -93,7 +93,7 @@
             </div>
             <img
               @click="showFloorHeating(item)"
-              :style="{ opacity: item.switch ? '1' : '0.3' }"
+              :class="item.switch ? '' : 'img-disabled'"
               :src="lightColorImg"
               alt=""
             />
@@ -125,7 +125,7 @@ import {
   setallLampHttp,
   setSpaceCondtioners,
 } from "@/apis/envmonitor";
-import { parseImgUrl, setQueryConfig } from "@/utils";
+import { getRelNowTime, parseImgUrl, setQueryConfig } from "@/utils";
 import { type } from "os";
 import { onDeactivated } from "vue";
 import { AnyMxRecord } from "dns";
@@ -142,6 +142,10 @@ export default defineComponent({
       type: String,
       default: () => "",
     },
+    showFloorBox: {
+      type: Boolean,
+      default: () => false,
+    },
     userIsControl: {
       type: Boolean,
       default: () => false,
@@ -163,12 +167,14 @@ export default defineComponent({
     let floorHeathingStatus: any = null;
     const timeOut: any = null;
     const proxyData = reactive({
+      distroyFlag: false,
       seviceEquipmentList: props.seviceEquipmentList,
       forceOverTimeFlag: props.forceOverTimeFlag,
       spaceId: props.spaceId,
       heatingData: heatingData,
       isOpen: false,
       parseImgUrl: parseImgUrl,
+      showFloorBox: props.showFloorBox,
       timeOut: timeOut,
       loadingFlag: false,
       floorHeatingList: floorHeatingList,
@@ -442,9 +448,15 @@ export default defineComponent({
       },
       // 定时刷新接口
       startfloorHeathingStatus(timerLen: any = 15000) {
+        let nowTime: any = getRelNowTime();
+        if (timerLen == 15000 && nowTime < "070000" && nowTime > "200000") {
+          timerLen = 300000;
+        }
         proxyData.clearFloorHeathingTimer();
         proxyData.floorHeathingStatus = setTimeout(() => {
-          proxyData.getFloorHeatingList();
+          if (!proxyData.distroyFlag) {
+            proxyData.getFloorHeatingList();
+          }
         }, timerLen);
       },
     });
@@ -454,11 +466,13 @@ export default defineComponent({
         if (newProps[0]) {
           proxyData.forceOverTimeFlag = newProps[0].forceOverTimeFlag;
           proxyData.seviceEquipmentList = newProps[0].seviceEquipmentList;
+          proxyData.showFloorBox = newProps[0].showFloorBox;
         }
 
         if (newProps[1] && oldProps[1] && newProps[1] != oldProps[1]) {
           // 空间id改变的重新获取值调用接口
           console.log("地暖的spaceId变化了");
+          proxyData.distroyFlag = false;
           // 清除原始数据
           proxyData.floorHeatingList = [];
           proxyData.heatingData = {};
@@ -476,11 +490,13 @@ export default defineComponent({
     );
     onBeforeUnmount(() => {
       console.log("灯的组件销毁了--");
+      proxyData.distroyFlag = true;
       proxyData.clearFloorHeathingTimer();
     });
 
     onMounted(() => {
       // proxyData.clearFloorHeathingTimer();
+      proxyData.distroyFlag = false;
       proxyData.getFloorHeatingList();
     });
     return {
@@ -588,10 +604,11 @@ export default defineComponent({
   display: flex;
   justify-content: space-between;
   padding: 8px 20px;
+  // margin-bottom: 16px;
   padding-bottom: 16px;
   .top-nav {
     height: 28px;
-    line-height: 28px;
+    // line-height: 28px;
     border-radius: 21px;
     background: #f1f4f6;
     span {
@@ -601,9 +618,10 @@ export default defineComponent({
       font-style: normal;
       font-weight: 400;
       font-size: 14px;
-      padding: 5px 8px;
+      // padding: 5px 8px;
+      padding: 0px 8px;
       height: 28px;
-      line-height: 14px;
+      line-height: 28px;
       color: #424c59;
     }
     .nav-active {
@@ -980,6 +998,10 @@ export default defineComponent({
       height: 20px;
       cursor: pointer;
     }
+    .img-disabled {
+      opacity: 0.3;
+      cursor: no-drop;
+    }
   }
 }
 </style>

+ 7 - 1
src/views/envmonitor/components/Light/index.vue

@@ -72,7 +72,7 @@
             </div>
             <img
               v-if="item.bright || item.colorTemperature"
-              :style="{ opacity: item.switch ? '1' : '0.3' }"
+              :class="item.switch ? '' : 'img-disabled'"
               :src="lightColorImg"
               alt=""
             />
@@ -154,6 +154,7 @@ export default defineComponent({
     let lightParams: any = [];
     let statusInterval: any = null;
     const proxyData = reactive({
+      distroyFlag: false,
       seviceEquipmentList: props.seviceEquipmentList,
       showLight: props.showLight,
       spaceId: props.spaceId,
@@ -590,6 +591,7 @@ export default defineComponent({
     );
     onBeforeUnmount(() => {
       console.log("灯的组件销毁了--");
+      proxyData.distroyFlag = true;
       proxyData.clearLightStatusTimer();
     });
     onMounted(() => {
@@ -796,6 +798,10 @@ export default defineComponent({
       height: 20px;
       cursor: pointer;
     }
+    .img-disabled {
+      opacity: 0.3;
+      cursor: no-drop;
+    }
   }
 }
 </style>

+ 15 - 7
src/views/envmonitor/components/Socket/index.vue

@@ -94,11 +94,11 @@ export default defineComponent({
       type: Number,
       default: () => 0,
     },
-    // hasAir: {
-    //   // 有无空调
-    //   type: Boolean,
-    //   default: () => false,
-    // },
+    showSocket: {
+      // 有无空调
+      type: Boolean,
+      default: () => false,
+    },
     airVolumes: {
       // 风量信息
       type: Array,
@@ -139,6 +139,8 @@ export default defineComponent({
     let loadingTimer: any = null;
     const proxyData = reactive({
       parseImgUrl: parseImgUrl,
+      distroyFlag: false,
+      showSocket: props.showSocket,
       navType: "all",
       projectId: props.projectId,
       spaceId: props.spaceId,
@@ -187,8 +189,10 @@ export default defineComponent({
           proxyData.socketTimer = null;
         }
         proxyData.socketTimer = setTimeout(function () {
-          if (!proxyData.loadingNum) {
-            proxyData.querySocketInfo();
+          if (!proxyData.distroyFlag) {
+            if (!proxyData.loadingNum) {
+              proxyData.querySocketInfo();
+            }
           }
         }, timerLong);
       },
@@ -290,8 +294,10 @@ export default defineComponent({
       [() => props, () => props.spaceId],
       (newProps: any, oldProps: any) => {
         if (newProps[0]) {
+          proxyData.showSocket = newProps[0].showSocket;
         }
         if (newProps[1] && newProps[1] != oldProps[1]) {
+          proxyData.distroyFlag = false;
           proxyData.spaceId = newProps[1];
           proxyData.querySocketInfo();
         }
@@ -302,10 +308,12 @@ export default defineComponent({
       }
     );
     onBeforeUnmount(() => {
+      proxyData.distroyFlag = true;
       clearTimeout(proxyData.socketTimer);
       proxyData.socketTimer = null;
     });
     onMounted(() => {
+      proxyData.distroyFlag = false;
       proxyData.querySocketInfo(1);
     });
     return {

+ 42 - 22
src/views/envmonitor/index.vue

@@ -212,6 +212,7 @@
       <floor-heating
         v-if="spaceInfo.spaceId && spaceExistenceDevice.floorHeating"
         :forceOverTimeFlag="forceOverTimeFlag"
+        :showFloorBox="spaceExistenceDevice.floorHeating"
         :seviceEquipmentList="seviceEquipmentList"
         @triggerWork="triggerWork"
         @showFloorHeating="showFloorHeating"
@@ -260,6 +261,7 @@
 
       <Socket
         v-if="spaceInfo.spaceId && spaceExistenceDevice.socket"
+        :showSocket="spaceExistenceDevice.socket"
         :spaceId="spaceInfo.spaceId"
         :projectId="projectId"
       ></Socket>
@@ -1577,9 +1579,17 @@ export default defineComponent({
         proxyData.headerInfo.tipText = "选择工作结束时间";
         proxyData.headerInfo.tipTextSwatch = true;
       },
+      clearInterValEquiment() {
+        clearInterval(proxyData.equimentsTimer);
+        proxyData.equimentsTimer = null;
+      },
       equimentsTimer: equimentsTimer,
       // 定时查空间下面的展示设备
-      setEquimentsTimer() {},
+      setEquimentsTimer() {
+        proxyData.equimentsTimer = setInterval(() => {
+          proxyData.getEquipments();
+        }, 3600000);
+      },
       // 获取空间下的设备信息
       getEquipments() {
         let params: { spaceId: string } = {
@@ -1587,32 +1597,41 @@ export default defineComponent({
           // projectId: proxyData.projectId,
         };
         let queryParams: any = setQueryConfig(params);
-        getSpaceEquipType(queryParams).then((res) => {
-          let resData: any = res;
-          if (resData.result === "success") {
-            let data: any = resData?.data ?? [];
-            for (let key in proxyData.spaceExistenceDevice) {
-              let flag: any = false;
-              for (let i = 0; i < data.length; i++) {
-                if (key == data[i]) {
-                  flag = true;
+        getSpaceEquipType(queryParams)
+          .then((res) => {
+            let resData: any = res;
+            if (resData.result === "success") {
+              let data: any = resData?.data ?? [];
+              for (let key in proxyData.spaceExistenceDevice) {
+                let flag: any = false;
+                for (let i = 0; i < data.length; i++) {
+                  if (key == data[i]) {
+                    flag = true;
+                  }
                 }
+                proxyData.spaceExistenceDevice[key] = flag;
+              }
+              // app端底部的导航判断
+              if (proxyData.spaceExistenceDevice.light) {
+                proxyData.navList[1].noShow = true;
+              } else {
+                proxyData.navList[1].noShow = false;
+              }
+              if (proxyData.spaceExistenceDevice.curtain) {
+                proxyData.navList[2].noShow = true;
+              } else {
+                proxyData.navList[2].noShow = false;
               }
-              proxyData.spaceExistenceDevice[key] = flag;
             }
-            // app端底部的导航判断
-            if (proxyData.spaceExistenceDevice.light) {
-              proxyData.navList[1].noShow = true;
-            } else {
-              proxyData.navList[1].noShow = false;
+            if (!proxyData.equimentsTimer) {
+              proxyData.setEquimentsTimer();
             }
-            if (proxyData.spaceExistenceDevice.curtain) {
-              proxyData.navList[2].noShow = true;
-            } else {
-              proxyData.navList[2].noShow = false;
+          })
+          .catch(() => {
+            if (!proxyData.equimentsTimer) {
+              proxyData.setEquimentsTimer();
             }
-          }
-        });
+          });
       },
       // 时间格式转换
       hourMiChange(tempStr: number) {
@@ -2128,6 +2147,7 @@ export default defineComponent({
     });
     onBeforeUnmount(() => {
       proxyData.clearAll();
+      proxyData.clearInterValEquiment();
       clearInterval(proxyData.dateInter);
       clearTimeout(proxyData.cusServiceTimer);
       clearTimeout(proxyData.weatherTimer);