|
|
@@ -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 = [];
|