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 | 141 +++++++++++++++++++++++++++++----------------- 1 files changed, 88 insertions(+), 53 deletions(-) diff --git a/src/components/monifangzhen/schemeCard.vue b/src/components/monifangzhen/schemeCard.vue index 3d1d2d1..c8c6c6e 100644 --- a/src/components/monifangzhen/schemeCard.vue +++ b/src/components/monifangzhen/schemeCard.vue @@ -14,12 +14,8 @@ <p> 鏂规鐘舵�� : <span style="color: aquamarine"> - {{ item.result === -1 ? "鍑洪敊" : item.result || "鍒涘缓浠跨湡" }} + {{ item.result === "-1" ? "鍑洪敊" : item.result || "鍒涘缓浠跨湡" }} </span> - <!-- <span style="color: aquamarine">{{ item.result || "鍒涘缓浠跨湡" }}</span> --> - <!-- <span style="color: aquamarine">{{ - statusText[item.status] || "鏈煡" - }}</span> --> </p> </div> <div class="cardMenu"> @@ -27,7 +23,15 @@ <el-button size="small" @click="setSchemClick(item)" >鏂规璇︽儏</el-button > - <el-button size="small" @click="startPlay(item)">杩涘叆妯℃嫙</el-button> + <el-button + size="small" + v-show="item.type !== 2" + @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> @@ -37,6 +41,7 @@ :selectedScheme="currentScheme" @back="handleBack" /> + <flowRateTab v-if="schemeInfoShow"> 123 </flowRateTab> </div> <Message @close="close" @@ -48,21 +53,30 @@ <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"; import { useSimStore } from "@/store/simulation.js"; import { SimAPIStore } from "@/store/simAPI"; import schemeInfo from "@/components/monifangzhen/schemeInfo.vue"; +import flowRateTab from "@/components/monifangzhen/flowRateTab.vue"; 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(); @@ -75,14 +89,6 @@ function selectScheme(id) { selectedId.value = id; } - -const statusText = { - 0: "鍒涘缓浠跨湡", - 1: "棰勫鐞�", - 2: "鍒嗘瀽涓�", - 10: "瀹屾垚", - 20: "鍑洪敊", -}; function formatTime(time) { return dayjs(time).format("YYYY-MM-DD HH:mm:ss"); @@ -103,61 +109,89 @@ messageShow.value = false; } -function startPlay(item) { - // 鍒嗘瀽涓� - if (item.status == 2) { +// 瀹炴椂妯℃嫙浜斿垎閽熻姹備竴娆$殑瀹氭椂鍣� +const realTimeSimInterval = ref(null); + +const { startSimulate, endSimulate } = inject("simulateActions"); + +async function startPlay(item) { + if (item.status === 2) { ElMessage.warning("褰撳墠鏂规姝e湪鍒嗘瀽涓�,鏃犳硶杩涘叆妯℃嫙锛�"); return; } - // 鍑洪敊 - if (item.status == 20) { + + if (item.status === 20) { ElMessage.error("褰撳墠鏂规鍒嗘瀽鍑洪敊,璇烽噸鏂版柊寤烘柟妗堬紒"); return; } - // 璋冪敤姹傝В鍣ㄥ苟鎷垮埌鏈�鏂扮敓鎴愮殑serviceName - // 鏂板垱寤虹殑鏂规娌℃湁鐘舵�佷互鍙妔erviceName鍒欐墽琛岃皟鐢ㄦ眰瑙e櫒 - if (!item.status && !item.serviceName) { - getSimStart(item.id).then((res) => { - getSimDataById(item.id).then((res) => { - item.serviceName = res.data[0].serviceName; - simStore.setSelectedScheme(item); - console.log(item, "鏃犳湇鍔″悕绉�"); - ElMessage.warning("褰撳墠鏂规姝e湪鍒嗘瀽涓�,璇风◢鍚庡啀妯℃嫙"); - getScheme(); - }); - }); - } else { + + // 濡傛灉鏄凡瀹屾垚鐨勬柟妗堬紙status == 10锛� + if (item.status === 10) { + const flyHeight = item.areaType === 1 ? 100000 : 50000; simStore.setSelectedScheme(item); - console.log("鏈夋湇鍔″悕绉�"); - } - const flyHeight = ref(100000); - - const shouldShowFill = false; - - // 姹傝В鍣ㄦ眰瑙e畬鎴愪箣鍚庢墠鍙互鏄剧ず鏃堕棿杞� - if (item.status == 10) { - // 鍙湁琛屾斂鍖哄垝鎵ц - if (item.areaType == 1) { - flyHeight.value = 100000; + if (item.areaType === 1) { EventBus.emit("select-geom", { geom: item.geom, - flyHeight: flyHeight.value, - shouldShowFill: shouldShowFill, + flyHeight, + shouldShowFill: false, }); } else { - // 瀛欒儭娌熷尯鍩熻烦杞瑙� initeWaterPrimitiveView(); } + currentScheme.value = item; schemeInfoShow.value = true; emit("closeBtn", false); - emit("start"); + startSimulate(); + return; } + + // 鏂板缓鏂规锛屾病鏈� status 鍜� serviceName 涓� type != 2 + if (!item.status && !item.serviceName && item.type !== 2) { + try { + await getSimStart(item.id); + const res = await getSimDataById(item.id); + + item.serviceName = res.data[0]?.serviceName || null; + simStore.setSelectedScheme(item); + ElMessage.warning("褰撳墠鏂规姝e湪鍒嗘瀽涓�,璇风◢鍚庡啀妯℃嫙"); + getScheme(); + } catch (e) { + console.error("鑾峰彇妯℃嫙鏁版嵁澶辫触锛�", e); + } + return; + } + + // 榛樿鎯呭喌锛氭湁鏈嶅姟鍚嶇О + simStore.setSelectedScheme(item); } -function endPlay() { - emit("end"); +// 瀹炴椂妯℃嫙鍘嗗彶鍥炴斁 +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) { @@ -186,7 +220,9 @@ (item) => item.result == "鍒涘缓浠跨湡" || item.result == "瀹屾垚" || - item.result == "-1" + item.result == "-1" || + item.result == "鍋滄" || + item.result == "杩愯涓�" ); simAPIStore.shouldPoll = !shouldStop; // 淇敼 Pinia 鐘舵�� // 3. 濡傛灉闇�瑕佸仠姝� @@ -207,7 +243,6 @@ watch( () => simAPIStore.shouldPoll, (isStarted) => { - console.log(isStarted, "瀹氭椂鍣�"); if (isStarted) { getScheme(); // 棣栨绔嬪嵆鑾峰彇涓�娆� intervalId = setInterval(getScheme, 60 * 1000); // 姣忛殧涓�鍒嗛挓鎵ц -- Gitblit v1.9.3