From f85006844550bd25c98fcbe841b903ff4d98761e Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 20 Jan 2026 09:06:50 +0800
Subject: [PATCH] feat:部分处理

---
 applications/drone-command/src/views/job/jobinfo.vue                         |   12 +++++-
 applications/drone-command/src/page/index/top/top-full.vue                   |   13 ++++++
 applications/drone-command/src/page/login/index.vue                          |   10 ++++
 applications/drone-command/src/utils/cesium/DrawPolygon.js                   |    1 
 applications/drone-command/src/views/layerManagement/components/utils.js     |    1 
 applications/drone-command/src/page/lock/index.vue                           |   10 ++++
 applications/drone-command/src/utils/util.js                                 |   25 ++++++------
 applications/drone-command/src/mac/index.vue                                 |    7 +++
 applications/drone-command/src/views/layerManagement/index.vue               |    8 ++-
 applications/drone-command/src/views/dataCenter/components/dataCenterMap.vue |    8 +++-
 10 files changed, 72 insertions(+), 23 deletions(-)

diff --git a/applications/drone-command/src/mac/index.vue b/applications/drone-command/src/mac/index.vue
index 0d7f386..675df91 100644
--- a/applications/drone-command/src/mac/index.vue
+++ b/applications/drone-command/src/mac/index.vue
@@ -69,6 +69,7 @@
     return {
       app: false,
       timeString: '',
+      timeTimer: null,
     }
   },
   computed: {
@@ -116,6 +117,12 @@
     this.startTimer()
     this.$store.dispatch('GetMenu')
   },
