From f37845dd0a787dd42bf6c72e923433f30fcd8cc3 Mon Sep 17 00:00:00 2001 From: guonan <guonan201020@163.com> Date: 星期四, 03 七月 2025 15:40:09 +0800 Subject: [PATCH] 实时模拟 --- src/components/monifangzhen/schemeCard.vue | 86 +++++++++++++++++++++--------------------- 1 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/components/monifangzhen/schemeCard.vue b/src/components/monifangzhen/schemeCard.vue index ec72b32..c8c6c6e 100644 --- a/src/components/monifangzhen/schemeCard.vue +++ b/src/components/monifangzhen/schemeCard.vue @@ -29,6 +29,9 @@ @click="startPlay(item)" >杩涘叆妯℃嫙</el-button > + <el-button size="small" v-show="item.type == 2" @click="rePlay(item)" + >鍘嗗彶鍥炴斁</el-button + > <!-- :disabled="item.status !== 2" --> </div> </div> @@ -50,7 +53,15 @@ <script setup> import { EventBus } from "@/eventBus"; // 寮曞叆浜嬩欢鎬荤嚎 -import { onMounted, ref, watch, defineEmits, onUnmounted } from "vue"; +import { + nextTick, + onMounted, + ref, + watch, + defineEmits, + onUnmounted, + inject, +} from "vue"; import dayjs from "dayjs"; import { initeWaterPrimitiveView } from "@/utils/water"; import Message from "@/components/tools/Message.vue"; @@ -61,11 +72,11 @@ import { ElMessage, ElMessageBox } from "element-plus"; const emit = defineEmits(["start", "end", "reset", "closeBtn"]); import { - getRegionData, getSimData, deleteSimData, getSimStart, getSimDataById, + getSimresult, } from "@/api/trApi.js"; const simStore = useSimStore(); @@ -101,8 +112,9 @@ // 瀹炴椂妯℃嫙浜斿垎閽熻姹備竴娆$殑瀹氭椂鍣� const realTimeSimInterval = ref(null); +const { startSimulate, endSimulate } = inject("simulateActions"); + async function startPlay(item) { - console.log(item, "item"); if (item.status === 2) { ElMessage.warning("褰撳墠鏂规姝e湪鍒嗘瀽涓�,鏃犳硶杩涘叆妯℃嫙锛�"); return; @@ -131,7 +143,7 @@ currentScheme.value = item; schemeInfoShow.value = true; emit("closeBtn", false); - emit("start"); + startSimulate(); return; } @@ -151,47 +163,35 @@ return; } - // 澶勭悊 type == 2 鐨勬儏鍐碉紙瀹炴椂妯℃嫙锛� - if (item.type === 2) { - // 娓呴櫎宸叉湁瀹氭椂鍣紝闃叉閲嶅鍚姩 - if (realTimeSimInterval.value) { - clearInterval(realTimeSimInterval.value); - } - - // 鍗冲埢鎵ц涓�娆� - await executeRealTimeSimulation(item); - - // 姣忛殧 5 鍒嗛挓鎵ц涓�娆� - realTimeSimInterval.value = setInterval(() => { - executeRealTimeSimulation(item); - }, 5 * 60 * 1000); // 5鍒嗛挓 - - return; - } - // 榛樿鎯呭喌锛氭湁鏈嶅姟鍚嶇О simStore.setSelectedScheme(item); } -// 灏佽瀹炴椂妯℃嫙鐨勫紓姝ユ搷浣� -async function executeRealTimeSimulation(item) { - try { - const ress = await getSimStart(item.id); - - const res = await getSimDataById(item.id); - - item.serviceName = res.data[0]?.serviceName || null; - simStore.setSelectedScheme(item); - getScheme(); - - if (ress.code === 200) { - simStore.layerDate = ress.data; - initeWaterPrimitiveView(); - emit("start"); - } - } catch (e) { - console.error("瀹炴椂妯℃嫙鑾峰彇妯℃嫙鏁版嵁澶辫触锛�", e); - } +// 瀹炴椂妯℃嫙鍘嗗彶鍥炴斁 +function rePlay(item) { + // 褰撳墠閫変腑鐨勬柟妗� + simStore.setSelectedScheme(item); + // 鎷縤d鍘昏姹俽esults鎺ュ彛锛屽鏋滈暱搴︿笉涓�0锛屽垯鍙互杩涜鍘嗗彶鍥炴斁 + getSimresult(item.id) + .then((res) => { + if (res.code == 500) { + // 濡傛灉闀垮害涓�0锛屾彁绀虹敤鎴峰苟涓斾笉杩涜鍚庣画鎿嶄綔 + ElMessage.warning("鎻愮ず锛氭病鏈夊彲鍥炴斁鐨勬暟鎹紒"); + return; // 闃绘鍚庣画鎿嶄綔 + } else { + simStore.rePlayList = res.data; + console.log(simStore.rePlayList, "lisi"); + } + // 浣跨敤 nextTick 纭繚 DOM 鏇存柊鍚庡啀鎵ц鍚庣画鎿嶄綔 + nextTick(() => { + initeWaterPrimitiveView(); + startSimulate(); + }); + }) + .catch((error) => { + console.log("璇锋眰澶辫触锛�", error); + // 閿欒澶勭悊 + }); } function handleBack(value) { @@ -221,10 +221,10 @@ item.result == "鍒涘缓浠跨湡" || item.result == "瀹屾垚" || item.result == "-1" || - item.result == null + item.result == "鍋滄" || + item.result == "杩愯涓�" ); simAPIStore.shouldPoll = !shouldStop; // 淇敼 Pinia 鐘舵�� - console.log(shouldStop, "aaaaaaaaaaaaaaaa"); // 3. 濡傛灉闇�瑕佸仠姝� if (shouldStop) { if (intervalId) { -- Gitblit v1.9.3