src/components/monifangzhen/schemeCard.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/store/simAPI.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/store/simulation.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/CitySim.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/KGSimOption/HistorySimulation.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/Left.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/left/Simulation.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/components/monifangzhen/schemeCard.vue
@@ -362,14 +362,38 @@ /////////////////////// è°ç¨æ¥å£ï¼ä½¿ç¨æ¶æå¼ï¼ /////////////////////// import { getData, getSimData, deleteSimData } from "@/api/trApi.js"; onMounted(() => { getScheme(); }); 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( () => props.showAddIns, (newVal) => { if (newVal == false) { getScheme(); } } ); // å é¤ä»¿çå表 watch( () => props.deleteSim, (newVal) => { @@ -380,17 +404,6 @@ } } ); const schemeList = ref([]); async function getScheme() { try { const res = await getSimData(); schemeList.value = res.data; } catch (error) { console.error("Error fetching data:", error); } } const deleteSim = () => { ElMessageBox.confirm("ç¡®å®è¦å é¤è¯¥æ¹æ¡å?", "å 餿¹æ¡", { src/store/simAPI.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,131 @@ import { defineStore } from 'pinia' import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import { createSimData } from '@/api/trApi'; export const SimAPIStore = defineStore('SimAPI', () => { const selectTab = ref("è¡æ¿åºå仿ç") const isLoading = ref(false) const handleClickTab = (data) => { selectTab.value = data } // è·ååºåç±»å const getAreaType = (tabName) => { switch (tabName) { case 'è¡æ¿åºå仿ç': return 1 case 'éç¹åºå仿ç': return 2 case 'éç¹æ²ä»¿ç': return 3 default: return 0 } } // è·åéé¨ç±»å const getRainType = (tabName) => { switch (tabName) { case '颿µæ¨¡æ': return 1 case '宿¶æ¨¡æ': return 2 case 'å岿¨¡æ': return 3 default: return 0 } } // éªè¯è¡¨å const validateForm = (forms) => { if (!forms?.name) { ElMessage.warning('请è¾å ¥æ¹æ¡åç§°') return false } if (!forms.name) { ElMessage.warning('请确ä¿è¡¨åå已填å') return false } return true } // å¼¹çª const openSaveDialog = async (forms) => { if (!validateForm(forms)) return try { await ElMessageBox.confirm('ç¡®å®è¦ä¿åå½åæ¹æ¡å?', 'æ°å»ºæ¹æ¡', { confirmButtonText: 'ç¡®å®', cancelButtonText: 'åæ¶', }) // ç¨æ·ç¡®è®¤åæ§è¡ä¿å await saveScheme(forms) } catch (error) { if (error !== 'cancel') { console.error('ä¿ååºé:', error) ElMessage.error('ä¿åè¿ç¨ä¸åºç°é误') } else { ElMessage.info('已忶ä¿å') } } } const saveScheme = async (forms) => { if (isLoading.value) { ElMessage.warning('æ£å¨ä¿åï¼è¯·ç¨å...') return } isLoading.value = true try { const params = { areaType: getAreaType(selectTab.value), createTime: Date.now(), name: forms.name, type: getRainType(forms.type), status: 0, data: forms.data } const response = await createSimData(params) ElMessage.success('æ¹æ¡ä¿åæå') return response } catch (error) { console.error('ä¿å失败:', error) ElMessage.error('ä¿å失败: ' + (error.message || '请ç¨åéè¯')) throw error } finally { isLoading.value = false } } // // æ°å»ºæ¹æ¡ // const createSimulation = async (forms) => { // console.log(forms, 'ffffffff') // const params = { // areaType: getAreaType(selectTab), // createTime: Date.now(), // name: forms.name, // // 1ä¸ºé¢æµæ¨¡æï¼2ä¸ºå®æ¶æ¨¡æï¼3为å岿¨¡æ // type: getRainType(forms.type), // // 0为å建仿çï¼1为é¢å¤çï¼2为åæä¸ï¼10ä¸ºå®æï¼20为åºé // status: 0, // data: forms.data // } // console.log(params, 'params') // try { // await createSimData(params) // } catch (error) { // console.error('å建仿ç失败:', error) // } // } return { // ç¶æ selectTab, isLoading, // æ¹æ³ handleClickTab, openSaveDialog, saveScheme, } }) src/store/simulation.js
@@ -3,7 +3,7 @@ import { ref } from 'vue' import { createSimData } from '@/api/trApi'; export const useSimStore = defineStore('ui', () => { export const useSimStore = defineStore('simulation', () => { // ææUIç¶æ const navigationShow = ref(true) const leftShow = ref(false) @@ -25,7 +25,6 @@ const showLayerTree = ref(true) const showDangerAssess = ref(false) const schemCard = ref([]) const selectTab = ref("è¡æ¿åºå仿ç") const backToHome = ref(false) // åå§åæ¹æ³ @@ -47,42 +46,6 @@ showResultAssess.value = false showDangerAssess.value = false schemCard.value = [] selectTab.value = "è¡æ¿åºå仿ç" } const handleClickTab = (data) => { selectTab.value = data } // æ°å»ºæ¹æ¡ const createSimulation = async (forms) => { const getAreaType = (tabName) => { switch (tabName) { case 'è¡æ¿åºå仿ç': return 1 case 'éç¹åºå仿ç': return 2 case 'éç¹æ²ä»¿ç': return 3 default: return 0 // èªå®ä¹ } } const params = { areaType: getAreaType(selectTab), createTime: Date.now(), name: forms.name, // 1ä¸ºé¢æµæ¨¡æï¼2ä¸ºå®æ¶æ¨¡æï¼3为å岿¨¡æ type: 1, // 0为å建仿çï¼1为é¢å¤çï¼2为åæä¸ï¼10ä¸ºå®æï¼20为åºé status: 0, } try { await createSimData(params) } catch (error) { console.error('å建仿ç失败:', error) } } // æ¹æ¡ç¸å ³ @@ -172,7 +135,8 @@ showLayerTree, showDangerAssess, schemCard, selectTab, // selectTab, backToHome, handleNavClick, init, startYHGL, @@ -183,9 +147,8 @@ addSchemCard, removeSchemCardItem, updateSchemCardItem, handleClickTab, createSimulation, backToHome, // handleClickTab, // createSimulation, setBackToHome } }) src/views/left/CitySim.vue
@@ -107,34 +107,6 @@ <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> </div> <!---------------------------- ä¿åæ¹æ¡å¯¹è¯æ¡ï¼æ¥å£çæ¬éå é¤ï¼ --------------------------------> <!-- <el-dialog v-model="saveDialogVisible" :title="dialogTitle" width="50%" :before-close="handleClose" custom-class="custom-dialog" > <div class="dialog-content"> <p><strong>模æç±»åï¼</strong>{{ dialogTitle }}</p> <p v-if="disForm === 'è¡æ¿åºå仿ç'"> <strong>è¡æ¿åºåï¼</strong>{{ forms.eare }} </p> <p v-if="disForm === 'éç¹åºå仿ç'"> <strong>éç¹åºåï¼</strong>{{ forms.eares }} </p> <p><strong>éé¨éï¼</strong>{{ forms.rainfall }} mm</p> <p><strong>é鍿¶é¿ï¼</strong>{{ forms.duration }} h</p> <p><strong>éé¨å¼ºåº¦ï¼</strong>{{ forms.intensity }} mm/h</p> <p><strong>ä¸ä¼ æä»¶ï¼</strong>{{ uploadedFilesText }}</p> </div> <template #footer> <span class="dialog-footer"> <el-button @click="saveDialogVisible = false">åæ¶</el-button> <el-button type="primary" @click="confirmSave">ç¡®å®ä¿å</el-button> </span> </template> </el-dialog> --> </div> </div> </template> @@ -145,13 +117,12 @@ import Papa from "papaparse"; import { ElMessage, ElMessageBox } from "element-plus"; import { initeWaterPrimitiveView } from "@/utils/water"; import { useSimStore } from "@/store/simulation"; import { SimAPIStore } from "@/store/simAPI"; const simStore = useSimStore(); const simStore = SimAPIStore(); // æ³¨å ¥ç¶ç»ä»¶æä¾çæ¹æ³ const { startSimulate, endSimulate } = inject("simulateActions"); const saveDialogVisible = ref(false); // æ§å¶ä¿åæ¹æ¡å¯¹è¯æ¡çæ¾ç¤ºç¶æï¼æ¥å£çæ¬å é¤ï¼ // è¡¨åæ°æ® const forms = reactive({ name: "", @@ -203,8 +174,13 @@ return forms.fileList.map((file) => file.name).join(", ") || "æ "; }); ////////////////////////////////////// æ¥å£çæ¬éå é¤////////////////////////////////////// // // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ //////////////////////////////////æ¥å£çæ¬å¯ç¨////////////////////////////////// const openSaveDialog = async () => { await simStore.openSaveDialog(forms); }; // const isLoading = ref(false); // // ä¿åæ¹æ¡ // const openSaveDialog = () => { // if ( // !forms.rainfall || @@ -216,73 +192,36 @@ // ElMessage.warning("请å å¡«åææå¿ å¡«é¡¹"); // return; // } // saveDialogVisible.value = true; // } // const handleClose = () => { // saveDialogVisible.value = false; // ElMessageBox.confirm("ç¡®å®è¦ä¿åå½åæ¹æ¡å?", dialogTitle.value, { // confirmButtonText: "ç¡®å®", // cancelButtonText: "åæ¶", // type: "warning", // }) // .then(confirmSave) // .catch(() => { // ElMessage({ // type: "info", // message: "已忶ä¿å", // }); // }); // }; // // 确认ä¿å // const confirmSave = () => { // console.log("ä¿åæ¹æ¡æå", { // 模æç±»å: dialogTitle.value, // è¡æ¿åºå: simStore.selectTab === "è¡æ¿åºå仿ç" ? forms.eare : null, // éç¹åºå: simStore.selectTab === "éç¹åºå仿ç" ? forms.eares : null, // éé¨é: `${forms.rainfall} mm`, // é鍿¶é¿: `${forms.duration} h`, // éé¨å¼ºåº¦: `${forms.intensity} mm/h`, // ä¸ä¼ æä»¶: forms.fileList.map((file) => file.name), // }); // ElMessage.success("æ¹æ¡å·²ä¿å"); // saveDialogVisible.value = false; // resetForm(); // const confirmSave = async () => { // if (isLoading.value) { // ElMessage.warning("æ£å¨ä¿åï¼è¯·ç¨å..."); // return; // 鲿¢éå¤æäº¤ // } // isLoading.value = true; // å¼å§å è½½ç¶æ // try { // await simStore.createSimulation(forms); // è°ç¨ Store ä¸çä¿åæ¹æ³ // ElMessage.success("ä¿åæå"); // saveDialogVisible.value = true; // æ¾ç¤ºä¿åå¯¹è¯æ¡ï¼å¦æéè¦ï¼ // } catch (error) { // console.error("ä¿å失败:", error); // ElMessage.error("ä¿å失败ï¼è¯·ç¨åéè¯"); // } finally { // isLoading.value = false; // ç»æå è½½ç¶æ // } // }; ////////////////////////////////////// ç»æå é¤////////////////////////////////////// //////////////////////////////////æ¥å£çæ¬å¯ç¨////////////////////////////////// const isLoading = ref(false); // ä¿åæ¹æ¡ const openSaveDialog = () => { if ( !forms.rainfall || !forms.duration || !forms.intensity || (simStore.selectTab === "è¡æ¿åºå仿ç" && !forms.eare) || (simStore.selectTab === "éç¹åºå仿ç" && !forms.eares) ) { ElMessage.warning("请å å¡«åææå¿ å¡«é¡¹"); return; } ElMessageBox.confirm("ç¡®å®è¦ä¿åå½åæ¹æ¡å?", dialogTitle.value, { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", type: "warning", }) .then(confirmSave) .catch(() => { ElMessage({ type: "info", message: "已忶ä¿å", }); }); }; const confirmSave = async () => { if (isLoading.value) { ElMessage.warning("æ£å¨ä¿åï¼è¯·ç¨å..."); return; // 鲿¢éå¤æäº¤ } isLoading.value = true; // å¼å§å è½½ç¶æ try { await simStore.createSimulation(forms); // è°ç¨ Store ä¸çä¿åæ¹æ³ ElMessage.success("ä¿åæå"); saveDialogVisible.value = true; // æ¾ç¤ºä¿åå¯¹è¯æ¡ï¼å¦æéè¦ï¼ } catch (error) { console.error("ä¿å失败:", error); ElMessage.error("ä¿å失败ï¼è¯·ç¨åéè¯"); } finally { isLoading.value = false; // ç»æå è½½ç¶æ } }; //////////////////////////////////æ¥å£çæ¬å¯ç¨////////////////////////////////// // é置表å @@ -410,7 +349,6 @@ } return true; }; // å¼å§æ¨¡æ function startPlay() { src/views/left/KGSimOption/HistorySimulation.vue
@@ -10,30 +10,54 @@ <div class="input-group"> <div class="input-item"> <label>åå²é¨æ :</label> <el-select v-model="rainfallHistory" placeholder="è¯·éæ©" popper-class="mySelectStyle"> <el-option v-for="item in HistoricalRainData" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-select v-model="rainfallHistory" placeholder="è¯·éæ©" popper-class="mySelectStyle" > <el-option v-for="item in HistoricalRainData" :key="item.id" :label="item.name" :value="item.id" ></el-option> </el-select> </div> </div> <div class="input-group"> <div class="input-item"> <label>æ¹æ¡åç§°:</label> <el-input v-model="schemeName" type="text" placeholder="请è¾å ¥"></el-input> <el-input v-model="schemeName" type="text" placeholder="请è¾å ¥" ></el-input> </div> <div class="input-item"> <label>é鍿»é:</label> <el-input v-model="totalRainfall" type="number" placeholder="请è¾å ¥"></el-input> <el-input v-model="totalRainfall" type="number" placeholder="请è¾å ¥" ></el-input> <span>mm</span> </div> <div class="input-item"> <label>éé¨å¼ºåº¦:</label> <el-input v-model="rainfallIntensity" type="number" placeholder="请è¾å ¥"></el-input> <el-input v-model="rainfallIntensity" type="number" placeholder="请è¾å ¥" ></el-input> <span>mm/h</span> </div> <div class="input-item"> <label>é鍿¶é¿:</label> <el-input v-model="rainfallDuration" type="number" placeholder="请è¾å ¥"></el-input> <el-input v-model="rainfallDuration" type="number" placeholder="请è¾å ¥" ></el-input> <span>h</span> </div> </div> @@ -48,8 +72,13 @@ </div> <!-- ä¿åæ¹æ¡å¯¹è¯æ¡ --> <el-dialog v-model="saveDialogVisible" title="ä¿åæ¹æ¡" width="50%" :before-close="handleClose" custom-class="custom-dialog"> <el-dialog v-model="saveDialogVisible" title="ä¿åæ¹æ¡" width="50%" :before-close="handleClose" custom-class="custom-dialog" > <div class="dialog-content"> <p><strong>æ¹æ¡åç§°ï¼</strong>{{ schemeName }}</p> <p><strong>æééç¹æ²ï¼</strong>{{ props.selectedArea }}</p> @@ -71,10 +100,11 @@ <script setup> import { ref, computed, inject } from "vue"; import { ElMessage } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus"; import { initeWaterPrimitiveView } from "@/utils/water"; import { useSimStore } from "@/store/simulation.js"; // å¼å ¥ Store import { getRainfallData } from "@/api/hpApi.js" import { getRainfallData } from "@/api/hpApi.js"; // è·å Store å®ä¾ const simStore = useSimStore(); // æµè¯è·åé¨éæ°æ® @@ -99,7 +129,7 @@ // æ°æ®ç»å® const rainfallHistory = ref("2"); // é»è®¤éä¸ç¬¬äºé¡¹ const totalRainfall = ref(50); // é鍿»é const schemeName = ref('æ¹æ¡åç§°'); // æ¹æ¡åç§° const schemeName = ref("æ¹æ¡åç§°"); // æ¹æ¡åç§° const rainfallIntensity = ref(70); // éé¨å¼ºåº¦ const rainfallDuration = ref(5); // é鍿¶é¿ const isCollapsed = ref(false); // æ§å¶è¯¦æ çå±å¼/æ¶èµ·ç¶æ @@ -140,7 +170,47 @@ ElMessage.warning("请å å¡«åææå¿ å¡«é¡¹"); return; } saveDialogVisible.value = true; ElMessageBox.confirm("ç¡®å®è¦ä¿åå½åæ¹æ¡å?", { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", type: "warning", }) .then(confirmSave) .catch(() => { ElMessage({ type: "info", message: "已忶ä¿å", }); }); // saveDialogVisible.value = true; }; const params = { name: schemeName.value, type: "å岿¨¡æ", data: { rainFall: totalRainfall.value, rainfallIntensity: rainfallIntensity.value, rainfallDuration: rainfallDuration.value, rainfallHistory: rainfallHistory.value, }, }; const isLoading = ref(false); const confirmSave = async () => { if (isLoading.value) { ElMessage.warning("æ£å¨ä¿åï¼è¯·ç¨å..."); return; // 鲿¢éå¤æäº¤ } isLoading.value = true; // å¼å§å è½½ç¶æ try { await simStore.createSimulation(params); // è°ç¨ Store ä¸çä¿åæ¹æ³ ElMessage.success("ä¿åæå"); saveDialogVisible.value = true; // æ¾ç¤ºä¿åå¯¹è¯æ¡ï¼å¦æéè¦ï¼ } catch (error) { console.error("ä¿å失败:", error); ElMessage.error("ä¿å失败ï¼è¯·ç¨åéè¯"); } finally { isLoading.value = false; // ç»æå è½½ç¶æ } }; // å ³éä¿åæ¹æ¡å¯¹è¯æ¡ @@ -148,26 +218,26 @@ saveDialogVisible.value = false; }; // 确认ä¿å const confirmSave = () => { // æé æ°çæ¹æ¡å¯¹è±¡ const newScheme = { id: Date.now().toString(), // å¯ä¸ ID area: props.selectedArea, // åºå name: selectedRainfallName.value, // æ¹æ¡åç§° createTime: new Date().toISOString(), // å建æ¶é´ taskStatus: 1, // åå§ç¶æä¸ºæªå¼å§ totalRainfall: totalRainfall.value, // é鍿»é schemeName: schemeName.value, // é鍿»é rainfallIntensity: rainfallIntensity.value, // éé¨å¼ºåº¦ rainfallDuration: rainfallDuration.value, // é鍿¶é¿ }; // // 确认ä¿å // const confirmSave = () => { // // æé æ°çæ¹æ¡å¯¹è±¡ // const newScheme = { // id: Date.now().toString(), // å¯ä¸ ID // area: props.selectedArea, // åºå // name: selectedRainfallName.value, // æ¹æ¡åç§° // createTime: new Date().toISOString(), // å建æ¶é´ // taskStatus: 1, // åå§ç¶æä¸ºæªå¼å§ // totalRainfall: totalRainfall.value, // é鍿»é // schemeName: schemeName.value, // é鍿»é // rainfallIntensity: rainfallIntensity.value, // éé¨å¼ºåº¦ // rainfallDuration: rainfallDuration.value, // é鍿¶é¿ // }; simStore.addSchemCard(newScheme); ElMessage.success("æ¹æ¡å·²ä¿å"); // å ³éå¯¹è¯æ¡ saveDialogVisible.value = false; }; // simStore.addSchemCard(newScheme); // ElMessage.success("æ¹æ¡å·²ä¿å"); // // å ³éå¯¹è¯æ¡ // saveDialogVisible.value = false; // }; // å¼å§æ¨¡æ function startPlay() { src/views/left/Left.vue
@@ -4,14 +4,20 @@ <span>ä»¿çæ¨æ¼æ¹æ¡</span> </div> <div class="left-content"> <div style=" <div style=" display: flex; justify-content: space-evenly; padding: 8px 8px 8px 0px; " v-if="btnShow"> <el-button style="width: 45%;" @click="handleClick">æ°å»ºä»¿çæ¹æ¡</el-button> <el-button style="width: 45%;" @click="deleteSelectedScheme">å é¤ä»¿çæ¹æ¡</el-button> v-if="btnShow" > <el-button style="width: 45%" @click="handleClick" >æ°å»ºä»¿çæ¹æ¡</el-button > <el-button style="width: 45%" @click="deleteSelectedScheme" >å é¤ä»¿çæ¹æ¡</el-button > </div> <!-- <schemeCard ref="schemeCardRef" @start="start" @end="end" @reset="reset" @closeBtn="handleBackFromParent" /> --> <schemeCard @@ -20,6 +26,7 @@ @end="end" @reset="reset" :deleteSim="deleteSim" :showAddIns="showAddIns" @closeBtn="handleBackFromParent" /> </div> @@ -296,8 +303,8 @@ } function handleBackFromParent(value) { if (value === false) { btnShow.value = false } else btnShow.value = true btnShow.value = false; } else btnShow.value = true; } function initDevicePoint() { list.forEach((item) => { src/views/left/Simulation.vue
@@ -29,9 +29,9 @@ import citySim from "./CitySim.vue"; import kgSim from "./KGSim.vue"; import { useSimStore } from "@/store/simulation"; import { SimAPIStore } from "@/store/simAPI"; const simStore = useSimStore(); const simStore = SimAPIStore(); // å®ä¹è¿åäºä»¶ const emits = defineEmits(["back"]); @@ -44,7 +44,7 @@ // æ ç¾ç¹å»äºä»¶ const handleClick = (tab) => { simStore.handleClickTab(tab.props.label); SimAPIStore.handleClickTab(tab.props.label); }; // è¿åä¸ä¸çº§