From 1119a7837323e052d3e6256cddd3283d919bd959 Mon Sep 17 00:00:00 2001 From: guonan <guonan201020@163.com> Date: 星期四, 26 六月 2025 15:44:02 +0800 Subject: [PATCH] 提交 --- src/views/left/KGSimOption/RealTimeSimulation.vue | 121 ++++++++++++++++++++++++++++++++++------ 1 files changed, 103 insertions(+), 18 deletions(-) diff --git a/src/views/left/KGSimOption/RealTimeSimulation.vue b/src/views/left/KGSimOption/RealTimeSimulation.vue index 3ca2832..4dc917b 100644 --- a/src/views/left/KGSimOption/RealTimeSimulation.vue +++ b/src/views/left/KGSimOption/RealTimeSimulation.vue @@ -73,15 +73,20 @@ inject, reactive, onMounted, + onUnmounted, } from "vue"; import { ElMessage } from "element-plus"; import { initeWaterPrimitiveView } from "@/utils/water"; import { SimAPIStore } from "@/store/simAPI"; +import { useSimStore } from "@/store/simulation.js"; import { EventBus } from "@/eventBus"; // 寮曞叆浜嬩欢鎬荤嚎 import { getDeviceInfoSHG, getYLJData } from "@/api/hpApi"; +import { getSimStart, getSimDataById } from "@/api/trApi"; // 鑾峰彇 Store 瀹炰緥 -const simStore = SimAPIStore(); +const simAPIStore = SimAPIStore(); + +const simStore = useSimStore(); // 琛ㄥ崟鏁版嵁 const formData = reactive({ @@ -200,12 +205,10 @@ // 淇濆瓨鏂规 const saveSim = async () => { try { - getYLJData("1101160300070101").then((res) => { - console.log(res, "resres"); - }); + // getYLJData("1101160300070101") updateSelectedGauges(); formData.geom = props.selectedArea; - await simStore.addSimCheme(formData); + await simAPIStore.addSimCheme(formData); resetForm(); EventBus.emit("close-selectArea"); } catch (err) {} @@ -214,24 +217,101 @@ // 娉ㄥ叆妯℃嫙鎿嶄綔鏂规硶 const { startSimulate, endSimulate } = inject("simulateActions"); +// 瀹炴椂妯℃嫙瀹氭椂鍣� +let pollingInterval = null; + async function startPlay() { - const selectedItems = filteredTableData.value.filter((item) => item.selected); - if (selectedItems.length > 0) { - console.log( - "閫変腑鐨勯」锛�", - selectedItems.map((item) => item.name) - ); - } else { - console.log("鏈�変腑浠讳綍椤�"); - } - console.log("褰撳墠閫変腑鐨勫尯鍩燂細", props.selectedArea); // 寮�濮嬫ā鎷熷墠闇�瑕佸厛淇濆瓨鏂规 + updateSelectedGauges(); + formData.geom = props.selectedArea; - await simStore.addSimCheme(formData); + + // 淇濆瓨鏂规 + const resApi = await simAPIStore.addSimCheme(formData); + const schemeId = resApi.data?.data?.id; + + if (!schemeId) { + ElMessage.error("鏂规淇濆瓨澶辫触锛屾湭鑾峰彇鍒版湁鏁� ID"); + return; + } + EventBus.emit("close-selectArea"); - initeWaterPrimitiveView(); - startSimulate(); + + // 鏄剧ず鍔犺浇涓彁绀� + const loadingMessage = ElMessage({ + type: "info", + message: "姝e湪鍚姩妯℃嫙...", + duration: 0, + offset: 80, + }); + + try { + // 璋冪敤姹傝В鍣ㄥ苟鍒濆鍖栨ā鎷� + const resStart = await getSimStart(schemeId); + + // 璇锋眰瀹屾垚鍚庡叧闂姞杞芥彁绀� + loadingMessage.close(); + + if (resStart.code === 200) { + const res = await getSimDataById(schemeId); + simStore.setSelectedScheme(res.data[0]); + + simStore.layerDate = resStart.data; + initeWaterPrimitiveView(); + + try { + startSimulate(); // 杩欓噷鍙兘浼氭姤閿� + } catch (error) { + console.error("璋冪敤 startSimulate 鍑洪敊锛�", error); + } + + // 寮�濮嬭疆璇换鍔★細姣� 5 鍒嗛挓璋冪敤涓�娆� getSimStart 骞舵洿鏂版柟妗堟暟鎹� + startPolling(schemeId); + } else { + ElMessage.error(resStart.message || "璋冪敤姹傝В鍣ㄥけ璐�"); + } + } catch (error) { + loadingMessage.close(); + ElMessage.error("璇锋眰澶辫触锛�" + (error.message || "鏈煡閿欒")); + console.error("璋冪敤 getSimStart 鍑洪敊锛�", error); + } } + +// 鍚姩杞鍑芥暟 +function startPolling(schemeId) { + stopPolling(); // 閬垮厤閲嶅鍚姩 + + pollingInterval = setInterval(async () => { + try { + const resStart = await getSimStart(schemeId); + + if (resStart.code === 200) { + const res = await getSimDataById(schemeId); + simStore.setSelectedScheme(res.data[0]); // 鏇存柊鏂规鏁版嵁 + simStore.layerDate = resStart.data; // 鏇存柊 layer 鏁版嵁 + + console.log("杞鑾峰彇鏈�鏂版暟鎹垚鍔�"); + } else { + console.warn("杞璇锋眰澶辫触锛�", resStart.message); + } + } catch (error) { + console.error("杞璇锋眰寮傚父锛�", error); + } + }, 5 * 60 * 1000); // 姣� 5 鍒嗛挓鎵ц涓�娆� +} + +// 鍋滄杞鍑芥暟 +function stopPolling() { + if (pollingInterval) { + clearInterval(pollingInterval); + pollingInterval = null; + console.log("杞宸插仠姝�"); + } +} + +EventBus.on("close-time", () => { + stopPolling(); +}); const toggleDetails = () => { isCollapsed.value = !isCollapsed.value; @@ -240,6 +320,11 @@ const futurePredictions = () => { console.log("鏈潵棰勬祴鎸夐挳琚偣鍑�"); }; + +onUnmounted(() => { + EventBus.off("close-time"); + stopPolling(); +}); </script> <style scoped> -- Gitblit v1.9.3