|
@@ -1,12 +1,13 @@
|
|
|
<script setup lang="ts">
|
|
|
-import { onMounted, ref, useTemplateRef } from 'vue';
|
|
|
+import { onMounted, onUnmounted, ref, useTemplateRef } from 'vue';
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
import { useInfiniteScroll } from '@vueuse/core';
|
|
|
+import dayjs from 'dayjs';
|
|
|
|
|
|
import SvgIcon from '@/components/SvgIcon.vue';
|
|
|
import { useRequest } from '@/hooks/request';
|
|
|
import { getDevWorkRealTimeData, getDevWorkTypeCount, queryDevicesList } from '@/api';
|
|
|
-import { getFixedNum, timeSorter } from '@/utils';
|
|
|
+import { getFixedNum } from '@/utils';
|
|
|
import { DeviceStatusQuery } from '@/constants';
|
|
|
import { DevParamChillerUnit, DevParamCtrlCabinet } from '@/constants/device-params';
|
|
|
|
|
@@ -91,6 +92,7 @@ type DeviceRTDMap = Record<
|
|
|
|
|
|
const deviceList = ref<DevicesListItem[]>([]);
|
|
|
const deviceTotal = ref(0);
|
|
|
+const devRTDUpdateTime = ref('');
|
|
|
const deviceRealTimeData = ref<DeviceRTDMap>({});
|
|
|
const pageParams = ref<PageParams>({
|
|
|
pageIndex: 1,
|
|
@@ -139,42 +141,56 @@ const getDeviceList = () => {
|
|
|
status,
|
|
|
});
|
|
|
|
|
|
- const deviceIds = records.map((item) => item.id);
|
|
|
+ deviceList.value.push(...records);
|
|
|
+ deviceTotal.value = total;
|
|
|
+ pageParams.value.pageIndex++;
|
|
|
+
|
|
|
+ getRealTimeData();
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+let devRTDTimer: number | undefined;
|
|
|
+
|
|
|
+onUnmounted(() => {
|
|
|
+ clearTimeout(devRTDTimer);
|
|
|
+});
|
|
|
+
|
|
|
+const getRealTimeData = () => {
|
|
|
+ clearTimeout(devRTDTimer);
|
|
|
+
|
|
|
+ handleRequest(async () => {
|
|
|
+ if (!deviceList.value.length) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const deviceIds = deviceList.value.map((item) => item.id);
|
|
|
const deviceParamCode = deviceCardData[activeDeviceType.value]?.paramCodes || [];
|
|
|
+ devRTDUpdateTime.value = dayjs().format('YYYY-MM-DD HH:mm:ss');
|
|
|
+
|
|
|
+ const data = await getDevWorkRealTimeData({
|
|
|
+ deviceType: activeDeviceType.value,
|
|
|
+ deviceIds,
|
|
|
+ deviceParamCode,
|
|
|
+ endTime: devRTDUpdateTime.value,
|
|
|
+ });
|
|
|
|
|
|
- const data = await getDevWorkRealTimeData(activeDeviceType.value, deviceIds, deviceParamCode);
|
|
|
const isDeviceChillerUnit = activeDeviceType.value === DeviceType.冷水主机;
|
|
|
|
|
|
data.forEach((item) => {
|
|
|
const { deviceId, deviceParamMapList, ...chillerUnitExtraParams } = item;
|
|
|
+ deviceRealTimeData.value[deviceId] = {};
|
|
|
|
|
|
- if (!deviceRealTimeData.value[deviceId]) {
|
|
|
- deviceRealTimeData.value[deviceId] = {};
|
|
|
- }
|
|
|
-
|
|
|
- const times = deviceParamMapList
|
|
|
- .filter((item) => item.time)
|
|
|
- .map((item) => item.time)
|
|
|
- .sort(timeSorter);
|
|
|
- const mostRecentTime = times[times.length - 1];
|
|
|
-
|
|
|
- if (mostRecentTime) {
|
|
|
- deviceParamMapList.forEach((paramItem) => {
|
|
|
- if (paramItem.time === mostRecentTime) {
|
|
|
- Object.assign(deviceRealTimeData.value[item.deviceId], paramItem);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
+ deviceParamMapList.forEach((paramItem) => {
|
|
|
+ Object.assign(deviceRealTimeData.value[deviceId], paramItem);
|
|
|
+ });
|
|
|
|
|
|
if (isDeviceChillerUnit) {
|
|
|
- Object.assign(deviceRealTimeData.value[item.deviceId], chillerUnitExtraParams);
|
|
|
+ Object.assign(deviceRealTimeData.value[deviceId], chillerUnitExtraParams);
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
- deviceList.value.push(...records);
|
|
|
- deviceTotal.value = total;
|
|
|
- pageParams.value.pageIndex++;
|
|
|
});
|
|
|
+
|
|
|
+ devRTDTimer = window.setTimeout(getRealTimeData, 3 * 60 * 1000);
|
|
|
};
|
|
|
|
|
|
const handleTabClick = () => {
|
|
@@ -283,7 +299,7 @@ const handleDevCardClick = (devId: number, e: Event) => {
|
|
|
</div>
|
|
|
<!-- <div class="device-cop-level">中</div> -->
|
|
|
</template>
|
|
|
- <span class="device-card-header-time">{{ deviceRealTimeData[item.id]?.time }}</span>
|
|
|
+ <span class="device-card-header-time">{{ devRTDUpdateTime }}</span>
|
|
|
<SvgIcon class="device-card-header-button" name="adjustment" @click="viewDevParam(item.id, $event)" />
|
|
|
</div>
|
|
|
<component
|