Переглянути джерело

[Fix 0000]修复可配置首页下模块重复渲染问题

wangkeyi 3 днів тому
батько
коміт
12c044b781

+ 8 - 1
src/views/vent/home/configurable/components/ModuleMine.vue

@@ -104,8 +104,15 @@ function redirectTo() {
 watch(
   () => props.data,
   (d) => {
+    const currentSelectedDeviceID = selectedDeviceID.value; // 保存当前选中的设备ID
     init(d);
-    selectedDeviceID.value = options.value[0]?.value;
+    // 检查当前选中的设备ID是否还在选项中,如果在则保持选中状态
+    const optionExists = options.value.some(option => option.value === currentSelectedDeviceID);
+    if (optionExists) {
+      selectedDeviceID.value = currentSelectedDeviceID;
+    } else {
+      selectedDeviceID.value = options.value[0]?.value;
+    }
   },
   {
     immediate: true,

+ 8 - 2
src/views/vent/home/configurable/hooks/useInit.ts

@@ -294,6 +294,7 @@ export function useInitPage(title: string) {
   const mainTitle = ref(title);
   const enhancedConfigs = ref<EnhancedConfig[]>([]);
   const data = ref<any>({});
+  const oldData = ref<any>({}); // 用于存储旧数据
 
   const hiddenList = computed(() => {
     return enhancedConfigs.value.filter((e) => e.visible === false);
@@ -308,8 +309,13 @@ export function useInitPage(title: string) {
     });
   }
 
-  function updateData(d: any) {
-    data.value = d;
+  function updateData(newData: any) {
+    const isDataChanged = JSON.stringify(newData) !== JSON.stringify(oldData.value);
+    // 有数据更改时才进行数据更新
+    if (isDataChanged) {
+      data.value = newData;
+      oldData.value = newData;
+    }
   }
 
   return {