Bladeren bron

perf(views): 修复“消息中心”跳转到环境监控页面异常问题

wangshun 2 weken geleden
bovenliggende
commit
19b10a0ccc
1 gewijzigde bestanden met toevoegingen van 38 en 13 verwijderingen
  1. 38 13
      src/views/env-monitor/EnvMonitor.vue

+ 38 - 13
src/views/env-monitor/EnvMonitor.vue

@@ -10,6 +10,7 @@ import LineChart from '@/components/LineChart.vue';
 import SvgIcon from '@/components/SvgIcon.vue';
 import { useDictData } from '@/hooks/dict-data';
 import { useRequest } from '@/hooks/request';
+import router from '@/router';
 import { t } from '@/i18n';
 import {
   addMonitorPoint,
@@ -69,6 +70,12 @@ interface RunStatusList {
   name: string;
 }
 
+interface QueryItem {
+  monitorId?: number;
+  parentDevGroupId?: number;
+  devGroupId?: number;
+}
+
 const { dictData: paramAlgOperator, getDictData: getParamAlgOperator } = useDictData(DictCode.ParamAlgOperator);
 const envMonitorListRef = useTemplateRef('envMonitorList');
 const temperatureDifference = ref<DictValue[]>([]);
@@ -100,7 +107,11 @@ const supplyDeviceParamsList = ref<DeviceParams[]>([]);
 const outdoorDeviceParamsList = ref<DeviceParams[]>([]);
 const freshDeviceParamsList = ref<DeviceParams[]>([]);
 const runDeviceParamsList = ref<DeviceParamType[]>([]);
-
+const queryItem = ref<QueryItem>({
+  monitorId: undefined,
+  parentDevGroupId: undefined,
+  devGroupId: undefined,
+});
 const monitoringPointData = ref<MonitoringPointData[]>([]);
 const regionNameList = ref<RegionNameList[]>([]);
 const regionList = ref<RegionsPointsItem[]>([]);
@@ -304,20 +315,20 @@ const addAllGatewayList = (value: number) => {
 
     const data = await getDeviceGroupList(item);
 
-    const { devGroupId, parentDevGroupId } = route.query;
+    const { devGroupId, parentDevGroupId } = queryItem.value;
 
     if (data.length) {
       if (value === -1) {
         oneDeviceGroup.value = data;
-        if (Number(parentDevGroupId)) {
-          gradeOne.value = Number(parentDevGroupId);
+        if (parentDevGroupId) {
+          gradeOne.value = parentDevGroupId;
         } else {
           gradeOne.value = data[0].id;
         }
       } else {
         twoDeviceGroup.value = data;
-        if (Number(devGroupId)) {
-          gradeTwo.value = Number(devGroupId);
+        if (devGroupId) {
+          gradeTwo.value = devGroupId;
         } else {
           gradeTwo.value = data[0].id;
         }
@@ -370,9 +381,8 @@ const getRegionsPointsList = (value: number, show: boolean) => {
           return priority1 - priority2;
         });
 
-        const monitorId = Number(route.query.monitorId);
-        if (monitorId) {
-          monitoringId.value = monitorId;
+        if (queryItem.value.monitorId) {
+          monitoringId.value = queryItem.value.monitorId;
         } else {
           monitoringId.value = monitoringPointData.value[0].id;
         }
@@ -977,12 +987,27 @@ watch(
   () => route.query,
   (count) => {
     if (count) {
-      const { devGroupId, monitorId, parentDevGroupId } = route.query;
-      gradeOne.value = Number(parentDevGroupId);
-      gradeTwo.value = Number(devGroupId);
-      monitoringId.value = Number(monitorId);
+      const { monitorId, parentDevGroupId, devGroupId } = route.query;
+      if (monitorId || parentDevGroupId || devGroupId) {
+        queryItem.value = {
+          monitorId: Number(monitorId),
+          parentDevGroupId: Number(parentDevGroupId),
+          devGroupId: Number(devGroupId),
+        };
+        gradeOne.value = Number(parentDevGroupId);
+        gradeTwo.value = Number(devGroupId);
+        monitoringId.value = Number(monitorId);
+        router.replace({
+          path: route.path,
+          query: undefined,
+        });
+      }
     }
   },
+  {
+    deep: true, // 监听嵌套属性变化
+    immediate: true, // 立即触发一次回调
+  },
 );
 
 onMounted(() => {