From a57caa72a54efe9de3fe26a6c36d3e8038267377 Mon Sep 17 00:00:00 2001 From: guonan <guonan201020@163.com> Date: 星期四, 17 七月 2025 09:09:49 +0800 Subject: [PATCH] 修改x按钮 --- src/components/monifangzhen/schemeCard.vue | 408 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 347 insertions(+), 61 deletions(-) diff --git a/src/components/monifangzhen/schemeCard.vue b/src/components/monifangzhen/schemeCard.vue index 2a396c0..b3d1b9d 100644 --- a/src/components/monifangzhen/schemeCard.vue +++ b/src/components/monifangzhen/schemeCard.vue @@ -1,44 +1,90 @@ <template> <div class="listCard"> <!-- <div>鏂规鏁伴噺: {{ simStore.schemCard.length }}</div> --> - <el-card v-if="!schemeInfoShow" v-for="(item, key) in schemeList" :key="key" - :class="{ selected: selectedId === item.id }" @click="selectScheme(item.id)"> + <el-card + v-if="!schemeInfoShow" + v-for="(item, key) in schemeList" + :key="key" + :class="{ selected: selectedId === item.id }" + @click="selectScheme(item.id)" + > <div> <p>鏂规鍚嶇О : {{ item.name }}</p> <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"> <div style="float: right; margin-top: 3px"> - <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" @click="setSchemClick(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> </el-card> - <schemeInfo v-if="schemeInfoShow" :selectedScheme="currentScheme" @back="handleBack" /> + <schemeInfo + v-if="schemeInfoShow" + :selectedScheme="currentScheme" + @back="handleBack" + /> + <flowRateTab v-if="schemeInfoShow"> 123 </flowRateTab> </div> - - <Message @close="close" class="mess" v-show="messageShow" :mesData="mesData" /> + <Message + @close="close" + class="mess" + v-show="messageShow" + :mesData="mesData" + /> </template> <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"; + +import { getAeraTownCode, getDeviceNWJ } from "@/api/hpApi"; +import { createPoint, removeEntities, clearAllPoints } from "@/utils/map"; +import { deviceDictList, getDictName } from "@/constant/dict.js"; const simStore = useSimStore(); +const simAPIStore = SimAPIStore(); // 閫変腑鐨勬柟妗� ID const selectedId = ref(null); // 褰撳墠閫変腑鐨勬柟妗堜俊鎭� @@ -48,44 +94,253 @@ selectedId.value = id; } -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"); + +const BJCode = ref([ + { label: "瀵嗕簯鍖�", value: "110118000000" }, + { label: "鎴垮北鍖�", value: "110111000000" }, + { label: "闂ㄥご娌熷尯", value: "110109000000" }, + { label: "寤跺簡鍖�", value: "110119000000" }, + { label: "鎬�鏌斿尯", value: "110116000000" }, + { label: "鏄屽钩鍖�", value: "110114000000" }, + { label: "骞宠胺鍖�", value: "110117000000" }, + { label: "娴锋穩鍖�", value: "110108000000" }, + { label: "鐭虫櫙灞卞尯", value: "110107000000" }, + { label: "涓板彴鍖�", value: "110106000000" }, +]); + +async function startPlay(item) { + simStore.openDia = false; + clearAllPoints(); + const areaName = item.areaName; + + let districtCode; + + // 1. 鍒ゆ柇鏄惁鍖呭惈 鈥滃尯鈥� + if (!areaName.includes("鍖�")) { + console.log( + `鏂规涓ā鎷熴��${areaName}銆戜笉鍖呭惈鈥滃尯鈥濓紝浣跨敤榛樿缂栫爜锛氭��鏌斿尯(110116000000)` + ); + districtCode = "110116000000"; // 鎵嬪姩鎸囧畾涓烘��鏌斿尯缂栫爜 + } else { + // 2. 鍦� BJCode 涓煡鎵惧尮閰嶇殑鍖哄煙 value + const matchedArea = BJCode.value.find((area) => area.label === areaName); + + if (!matchedArea) { + console.warn(`鏈壘鍒� ${areaName} 瀵瑰簲鐨勫尯鍩熺紪鐮乣); + return; + } + + districtCode = matchedArea.value; + } + + // 1. 鑾峰彇涔¢晣鍖哄煙缂栫爜 + const areaRes = await getAeraTownCode(districtCode); + const districtCodes = areaRes.data.map((item) => item.districtCode); + + // 2. 娉ヤ綅璁$被鍨婭D + const ids = "1437295811"; + + // 3. 骞惰璇锋眰鎵�鏈夎澶囨暟鎹� + const requests = districtCodes.map((code) => + getDeviceNWJ(ids, code) + .then((res) => res.data?.pageData || []) // 瀹夊叏鎻愬彇 pageData + .catch((err) => { + console.error(`璇锋眰澶辫触 (code: ${code})`, err); + return []; // 鍑洪敊鏃朵篃杩斿洖绌烘暟缁勶紝閬垮厤 Promise.all 涓柇 + }) + ); + + // 4. 绛夊緟鎵�鏈夎姹傚畬鎴� + const allPageDataArrays = await Promise.all(requests); + + // 5. 鍚堝苟浜岀淮鏁扮粍涓轰竴缁存暟缁� + const mergedPageData = allPageDataArrays.flat(); + + // 6. 濡傛灉涓嶆槸鈥滃尯鈥濓紝鍒欒繃婊ゅ嚭 deviceName 鍖呭惈 "瀛欒儭娌�" 鐨勮澶� + const filteredPageData = areaName.includes("鍖�") + ? mergedPageData + : mergedPageData.filter((device) => device.deviceName.includes("瀛欒儭娌�")); + + // 瀛欒儭娌熻澶囩粡绾害鏄犲皠 + const deviceMapping = { + 鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸ご鏍戝簳涓嬩笢娌熸偿浣嶈5007: { + lon: 116.598891, + lat: 40.554979, + }, + 鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌熸偿浣嶈5006: { + lon: 116.593215, + lat: 40.554399, + }, + }; + + let displayedData = filteredPageData; + + if (!areaName.includes("鍖�")) { + // 娣诲姞 lon 鍜� lan 瀛楁 + displayedData = filteredPageData.map((device) => { + const mapping = deviceMapping[device.deviceName]; + return { + ...device, + ...(mapping && { lon: mapping.lon, lat: mapping.lat }), // 濡傛灉 mapping 瀛樺湪锛屾墠娣诲姞 + }; + }); + + // 娣诲姞棰濆鐨勪袱涓偣浣� + const extraPoint1 = { + deviceName: "寮矡1", + longitude: 116.597836, + latitude: 40.564962, + // height: 530.14, + type: "娉ヤ綅璁�", + lon: 116.597836, + lat: 40.564962, + dictDeviceType: "1437295811", + deviceId: "custom_extraPoint1", // 鎵嬪姩鍔犱竴涓敮涓� ID + }; + + const extraPoint2 = { + deviceName: "寮矡2", + longitude: 116.591571, + latitude: 40.573093, + // height: 483.89, + type: "娉ヤ綅璁�", + lon: 116.591571, + lat: 40.573093, + dictDeviceType: "1437295811", + deviceId: "custom_extraPoint2", // 鎵嬪姩鍔犱竴涓敮涓� ID + }; + + displayedData = [...displayedData, extraPoint1, extraPoint2]; + // displayedData = [...displayedData, extraPoint1]; + } + + console.log( + displayedData, + areaName.includes("鍖�") + ? "鍏ㄩ儴娉ヤ綅璁¤澶囧垪琛�" + : "瀛欒儭娌熸偿浣嶈 + 棰濆鐐逛綅鍒楄〃" + ); + + // 7. 鍒涘缓鐐� + displayedData.forEach((item) => { + // 鏍规嵁闇�姹傚彲澧炲垹 + item.type = getDictName(deviceDictList, item.dictDeviceType); + item.name = item.deviceName; + item.id = item.deviceId; + item.className = "device"; + item.showLabel = true; + + createPoint(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, "瀹炴椂妯℃嫙鍘嗗彶鍥炴斁鍒楄〃"); + } + // 浣跨敤 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); @@ -94,29 +349,57 @@ // 娉ㄥ唽浜嬩欢鐩戝惉鍣� EventBus.on("hide-schemeInfo", handleHideSchemeInfo); +const schemeList = ref([]); +let intervalId = null; // 鐢ㄤ簬瀛樺偍 setInterval 鐨勮繑鍥炲�� +// 鑾峰彇鏂规鍒楄〃 +async function getScheme() { + try { + const res = await getSimData(); + schemeList.value = res.data; -/////////////////////// 璋冪敤鎺ュ彛锛堜娇鐢ㄦ椂鎵撳紑锛� /////////////////////// -import { getRegionData, getSimData, deleteSimData } from "@/api/trApi.js"; + 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); + } +} -onMounted(() => { - getScheme(); -}); +// 鐩戝惉 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, }); - -// 鑾峰彇浠跨湡鍒楄〃 -const schemeList = ref([]); -async function getScheme() { - try { - const res = await getSimData(); - schemeList.value = res.data; - } catch (error) { - console.error("Error fetching data:", error); - } -} // 鏂板缓鏂规瀹屾垚涔嬪悗鏂规鍒楄〃闇�瀹炴椂鍒锋柊 watch( @@ -127,19 +410,16 @@ } } ); - // 鍒犻櫎浠跨湡鍒楄〃 watch( () => props.deleteSim, (newVal) => { if (newVal) { - console.log(newVal); deleteSim(); emit("reset"); } } ); - const deleteSim = () => { // 纭繚鏈夐�変腑鐨勬柟妗� if (!selectedId.value) { @@ -149,17 +429,15 @@ }); return; } - const selectedScheme = schemeList.value.find((item) => item.id === selectedId.value); + const selectedScheme = schemeList.value.find( + (item) => item.id === selectedId.value + ); const schemeName = selectedScheme ? selectedScheme.name : "鏈煡鏂规"; - ElMessageBox.confirm( - `纭畾瑕佸垹闄ゆ柟妗� "${schemeName}" 鍚�?`, - "鍒犻櫎鏂规", - { - confirmButtonText: "纭畾", - cancelButtonText: "鍙栨秷", - type: "warning", - } - ) + ElMessageBox.confirm(`纭畾瑕佸垹闄ゆ柟妗� "${schemeName}" 鍚�?`, "鍒犻櫎鏂规", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) .then(() => { deleteSimData(selectedId.value).then((res) => { getScheme(); @@ -169,12 +447,20 @@ message: `鏂规 "${schemeName}" 鍒犻櫎鎴愬姛`, }); }) - .catch(() => { - }); + .catch(() => {}); }; -/////////////////////// 璋冪敤鎺ュ彛缁撴潫 /////////////////////// + +onMounted(() => { + getScheme(); // 椤甸潰鍔犺浇鏃剁珛鍗宠幏鍙栨暟鎹� +}); + onUnmounted(() => { EventBus.off("hide-schemeInfo", handleHideSchemeInfo); + + if (intervalId !== null) { + clearInterval(intervalId); // 娓呴櫎瀹氭椂鍣� + intervalId = null; // 閲嶇疆 intervalId + } }); </script> -- Gitblit v1.9.3