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 | 515 +++++++++++++++++++++++--------------------------------- 1 files changed, 210 insertions(+), 305 deletions(-) diff --git a/src/components/monifangzhen/schemeCard.vue b/src/components/monifangzhen/schemeCard.vue index b3499b8..c8c6c6e 100644 --- a/src/components/monifangzhen/schemeCard.vue +++ b/src/components/monifangzhen/schemeCard.vue @@ -1,9 +1,6 @@ <template> <div class="listCard"> <!-- <div>鏂规鏁伴噺: {{ simStore.schemCard.length }}</div> --> - <!-- 鎺ュ彛鐗堟湰鍒犻櫎璇ヤ唬鐮佸潡 --> - <!-- <el-card v-if="!schemeInfoShow" v-for="(item, key) in simStore.schemCard" :key="key" - :class="{ selected: selectedId === item.id }" @click="selectScheme(item.id)"> --> <el-card v-if="!schemeInfoShow" v-for="(item, key) in schemeList" @@ -16,9 +13,9 @@ <p>鍒涘缓鏃堕棿 : {{ formatTime(item.createTime) }}</p> <p> 鏂规鐘舵�� : - <span style="color: aquamarine">{{ - statusText[item.taskStatus] || "鏈煡" - }}</span> + <span style="color: aquamarine"> + {{ item.result === "-1" ? "鍑洪敊" : item.result || "鍒涘缓浠跨湡" }} + </span> </p> </div> <div class="cardMenu"> @@ -26,8 +23,16 @@ <el-button size="small" @click="setSchemClick(item)" >鏂规璇︽儏</el-button > - <el-button size="small" @click="startPlay(item)">杩涘叆妯℃嫙</el-button> - <!-- :disabled="item.taskStatus !== 2" --> + <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> </el-card> @@ -36,8 +41,8 @@ :selectedScheme="currentScheme" @back="handleBack" /> + <flowRateTab v-if="schemeInfoShow"> 123 </flowRateTab> </div> - <Message @close="close" class="mess" @@ -48,16 +53,34 @@ <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 { + getSimData, + deleteSimData, + getSimStart, + getSimDataById, + getSimresult, +} from "@/api/trApi.js"; const simStore = useSimStore(); +const simAPIStore = SimAPIStore(); // 閫変腑鐨勬柟妗� ID const selectedId = ref(null); // 褰撳墠閫変腑鐨勬柟妗堜俊鎭� @@ -66,286 +89,117 @@ function selectScheme(id) { selectedId.value = id; } -// simStore.setSchemCard([ -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2025-01-13 19:33:04", -// datPath: "e:/data/hydro/11011611021801/1878767214615695362", -// dataType: 2, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2023-08-01 01:59:59", -// fileCount: 299, -// fileName: "涓滄睙娌熼洦閲忚0110.xls", -// hotStart: false, -// id: "1878767214431145986", -// name: "闄嶉洦鏁版嵁锛氭埧灞卞尯涓滄睙娌熸暟鎹�", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2023-07-30 00:00:00", -// taskId: "1878767214615695362", -// taskStatus: 2, -// updateTime: "2025-01-13 19:33:04", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2025-01-10 14:33:49", -// datPath: "e:/data/hydro/11011611021801/1877604741980196866", -// dataType: 2, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2023-08-02 01:00:00", -// fileCount: 450, -// fileName: "涓滄睙娌熼洦閲忚0110.xls", -// hotStart: false, -// id: "1877604741590126594", -// name: "涓滄睙娌�0729-0801", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2023-07-29 22:00:00", -// taskId: "1877604741980196866", -// taskStatus: 2, -// updateTime: "2025-01-10 14:33:49", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2024-12-27 12:28:45", -// datPath: "e:/data/hydro/11011611021801/1872499838538584065", -// dataType: 2, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2023-08-02 09:00:00", -// fileCount: 654, -// fileName: "涓滄睙娌熼洦閲忚0110.xls", -// hotStart: false, -// id: "1872499838278537217", -// name: "鍖椾含甯�731鏆撮洦", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2023-07-28 20:00:00", -// taskId: "1872499838538584065", -// taskStatus: 2, -// updateTime: "2024-12-27 12:28:45", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2024-12-20 15:00:11", -// datPath: "e:/data/hydro/11011611021801/1870001233680502786", -// dataType: 0, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2024-12-20 06:00:00", -// fileCount: 86, -// fileName: "", -// hotStart: false, -// id: "1870001233646948354", -// name: "闆ㄥ己30mm", -// noRainTime: 0, -// outputPeriod: 300, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2024-12-20 00:00:00", -// taskId: "1870001233680502786", -// taskStatus: 2, -// updateTime: "2024-12-20 15:00:11", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2024-12-19 17:34:34", -// datPath: "e:/data/hydro/11011611021801/1869677696923045889", -// dataType: 2, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2023-08-01 03:00:44", -// fileCount: 388, -// fileName: "鎴祦鍧濋洦閲忚0068.xls", -// hotStart: false, -// id: "1869677696608473090", -// name: "鎴祦鍧濇暟鎹ā鎷�0729-0731", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2023-07-29 21:00:13", -// taskId: "1869677696923045889", -// taskStatus: 2, -// updateTime: "2024-12-19 17:34:34", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2024-12-13 15:03:24", -// datPath: "e:/data/hydro/11011611021801/1867465327392165890", -// dataType: 2, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2023-07-31 12:00:00", -// fileCount: 288, -// fileName: "涓滄睙娌熼洦閲忚0110.xls", -// hotStart: false, -// id: "1867465327106953218", -// name: "涓滄睙娌熸暟鎹ā鎷�0729-0731", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2023-07-29 12:00:00", -// taskId: "1867465327392165890", -// taskStatus: 2, -// updateTime: "2024-12-13 15:03:24", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2024-11-28 19:01:16", -// datPath: "e:/data/hydro/11011611021801/1862089369491931138", -// dataType: 2, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2023-07-31 00:00:00", -// fileCount: 145, -// fileName: "涓滄睙娌熼洦閲忚0110.xls", -// hotStart: false, -// id: "1862089369462571010", -// name: "涓滄睙娌熼洦閲�0731", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2023-07-30 00:00:00", -// taskId: "1862089369491931138", -// taskStatus: 2, -// updateTime: "2024-11-28 19:01:16", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2024-11-28 18:47:45", -// datPath: "e:/data/hydro/11011611021801/1862085967261270017", -// dataType: 0, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2024-08-31 00:00:00", -// fileCount: 145, -// fileName: "", -// hotStart: false, -// id: "1862085967252881410", -// name: "闆ㄥ己妯℃嫙鏂规0830", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2024-08-30 00:00:00", -// taskId: "1862085967261270017", -// taskStatus: 2, -// updateTime: "2024-11-28 18:47:45", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2024-11-28 18:39:49", -// datPath: "e:/data/hydro/11011611021801/1862083971414294529", -// dataType: 1, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2024-07-31 00:00:00", -// fileCount: 145, -// fileName: "", -// hotStart: false, -// id: "1862083971003252737", -// name: "闆ㄩ噺妯℃嫙鏂规0730", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2024-07-30 00:00:00", -// taskId: "1862083971414294529", -// taskStatus: 2, -// updateTime: "2024-11-28 18:39:49", -// userId: "0", -// }, -// { -// area: "瀛欒儭娌�", -// areaId: "0", -// createTime: "2024-11-28 17:26:45", -// datPath: "e:/data/hydro/11011611021801/1862065584806100994", -// dataType: 0, -// dataValue: "", -// depthThreshold: 0, -// endTime: "2024-11-28 09:26:17", -// fileCount: 57, -// fileName: "", -// hotStart: false, -// id: "1862065584743186434", -// name: "闆ㄥ己妯℃嫙鏂规1128", -// noRainTime: 0, -// outputPeriod: 600, -// shpPath: "e:/data/hydro/11011611021801/shp", -// simulateType: 1, -// startTime: "2024-11-28 00:00:00", -// taskId: "1862065584806100994", -// taskStatus: 2, -// updateTime: "2024-11-28 17:26:45", -// userId: "0", -// }, -// ]); -const statusText = { - 0: "鏈紑濮�", - 1: "杩涜涓�", - 2: "宸插畬鎴�", -}; + function formatTime(time) { return dayjs(time).format("YYYY-MM-DD HH:mm:ss"); } + const messageShow = ref(false); + const schemeInfoShow = ref(false); + const mesData = ref(null); + function setSchemClick(item) { mesData.value = item; messageShow.value = true; } + function close() { messageShow.value = false; } -function startPlay(item) { - // if (item.taskStatus !== 2) { - // alert("褰撳墠鏂规灏氭湭瀹屾垚锛屾棤娉曡繘鍏ユā鎷燂紒"); - // return; - // } - currentScheme.value = item; - schemeInfoShow.value = true; - emit("closeBtn", false); - initeWaterPrimitiveView(); - emit("start"); +// 瀹炴椂妯℃嫙浜斿垎閽熻姹備竴娆$殑瀹氭椂鍣� +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) { + ElMessage.error("褰撳墠鏂规鍒嗘瀽鍑洪敊,璇烽噸鏂版柊寤烘柟妗堬紒"); + return; + } + + // 濡傛灉鏄凡瀹屾垚鐨勬柟妗堬紙status == 10锛� + if (item.status === 10) { + const flyHeight = item.areaType === 1 ? 100000 : 50000; + simStore.setSelectedScheme(item); + + if (item.areaType === 1) { + EventBus.emit("select-geom", { + geom: item.geom, + flyHeight, + shouldShowFill: false, + }); + } else { + initeWaterPrimitiveView(); + } + + currentScheme.value = item; + schemeInfoShow.value = true; + emit("closeBtn", false); + 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) { if (value === false) { schemeInfoShow.value = false; } } + const handleHideSchemeInfo = () => { schemeInfoShow.value = false; emit("closeBtn", true); @@ -354,47 +208,94 @@ // 娉ㄥ唽浜嬩欢鐩戝惉鍣� EventBus.on("hide-schemeInfo", handleHideSchemeInfo); -//////////////////////////////////// 鏆撮湶閫変腑鐨� ID 缁欑埗缁勪欢锛堟帴鍙g増鏈垹闄わ級//////////////////////////////////// -// defineExpose({ -// getSelectedId: () => selectedId.value, -// }); - -/////////////////////// 璋冪敤鎺ュ彛锛堜娇鐢ㄦ椂鎵撳紑锛� /////////////////////// -import { getData, getSimData, deleteSimData } from "@/api/trApi.js"; -onMounted(() => { - getScheme(); -}); - -const props = defineProps({ - deleteSim: Boolean, // 鎺ユ敹鐖剁粍浠朵紶閫掔殑鍑芥暟 -}); - -watch( - () => props.deleteSim, - (newVal) => { - if (newVal) { - console.log(newVal); - deleteSim(); - emit("reset"); - } - } -); - const schemeList = ref([]); - +let intervalId = null; // 鐢ㄤ簬瀛樺偍 setInterval 鐨勮繑鍥炲�� +// 鑾峰彇鏂规鍒楄〃 async function getScheme() { try { const res = await getSimData(); schemeList.value = res.data; + + const shouldStop = schemeList.value.every( + (item) => + item.result == "鍒涘缓浠跨湡" || + item.result == "瀹屾垚" || + item.result == "-1" || + item.result == "鍋滄" || + item.result == "杩愯涓�" + ); + simAPIStore.shouldPoll = !shouldStop; // 淇敼 Pinia 鐘舵�� + // 3. 濡傛灉闇�瑕佸仠姝� + if (shouldStop) { + if (intervalId) { + clearInterval(intervalId); + intervalId = null; + console.log("鍋滄杞"); + } + return; + } } catch (error) { console.error("Error fetching data:", error); } } +// 鐩戝惉 shouldPoll 鐘舵�佸彉鍖� +watch( + () => simAPIStore.shouldPoll, + (isStarted) => { + if (isStarted) { + getScheme(); // 棣栨绔嬪嵆鑾峰彇涓�娆� + intervalId = setInterval(getScheme, 60 * 1000); // 姣忛殧涓�鍒嗛挓鎵ц + } + // else if (intervalId !== null) { + // clearInterval(intervalId); + // intervalId = null; + // } + }, + { immediate: true } +); + +const props = defineProps({ + deleteSim: Boolean, // 鎺ユ敹鐖剁粍浠朵紶閫掔殑鍑芥暟 + showAddIns: Boolean, +}); + +// 鏂板缓鏂规瀹屾垚涔嬪悗鏂规鍒楄〃闇�瀹炴椂鍒锋柊 +watch( + () => props.showAddIns, + (newVal) => { + if (newVal == false) { + getScheme(); + } + } +); +// 鍒犻櫎浠跨湡鍒楄〃 +watch( + () => props.deleteSim, + (newVal) => { + if (newVal) { + deleteSim(); + emit("reset"); + } + } +); const deleteSim = () => { - ElMessageBox.confirm("纭畾瑕佸垹闄よ鏂规鍚�?", "鍒犻櫎鏂规", { + // 纭繚鏈夐�変腑鐨勬柟妗� + if (!selectedId.value) { + ElMessage({ + type: "warning", + message: "璇峰厛閫夋嫨涓�涓柟妗堣繘琛屽垹闄わ紒", + }); + return; + } + const selectedScheme = schemeList.value.find( + (item) => item.id === selectedId.value + ); + const schemeName = selectedScheme ? selectedScheme.name : "鏈煡鏂规"; + ElMessageBox.confirm(`纭畾瑕佸垹闄ゆ柟妗� "${schemeName}" 鍚�?`, "鍒犻櫎鏂规", { confirmButtonText: "纭畾", cancelButtonText: "鍙栨秷", + type: "warning", }) .then(() => { deleteSimData(selectedId.value).then((res) => { @@ -402,19 +303,23 @@ }); ElMessage({ type: "success", - message: "鍒犻櫎鎴愬姛", + message: `鏂规 "${schemeName}" 鍒犻櫎鎴愬姛`, }); }) - .catch(() => { - ElMessage({ - type: "info", - message: "宸插彇娑堝垹闄�", - }); - }); + .catch(() => {}); }; -/////////////////////// 璋冪敤鎺ュ彛缁撴潫 /////////////////////// + +onMounted(() => { + getScheme(); // 椤甸潰鍔犺浇鏃剁珛鍗宠幏鍙栨暟鎹� +}); + onUnmounted(() => { EventBus.off("hide-schemeInfo", handleHideSchemeInfo); + + if (intervalId !== null) { + clearInterval(intervalId); // 娓呴櫎瀹氭椂鍣� + intervalId = null; // 閲嶇疆 intervalId + } }); </script> -- Gitblit v1.9.3