Explorar o código

解决多次调用接口问题

wukai hai 2 meses
pai
achega
8c3a68dce8
Modificáronse 1 ficheiros con 72 adicións e 39 borrados
  1. 72 39
      src/views/dye/hour/calc.vue

+ 72 - 39
src/views/dye/hour/calc.vue

@@ -366,6 +366,9 @@ function getList() {
       selectedEquipmentType.value = response.rows[0].typeId;
       // 触发设备类型变化事件,加载对应的参数
       handleEquipmentTypeChange(selectedEquipmentType.value);
+     } else if (selectedEquipmentType.value) {
+      // 如果已有设备类型,直接触发参数变化
+      handleEquipmentTypeChange(selectedEquipmentType.value);
     }
   });
 }
@@ -420,9 +423,11 @@ function getDeviceList() {
 
   // 控制是否需要更新数据
   let needUpdateData = false;
+  let loadedCount = 0;
+  const totalLines = selectedLines.value.length;
 
   // 为所有选中的产线获取设备列表
-  selectedLines.value.forEach((line, index) => {
+  selectedLines.value.forEach((line) => {
     listDevice({
       pageSize: 10000,
       pageNum: 1,
@@ -456,39 +461,52 @@ function getDeviceList() {
           }
         }
       }
+      
+      loadedCount++;
+      
+      // 只有当所有设备列表都加载完成后再决定是否更新数据
+      if (loadedCount === totalLines) {
+        oldSelectLines.value = JSON.parse(JSON.stringify(selectedLines.value));
+        
+        // 如果需要更新数据或者已经选择了产线和设备,检查是否所有产线都已设置设备
+        if (needUpdateData || (selectedLines.value.length >= 1 && Object.keys(selectedMetrics.value).length > 0)) {
+          let allLinesHaveDevices = true;
+          
+          if (selectedLines.value.length === 1) {
+            const lineKey = selectedLines.value[0];
+            if (!selectedMetrics.value[lineKey + '_0']) {
+              allLinesHaveDevices = false;
+            }
+          } else if (selectedLines.value.length === 2) {
+            for (const line of selectedLines.value) {
+              if (!selectedMetrics.value[line]) {
+                allLinesHaveDevices = false;
+                break;
+              }
+            }
+          }
 
-      // 只有当所有请求都完成后再更新数据
-      if (index === selectedLines.value.length - 1 && needUpdateData) {
-        updateQueryData();
+          // 如果所有产线都已设置设备,则更新数据
+          if (allLinesHaveDevices) {
+            // 防止重复调用
+            clearTimeout(window.updateQueryDataTimer);
+            window.updateQueryDataTimer = setTimeout(() => {
+              updateQueryData();
+            }, 100);
+          } else if (needUpdateData) {
+            // 如果有新设置的设备,也更新数据
+            clearTimeout(window.updateQueryDataTimer);
+            window.updateQueryDataTimer = setTimeout(() => {
+              updateQueryData();
+            }, 100);
+          }
+        }
       }
+    }).catch(error => {
+      loadedCount++;
+      console.error("获取设备列表时出错:", error);
     });
   });
-
-  oldSelectLines.value = JSON.parse(JSON.stringify(selectedLines.value));
-  
-  // 如果已经选择了产线和设备,检查是否所有产线都已设置设备
-  if (selectedLines.value.length >= 1 && Object.keys(selectedMetrics.value).length > 0) {
-    let allLinesHaveDevices = true;
-    
-    if (selectedLines.value.length === 1) {
-      const lineKey = selectedLines.value[0];
-      if (!selectedMetrics.value[lineKey + '_0']) {
-        allLinesHaveDevices = false;
-      }
-    } else if (selectedLines.value.length === 2) {
-      for (const line of selectedLines.value) {
-        if (!selectedMetrics.value[line]) {
-          allLinesHaveDevices = false;
-          break;
-        }
-      }
-    }
-
-    // 如果所有产线都已设置设备,但上面的异步请求还没有触发更新,则在这里更新
-    if (allLinesHaveDevices && !needUpdateData) {
-      updateQueryData();
-    }
-  }
 }
 
 function updateQueryData() {
@@ -531,9 +549,7 @@ function updateQueryData() {
   }
   // 情况2:选择了两条产线,每条产线选择一个设备进行对比
   else if (selectedLines.value.length == 2) {
-    // 添加标志防止重复调用
-    let callCount = 0;
-    const maxCalls = 2;
+    let loadedCount = 0;
     
     // 查询第一条产线设备的数据
     if (selectedMetrics.value[selectedLines.value[0]]) {
@@ -541,18 +557,20 @@ function updateQueryData() {
       queryPara['deviceId'] = selectedMetrics.value[selectedLines.value[0]];
       listHour(queryPara).then(res => {
         rzLineList.value = res.rows;
-        callCount++;
-        if (callCount === maxCalls) {
+        loadedCount++;
+        if (loadedCount === 2) {
           nextTick(() => {
             updateChart();
             updateChart1();
           });
-        } else {
+        } else if (loadedCount === 1 && rzLineList.value.length > 0) {
           nextTick(() => {
             updateChart();
           });
         }
       });
+    } else {
+      loadedCount++; // 如果没有数据,也要增加计数
     }
 
     // 查询第二条产线设备的数据
@@ -562,18 +580,20 @@ function updateQueryData() {
       queryPara1['deviceId'] = selectedMetrics.value[selectedLines.value[1]];
       listHour(queryPara1).then(res => {
         rzLineList1.value = res.rows;
-        callCount++;
-        if (callCount === maxCalls) {
+        loadedCount++;
+        if (loadedCount === 2) {
           nextTick(() => {
             updateChart();
             updateChart1();
           });
-        } else {
+        } else if (loadedCount === 1 && rzLineList1.value.length > 0) {
           nextTick(() => {
             updateChart1();
           });
         }
       });
+    } else {
+      loadedCount++; // 如果没有数据,也要增加计数
     }
   }
 }
@@ -1250,6 +1270,11 @@ onMounted(() => {
 
     // 初始化主表滚动同步
   });
+
+  // 确保在DOM准备好后更新数据
+  setTimeout(() => {
+    updateQueryData();
+  }, 100);
 });
 
 onUnmounted(() => {
@@ -1267,6 +1292,11 @@ onUnmounted(() => {
     minuteChartInstance1.dispose();
   }
 
+  // 清除定时器
+  if (window.updateQueryDataTimer) {
+    clearTimeout(window.updateQueryDataTimer);
+  }
+
   // 删除清理滚动同步的代码
   // cleanups.forEach(cleanup => cleanup());
 });
@@ -1358,6 +1388,9 @@ function handleEquipmentTypeChange(val) {
         selectedEquipmentParam.value = selectedType.dyeTypeParaList[0].paraCode;
         // 触发设备参数变化事件
         handleEquipmentParamChange();
+      } else if (selectedEquipmentParam.value) {
+        // 如果已有参数,直接触发设备列表更新
+        handleEquipmentParamChange();
       }
     } else {
       equipmentParamOptions.value = [];