From cb99768a728002372bcb80885de2b4b2cd52e303 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期一, 09 九月 2024 14:10:32 +0800
Subject: [PATCH] 1. 修复轨迹动画无法运行的问题
---
src/views/realtimemode/RealtimeMode.vue | 185 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 183 insertions(+), 2 deletions(-)
diff --git a/src/views/realtimemode/RealtimeMode.vue b/src/views/realtimemode/RealtimeMode.vue
index b991977..e01a9aa 100644
--- a/src/views/realtimemode/RealtimeMode.vue
+++ b/src/views/realtimemode/RealtimeMode.vue
@@ -1,9 +1,190 @@
<template>
- <div>RealtimeMode</div>
+ <div class="p-events-none m-t-2">
+ <el-row justify="center" align="middle" class="top-wrap">
+ <DeviceChange @change="onDeviceChange"></DeviceChange>
+ </el-row>
+ <el-row class="m-t-2">
+ <FactorRadio
+ :device-type="deviceType"
+ @change="(e) => (factorType = e)"
+ ></FactorRadio>
+ </el-row>
+ <el-row class="m-t-2">
+ <FactorLegend
+ class="m-t-2"
+ :factor="factorDatas.factor[factorType]"
+ ></FactorLegend>
+ </el-row>
+ <DashBoard class="dash-board" :factor-datas="factorDatas"></DashBoard>
+ <RealTimeTrend
+ class="real-time-trend"
+ :factor-datas="factorDatas"
+ :device-type="deviceType"
+ ></RealTimeTrend>
+ </div>
</template>
<script>
+import moment from 'moment';
+import { useFetchData } from '@/composables/fetchData';
+import { TYPE0 } from '@/constant/device-type';
+import { radioOptions } from '@/constant/radio-options';
+import { FactorDatas } from '@/model/FactorDatas';
+import DashBoard from './component/DashBoard.vue';
+import RealTimeTrend from './component/RealTimeTrend.vue';
+import DeviceChange from './component/DeviceChange.vue';
+import { realTimeMapAnimation } from '@/utils/map/animation';
+import {
+ fetchHistoryData,
+ startLoopFetchRealTimeData,
+ clearFetchingTask
+} from '@/utils/factor/data';
+import thirdPartyDataApi from '@/api/thirdPartyDataApi';
+
+// const mapAnimation = new MapAnimation();
+
export default {
- name: 'HistoryPage'
+ components: { DashBoard, RealTimeTrend, DeviceChange },
+ setup() {
+ const { loading, fetchData } = useFetchData(10000);
+ return { loading, fetchData };
+ },
+ data() {
+ return {
+ // 鐩戞祴璁惧绫诲瀷
+ deviceType: TYPE0,
+ deviceCode: '',
+ // 鐩戞祴鍥犲瓙鐨勭被鍨嬬紪鍙�
+ factorType: radioOptions(TYPE0)[0].value,
+ // 鏂拌幏鍙栫殑鐩戞祴鏁版嵁
+ factorDatas: new FactorDatas(),
+ // 鍏ㄩ儴鐩戞祴鏁版嵁
+ allFactorDatas: new FactorDatas()
+ };
+ },
+ watch: {
+ factorType(nV, oV) {
+ if (nV != oV) {
+ realTimeMapAnimation.setFactorType(nV);
+ }
+ }
+ },
+ computed: {
+ // 鏁版嵁鏈�鏂版椂闂达紙鏈�鏂版暟鎹殑閲囨牱鏃堕棿鍔�1绉掞紱娌℃湁鏁版嵁鏃讹紝閲囩敤褰撳墠鏃堕棿鐨勫墠6鍒嗛挓锛�
+ latestTime() {
+ if (this.factorDatas.times.length == 0) {
+ return moment().subtract(6, 'm').format('YYYY-MM-DD HH:mm:ss');
+ } else {
+ const _time = this.factorDatas.times[this.factorDatas.times.length - 1];
+ return moment(_time).add(1, 's').format('YYYY-MM-DD HH:mm:ss');
+ }
+ }
+ },
+ methods: {
+ onDeviceChange({ type, deviceCode }) {
+ this.deviceType = type;
+ this.deviceCode = deviceCode;
+ this.clearFetchingTask();
+ realTimeMapAnimation.stop();
+ this.allFactorDatas.clearData();
+ this.factorDatas.clearData();
+ this.notFirstFetch = false;
+ this.fetchRealTimeData();
+ },
+ onFetchData(data) {
+ // todo 鏍规嵁璁惧绫诲瀷鍒囨崲鍦板浘鐩戞祴鍥犲瓙灞曠ず鍗曢�夋銆佹姌绾垮浘澶嶉�夋銆佹暟鎹〃鏍煎閫夋鐨勫洜瀛愮被鍨�
+ // this.deviceType = type;
+ const fDatas = new FactorDatas();
+ fDatas.setData(data, this.drawMode, () => {
+ fDatas.refreshHeight(this.factorType);
+ // this.draw();
+ this.factorDatas = fDatas;
+ });
+ },
+ fetchRealTimeData() {
+ this.fetchData((page) => {
+ return fetchHistoryData(
+ {
+ deviceCode: this.deviceCode,
+ // startTime: '2024-08-20 06:00:00',
+ // endTime: '2024-08-20 06:02:00',
+ page,
+ perPage: 100
+ },
+ false
+ ).then((res) => {
+ this.onFetchData(res.data);
+ this.onMapData(res.data);
+ // if (res.data.length > 0) {
+ // this.fetchNextData(res.data[res.data.length - 1].time);
+ // }
+ this.fetchNextData();
+ thirdPartyDataApi.fetchLatestData(this.deviceType, this.deviceCode);
+ });
+ });
+ },
+ clearFetchingTask() {
+ clearFetchingTask();
+ },
+ fetchNextData() {
+ startLoopFetchRealTimeData(
+ () => {
+ return {
+ deviceCode: this.deviceCode,
+ updateTime: this.latestTime,
+ perPage: 10
+ };
+ },
+ (res) => {
+ this.onFetchData(res.data);
+ this.onMapData(res.data);
+ thirdPartyDataApi.fetchLatestData(this.deviceType, this.deviceCode);
+ }
+ );
+ },
+ onMapData(dataList) {
+ let startIndex = this.allFactorDatas.length() - 1;
+ if (!this.notFirstFetch) {
+ startIndex = dataList.length - 2;
+ this.notFirstFetch = true;
+ }
+ startIndex = startIndex < 0 ? 0 : startIndex;
+ return new Promise(() => {
+ this.allFactorDatas.addData(dataList, this.drawMode, () => {
+ realTimeMapAnimation.moveAnimation(
+ this.allFactorDatas,
+ this.factorType,
+ startIndex
+ );
+ });
+ });
+ }
+ },
+ mounted() {
+ // this.fetchRealTimeData();
+ // startLoopFetchRealTimeData({
+ // compUser: 'user1',
+ // compPassword: 'User1@jingan',
+ // mn: 'TX105',
+ // dtFrom: '2024-08-07 10:00:00',
+ // dtTo: '2024-08-07 10:00:59'
+ // });
+ },
+ unmounted() {
+ this.clearFetchingTask();
+ realTimeMapAnimation.stop();
+ }
};
</script>
+<style scoped>
+.dash-board {
+ position: absolute;
+ left: 0;
+ bottom: 2px;
+}
+.real-time-trend {
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+</style>
--
Gitblit v1.9.3