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 | 38 ++++++++++++++++-- src/api/index.js | 2 src/constant/scene-types/options-jingan.js | 4 ++ src/components/search/SearchBar.vue | 26 ++++++------ src/views/realtimemode/RealtimeMode.vue | 3 + src/router/index.js | 2 src/api/thirdPartyDataApi.js | 6 +- 7 files changed, 57 insertions(+), 24 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index cfe583e..130eb33 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -1,7 +1,7 @@ import axios from 'axios'; import { ElMessage } from 'element-plus'; -const debug = true; +const debug = false; let ip1 = 'http://47.100.191.150:9029/'; let ws = `47.100.191.150:9030`; diff --git a/src/api/thirdPartyDataApi.js b/src/api/thirdPartyDataApi.js index cc326dd..093b51b 100644 --- a/src/api/thirdPartyDataApi.js +++ b/src/api/thirdPartyDataApi.js @@ -35,10 +35,10 @@ } if (!label) return; - let params = `label=${label}&deviceType=${deviceType}&deviceCode=${deviceCode}`; - params += startTime ? `&startTime=${startTime}` : ''; return $http - .get(`air/thirdParty/data/fetch/latest?${params}`) + .get(`air/thirdParty/data/fetch/latest`, { + params: { label, deviceType, deviceCode, startTime } + }) .then((res) => res.data); } }; diff --git a/src/components/search/SearchBar.vue b/src/components/search/SearchBar.vue index a6fe820..16572cc 100644 --- a/src/components/search/SearchBar.vue +++ b/src/components/search/SearchBar.vue @@ -65,20 +65,20 @@ mission(nV, oV) { if (nV != oV) { this.onInit(() => { - this.formSearch.timeArray = [ - new Date(nV.startTime), - new Date(nV.endTime) - ]; - this.dateRange = [new Date(nV.startTime), new Date(nV.endTime)]; - this.formSearch.deviceType = nV.deviceType; - this.formSearch.deviceCode = nV.deviceCode; - - // 浠h〃棣栨杩涘叆鐣岄潰锛屾鏃惰嚜鍔ㄦ墽琛岄涓换鍔$殑鏁版嵁鏌ヨ鎿嶄綔 - if (oV == undefined) { - setTimeout(() => { + setTimeout(() => { + // 寤舵椂璧嬪�硷紝鍥犱负deviceType鍜宒eviceCode涔熸湁榛樿鍒濆鍊� + this.formSearch.timeArray = [ + new Date(nV.startTime), + new Date(nV.endTime) + ]; + this.dateRange = [new Date(nV.startTime), new Date(nV.endTime)]; + this.formSearch.deviceType = nV.deviceType; + this.formSearch.deviceCode = nV.deviceCode; + // 浠h〃棣栨杩涘叆鐣岄潰锛屾鏃惰嚜鍔ㄦ墽琛岄涓换鍔$殑鏁版嵁鏌ヨ鎿嶄綔 + if (oV == undefined) { this.handleClick(); - }, 500); - } + } + }, 500); }); } } diff --git a/src/constant/scene-types/options-jingan.js b/src/constant/scene-types/options-jingan.js index f8cc40f..8e739b6 100644 --- a/src/constant/scene-types/options-jingan.js +++ b/src/constant/scene-types/options-jingan.js @@ -89,5 +89,9 @@ { label: '甯傛帶鐐�', value: '20' + }, + { + label: '灏忓井绔�', + value: '21' } ]; diff --git a/src/router/index.js b/src/router/index.js index 770dcf5..47edf4f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -6,7 +6,7 @@ routes: [ { path: '/', - redirect: '/index/underwaymix' + redirect: '/login' }, // 鐧婚檰椤甸潰 { diff --git a/src/views/historymode/HistoryMode.vue b/src/views/historymode/HistoryMode.vue index dc4a863..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 @@ -74,6 +74,7 @@ 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'; @@ -108,7 +109,10 @@ // 杞ㄨ抗鍔ㄧ敾鐘舵�� status: 0, // 鏄惁椤甸潰宸茶烦杞� - isUnmounted: false + isUnmounted: false, + // 绗笁鏂规暟鎹幏鍙栨槸鍚﹀皾璇� + isFetchThirdParty: false, + thirdPartyLoading: false }; }, watch: { @@ -236,9 +240,33 @@ 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) => { diff --git a/src/views/realtimemode/RealtimeMode.vue b/src/views/realtimemode/RealtimeMode.vue index 86b798a..41e5d4e 100644 --- a/src/views/realtimemode/RealtimeMode.vue +++ b/src/views/realtimemode/RealtimeMode.vue @@ -48,7 +48,8 @@ // const mapAnimation = new MapAnimation(); // 璋冭瘯妯″紡 -const mode = 'debug'; +// const mode = 'debug'; +const mode = 'product'; export default { components: { DashBoard, RealTimeTrend, DeviceChange, SourceTrace }, -- Gitblit v1.9.3