From 3832a82fb79d4cec4cca5e2854e54953f2095ef8 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 06 九月 2024 16:55:08 +0800
Subject: [PATCH] 1. 添加溯源清单功能 2. 修复切换至走航监测界面后,之前正在加载的历史数据依旧展示至地图的问题 3. 添加折线图下载图片功能; 4. 添加数据导出功能; 5. 添加设备管理功能; 6. 添加数据弹框和溯源清单开关功能; 7. 优化3D里面的颜色展示逻辑,底部颜色由原来的因子最小值颜色改为当前量级的上一个量级对应的颜色

---
 src/views/historymode/HistoryMode.vue |  132 ++++++++++++++++++++++++++-----------------
 1 files changed, 80 insertions(+), 52 deletions(-)

diff --git a/src/views/historymode/HistoryMode.vue b/src/views/historymode/HistoryMode.vue
index e7b2ca9..11ba4f6 100644
--- a/src/views/historymode/HistoryMode.vue
+++ b/src/views/historymode/HistoryMode.vue
@@ -4,7 +4,8 @@
       <SearchBar
         v-show="status == 0"
         :search-time="searchTime"
-        @search="fetchHistroyData"
+        :loading="loading"
+        @search="onSearch"
       ></SearchBar>
       <TrajectoryState v-show="status != 0" :status="status"></TrajectoryState>
     </el-row>
@@ -41,6 +42,7 @@
       @table-click="handelIndexChange"
       :factor-datas="factorDatas"
       :device-type="deviceType"
+      :device-code="deviceCode"
     ></DataSheet>
   </div>
 </template>
@@ -49,18 +51,24 @@
 import Layer from '@/utils/map/3dLayer';
 import marks from '@/utils/map/marks';
 import sector from '@/utils/map/sector';
+import mapUtil from '@/utils/map/util';
 import { DialogUtil } from '@/utils/map/dialog';
-import monitorDataApi from '@/api/monitorDataApi';
 import { useFetchData } from '@/composables/fetchData';
 import moment from 'moment';
 import { TYPE0 } from '@/constant/device-type';
+import { radioOptions } from '@/constant/radio-options';
 import { FactorDatas } from '@/model/FactorDatas';
 import TrendAnalysis from './component/TrendAnalysis.vue';
 import DataSheet from './component/DataSheet.vue';
+import { ElMessage } from 'element-plus';
+import { fetchHistoryData } from '@/utils/factor/data';
+import { mapStores } from 'pinia';
+import { useSceneStore } from '@/stores/scene';
 
 export default {
   components: { TrendAnalysis, DataSheet },
   setup() {
+    // 闄愬畾鍒嗛〉鏁版嵁閲忎负10000
     const { loading, fetchData } = useFetchData(10000);
     return { loading, fetchData };
   },
@@ -68,8 +76,10 @@
     return {
       // 鐩戞祴璁惧绫诲瀷
       deviceType: TYPE0,
+      // 鐩戞祴璁惧缂栧彿
+      deviceCode: '',
       // 鐩戞祴鍥犲瓙鐨勭被鍨嬬紪鍙�
-      factorType: '1',
+      factorType: radioOptions(TYPE0)[0].value,
       // 鐩戞祴鏁版嵁
       factorDatas: new FactorDatas(),
       // 鍐冲畾缁樺埗3D鍥惧舰鏃舵槸鍚︿笌鍘熷浘鍍忓悎骞�
@@ -82,7 +92,9 @@
       // 褰撳墠閫変腑楂樹寒鐨勬暟鎹偣绱㈠紩
       locateIndex: undefined,
       // 杞ㄨ抗鍔ㄧ敾鐘舵��
-      status: 0
+      status: 0,
+      // 鏄惁椤甸潰宸茶烦杞�
+      isUnmounted: false
     };
   },
   watch: {
@@ -92,15 +104,39 @@
       }
     }
   },
