From 08ffcf9d7ffafaa82d8de7f9b5fcfdb49e9c3688 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 05 十一月 2025 17:33:54 +0800
Subject: [PATCH] 动态溯源 1. 修复CO因子文本没有正常显示的问题;
---
src/views/realtimemode/RealtimeMode.vue | 184 ++++++++++++++++++++++++++++++---------------
1 files changed, 121 insertions(+), 63 deletions(-)
diff --git a/src/views/realtimemode/RealtimeMode.vue b/src/views/realtimemode/RealtimeMode.vue
index 1ecbd0a..7b00711 100644
--- a/src/views/realtimemode/RealtimeMode.vue
+++ b/src/views/realtimemode/RealtimeMode.vue
@@ -2,42 +2,76 @@
<div class="p-events-none m-t-2">
<el-row justify="center" align="middle" class="top-wrap">
<DeviceChange @change="onDeviceChange"></DeviceChange>
+ <el-button
+ type="primary"
+ class="p-events-auto el-button-custom"
+ @click="pauseTask"
+ >
+ {{ pause ? '缁х画' : '鏆傚仠' }}
+ </el-button>
</el-row>
<el-row class="m-t-2">
- <FactorRadio
- :device-type="deviceType"
- @change="(e) => (factorType = e)"
- ></FactorRadio>
+ <FactorRadio :device-type="deviceType" v-model="factorType"></FactorRadio>
</el-row>
<el-row class="m-t-2">
- <FactorLegend
- class="m-t-2"
- :factor="factorDatas.factor[factorType]"
- ></FactorLegend>
+ <el-col span="1">
+ <FactorLegend :factor="factorDatas.factor[factorType]"></FactorLegend>
+ </el-col>
+ <el-col span="1"> </el-col>
</el-row>
- <DashBoard class="dash-board" :factor-datas="factorDatas"></DashBoard>
+ <!-- <DashBoard class="dash-board" :factor-datas="factorDatas"></DashBoard> -->
<RealTimeTrend
class="real-time-trend"
:factor-datas="factorDatas"
:device-type="deviceType"
></RealTimeTrend>
+ <SourceTrace
+ class="source-trace"
+ v-model:factorType="factorType"
+ :deviceCode="deviceCode"
+ ></SourceTrace>
+ <!-- <PollutedClueItem></PollutedClueItem> -->
</div>
</template>
<script>
+import moment from 'moment';
+import mapUtil from '@/utils/map/util';
import { useFetchData } from '@/composables/fetchData';
import { TYPE0 } from '@/constant/device-type';
+import { defaultOptions } from '@/constant/radio-options';
import { FactorDatas } from '@/model/FactorDatas';
-import monitorDataApi from '@/api/monitorDataApi';
import DashBoard from './component/DashBoard.vue';
import RealTimeTrend from './component/RealTimeTrend.vue';
import DeviceChange from './component/DeviceChange.vue';
+import SourceTrace from '@/views/sourcetrace/SourceTrace.vue';
+import UnderwayAdvice from '@/views/sourcetrace/UnderwayAdvice.vue';
+import PollutedClueItem from '@/views/sourcetrace/component/PollutedClueItem.vue';
import { realTimeMapAnimation } from '@/utils/map/animation';
+import {
+ fetchHistoryData,
+ startLoopFetchRealTimeData,
+ clearFetchingTask,
+ pauseTask
+} from '@/utils/factor/data';
+import thirdPartyDataApi from '@/api/thirdPartyDataApi';
+import websocket from '@/api/websocket';
// const mapAnimation = new MapAnimation();
+// 璋冭瘯妯″紡
+// const mode = 'debug';
+const mode = 'product';
+
export default {
- components: { DashBoard, RealTimeTrend, DeviceChange },
+ components: {
+ DashBoard,
+ RealTimeTrend,
+ DeviceChange,
+ SourceTrace,
+ UnderwayAdvice,
+ PollutedClueItem
+ },
setup() {
const { loading, fetchData } = useFetchData(10000);
return { loading, fetchData };
@@ -46,13 +80,14 @@
return {
// 鐩戞祴璁惧绫诲瀷
deviceType: TYPE0,
- deviceCode: '0a0000000001',
+ deviceCode: '',
// 鐩戞祴鍥犲瓙鐨勭被鍨嬬紪鍙�
- factorType: '1',
+ factorType: defaultOptions(TYPE0).value,
// 鏂拌幏鍙栫殑鐩戞祴鏁版嵁
factorDatas: new FactorDatas(),
// 鍏ㄩ儴鐩戞祴鏁版嵁
- allFactorDatas: new FactorDatas()
+ allFactorDatas: new FactorDatas(),
+ pause: false
};
},
watch: {
@@ -63,11 +98,13 @@
}
},
computed: {
+ // 鏁版嵁鏈�鏂版椂闂达紙鏈�鏂版暟鎹殑閲囨牱鏃堕棿鍔�1绉掞紱娌℃湁鏁版嵁鏃讹紝閲囩敤褰撳墠鏃堕棿鐨勫墠6鍒嗛挓锛�
latestTime() {
if (this.factorDatas.times.length == 0) {
- return '';
+ return moment().subtract(6, 'm').format('YYYY-MM-DD HH:mm:ss');
} else {
- return this.factorDatas.times[this.factorDatas.times.length - 1];
+ const _time = this.factorDatas.times[this.factorDatas.times.length - 1];
+ return moment(_time).add(1, 's').format('YYYY-MM-DD HH:mm:ss');
}
}
},
@@ -91,52 +128,65 @@
// this.draw();
this.factorDatas = fDatas;
});
- },
- fetchRealTimeData() {
- // fixme 2024.5.3 姝ゅ鍒濆鑾峰彇鐨勬暟鎹紝鍙傛暟搴旇鐢眘earchbar鍐冲畾锛屽悗缁慨鏀�
- this.fetchData((page) => {
- return monitorDataApi
- .fetchHistroyData({
- deviceCode: this.deviceCode,
- // startTime: '2021-11-04 09:53:35',
- page,
- perPage: 100
- })
- .then((res) => {
- this.onFetchData(res.data);
- this.onMapData(res.data);
- this.fetchNextData();
- });
- });
- },
- clearFetchingTask() {
- if (this.fetchingTask) {
- clearInterval(this.fetchingTask);
- this.fetchingTask = undefined;
+ if (mode == 'debug') {
+ websocket.send(JSON.stringify(data));
}
},
- fetchNextData() {
- this.clearFetchingTask();
- this.fetchingTask = setInterval(() => {
- if (this.isFetching) {
- return;
- }
-
- this.isFetching = true;
- this.fetchData(() => {
- return monitorDataApi
- .fetchNextData({
- deviceCode: this.deviceCode,
- updateTime: this.latestTime,
- perPage: 10
- })
- .then((res) => {
- this.onFetchData(res.data);
- this.onMapData(res.data);
- })
- .finally(() => (this.isFetching = false));
+ fetchRealTimeData() {
+ this.fetchData((page) => {
+ const param =
+ mode == 'debug'
+ ? {
+ deviceCode: this.deviceCode,
+ // startTime: '2025-01-16 11:34:00',
+ // endTime: '2025-01-16 11:35:00',
+ // startTime: '2025-01-20 12:40:00',
+ // startTime: '2024-12-27 08:30:00',
+ // startTime: '2024-12-13 16:35:00',
+ // startTime: '2024-11-27 11:50:41', // Pm, 涓窛绂诲伐鍦�
+ // startTime: '2024-08-30 15:27:00', // voc 杩戣窛绂绘苯淇�
+ // startTime: '2024-07-23 15:21:30',
+ // startTime: '2024-07-23 14:39:00',
+ startTime: '2025-11-04 14:30:00',
+ endTime: '2025-12-31 11:51:41',
+ page,
+ perPage: 10
+ }
+ : {
+ deviceCode: this.deviceCode,
+ page,
+ perPage: 100
+ };
+ return fetchHistoryData(param, false).then((res) => {
+ this.onFetchData(res.data);
+ this.onMapData(res.data);
+ this.fetchNextData();
+ thirdPartyDataApi.fetchLatestData(this.deviceType, this.deviceCode);
});
- }, 10000);
+ });
+ },
+ pauseTask() {
+ this.pause = pauseTask();
+ },
+ clearFetchingTask() {
+ clearFetchingTask();
+ },
+ fetchNextData() {
+ startLoopFetchRealTimeData(
+ () => {
+ return {
+ deviceCode: this.deviceCode,
+ updateTime: this.latestTime,
+ perPage: mode == 'debug' ? 1 : 10
+ };
+ },
+ (res) => {
+ this.onFetchData(res.data);
+ this.onMapData(res.data);
+ thirdPartyDataApi.fetchLatestData(this.deviceType, this.deviceCode);
+ },
+ mode == 'debug' ? 4000 : undefined
+ );
},
onMapData(dataList) {
let startIndex = this.allFactorDatas.length() - 1;
@@ -145,7 +195,7 @@
this.notFirstFetch = true;
}
startIndex = startIndex < 0 ? 0 : startIndex;
- return new Promise((resolve, reject) => {
+ return new Promise(() => {
this.allFactorDatas.addData(dataList, this.drawMode, () => {
realTimeMapAnimation.moveAnimation(
this.allFactorDatas,
@@ -157,23 +207,31 @@
}
},
mounted() {
- this.fetchRealTimeData();
+ if (mode == 'debug') {
+ websocket.send('start');
+ }
},
unmounted() {
this.clearFetchingTask();
realTimeMapAnimation.stop();
+ mapUtil.clearMap();
}
};
</script>
<style scoped>
.dash-board {
position: absolute;
- left: 0;
- bottom: 2px;
+ right: 0;
+ bottom: 0px;
}
.real-time-trend {
position: absolute;
right: 0;
top: 0;
}
+.source-trace {
+ position: absolute;
+ left: 0;
+ bottom: 0px;
+}
</style>
--
Gitblit v1.9.3