1
0

5 Коммиты 6691565c06 ... 25bd23a82f

Автор SHA1 Сообщение Дата
  wangcong 25bd23a82f chore(types): 更新类型 1 неделя назад
  wangcong 1755ec1e6c perf(components): 优化协议变更标准参数的逻辑 1 неделя назад
  wangcong c80d2a4c28 perf(components): 优化获取标准参数列表接口,按设备类型查询 1 неделя назад
  wangcong 73d738f77f perf(components): 优化“自定义参数”组件 1 неделя назад
  wangcong fc8e38ec67 perf(views): 优化设备工况卡片实时数据查询 1 неделя назад

+ 3 - 6
src/api/index.ts

@@ -47,6 +47,7 @@ import type {
   DevWorkHisDataQuery,
   DevWorkHistoryData,
   DevWorkRealTimeData,
+  DevWorkRTDQuery,
   DictTypeData,
   DictTypeDataParams,
   ElectricityStatisticsQuery,
@@ -623,14 +624,10 @@ export const getDevWorkTypeCount = async (deviceGroupId: number, deviceTypes: nu
   return data;
 };
 
-export const getDevWorkRealTimeData = async (deviceType: number, deviceIds: number[], deviceParamCode: string[]) => {
+export const getDevWorkRealTimeData = async (params: DevWorkRTDQuery) => {
   const data = await request<DevWorkRealTimeData[]>(apiBiz('/deviceCondition/getRTDList'), {
     method: 'POST',
-    body: JSON.stringify({
-      deviceType,
-      deviceIds,
-      deviceParamCode,
-    }),
+    body: JSON.stringify(params),
   });
 
   return data;

+ 10 - 0
src/types/index.ts

@@ -275,6 +275,8 @@ export interface ProtocolStandardParam {
   updateUserId: number;
   platformParamCode: string;
   platformParamName: string;
+  gatewayParamCode: string;
+  gatewayParamName: string;
   unit: string;
   module: string;
   deviceTypeId: number;
@@ -286,6 +288,7 @@ export interface ProtocolStandardParam {
 export interface ProtocolStandardParamQuery extends PageParams {
   platformParamCode?: string;
   platformParamName?: string;
+  templateType?: string;
 }
 
 export interface RegisterGatewayForm extends EquipmentInformation {
@@ -1059,6 +1062,13 @@ export interface DevWorkCardProps<T extends string> {
   enableCopSet: boolean;
 }
 
+export interface DevWorkRTDQuery {
+  deviceType: number;
+  deviceIds: number[];
+  deviceParamCode: string[];
+  endTime: string;
+}
+
 export interface DevWorkRealTimeData {
   deviceId: number;
   deviceParamMapList: {

+ 43 - 27
src/views/device-work-status/DeviceWorkStatus.vue

@@ -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

+ 18 - 6
src/views/setup-protocol/CustomParams.vue

@@ -500,19 +500,23 @@ defineExpose({
         </ACol>
         <ACol :span="8">
           <AFormItem :label="$t('setupProtocol.protocolParamFields.bitAddress1')" name="bitAddress1">
-            <AInput
+            <AInputNumber
               v-model:value="customParamsForm.bitAddress1"
               class="protocol-input"
               :placeholder="$t('common.plzEnter')"
+              :min="0"
+              :precision="0"
             />
           </AFormItem>
         </ACol>
         <ACol :span="8">
           <AFormItem :label="$t('setupProtocol.protocolParamFields.bitAddress1Status')" name="bitAddress1Status">
-            <AInput
+            <AInputNumber
               v-model:value="customParamsForm.bitAddress1Status"
               class="protocol-input"
               :placeholder="$t('common.plzEnter')"
+              :min="0"
+              :precision="0"
             />
           </AFormItem>
         </ACol>
@@ -527,19 +531,23 @@ defineExpose({
         </ACol>
         <ACol :span="8">
           <AFormItem :label="$t('setupProtocol.protocolParamFields.bitAddress2')" name="bitAddress2">
-            <AInput
+            <AInputNumber
               v-model:value="customParamsForm.bitAddress2"
               class="protocol-input"
               :placeholder="$t('common.plzEnter')"
+              :min="0"
+              :precision="0"
             />
           </AFormItem>
         </ACol>
         <ACol :span="8">
           <AFormItem :label="$t('setupProtocol.protocolParamFields.bitAddress2Status')" name="bitAddress2Status">
-            <AInput
+            <AInputNumber
               v-model:value="customParamsForm.bitAddress2Status"
               class="protocol-input"
               :placeholder="$t('common.plzEnter')"
+              :min="0"
+              :precision="0"
             />
           </AFormItem>
         </ACol>
@@ -554,19 +562,23 @@ defineExpose({
         </ACol>
         <ACol :span="8">
           <AFormItem :label="$t('setupProtocol.protocolParamFields.bitAddress3')" name="bitAddress3">
-            <AInput
+            <AInputNumber
               v-model:value="customParamsForm.bitAddress3"
               class="protocol-input"
               :placeholder="$t('common.plzEnter')"
+              :min="0"
+              :precision="0"
             />
           </AFormItem>
         </ACol>
         <ACol :span="8">
           <AFormItem :label="$t('setupProtocol.protocolParamFields.bitAddress3Status')" name="bitAddress3Status">
-            <AInput
+            <AInputNumber
               v-model:value="customParamsForm.bitAddress3Status"
               class="protocol-input"
               :placeholder="$t('common.plzEnter')"
+              :min="0"
+              :precision="0"
             />
           </AFormItem>
         </ACol>

+ 1 - 0
src/views/setup-protocol/ProtocolContent.vue

@@ -914,6 +914,7 @@ defineExpose({
     />
     <SelectStandardParams
       ref="selectStandardParams"
+      :device-type="info.deviceType"
       :protocol-id="info.id"
       :param-id="selectedParamId"
       :param-name="selectedParamName"

+ 4 - 0
src/views/setup-protocol/SelectStandardParams.vue

@@ -17,6 +17,7 @@ import type { Key, RowSelectionType } from 'ant-design-vue/es/table/interface';
 import type { FormRules, PageParams, ProtocolParamInfo, ProtocolStandardParam } from '@/types';
 
 interface Props {
+  deviceType?: string;
   protocolId?: number;
   paramId?: number;
   paramName?: string;
@@ -61,6 +62,7 @@ const getStandardParams = () => {
       ...pageParams.value,
       platformParamName: paramNameOrCode.value,
       platformParamCode: paramNameOrCode.value,
+      templateType: props.deviceType,
     });
 
     paramList.value = records;
@@ -312,6 +314,8 @@ const handleFormOk = () => {
             baseInfoId: props.protocolId,
             platformProtocolInfoId: standardParam.id,
             paramName: props.paramName || standardParam.platformParamName,
+            gatewayParamName: props.paramInfo?.gatewayParamName || standardParam.gatewayParamName,
+            gatewayParamCode: props.paramInfo?.gatewayParamCode || standardParam.gatewayParamCode,
             id: props.paramId,
           });