+  computed: {
+    ...mapStores(useSceneStore)
+  },
   methods: {
+    // 妫�鏌ユ暟鎹粡绾害鏄惁鍚堟硶
+    checkDataIsValid(index) {
+      const lnglats_GD = this.factorDatas.lnglats_GD[index];
+      const time = this.factorDatas.times[index];
+      if (lnglats_GD[0] == 0 && lnglats_GD[1] == 0) {
+        ElMessage({
+          message: `${time}鐨勬暟鎹粡绾害鏃犳晥`,
+          type: 'warning'
+        });
+        return false;
+      } else {
+        this.locateIndex = index;
+        return true;
+      }
+    },
     // 鐩戝惉鎶樼嚎鍥惧拰琛ㄦ牸鐨勭偣鍑讳簨浠�
     handelIndexChange(index) {
-      this.locateIndex = index;
-      this.drawSector(index);
+      if (this.checkDataIsValid(index)) {
+        // 缁樺埗婧簮鎵囧舰
+        this.drawSector(index);
+        // 鏌ヨ鑼冨洿鍐呯殑鐩戞祴绔欑偣
+        const [lng, lat] = this.factorDatas.lnglats_GD[index];
+        this.sceneStore.searchScene(lng, lat);
+      }
     },
     draw() {
-      // todo 鍒锋柊鍥句緥
+      // 鍒锋柊鍥句緥
       const factor = this.factorDatas.factor[this.factorType];
+      sector.clearSector();
       this.drawRoadMap(factor);
       this.drawMassMarks(factor);
     },
@@ -113,73 +149,65 @@
     },
     drawMassMarks(e) {
       marks.drawMassMarks(this.factorDatas, e, (index) => {
-        // 鏌ヨ鑼冨洿鍐呯殑鐩戞祴绔欑偣
-        // SceneUtil.searchByCoordinate(lnglat[0], lnglat[1], distance);
-        this.drawSector(index);
-        this.locateIndex = index;
+        this.handelIndexChange(index);
       });
+      // 璋冩暣鍦板浘瑙嗚
+      mapUtil.setBound(this.factorDatas.lnglats_GD);
     },
     drawSector(index) {
       // 1. 缁樺埗鏂版墖褰㈠尯鍩�
-      sector.drawSector(this.factorDatas, index);
+      const pr = sector.drawSector(this.factorDatas, index);
+      // 璋冩暣瑙嗚灞呬腑鏄剧ず
+      mapUtil.setCenter(pr.p);
+      // mapUtil.setFitSector(pr);
       // 2. 缁樺埗瀵硅瘽妗�
-      DialogUtil.openNewWindow(this.factorDatas, index, () => {
-        // 绉婚櫎鎵囧舰鍖哄煙
-        // clearSector3();
-      });
+      DialogUtil.openNewWindow(
+        this.deviceType,
+        this.deviceCode,
+        this.factorDatas,
+        index,
+        () => {
+          // 绉婚櫎鎵囧舰鍖哄煙
+          sector.clearSector();
+        }
+      );
     },
-    onFetchData(type, data) {
+    onFetchData(deviceType, data) {
+      if (this.isUnmounted) return;
       // todo 鏍规嵁璁惧绫诲瀷鍒囨崲鍦板浘鐩戞祴鍥犲瓙灞曠ず鍗曢�夋銆佹姌绾垮浘澶嶉�夋銆佹暟鎹〃鏍煎閫夋鐨勫洜瀛愮被鍨�
-      this.deviceType = type;
+      this.deviceType = deviceType;
       this.factorDatas.setData(data, this.drawMode, () => {
         this.factorDatas.refreshHeight(this.factorType);
         this.draw();
       });
     },
-    fetchHistroyData(option) {
-      const { deviceCode, type, timeArray } = option;
+    onSearch(option) {
+      const { deviceType, deviceCode, timeArray } = option;
+      this.deviceType = deviceType;
+      this.deviceCode = deviceCode;
       let startTime, endTime;
       if (timeArray && timeArray.length == 2) {
         startTime = moment(timeArray[0]).format('YYYY-MM-DD HH:mm:ss');
         endTime = moment(timeArray[1]).format('YYYY-MM-DD HH:mm:ss');
       }
       this.fetchData((page, pageSize) => {
-        return monitorDataApi
-          .fetchHistroyData({
-            deviceCode,
-            startTime,
-            endTime,
-            page,
-            perPage: pageSize
-          })
-          .then((res) => this.onFetchData(type, res.data));
-      });
-    },
-    fetchRealTimeData() {
-      // fixme 2024.5.3 姝ゅ鍒濆鑾峰彇鐨勬暟鎹紝鍙傛暟搴旇鐢眘earchbar鍐冲畾锛屽悗缁慨鏀�
-      this.fetchData((page) => {
-        return monitorDataApi
-          .fetchHistroyData({
-            deviceCode: '0a0000000001',
-            // type: TYPE0,
-            page,
-            perPage: 100
-          })
-          .then((res) => {
-            if (res.data.length > 0) {
-              const s = new Date(res.data[0].time.replace(' ', 'T'));
-              const e = new Date(
-                res.data[res.data.length - 1].time.replace(' ', 'T')
-              );
-              this.searchTime = [s, e];
-            }
-            this.onFetchData(TYPE0, res.data);
-          });
+        return fetchHistoryData({
+          deviceType,
+          deviceCode,
+          startTime,
+          endTime,
+          page,
+          perPage: pageSize
+        }).then((res) => this.onFetchData(deviceType, res.data));
       });
     }
   },
   mounted() {
-    this.fetchRealTimeData();
+    this.isUnmounted = false;
+  },
+  unmounted() {
+    mapUtil.clearMap();
+    this.isUnmounted = true;
   }
 };
 </script>

--
Gitblit v1.9.3