From 87e19b5a396ac8fed6a551828b87d263f6425c31 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 16 十月 2025 10:26:12 +0800
Subject: [PATCH] 2025.10.16 修改季度报告生成逻辑
---
src/views/historymode/HistoryMode.vue | 196 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 142 insertions(+), 54 deletions(-)
diff --git a/src/views/historymode/HistoryMode.vue b/src/views/historymode/HistoryMode.vue
index 9421a94..452fc0d 100644
--- a/src/views/historymode/HistoryMode.vue
+++ b/src/views/historymode/HistoryMode.vue
@@ -4,10 +4,17 @@
<SearchBar
v-show="status == 0"
:search-time="searchTime"
- :loading="loading"
- @search="fetchHistroyData"
+ :loading="loading || thirdPartyLoading"
+ @search="onSearch"
></SearchBar>
<TrajectoryState v-show="status != 0" :status="status"></TrajectoryState>
+ <!-- <el-button
+ type="primary"
+ class="p-events-auto el-button-custom"
+ @click="handleClick"
+ >
+ 鍒嗘瀽
+ </el-button> -->
</el-row>
<el-row class="m-t-2">
<FactorRadio
@@ -19,6 +26,7 @@
<FactorLegend
class="m-t-2"
:factor="factorDatas.factor[factorType]"
+ @change="handleLegendTypeChange"
></FactorLegend>
</el-row>
<el-row class="historical" justify="center">
@@ -42,39 +50,60 @@
@table-click="handelIndexChange"
:factor-datas="factorDatas"
:device-type="deviceType"
+ :device-code="deviceCode"
></DataSheet>
+ <SourceTrace
+ class="source-trace"
+ v-model:factorType="factorType"
+ direction="left"
+ mode="history"
+ :mission-code="missionCode"
+ ></SourceTrace>
</div>
</template>
<script>
import Layer from '@/utils/map/3dLayer';
+import mapLine from '@/utils/map/line';
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 { defaultOptions } from '@/constant/radio-options';
import { FactorDatas } from '@/model/FactorDatas';
import TrendAnalysis from './component/TrendAnalysis.vue';
import DataSheet from './component/DataSheet.vue';
-import { ElMessageBox, ElNotification, ElMessage } from 'element-plus';
+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);
return { loading, fetchData };
},
data() {
return {
+ missionCode: undefined,
// 鐩戞祴璁惧绫诲瀷
deviceType: TYPE0,
+ // 鐩戞祴璁惧缂栧彿
+ deviceCode: '',
// 鐩戞祴鍥犲瓙鐨勭被鍨嬬紪鍙�
- factorType: '1',
+ factorType: defaultOptions(TYPE0).value,
// 鐩戞祴鏁版嵁
factorDatas: new FactorDatas(),
+ // 姹℃煋婧簮缁撴灉
+ pollutionData: undefined,
// 鍐冲畾缁樺埗3D鍥惧舰鏃舵槸鍚︿笌鍘熷浘鍍忓悎骞�
merge: false,
// 鍐冲畾缁樺埗瀹�3D鍥惧舰鍚庡湴鍥捐瑙掓槸鍚﹁嚜鍔ㄥ洖涓�
@@ -85,15 +114,25 @@
// 褰撳墠閫変腑楂樹寒鐨勬暟鎹偣绱㈠紩
locateIndex: undefined,
// 杞ㄨ抗鍔ㄧ敾鐘舵��
- status: 0
+ status: 0,
+ // 鏄惁椤甸潰宸茶烦杞�
+ isUnmounted: false,
+ // 绗笁鏂规暟鎹幏鍙栨槸鍚﹀皾璇�
+ isFetchThirdParty: false,
+ thirdPartyLoading: false
};
},
watch: {
factorType(nValue, oValue) {
if (nValue != oValue && this.status == 0) {
- this.draw();
+ Layer.clear();
+ this.draw(true);
+ // this.drawHighlightPollution();
}
}
+ },
+ computed: {
+ ...mapStores(useSceneStore)
},
methods: {
// 妫�鏌ユ暟鎹粡绾害鏄惁鍚堟硶
@@ -114,100 +153,144 @@
// 鐩戝惉鎶樼嚎鍥惧拰琛ㄦ牸鐨勭偣鍑讳簨浠�
handelIndexChange(index) {
if (this.checkDataIsValid(index)) {
+ // 缁樺埗婧簮鎵囧舰
this.drawSector(index);
+ // 鏌ヨ鑼冨洿鍐呯殑鐩戞祴绔欑偣
+ const [lng, lat] = this.factorDatas.lnglats_GD[index];
+ this.sceneStore.searchScene(lng, lat);
}
},
- draw() {
+ handleLegendTypeChange(value, done) {
+ if (value) {
+ this.factorDatas.resetRange();
+ } else {
+ this.factorDatas.standardRange();
+ }
+ done();
+ this.draw();
+ },
+ draw(notSetBound) {
// 鍒锋柊鍥句緥
const factor = this.factorDatas.factor[this.factorType];
sector.clearSector();
+ // this.drawRoadLine(factor);
this.drawRoadMap(factor);
this.drawMassMarks(factor);
+ // 璋冩暣鍦板浘瑙嗚
+ if (!notSetBound) {
+ mapUtil.setBound(this.factorDatas.lnglats_GD);
+ }
},
// 缁樺埗3D璧拌璺嚎鍥�
drawRoadMap(e) {
this.factorDatas.refreshHeight(this.factorType);
-
Layer.drawRoadMap(this.factorDatas, e, this.merge, this.setCenter);
- // }
+ },
+ drawRoadLine(e) {
+ this.factorDatas.refreshHeight(this.factorType);
+ mapLine.drawLine(this.factorDatas, e);
},
drawMassMarks(e) {
marks.drawMassMarks(this.factorDatas, e, (index) => {
- // 鏌ヨ鑼冨洿鍐呯殑鐩戞祴绔欑偣
- // SceneUtil.searchByCoordinate(lnglat[0], lnglat[1], distance);
- if (this.checkDataIsValid(index)) {
- this.drawSector(index);
- }
+ this.handelIndexChange(index);
});
- // 璋冩暣鍦板浘瑙嗚
- mapUtil.setBound(this.factorDatas.lnglats_GD);
},
drawSector(index) {
// 1. 缁樺埗鏂版墖褰㈠尯鍩�
const pr = sector.drawSector(this.factorDatas, index);
// 璋冩暣瑙嗚灞呬腑鏄剧ず
- mapUtil.setFitSector(pr);
+ mapUtil.setCenter(pr.p);
+ // mapUtil.setFitSector(pr);
// 2. 缁樺埗瀵硅瘽妗�
- DialogUtil.openNewWindow(this.factorDatas, index, () => {
- // 绉婚櫎鎵囧舰鍖哄煙
- sector.clearSector();
+ DialogUtil.openNewWindow(
+ this.deviceType,
+ this.deviceCode,
+ this.factorDatas,
+ index,
+ () => {
+ // 绉婚櫎鎵囧舰鍖哄煙
+ sector.clearSector();
+ }
+ );
+ },
+ 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(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);
+ Layer.clear();
this.draw();
});
},
- fetchHistroyData(option) {
- const { deviceCode, type, timeArray } = option;
+ onSearch(option) {
+ const { deviceType, deviceCode, timeArray, mission } = option;
+ this.deviceType = deviceType;
+ this.deviceCode = deviceCode;
+ this.mission = mission;
+ this.missionCode = mission.missionCode;
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));
+ return fetchHistoryData({
+ deviceType,
+ deviceCode,
+ startTime,
+ endTime,
+ page,
+ perPage: pageSize
+ }).then((res) => {
+ this.onFetchData(deviceType, res.data);
+ if (
+ res.data.length == 0 &&
+ this.isFetchThirdParty != mission.missionCode
+ ) {
+ this.onThirdPartyFetch(option);
+ }
+ });
});
},
- fetchRealTimeData() {
- // fixme 2024.5.3 姝ゅ鍒濆鑾峰彇鐨勬暟鎹紝鍙傛暟搴旇鐢眘earchbar鍐冲畾锛屽悗缁慨鏀�
- this.fetchData((page) => {
- return monitorDataApi
- .fetchHistroyData({
- deviceCode: '0a0000000001',
- // type: TYPE0,
- page,
- perPage: 100
- })
+ 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.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];
+ if (res.data) {
+ this.onSearch(option);
}
- this.onFetchData(TYPE0, res.data);
- });
+ })
+ .finally(() => (this.thirdPartyLoading = false));
+ }
+ },
+ handleClick() {
+ const { missionCode } = this.mission;
+ dataAnalysisApi.pollutionTrace(missionCode).then((res) => {
+ this.pollutionData = res.data;
+ this.drawHighlightPollution();
});
}
},
mounted() {
- this.fetchRealTimeData();
+ this.isUnmounted = false;
},
unmounted() {
mapUtil.clearMap();
+ this.isUnmounted = true;
}
};
</script>
@@ -234,4 +317,9 @@
left: 0;
right: 0;
}
+.source-trace {
+ position: absolute;
+ right: 0;
+ bottom: 0px;
+}
</style>
--
Gitblit v1.9.3