+  beforeDestroy () {
+    if (this.timeTimer) {
+      clearInterval(this.timeTimer)
+      this.timeTimer = null
+    }
+  },
   methods: {
     switchTheme () {
       this.$store.commit('SET_THEME_NAME', '')
diff --git a/applications/drone-command/src/page/index/top/top-full.vue b/applications/drone-command/src/page/index/top/top-full.vue
index 099d698..cec6ea3 100644
--- a/applications/drone-command/src/page/index/top/top-full.vue
+++ b/applications/drone-command/src/page/index/top/top-full.vue
@@ -6,11 +6,22 @@
 import { fullscreenToggel, listenfullscreen } from 'utils/util';
 
 export default {
+  data() {
+    return {
+      fullscreenCleanup: null,
+    };
+  },
   computed: {
     ...mapGetters(['isFullScren']),
   },
   mounted() {
-    listenfullscreen(this.setScreen);
+    this.fullscreenCleanup = listenfullscreen(this.setScreen);
+  },
+  beforeDestroy() {
+    if (this.fullscreenCleanup) {
+      this.fullscreenCleanup();
+      this.fullscreenCleanup = null;
+    }
   },
   methods: {
     setScreen() {
diff --git a/applications/drone-command/src/page/lock/index.vue b/applications/drone-command/src/page/lock/index.vue
index 2215769..9b65ab3 100644
--- a/applications/drone-command/src/page/lock/index.vue
+++ b/applications/drone-command/src/page/lock/index.vue
@@ -45,6 +45,7 @@
   data() {
     return {
       time: '',
+      timeTimer: null,
       passwd: '',
       passwdError: false,
       pass: false,
@@ -52,10 +53,17 @@
   },
   created() {
     this.getTime();
-    setInterval(() => {
+    if (this.timeTimer) clearInterval(this.timeTimer);
+    this.timeTimer = setInterval(() => {
       this.getTime();
     }, 1000);
   },
+  beforeDestroy() {
+    if (this.timeTimer) {
+      clearInterval(this.timeTimer);
+      this.timeTimer = null;
+    }
+  },
   mounted() {},
   computed: {
     ...mapGetters(['userInfo', 'tag', 'lockPasswd']),
diff --git a/applications/drone-command/src/page/login/index.vue b/applications/drone-command/src/page/login/index.vue
index 4453760..ad005da 100644
--- a/applications/drone-command/src/page/login/index.vue
+++ b/applications/drone-command/src/page/login/index.vue
@@ -56,6 +56,7 @@
       },
       website: website,
       time: '',
+      timeTimer: null,
       activeName: 'user',
       socialForm: {
         tenantId: '000000',
@@ -82,6 +83,12 @@
   computed: {
     ...mapGetters(['tagWel']),
   },
+  beforeDestroy() {
+    if (this.timeTimer) {
+      clearInterval(this.timeTimer);
+      this.timeTimer = null;
+    }
+  },
   props: [],
   methods: {
     // 动态获取系统名称
@@ -93,7 +100,8 @@
       })
     },
     getTime() {
-      setInterval(() => {
+      if (this.timeTimer) clearInterval(this.timeTimer);
+      this.timeTimer = setInterval(() => {
         this.time = this.$dayjs().format('YYYY-MM-DD HH:mm:ss');
       }, 1000);
     },
diff --git a/applications/drone-command/src/utils/cesium/DrawPolygon.js b/applications/drone-command/src/utils/cesium/DrawPolygon.js
index 6c37a35..4a4f10c 100644
--- a/applications/drone-command/src/utils/cesium/DrawPolygon.js
+++ b/applications/drone-command/src/utils/cesium/DrawPolygon.js
@@ -785,6 +785,7 @@
 				this.handler.removeInputAction(type)
 			})
 
+			this.handler.destroy()
 			this.handler = null
 		}
 	}
diff --git a/applications/drone-command/src/utils/util.js b/applications/drone-command/src/utils/util.js
index 57c3536..c149ad4 100644
--- a/applications/drone-command/src/utils/util.js
+++ b/applications/drone-command/src/utils/util.js
@@ -102,22 +102,21 @@
  * esc监听全屏
  */
 export const listenfullscreen = callback => {
-  function listen () {
+  const handler = () => {
     callback()
   }
 
-  document.addEventListener('fullscreenchange', function () {
-    listen()
-  })
-  document.addEventListener('mozfullscreenchange', function () {
-    listen()
-  })
-  document.addEventListener('webkitfullscreenchange', function () {
-    listen()
-  })
-  document.addEventListener('msfullscreenchange', function () {
-    listen()
-  })
+  document.addEventListener('fullscreenchange', handler)
+  document.addEventListener('mozfullscreenchange', handler)
+  document.addEventListener('webkitfullscreenchange', handler)
+  document.addEventListener('msfullscreenchange', handler)
+
+  return () => {
+    document.removeEventListener('fullscreenchange', handler)
+    document.removeEventListener('mozfullscreenchange', handler)
+    document.removeEventListener('webkitfullscreenchange', handler)
+    document.removeEventListener('msfullscreenchange', handler)
+  }
 }
 /**
  * 获取缩略图路径
diff --git a/applications/drone-command/src/views/dataCenter/components/dataCenterMap.vue b/applications/drone-command/src/views/dataCenter/components/dataCenterMap.vue
index 5271f02..dbe87c4 100644
--- a/applications/drone-command/src/views/dataCenter/components/dataCenterMap.vue
+++ b/applications/drone-command/src/views/dataCenter/components/dataCenterMap.vue
@@ -72,8 +72,11 @@
 
 const removeDom = () => {
   const dom = document.querySelector('#mapPopUpBox');
-  if (dom && dom.parentNode) {
-    dom.parentNode.removeChild(dom);
+  if (dom) {
+    render(null, dom);
+    if (dom.parentNode) {
+      dom.parentNode.removeChild(dom);
+    }
   }
 };
 // 移除弹框标签
@@ -290,6 +293,7 @@
 
 onMounted(() => {});
 onBeforeUnmount(() => {
+  removeLabel();
   if (viewer) {
     viewer.destroy();
   }
diff --git a/applications/drone-command/src/views/job/jobinfo.vue b/applications/drone-command/src/views/job/jobinfo.vue
index 2fa7b2b..240c22f 100644
--- a/applications/drone-command/src/views/job/jobinfo.vue
+++ b/applications/drone-command/src/views/job/jobinfo.vue
@@ -45,13 +45,21 @@
       selectionList: [],
       option: option,
       data: [],
+      searchChangeHandler: null,
     }
   },
   created() {
-       this.$bus?.on('triggerSearchChange', (params) => {
+       this.searchChangeHandler = (params) => {
          this.searchChange(params, () => {});
-       });
+       };
+       this.$bus?.on('triggerSearchChange', this.searchChangeHandler);
      },
+  beforeDestroy() {
+    if (this.searchChangeHandler) {
+      this.$bus?.off('triggerSearchChange', this.searchChangeHandler);
+      this.searchChangeHandler = null;
+    }
+  },
   computed: {
     ...mapGetters(['permission']),
     permissionList () {
diff --git a/applications/drone-command/src/views/layerManagement/components/utils.js b/applications/drone-command/src/views/layerManagement/components/utils.js
index 7001570..458b5a7 100644
--- a/applications/drone-command/src/views/layerManagement/components/utils.js
+++ b/applications/drone-command/src/views/layerManagement/components/utils.js
@@ -600,6 +600,7 @@
 				this.handler.removeInputAction(type)
 			})
 
+			this.handler.destroy()
 			this.handler = null
 		}
 	}
diff --git a/applications/drone-command/src/views/layerManagement/index.vue b/applications/drone-command/src/views/layerManagement/index.vue
index 67ee11a..f1bcf7a 100644
--- a/applications/drone-command/src/views/layerManagement/index.vue
+++ b/applications/drone-command/src/views/layerManagement/index.vue
@@ -488,14 +488,15 @@
   isPageLoading.value = status;
 };
 provide('layerParams', layerParams);
+const focusOnNodeHandler = nodeData => {
+  focusOnNode(nodeData);
+};
 onMounted(() => {
   initMap();
   cesiumContextMenu();
   getdataFolderApi();
   // 监听定位事件
-  EventBus.on('focusOnNode', (nodeData) => {
-    focusOnNode(nodeData);
-  });
+  EventBus.on('focusOnNode', focusOnNodeHandler);
   EventBus.on('deleteMapEntityById', deleteMapEntityById);
   EventBus.on('deleteMapEntitiesByFolderId', deleteMapEntitiesByFolderId);
 });
@@ -523,6 +524,7 @@
 onBeforeUnmount(() => {
   destroyMap();
   cesiumContextMenu(false);
+  EventBus.off('focusOnNode', focusOnNodeHandler);
   EventBus.off('deleteMapEntityById', deleteMapEntityById);
   EventBus.off('deleteMapEntitiesByFolderId', deleteMapEntitiesByFolderId);
 });

--
Gitblit v1.9.3