From d58b7ec5be59dfe384e27b1e0b42d76998593619 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 30 五月 2025 11:55:13 +0800
Subject: [PATCH] 动态溯源功能(待完成)

---
 src/views/historymode/HistoryMode.vue |   65 +++++++++++++++++++++++++-------
 1 files changed, 51 insertions(+), 14 deletions(-)

diff --git a/src/views/historymode/HistoryMode.vue b/src/views/historymode/HistoryMode.vue
index 1772dfd..99b1303 100644
--- a/src/views/historymode/HistoryMode.vue
+++ b/src/views/historymode/HistoryMode.vue
@@ -4,17 +4,17 @@
       <SearchBar
         v-show="status == 0"
         :search-time="searchTime"
-        :loading="loading"
+        :loading="loading || thirdPartyLoading"
         @search="onSearch"
       ></SearchBar>
       <TrajectoryState v-show="status != 0" :status="status"></TrajectoryState>
-      <el-button
+      <!-- <el-button
         type="primary"
         class="p-events-auto el-button-custom"
         @click="handleClick"
       >
         鍒嗘瀽
-      </el-button>
+      </el-button> -->
     </el-row>
     <el-row class="m-t-2">
       <FactorRadio
@@ -28,6 +28,7 @@
         :factor="factorDatas.factor[factorType]"
         @change="handleLegendTypeChange"
       ></FactorLegend>
+      <!-- <SourceTrace></SourceTrace> -->
     </el-row>
     <el-row class="historical" justify="center">
       <HistoricalTrajectory
@@ -69,14 +70,16 @@
 import { FactorDatas } from '@/model/FactorDatas';
 import TrendAnalysis from './component/TrendAnalysis.vue';
 import DataSheet from './component/DataSheet.vue';
+import SourceTrace from '@/views/sourcetrace/SourceTrace.vue';
 import { ElMessage } from 'element-plus';
 import { fetchHistoryData } from '@/utils/factor/data';
 import dataAnalysisApi from '@/api/dataAnalysisApi';
+import thirdPartyDataApi from '@/api/thirdPartyDataApi';
 import { mapStores } from 'pinia';
 import { useSceneStore } from '@/stores/scene';
 
 export default {
-  components: { TrendAnalysis, DataSheet },
+  components: { TrendAnalysis, DataSheet, SourceTrace },
   setup() {
     // 闄愬畾鍒嗛〉鏁版嵁閲忎负10000
     const { loading, fetchData } = useFetchData(10000);
@@ -92,6 +95,8 @@
       factorType: defaultOptions(TYPE0).value,
       // 鐩戞祴鏁版嵁
       factorDatas: new FactorDatas(),
+      // 姹℃煋婧簮缁撴灉
+      pollutionData: undefined,
       // 鍐冲畾缁樺埗3D鍥惧舰鏃舵槸鍚︿笌鍘熷浘鍍忓悎骞�
       merge: false,
       // 鍐冲畾缁樺埗瀹�3D鍥惧舰鍚庡湴鍥捐瑙掓槸鍚﹁嚜鍔ㄥ洖涓�
@@ -104,13 +109,18 @@
       // 杞ㄨ抗鍔ㄧ敾鐘舵��
       status: 0,
       // 鏄惁椤甸潰宸茶烦杞�
-      isUnmounted: false
+      isUnmounted: false,
+      // 绗笁鏂规暟鎹幏鍙栨槸鍚﹀皾璇�
+      isFetchThirdParty: false,
+      thirdPartyLoading: false
     };
   },
   watch: {
     factorType(nValue, oValue) {
       if (nValue != oValue && this.status == 0) {
+        Layer.clear();
         this.draw();
+        this.drawHighlightPollution();
       }
     }
   },
@@ -194,12 +204,21 @@
         }
       );
     },
+    drawHighlightPollution() {
+      this.pollutionData.forEach((e) => {
+        if (this.factorType == e.factorId + '') {
+          const fDatas = this.factorDatas.getByDate(e.startDate, e.endDate);
+          Layer.drawHighLight3DLayer(fDatas, fDatas.factor[this.factorType]);
+        }
+      });
+    },
     onFetchData(deviceType, data) {
       if (this.isUnmounted) return;
       // todo 鏍规嵁璁惧绫诲瀷鍒囨崲鍦板浘鐩戞祴鍥犲瓙灞曠ず鍗曢�夋銆佹姌绾垮浘澶嶉�夋銆佹暟鎹〃鏍煎閫夋鐨勫洜瀛愮被鍨�
       this.deviceType = deviceType;
       this.factorDatas.setData(data, this.drawMode, () => {
         this.factorDatas.refreshHeight(this.factorType);
+        Layer.clear();
         this.draw();
       });
     },
@@ -221,20 +240,38 @@
           endTime,
           page,
           perPage: pageSize
-        }).then((res) => this.onFetchData(deviceType, res.data));
+        }).then((res) => {
+          this.onFetchData(deviceType, res.data);
+          if (
+            res.data.length == 0 &&
+            this.isFetchThirdParty != mission.missionCode
+          ) {
+            this.onThirdPartyFetch(option);
+          }
+        });
       });
+    },
+    onThirdPartyFetch(option) {
+      const { mission } = option;
+      if (import.meta.env.VITE_DATA_MODE == 'jingan') {
+        this.thirdPartyLoading = true;
+        this.isFetchThirdParty = mission.missionCode;
+        // 閫氱煡鏈嶅姟绔惎鍔ㄤ换鍔¤寖鍥村唴鐨勭涓夋柟鏁版嵁鑾峰彇浠诲姟
+        thirdPartyDataApi
+          .fetchMissionData(mission.missionCode)
+          .then((res) => {
+            if (res.data) {
+              this.onSearch(option);
+            }
+          })
+          .finally(() => (this.thirdPartyLoading = false));
+      }
     },
     handleClick() {
       const { missionCode } = this.mission;
       dataAnalysisApi.pollutionTrace(missionCode).then((res) => {
-        res.data.forEach((e) => {
-          const fDatas = new FactorDatas();
-          fDatas.setData(e.dataVoList, this.drawMode, () => {
-            fDatas.refreshHeight(this.factorType);
-            Layer.drawHighLight3DLayer(fDatas, fDatas.factor[this.factorType]);
-            console.log(e.dataVoList);
-          });
-        });
+        this.pollutionData = res.data;
+        this.drawHighlightPollution();
       });
     }
   },

--
Gitblit v1.9.3