src/api/trApi.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/monifangzhen/echartInfo.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/monifangzhen/schemeCard.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/tools/LayerTree.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/tools/Message.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/tools/TopographyDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/store/simAPI.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/store/simulation.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/CitySim.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/KGSim.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/KGSimOption/HistorySimulation.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/KGSimOption/PredictiveSimulation.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/KGSimOption/RealTimeSimulation copy.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/trApi.js
@@ -24,8 +24,10 @@ // è·åæ¹æ¡å表 export async function getSimData() { try { const res = await instance.get("/simu/selectPage"); return res.data; // è¿åå®é æ°æ®ï¼é常 res.data ææ¯æ¥å£è¿åçå å®¹ï¼ const res = await instance.get("/simu/selectPage", { params: { pageSize: 100 }, }); return res.data; } catch (error) { console.error("Error fetching data:", error); throw error; // æåºé误ï¼è®©è°ç¨æ¹å¯ä»¥æè· @@ -36,7 +38,7 @@ export async function getSimDataById(id) { try { const res = await instance.get(`/simu/selectPage?id=${id}`); return res.data; // è¿åå®é æ°æ®ï¼é常 res.data ææ¯æ¥å£è¿åçå å®¹ï¼ return res.data; } catch (error) { console.error("Error fetching data:", error); throw error; // æåºé误ï¼è®©è°ç¨æ¹å¯ä»¥æè· @@ -132,7 +134,7 @@ // è·åæ°´ä½æ°´æ·± export async function getFlowRate(data) { // console.log(data,'åéçæ°æ®ï¼'); try { const res = await instance.get("/simu/position", { params: data src/components/monifangzhen/echartInfo.vue
@@ -350,6 +350,7 @@ rainfallData.value = rainfallData.value.map((item) => ({ ...item, intensity: item.intensity * 60, total: item.total * 60, })); } src/components/monifangzhen/schemeCard.vue
@@ -13,7 +13,10 @@ <p>å建æ¶é´ : {{ formatTime(item.createTime) }}</p> <p> æ¹æ¡ç¶æ : <span style="color: aquamarine">{{ item.result || "å建仿ç" }}</span> <span style="color: aquamarine"> {{ item.result === -1 ? "åºé" : item.result || "å建仿ç" }} </span> <!-- <span style="color: aquamarine">{{ item.result || "å建仿ç" }}</span> --> <!-- <span style="color: aquamarine">{{ statusText[item.status] || "æªç¥" }}</span> --> @@ -50,12 +53,20 @@ 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 { ElMessage, ElMessageBox } from "element-plus"; const emit = defineEmits(["start", "end", "reset", "closeBtn"]); import { getSimStart, getSimDataById } from "@/api/trApi"; import { getRegionData, getSimData, deleteSimData, getSimStart, getSimDataById, } from "@/api/trApi.js"; const simStore = useSimStore(); const simAPIStore = SimAPIStore(); // éä¸çæ¹æ¡ ID const selectedId = ref(null); // å½åéä¸çæ¹æ¡ä¿¡æ¯ @@ -72,16 +83,22 @@ 10: "宿", 20: "åºé", }; 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; } @@ -113,8 +130,11 @@ simStore.setSelectedScheme(item); console.log("ææå¡åç§°"); } const flyHeight = ref(100000); const shouldShowFill = false; // æ±è§£å¨æ±è§£å®æä¹åæå¯ä»¥æ¾ç¤ºæ¶é´è½´ if (item.status == 10) { // åªæè¡æ¿åºåæ§è¡ @@ -135,14 +155,17 @@ emit("start"); } } function endPlay() { emit("end"); } function handleBack(value) { if (value === false) { schemeInfoShow.value = false; } } const handleHideSchemeInfo = () => { schemeInfoShow.value = false; emit("closeBtn", true); @@ -151,26 +174,6 @@ // 注åäºä»¶çå¬å¨ EventBus.on("hide-schemeInfo", handleHideSchemeInfo); /////////////////////// è°ç¨æ¥å£ï¼ä½¿ç¨æ¶æå¼ï¼ /////////////////////// import { getRegionData, getSimData, deleteSimData } from "@/api/trApi.js"; onMounted(() => { getScheme(); // 页é¢å è½½æ¶ç«å³è·åæ°æ® intervalId = setInterval(getScheme, 60 * 1000); // æ¯éä¸åéæ§è¡ä¸æ¬¡ }); onUnmounted(() => { if (intervalId !== null) { clearInterval(intervalId); // æ¸ é¤å®æ¶å¨ intervalId = null; // éç½® intervalId } }); const props = defineProps({ deleteSim: Boolean, // æ¥æ¶ç¶ç»ä»¶ä¼ éç彿° showAddIns: Boolean, }); const schemeList = ref([]); let intervalId = null; // ç¨äºåå¨ setInterval çè¿åå¼ // è·åæ¹æ¡å表 @@ -178,10 +181,49 @@ try { const res = await getSimData(); schemeList.value = res.data; const shouldStop = schemeList.value.every( (item) => item.result == "å建仿ç" || item.result == "宿" || item.result == "-1" ); 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) => { console.log(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( @@ -231,9 +273,18 @@ }) .catch(() => {}); }; /////////////////////// è°ç¨æ¥å£ç»æ /////////////////////// onMounted(() => { getScheme(); // 页é¢å è½½æ¶ç«å³è·åæ°æ® }); onUnmounted(() => { EventBus.off("hide-schemeInfo", handleHideSchemeInfo); if (intervalId !== null) { clearInterval(intervalId); // æ¸ é¤å®æ¶å¨ intervalId = null; // éç½® intervalId } }); </script> src/components/tools/LayerTree.vue
@@ -101,7 +101,9 @@ // åå§åå°å½¢æ°æ®ï¼ä½¿ç¨awaitçå¾ Promiseè§£æï¼ TerrainLayer = await earthCtrl.factory.createTerrainLayer({ sourceType: "ctb", url: "http://106.120.22.26:9103/gisserver/ctsserver/sungugoudem", url: "http://106.120.22.26:9103/gisserver/ctsserver/sunhugoudem", // url: "https://tiles1.geovisearth.com/base/v1/terrain?token=486dac3bec56d7d7c2a581c150be2bd937462f1e8f3bc9c78b5658b396122405", requestVertexNormals: true, }); treeMap.set("å°å½¢æ°æ®", TerrainLayer); @@ -187,27 +189,27 @@ if (label === "综åçæµè®¾å¤ä¿¡æ¯") { simStore.DeviceShowSwitch = checked; if (checked) { if (!treeMap.get("综åçæµè®¾å¤ä¿¡æ¯")) { if (!treeMap.get("综åçæµè®¾å¤ä¿¡æ¯")) { } else { toggleLayerVisible("综åçæµè®¾å¤ä¿¡æ¯", true); } } else { toggleLayerVisible("综åçæµè®¾å¤ä¿¡æ¯", true); toggleLayerVisible("综åçæµè®¾å¤ä¿¡æ¯", false); } } else { toggleLayerVisible("综åçæµè®¾å¤ä¿¡æ¯", false); return; } return; } if (label === "åè¡æ²éæ£ç¹") { if (label === "åè¡æ²éæ£ç¹") { simStore.DangerShowSwitch = checked; if (checked) { if (!treeMap.get("åè¡æ²éæ£ç¹")) { if (!treeMap.get("åè¡æ²éæ£ç¹")) { } else { toggleLayerVisible("åè¡æ²éæ£ç¹", true); } } else { toggleLayerVisible("åè¡æ²éæ£ç¹", true); toggleLayerVisible("åè¡æ²éæ£ç¹", false); } } else { toggleLayerVisible("åè¡æ²éæ£ç¹", false); return; } return; } // å ¶ä»å¾å±çå¤çé»è¾ const list = treeMap.get(label); src/components/tools/Message.vue
@@ -178,7 +178,7 @@ }; addField("total", "é鍿»éï¼mmï¼"); addField("duration", "å°æ¶"); addField("duration", "é鍿¶é¿(h)"); addField("intensity", "éé¨å¼ºåº¦ï¼mm/å°æ¶ï¼"); addField("prediction", "éé¨åºæ¬¡"); addField("model", "é鍿¨¡å¼"); src/components/tools/TopographyDia.vue
@@ -46,7 +46,7 @@ } /deep/ .el-input__wrapper { background-color: #fff !important; // background-color: #8b2f2f !important; border: none !important; } </style> src/store/simAPI.js
@@ -5,6 +5,10 @@ import dayjs from 'dayjs' export const SimAPIStore = defineStore('SimAPI', () => { // 宿¶å¨ const shouldPoll = ref(false) const selectTab = ref("è¡æ¿åºå仿ç") const isLoading = ref(false) @@ -31,14 +35,23 @@ } if (forms.type === 1 || forms.type === 3) { if (!forms.geom || !forms.rainfall || !forms.intensity || !forms.duration) { if (!forms.geom) { ElMessage.warning('è¯·éæ©æ¨¡æåºå') return false } if (!forms.rainfall || !forms.intensity || !forms.duration) { ElMessage.warning('请确ä¿è¡¨åå已填å') return false } } if (forms.type === 2) { if (!forms.geom || !forms.gauges) { ElMessage.warning('请确ä¿è¡¨åå已填å') if (!forms.geom) { ElMessage.warning('è¯·éæ©æ¨¡æåºå') return false } if (forms.gauges.length === 0) { ElMessage.warning('è¯·éæ©é¨é计设å¤') return false } } @@ -80,7 +93,7 @@ intensityUnit: forms.intensityUnit || 'mm/15min' }) } console.log(params, 'ä¿åæ¹æ¡åæ°') // console.log(params, 'ä¿åæ¹æ¡åæ°') const res = await createSimData(params) ElMessage.success('æ¹æ¡ä¿åæå') return res @@ -124,6 +137,7 @@ return { selectTab, isLoading, shouldPoll, handleClickTab, addSimCheme, saveScheme, src/store/simulation.js
@@ -1,7 +1,6 @@ // stores/ui.js import { defineStore } from 'pinia' import { ref } from 'vue' import { createSimData } from '@/api/trApi' export const useSimStore = defineStore('simulation', () => { // 鿣ç¹å表 @@ -30,7 +29,9 @@ const schemCard = ref([]) const backToHome = ref(false) const selectedScheme = ref(null) // é鍿°æ®å表 const rainFalls = ref() // éé¨åä½ const intensityUnit = ref() const setSelectedScheme = (scheme) => { selectedScheme.value = scheme src/views/left/CitySim.vue
@@ -10,7 +10,11 @@ <div class="left-top" v-if="simStore.selectTab == 'éç¹åºå仿ç'"> éç¹åºå仿çï¼10mç²¾åº¦ï¼ </div> <div class="forms"> <div class="left-top" v-if="simStore.selectTab == 'éç¹æ²ä»¿ç'"> å岿¨¡æ </div> <div class="forms" :class="{ 'no-background': !showBackground }"> <el-form :rules="rules" :model="forms" @@ -106,7 +110,7 @@ v-if="forms.fileList.length !== 0" v-model="forms.hours" type="datetime" placeholder="Select date and time" placeholder="è¯·éæ©å¼å§æ¶é´" /> <el-date-picker v-if="forms.fileList.length == 0" @@ -169,6 +173,14 @@ const options = reactive([]); // å岿¨¡æéä¸åºå const props = defineProps({ selectedArea: { type: Object, required: true, }, }); const intensityOptions = ref([ { value: "mm/h", label: "mm/h" }, { value: "mm/5min", label: "mm/5min" }, @@ -193,6 +205,8 @@ fetchRegionData(1); }); const showBackground = ref(true); // é»è®¤æ¾ç¤ºèæ¯å¾ // çå¬ selectTab çåå watch(selectTab, (newVal) => { let type; @@ -203,10 +217,21 @@ case "éç¹åºå仿ç": type = 2; break; case "éç¹æ²ä»¿ç": type = 3; break; default: type = 1; // é»è®¤å¼ } // æ ¹æ® type 设置æ¯å¦æ¾ç¤ºèæ¯å¾ï¼å 为å岿¨¡æä¸è¡¨å带äºèæ¯å¾ï¼ if (type == 3) { showBackground.value = false; } else { showBackground.value = true; } fetchRegionData(type); // Tabåæ¢çæ¶åæ¸ 空表å resetForm(); }); // æ³¨å ¥ç¶ç»ä»¶æä¾çæ¹æ³ @@ -245,6 +270,9 @@ const addSimCheme = async () => { try { if (selectTab.value == "éç¹æ²ä»¿ç") { forms.geom = props.selectedArea; } await simStore.addSimCheme(forms); resetForm(); // åªæå¨ä¿åæååæé置表å EventBus.emit("close-selectArea"); @@ -471,6 +499,9 @@ async function startPlay() { try { // ä¿åæ¹æ¡ if (selectTab.value == "éç¹æ²ä»¿ç") { forms.geom = props.selectedArea; } const res = await simStore.addSimCheme(forms); const schemeId = res.data?.data?.id; @@ -481,10 +512,11 @@ // è°ç¨æ±è§£å¨ const simStartRes = await getSimStart(schemeId); console.log(simStartRes, "getSimStart è¿åç»æ"); // å ³ééæ©åºåçªå£ãåå§åè§å¾å¹¶å¼å§æ¨¡æ EventBus.emit("close-selectArea"); simStore.shouldPoll = true; // ææ¶ä¸å¨æ¤å¤å¼å§æ¨¡æï¼æ¨¡æé½å¨æ¹æ¡å表ä¸è¿è¡æ¨¡æ // initeWaterPrimitiveView(); // startSimulate(); @@ -508,6 +540,12 @@ height: 100%; padding: 10px 10px 0px 0px; box-sizing: border-box; transition: background 0.3s ease; // å¯éè¿æ¸¡ææ } .forms.no-background { margin-top: 0px; background-image: none; } /deep/ .el-input-group__append, .el-input-group__prepend { src/views/left/KGSim.vue
@@ -36,7 +36,8 @@ <el-radio label="颿µæ¨¡æ">颿µæ¨¡æ</el-radio> </el-radio-group> <div v-if="selectedSimulation === 'å岿¨¡æ'"> <HistorySimulation :selectedArea="selectedArea" /> <!-- <HistorySimulation :selectedArea="selectedArea" /> --> <CitySim :selectedArea="selectedArea" /> </div> <div v-if="selectedSimulation === '宿¶æ¨¡æ'"> <RealTimeSimulation :selectedArea="selectedArea" /> @@ -51,6 +52,7 @@ <script setup> import { ref, computed, onMounted, reactive } from "vue"; import HistorySimulation from "./KGSimOption/HistorySimulation.vue"; import CitySim from './CitySim.vue' import PredictiveSimulation from "./KGSimOption/PredictiveSimulation.vue"; import RealTimeSimulation from "./KGSimOption/RealTimeSimulation.vue"; import { getRegionData } from "@/api/trApi"; src/views/left/KGSimOption/HistorySimulation.vue
@@ -202,7 +202,6 @@ }); } catch (error) { ElMessage.error("å¯å¨æ¨¡æå¤±è´¥ï¼è¯·ç¨ååè¯"); console.log(error, "errorerrorerror"); } } </script> src/views/left/KGSimOption/PredictiveSimulation.vue
@@ -88,7 +88,7 @@ ></el-option> </el-select> </el-form-item> <el-form-item label="éæ©æ¶é´:"> <el-form-item label="éæ©æ¶é´:" v-show="forms.prediction != 'éé¨åºæ¬¡'"> <el-date-picker v-model="forms.hours" type="datetimerange" @@ -98,6 +98,13 @@ date-format="YYYY/MM/DD ddd" time-format="A hh:mm:ss" @change="change" /> </el-form-item> <el-form-item label="éæ©æ¶é´:" v-show="forms.prediction == 'éé¨åºæ¬¡'"> <el-date-picker v-model="forms.hours" type="datetime" placeholder="è¯·éæ©å¼å§æ¶é´" /> </el-form-item> <el-form-item label="é¢è®¡æ¶é¿:"> @@ -113,7 +120,7 @@ <div class="buttons"> <el-button type="primary" @click="openPlan">æå¼æ¹æ¡</el-button> <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> <el-button type="success" @click="startPlay">ä¿åå¹¶å¼å§æ¨¡æ</el-button> </div> </div> </template> @@ -214,7 +221,7 @@ .slice(1) .reduce((acc, curr, i) => acc + parseInt(curr, 10) / (i === 0 ? 1 : 60), 0) .toFixed(1); console.log(parseFloat(decimalHours)); // è¾åº: 2.6 // console.log(parseFloat(decimalHours)); // è¾åº: 2.6 forms.duration = decimalHours; forms.intensity = val.rainIntensityHour; forms.rainfall = val.rainfallTotalValue; @@ -261,7 +268,7 @@ // å¼å§æ¨¡æ async function startPlay() { try { formData.geom = props.selectedArea; forms.geom = props.selectedArea; // ä¿åæ¹æ¡ const res = await simStore.addSimCheme(forms); const schemeId = res.data?.data?.id; @@ -277,6 +284,8 @@ // å ³ééæ©åºåçªå£ãåå§åè§å¾å¹¶å¼å§æ¨¡æ EventBus.emit("close-selectArea"); simStore.shouldPoll = true; // ææ¶ä¸å¨æ¤å¤å¼å§æ¨¡æï¼æ¨¡æé½å¨æ¹æ¡å表ä¸è¿è¡æ¨¡æ // initeWaterPrimitiveView(); // startSimulate(); @@ -287,6 +296,7 @@ }); } catch (error) { ElMessage.error("å¯å¨æ¨¡æå¤±è´¥ï¼è¯·ç¨ååè¯"); console.log(error); } } src/views/left/KGSimOption/RealTimeSimulation copy.vue
ÎļþÒÑɾ³ý