| | |
| | | export async function fetchToken() { |
| | | try { |
| | | const response = await axios.post("/hp/auth/getToken", { |
| | | username: "yxxx", |
| | | username: "yunweiyonghu", |
| | | password: "c2d6bba7f0a67701a97550684e39fa5f", |
| | | systemName: "RS_SYSTEM", |
| | | }); |
| | |
| | | <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> |
| | |
| | | </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="setSchemClick(item)" |
| | | >æ¹æ¡è¯¦æ
</el-button |
| | | > |
| | | <el-button size="small" @click="startPlay(item)">è¿å
¥æ¨¡æ</el-button> |
| | | <!-- :disabled="item.taskStatus !== 2" --> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | <schemeInfo v-if="schemeInfoShow" :selectedScheme="currentScheme" @back="handleBack" /> |
| | | <schemeInfo |
| | | v-if="schemeInfoShow" |
| | | :selectedScheme="currentScheme" |
| | | @back="handleBack" |
| | | /> |
| | | </div> |
| | | <Message @close="close" class="mess" v-show="messageShow" :mesData="mesData" /> |
| | | <Message |
| | | @close="close" |
| | | class="mess" |
| | | v-show="messageShow" |
| | | :mesData="mesData" |
| | | /> |
| | | </template> |
| | | |
| | | <script setup> |
| | |
| | | // alert("å½åæ¹æ¡å°æªå®æï¼æ æ³è¿å
¥æ¨¡æï¼"); |
| | | // return; |
| | | // } |
| | | simStore.setSelectedScheme(item) |
| | | simStore.setSelectedScheme(item); |
| | | |
| | | currentScheme.value = item; |
| | | schemeInfoShow.value = true; |
| | |
| | | |
| | | // 注åäºä»¶çå¬å¨ |
| | | EventBus.on("hide-schemeInfo", handleHideSchemeInfo); |
| | | |
| | | |
| | | /////////////////////// è°ç¨æ¥å£ï¼ä½¿ç¨æ¶æå¼ï¼ /////////////////////// |
| | | import { getRegionData, getSimData, deleteSimData } from "@/api/trApi.js"; |
| | |
| | | }); |
| | | 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(); |
| | |
| | | message: `æ¹æ¡ "${schemeName}" å 餿å`, |
| | | }); |
| | | }) |
| | | .catch(() => { |
| | | }); |
| | | .catch(() => {}); |
| | | }; |
| | | /////////////////////// è°ç¨æ¥å£ç»æ /////////////////////// |
| | | onUnmounted(() => { |
| | |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | @import url("../../assets/css/infobox.css"); |
| | | .layer-tree { |
| | | background: url("@/assets/img/tools/plotting_new.png"); |
| | | width: 200px; |
| | |
| | | |
| | | // ä¿åæ¹æ¡å¼¹çª |
| | | const addSimCheme = async (forms) => { |
| | | // 表åéªè¯ |
| | | if (!validateForm(forms)) { |
| | | throw new Error('表åéªè¯æªéè¿'); // æåºé误ï¼é»æ¢ç»§ç»æ§è¡ |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | return { |
| | | selectTab, |
| | | isLoading, |
| | |
| | | const schemCard = ref([]) |
| | | const backToHome = ref(false) |
| | | const selectedScheme = ref(null) |
| | | const rainFalls = ref() |
| | | const setSelectedScheme = (scheme) => { |
| | | selectedScheme.value = scheme |
| | | rainFalls.value = JSON.parse(scheme.data).rainfalls |
| | | console.log(rainFalls.value, 'shceme') |
| | | } |
| | | const clearSelectedScheme = () => { |
| | | selectedScheme.value = null |
| | |
| | | showDangerAssess, |
| | | schemCard, |
| | | backToHome, |
| | | rainFalls, |
| | | |
| | | // æ¹æ¡ç¸å
³æ¹æ³ |
| | | setSchemCard, |
| | |
| | | éç¹åºå仿çï¼10mç²¾åº¦ï¼ |
| | | </div> |
| | | <div class="forms"> |
| | | <el-form :model="forms" label-width="auto" style="max-width: 600px"> |
| | | <el-form |
| | | :rules="rules" |
| | | :model="forms" |
| | | label-width="auto" |
| | | style="max-width: 600px" |
| | | > |
| | | <el-form-item label="æ¹æ¡åç§°:"> |
| | | <el-input |
| | | v-model="forms.name" |
| | |
| | | }; |
| | | |
| | | // å¼å§æ¨¡æ |
| | | function startPlay() { |
| | | async function startPlay() { |
| | | // å¼å§æ¨¡æåéè¦å
ä¿åæ¹æ¡ |
| | | await simStore.addSimCheme(forms); |
| | | EventBus.emit("close-selectArea"); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | |
| | | <template> |
| | | <div class="history-simulation"> |
| | | <div class="left-top"> |
| | | <span>å岿¨¡æ</span> |
| | | <span class="clickable-text" @click="toggleDetails">{{ |
| | | isCollapsed ? "å±å¼" : "æ¶èµ·" |
| | | }}</span> |
| | | </div> |
| | | <div class="details" :class="{ hidden: isCollapsed }"> |
| | | <div class="input-group"> |
| | | <div class="input-item"> |
| | | <label>åå²é¨æ
:</label> |
| | | <div class="left-top"> |
| | | <span>å岿¨¡æ</span> |
| | | <span class="clickable-text" @click="toggleDetails">{{ |
| | | isCollapsed ? "å±å¼" : "æ¶èµ·" |
| | | }}</span> |
| | | </div> |
| | | <el-form |
| | | ref="historySimForm" |
| | | class="history-simulation" |
| | | :model="formData" |
| | | label-width="auto" |
| | | style="max-width: 600px" |
| | | > |
| | | <el-collapse-transition style="margin-top: 10px"> |
| | | <div v-show="!isCollapsed"> |
| | | <el-form-item label="åå²é¨æ
:" prop="history"> |
| | | <el-select |
| | | v-model="rainfallHistory" |
| | | v-model="formData.history" |
| | | placeholder="è¯·éæ©" |
| | | popper-class="mySelectStyle" |
| | | > |
| | |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | | ></el-option> |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="input-group"> |
| | | <div class="input-item"> |
| | | <label>æ¹æ¡åç§°:</label> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æ¹æ¡åç§°:" prop="name"> |
| | | <el-input v-model="formData.name" type="text" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="é鍿»é:" prop="rainfall"> |
| | | <el-input |
| | | v-model="schemeName" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>é鍿»é:</label> |
| | | <el-input |
| | | v-model="totalRainfall" |
| | | v-model="formData.rainfall" |
| | | type="number" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | <span>mm</span> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>éé¨å¼ºåº¦:</label> |
| | | > |
| | | <template #append>mm</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="éé¨å¼ºåº¦:" prop="intensity"> |
| | | <el-input |
| | | v-model="rainfallIntensity" |
| | | v-model="formData.intensity" |
| | | type="number" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | <span>mm/h</span> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>éæ©æ¶é´:</label> |
| | | > |
| | | <template #append>mm/h</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="éæ©æ¶é´:" prop="hours"> |
| | | <el-date-picker |
| | | v-model="hours" |
| | | v-model="formData.hours" |
| | | type="datetimerange" |
| | | start-placeholder="å¼å§æ¶é´" |
| | | end-placeholder="ç»ææ¶é´" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | date-format="YYYY/MM/DD ddd" |
| | | time-format="A hh:mm:ss" |
| | | @change="change" |
| | | @change="handleTimeChange" |
| | | /> |
| | | <span>h</span> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>é鍿¶é¿:</label> |
| | | <el-input |
| | | disabled |
| | | v-model="rainfallDuration" |
| | | type="number" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | <span>h</span> |
| | | </div> |
| | | </div> |
| | | <!-- <div> |
| | | <label>仿çåæ°:</label> |
| | | <div style="width: 100%; height: 60px; background-color: #fff"></div> |
| | | </div> --> |
| | | </div> |
| | | <div class="buttons"> |
| | | <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> |
| | | <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> |
| | | </div> |
| | | </el-form-item> |
| | | |
| | | <!-- ä¿åæ¹æ¡å¯¹è¯æ¡ --> |
| | | <!-- <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> |
| | | <p><strong>模æç±»åï¼</strong>å岿¨¡æ</p> |
| | | <p><strong>åå²é¨æ
ï¼</strong>{{ selectedRainfallName }}</p> |
| | | <p><strong>é鍿»éï¼</strong>{{ totalRainfall }} mm</p> |
| | | <p><strong>éé¨å¼ºåº¦ï¼</strong>{{ rainfallIntensity }} mm/h</p> |
| | | <p><strong>é鍿¶é¿ï¼</strong>{{ rainfallDuration }} h</p> |
| | | <el-form-item label="é鍿¶é¿:" prop="duration"> |
| | | <el-input |
| | | v-model="formData.duration" |
| | | type="number" |
| | | placeholder="èªå¨è®¡ç®" |
| | | disabled |
| | | > |
| | | <template #append>h</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | </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> --> |
| | | </el-collapse-transition> |
| | | </el-form> |
| | | <div class="buttons"> |
| | | <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> |
| | | <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, inject } from "vue"; |
| | | import { ElMessage, ElMessageBox } from "element-plus"; |
| | | import { ref, computed, reactive, inject } from "vue"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { initeWaterPrimitiveView } from "@/utils/water"; |
| | | import { useSimStore } from "@/store/simulation.js"; // å¼å
¥ Store |
| | | import { useSimStore } from "@/store/simulation.js"; |
| | | import { getRainfallData } from "@/api/hpApi.js"; |
| | | import { SimAPIStore } from "@/store/simAPI"; |
| | | import { EventBus } from "@/eventBus"; // å¼å
¥äºä»¶æ»çº¿ |
| | | import { EventBus } from "@/eventBus"; |
| | | |
| | | // è·å Store å®ä¾ |
| | | const simStore = SimAPIStore(); |
| | | |
| | | // æµè¯è·åé¨éæ°æ® |
| | | // const getRainData = () => { |
| | | // getRainfallData() |
| | | // .then((a) => { |
| | | // console.log(a, 'å®å¾è·åé¨éæ°æ®'); |
| | | // }) |
| | | // }; |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | |
| | | }, |
| | | }); |
| | | |
| | | // æ°æ®ç»å® |
| | | const rainfallHistory = ref("XXå¹´50mméé¨"); // é»è®¤éä¸ç¬¬äºé¡¹ |
| | | const totalRainfall = ref(50); // é鍿»é |
| | | const schemeName = ref("æ¹æ¡åç§°"); // æ¹æ¡åç§° |
| | | const rainfallIntensity = ref(70); // éé¨å¼ºåº¦ |
| | | const hours = ref(null); |
| | | const rainfallDuration = ref(null); // é鍿¶é¿ |
| | | const isCollapsed = ref(false); // æ§å¶è¯¦æ
çå±å¼/æ¶èµ·ç¶æ |
| | | const saveDialogVisible = ref(false); // æ§å¶ä¿åæ¹æ¡å¯¹è¯æ¡çæ¾ç¤ºç¶æ |
| | | // è¡¨åæ°æ® |
| | | const formData = reactive({ |
| | | history: "XXå¹´50mméé¨", |
| | | name: "æ¹æ¡åç§°", |
| | | rainfall: 50, |
| | | intensity: 70, |
| | | hours: null, |
| | | duration: null, |
| | | type: 3, |
| | | }); |
| | | |
| | | // æ§å¶è¯¦æ
çå±å¼/æ¶èµ·ç¶æ |
| | | const isCollapsed = ref(false); |
| | | |
| | | // åå²é¨æ
æ°æ® |
| | | const HistoricalRainData = [ |
| | |
| | | // è·åå½åéä¸çåå²é¨æ
åç§° |
| | | const selectedRainfallName = computed(() => { |
| | | const selected = HistoricalRainData.find( |
| | | (item) => item.name === rainfallHistory.value |
| | | (item) => item.name === formData.history |
| | | ); |
| | | return selected ? selected.name : ""; |
| | | }); |
| | |
| | | |
| | | const { calculateHoursDifference } = inject("calculateHours"); |
| | | |
| | | const change = (val) => { |
| | | rainfallDuration.value = calculateHoursDifference(val); |
| | | const handleTimeChange = (val) => { |
| | | formData.duration = calculateHoursDifference(val); |
| | | }; |
| | | |
| | | const resetForm = () => { |
| | | formData.name = "æ¹æ¡åç§°"; |
| | | formData.rainfall = 50; |
| | | formData.intensity = 70; |
| | | formData.hours = null; |
| | | formData.duration = null; |
| | | }; |
| | | |
| | | // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const openSaveDialog = async () => { |
| | | const forms = { |
| | | name: schemeName.value, |
| | | geom: props.selectedArea, |
| | | type: 3, |
| | | rainfall: totalRainfall.value, |
| | | intensity: rainfallIntensity.value, |
| | | duration: rainfallDuration.value, |
| | | history: rainfallHistory.value, |
| | | }; |
| | | await simStore.addSimCheme(forms); |
| | | EventBus.emit("close-selectArea"); |
| | | }; |
| | | |
| | | // å
³éä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const handleClose = () => { |
| | | saveDialogVisible.value = false; |
| | | }; |
| | | async function openSaveDialog() { |
| | | try { |
| | | formData.geom = props.selectedArea; |
| | | await simStore.addSimCheme(formData); |
| | | resetForm(); |
| | | EventBus.emit("close-selectArea"); |
| | | ElMessage.success("æ¹æ¡ä¿åæå"); |
| | | } catch (error) { |
| | | // ElMessage.error("æ¹æ¡ä¿å失败"); |
| | | console.log(error); |
| | | } |
| | | } |
| | | |
| | | // å¼å§æ¨¡æ |
| | | function startPlay() { |
| | | console.log("å¼å§æ¨¡ææé®è¢«ç¹å»"); |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | async function startPlay() { |
| | | try { |
| | | formData.geom = props.selectedArea; |
| | | await simStore.addSimCheme(formData); |
| | | EventBus.emit("close-selectArea"); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | ElMessage.success("模æå¼å§"); |
| | | } catch (error) { |
| | | ElMessage.error("模æå¯å¨å¤±è´¥"); |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .history-simulation { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .details { |
| | | margin-top: 10px; |
| | | transition: height 0.3s ease, opacity 0.3s ease; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .hidden { |
| | | height: 0; |
| | | opacity: 0; |
| | | padding: 10px 10px 0px 0px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .buttons { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | gap: 10px; |
| | | justify-content: space-evenly; |
| | | } |
| | | |
| | | .input-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | } |
| | | |
| | | .input-item { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | label { |
| | | text-align: left; |
| | | white-space: nowrap; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .el-input { |
| | | flex: 4; |
| | | } |
| | | |
| | | span { |
| | | flex: 1; |
| | | text-align: left; |
| | | } |
| | | |
| | | .el-select { |
| | | flex: 4; |
| | | text-align: left; |
| | | margin-bottom: 10px; |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | .clickable-text { |
| | |
| | | color: #61f7d4; |
| | | } |
| | | |
| | | /* èªå®ä¹ Dialog ç z-index */ |
| | | .custom-dialog { |
| | | z-index: 5000 !important; |
| | | /* ç¡®ä¿å¯¹è¯æ¡è¦çå
¶ä»å
ç´ */ |
| | | :deep(.el-form-item__content) { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | :deep(.el-input) { |
| | | flex: 1; |
| | | } |
| | | |
| | | :deep(.el-select) { |
| | | width: 100%; |
| | | } |
| | | :deep(.el-input-group__append), |
| | | :deep(.el-input-group__prepend) { |
| | | background-color: #084b42; |
| | | color: #fff; |
| | | } |
| | | :deep(.el-form-item__label) { |
| | | color: #61f7d4 !important; |
| | | } |
| | | </style> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="æ¹æ¡åç§°:"> |
| | | <el-input |
| | | v-model="forms.schemeName" |
| | | v-model="forms.name" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | |
| | | > |
| | | </el-form-item> |
| | | <el-form-item label="éé¨å¼ºåº¦:"> |
| | | <el-input |
| | | v-model="forms.rainfallIntensity" |
| | | type="number" |
| | | placeholder="请è¾å
¥" |
| | | > |
| | | <el-input v-model="forms.intensity" type="number" placeholder="请è¾å
¥"> |
| | | <template #append>mm/h</template></el-input |
| | | > |
| | | </el-form-item> |
| | |
| | | import { getRainfallData } from "@/api/hpApi"; |
| | | import { EventBus } from "@/eventBus"; // å¼å
¥äºä»¶æ»çº¿ |
| | | |
| | | |
| | | onMounted(() => { |
| | | getRain(); |
| | | }); |
| | | |
| | | // è·å Store å®ä¾ |
| | | const simStore = SimAPIStore(); |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | function startPlay() { |
| | | console.log("å¼å§æ¨¡ææé®è¢«ç¹å»"); |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | |
| | | // å®ä¹ Props |
| | | const props = defineProps({ |
| | |
| | | |
| | | const forms = reactive({ |
| | | rainfall: 50, |
| | | schemeName: "", |
| | | rainfallIntensity: 70, |
| | | name: "", |
| | | intensity: 70, |
| | | duration: null, |
| | | prediction: "éé¨åºæ¬¡", |
| | | mode: "æ£æåå¸", |
| | | showRainFall: "", |
| | | hours: null, |
| | | type: 1, |
| | | geom: null, // å
设置为 null æè
å
¶ä»é»è®¤å¼, |
| | | }); |
| | | |
| | | // éé¨åºæ¬¡éæ© |
| | |
| | | forms.duration = calculateHoursDifference(val); |
| | | }; |
| | | |
| | | const resetForm = () => { |
| | | forms.rainfall = 50; |
| | | forms.name = ""; |
| | | forms.intensity = 70; |
| | | forms.duration = null; |
| | | forms.prediction = "éé¨åºæ¬¡"; |
| | | forms.mode = "æ£æåå¸"; |
| | | forms.showRainFall = ""; |
| | | forms.hours = null; |
| | | forms.type = 1; |
| | | forms.geom = null; // å
设置为 null æè
å
¶ä»é»è®¤å¼, |
| | | }; |
| | | |
| | | // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const openSaveDialog = async () => { |
| | | const params = { |
| | | name: forms.schemeName, |
| | | geom: props.selectedArea, |
| | | type: 1, |
| | | rainfall: forms.rainfall, |
| | | duration: forms.duration, |
| | | intensity: forms.rainfallIntensity, |
| | | mode: forms.mode, |
| | | prediction: forms.prediction, |
| | | }; |
| | | await simStore.addSimCheme(params); |
| | | EventBus.emit("close-selectArea"); |
| | | |
| | | // å¨ setup å
鍿´æ° geom çå¼ |
| | | try { |
| | | forms.geom = props.selectedArea; |
| | | await simStore.addSimCheme(forms); |
| | | resetForm(); |
| | | EventBus.emit("close-selectArea"); |
| | | } catch (err) {} |
| | | }; |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | // å¼å§æ¨¡æ |
| | | async function startPlay() { |
| | | forms.geom = props.selectedArea; |
| | | await simStore.addSimCheme(forms); |
| | | EventBus.emit("close-selectArea"); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | |
| | | // æå¼æ¹æ¡ |
| | | const openPlan = () => { |
| | | // getRain(); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="real-time-simulation"> |
| | | <div class="left-top"> |
| | | <span>宿¶æ¨¡æ</span> |
| | | <span class="clickable-text" @click="toggleDetails">{{ |
| | | isCollapsed ? "å±å¼" : "æ¶èµ·" |
| | | }}</span> |
| | | </div> |
| | | <div class="details" :class="{ hidden: isCollapsed }"> |
| | | <div class="input-group"> |
| | | <div class="input-item"> |
| | | <label>æ¹æ¡åç§°:</label> |
| | | <el-input |
| | | v-model="schemeName" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>é¨éæ°æ®:</label> |
| | | <el-select |
| | | v-model="selectedRainfall" |
| | | placeholder="è¯·éæ©" |
| | | popper-class="mySelectStyle" |
| | | > |
| | | <el-option |
| | | v-for="item in rainfallData" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="table-container"> |
| | | <div |
| | | class="table-row" |
| | | v-for="(item, index) in filteredTableData" |
| | | :key="index" |
| | | > |
| | | <input type="checkbox" v-model="item.selected" /> |
| | | <span>{{ item.name }}</span> |
| | | </div> |
| | | </div> |
| | | <!-- <div style="margin-top: 10px;"> |
| | | <label>仿çåæ°:</label> |
| | | <div style="width: 100%; height: 60px; background-color: #fff;"></div> |
| | | </div> --> |
| | | </div> |
| | | <div class="buttons"> |
| | | <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> |
| | | <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> |
| | | <el-button type="success" @click="futurePredictions">æªæ¥é¢æµ</el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, watch, defineProps, computed, inject } from "vue"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { initeWaterPrimitiveView } from "@/utils/water"; |
| | | import { SimAPIStore } from "@/store/simAPI"; |
| | | import { EventBus } from "@/eventBus"; // å¼å
¥äºä»¶æ»çº¿ |
| | | |
| | | // è·å Store å®ä¾ |
| | | const simStore = SimAPIStore(); |
| | | |
| | | // è·å Store å®ä¾ |
| | | const schemeName = ref("æ¹æ¡åç§°"); // æ¹æ¡åç§° |
| | | |
| | | // å·¥å
·å½æ°ï¼æ·±æ·è´å¹¶è®¾ç½®é»è®¤éä¸ç¶æ |
| | | function deepCloneAndSetSelected(data) { |
| | | const newData = {}; |
| | | for (const key in data) { |
| | | newData[key] = data[key].map((item) => ({ ...item, selected: true })); |
| | | } |
| | | return newData; |
| | | } |
| | | |
| | | // æ¥æ¶ç¶ç»ä»¶ä¼ éç props |
| | | const props = defineProps({ |
| | | selectedArea: { |
| | | type: Object, |
| | | required: true, |
| | | }, |
| | | }); |
| | | |
| | | // åç»ä»¶å
é¨ç¶æ |
| | | const rainfallData = ref([]); // é¨éæ°æ® |
| | | const tableData = ref({}); // è¡¨æ ¼æ°æ®ï¼æé¨éæ°æ®åç»ï¼ |
| | | const selectedRainfall = ref(""); // å½åéä¸çé¨éæ°æ® |
| | | const isCollapsed = ref(false); // æ§å¶å±å¼/æ¶èµ·ç¶æ |
| | | const saveDialogVisible = ref(false); // æ§å¶ä¿åæ¹æ¡å¯¹è¯æ¡æ¾ç¤ºç¶æ |
| | | |
| | | // 模æä¸ååºåçæ°æ® |
| | | const areaDataMap = { |
| | | åè¡æ²: { |
| | | rainfallData: [ |
| | | { id: "1", name: "æ°è±¡å®æ¶æ°æ® - åè¡æ²" }, |
| | | { id: "2", name: "é¨éè®¡å®æ¶æ°æ® - åè¡æ²" }, |
| | | ], |
| | | tableData: { |
| | | 1: [ |
| | | { id: "001", name: "åè¡æ²æ°è±¡ç«001" }, |
| | | { id: "002", name: "åè¡æ²æ°è±¡ç«002" }, |
| | | ], |
| | | 2: [ |
| | | { id: "003", name: "åè¡æ²é¨é计003" }, |
| | | { id: "004", name: "åè¡æ²é¨é计004" }, |
| | | ], |
| | | }, |
| | | }, |
| | | 鱼水æ´åæ²: { |
| | | rainfallData: [ |
| | | { id: "1", name: "æ°è±¡å®æ¶æ°æ® - 鱼水æ´åæ²" }, |
| | | { id: "2", name: "é¨éè®¡å®æ¶æ°æ® - 鱼水æ´åæ²" }, |
| | | ], |
| | | tableData: { |
| | | 1: [ |
| | | { id: "005", name: "鱼水æ´åæ²æ°è±¡ç«005" }, |
| | | { id: "006", name: "鱼水æ´åæ²æ°è±¡ç«006" }, |
| | | ], |
| | | 2: [ |
| | | { id: "007", name: "鱼水æ´åæ²é¨é计007" }, |
| | | { id: "008", name: "鱼水æ´åæ²é¨é计008" }, |
| | | ], |
| | | }, |
| | | }, |
| | | äºå®¶è¥¿æ²: { |
| | | rainfallData: [ |
| | | { id: "1", name: "æ°è±¡å®æ¶æ°æ® - äºå®¶è¥¿æ²" }, |
| | | { id: "2", name: "é¨éè®¡å®æ¶æ°æ® - äºå®¶è¥¿æ²" }, |
| | | ], |
| | | tableData: { |
| | | 1: [ |
| | | { id: "009", name: "äºå®¶è¥¿æ²æ°è±¡ç«009" }, |
| | | { id: "010", name: "äºå®¶è¥¿æ²æ°è±¡ç«010" }, |
| | | ], |
| | | 2: [ |
| | | { id: "011", name: "äºå®¶è¥¿æ²é¨é计011" }, |
| | | { id: "012", name: "äºå®¶è¥¿æ²é¨é计012" }, |
| | | ], |
| | | }, |
| | | }, |
| | | }; |
| | | |
| | | // æ ¹æ® selectedArea æ´æ°æ°æ® |
| | | watch( |
| | | () => props.selectedArea, |
| | | (newArea) => { |
| | | if (areaDataMap[newArea]) { |
| | | rainfallData.value = areaDataMap[newArea].rainfallData; |
| | | // ä½¿ç¨æ·±æ·è´è®¾ç½®é»è®¤éä¸ç¶æ |
| | | tableData.value = deepCloneAndSetSelected(areaDataMap[newArea].tableData); |
| | | selectedRainfall.value = ""; // æ¸
空éä¸çé¨éæ°æ® |
| | | } else { |
| | | rainfallData.value = []; |
| | | tableData.value = {}; |
| | | selectedRainfall.value = ""; |
| | | } |
| | | }, |
| | | { immediate: true } // ç«å³æ§è¡ä¸æ¬¡ï¼ç¡®ä¿åå§æ°æ®æ£ç¡® |
| | | ); |
| | | |
| | | // å¨æè®¡ç®è¡¨æ ¼æ°æ® |
| | | const filteredTableData = computed(() => { |
| | | return selectedRainfall.value && tableData.value[selectedRainfall.value] |
| | | ? tableData.value[selectedRainfall.value] |
| | | : []; |
| | | }); |
| | | |
| | | // è·åå½åéä¸çé¨éæ°æ®åç§° |
| | | const selectedRainfallName = computed(() => { |
| | | const selected = rainfallData.value.find( |
| | | (item) => item.id === selectedRainfall.value |
| | | ); |
| | | return selected ? selected.name : ""; |
| | | }); |
| | | |
| | | // è·åå½åéä¸ç设å¤ä¿¡æ¯ |
| | | const selectedDevices = computed(() => { |
| | | return filteredTableData.value.filter((item) => item.selected); |
| | | }); |
| | | |
| | | // å°è£
æé 表åçæ¹æ³ |
| | | const buildSchemeForm = () => { |
| | | return { |
| | | name: schemeName.value, |
| | | geom: props.selectedArea, |
| | | type: 2, |
| | | gauges: [ |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计1", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计2", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | ], |
| | | }; |
| | | }; |
| | | |
| | | // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const openSaveDialog = async () => { |
| | | await simStore.addSimCheme(buildSchemeForm()); |
| | | EventBus.emit("close-selectArea"); |
| | | }; |
| | | |
| | | // å
³éä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const handleClose = () => { |
| | | saveDialogVisible.value = false; |
| | | }; |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | async function startPlay() { |
| | | const selectedItems = filteredTableData.value.filter((item) => item.selected); |
| | | if (selectedItems.length > 0) { |
| | | console.log( |
| | | "éä¸ç项ï¼", |
| | | selectedItems.map((item) => item.name) |
| | | ); |
| | | } else { |
| | | console.log("æªéä¸ä»»ä½é¡¹"); |
| | | } |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | console.log("å½åéä¸çé¨éæ°æ®ï¼", selectedRainfall.value); |
| | | // å¼å§æ¨¡æåéè¦å
ä¿åæ¹æ¡ |
| | | await simStore.addSimCheme(buildSchemeForm()); |
| | | EventBus.emit("close-selectArea"); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | |
| | | const toggleDetails = () => { |
| | | isCollapsed.value = !isCollapsed.value; |
| | | }; |
| | | |
| | | const futurePredictions = () => { |
| | | console.log("æªæ¥é¢æµæé®è¢«ç¹å»"); |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .custom-dialog { |
| | | z-index: 3000 !important; |
| | | } |
| | | .real-time-simulation { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .clickable-text { |
| | | margin-left: 160px; |
| | | cursor: pointer; |
| | | font-size: 14px; |
| | | color: #61f7d4; |
| | | } |
| | | |
| | | .details { |
| | | margin-top: 10px; |
| | | transition: height 0.3s ease, opacity 0.3s ease; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .hidden { |
| | | height: 0; |
| | | opacity: 0; |
| | | } |
| | | |
| | | .input-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | padding-right: 10px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .input-item { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | label { |
| | | text-align: left; |
| | | white-space: nowrap; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .el-select { |
| | | flex: 4; |
| | | text-align: left; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .table-container { |
| | | font-size: 12px; |
| | | height: 120px; |
| | | overflow-y: auto; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | padding: 5px; |
| | | } |
| | | |
| | | .table-row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | padding: 5px 0; |
| | | border-bottom: 1px solid #ddd; |
| | | } |
| | | |
| | | .table-row:last-child { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .table-row span { |
| | | flex: 1; |
| | | text-align: left; |
| | | } |
| | | |
| | | .table-row input[type="checkbox"] { |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .buttons { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | gap: 10px; |
| | | } |
| | | |
| | | .el-button { |
| | | flex: 1; |
| | | } |
| | | </style> |
| | |
| | | isCollapsed ? "å±å¼" : "æ¶èµ·" |
| | | }}</span> |
| | | </div> |
| | | <div class="details" :class="{ hidden: isCollapsed }"> |
| | | <div class="input-group"> |
| | | <div class="input-item"> |
| | | <label>æ¹æ¡åç§°:</label> |
| | | <el-input |
| | | v-model="schemeName" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | |
| | | <el-form |
| | | :model="formData" |
| | | label-width="auto" |
| | | style="max-width: 600px; padding-right: 10px; box-sizing: border-box" |
| | | > |
| | | <el-collapse-transition style="margin-top: 10px"> |
| | | <div v-show="!isCollapsed"> |
| | | <el-form-item label="æ¹æ¡åç§°:"> |
| | | <el-input |
| | | v-model="formData.name" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="é¨éæ°æ®:"> |
| | | <el-select |
| | | v-model="formData.selectedRainfall" |
| | | placeholder="è¯·éæ©" |
| | | popper-class="mySelectStyle" |
| | | > |
| | | <el-option |
| | | v-for="item in rainfallData" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <div class="table-container"> |
| | | <div |
| | | class="table-row" |
| | | v-for="(item, index) in filteredTableData" |
| | | :key="index" |
| | | > |
| | | <input type="checkbox" v-model="item.selected" /> |
| | | <span>{{ item.name }}</span> |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>é¨éæ°æ®:</label> |
| | | <el-select |
| | | v-model="selectedRainfall" |
| | | placeholder="è¯·éæ©" |
| | | popper-class="mySelectStyle" |
| | | > |
| | | <el-option |
| | | v-for="item in rainfallData" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="table-container"> |
| | | <div |
| | | class="table-row" |
| | | v-for="(item, index) in filteredTableData" |
| | | :key="index" |
| | | > |
| | | <input type="checkbox" v-model="item.selected" /> |
| | | <span>{{ item.name }}</span> |
| | | </div> |
| | | </div> |
| | | <!-- <div style="margin-top: 10px;"> |
| | | </el-collapse-transition> |
| | | </el-form> |
| | | |
| | | <!-- <div style="margin-top: 10px;"> |
| | | <label>仿çåæ°:</label> |
| | | <div style="width: 100%; height: 60px; background-color: #fff;"></div> |
| | | </div> --> |
| | | </div> |
| | | <div class="buttons"> |
| | | <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> |
| | | <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> |
| | | <el-button type="success" @click="futurePredictions">æªæ¥é¢æµ</el-button> |
| | | </div> |
| | | |
| | | <!-- ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | <el-dialog |
| | | v-model="saveDialogVisible" |
| | | title="ä¿åæ¹æ¡" |
| | | width="50%" |
| | | :before-close="handleClose" |
| | | custom-class="custom-dialog" |
| | | > |
| | | <div class="dialog-content"> |
| | | <p><strong>æééç¹æ²ï¼</strong>{{ props.selectedArea }}</p> |
| | | <p><strong>模æç±»åï¼</strong>宿¶æ¨¡æ</p> |
| | | <p><strong>é¨éæ°æ®ç±»åï¼</strong>{{ selectedRainfallName }}</p> |
| | | <p><strong>设å¤ä¿¡æ¯ï¼</strong></p> |
| | | <ul> |
| | | <li v-for="item in selectedDevices" :key="item.id">{{ item.name }}</li> |
| | | </ul> |
| | | </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> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, watch, defineProps, computed, inject } from "vue"; |
| | | import { ref, watch, defineProps, computed, inject, reactive } from "vue"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { initeWaterPrimitiveView } from "@/utils/water"; |
| | | import { SimAPIStore } from "@/store/simAPI"; |
| | |
| | | // è·å Store å®ä¾ |
| | | const simStore = SimAPIStore(); |
| | | |
| | | // è·å Store å®ä¾ |
| | | const schemeName = ref("æ¹æ¡åç§°"); // æ¹æ¡åç§° |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | function startPlay() { |
| | | const selectedItems = filteredTableData.value.filter((item) => item.selected); |
| | | if (selectedItems.length > 0) { |
| | | console.log( |
| | | "éä¸ç项ï¼", |
| | | selectedItems.map((item) => item.name) |
| | | ); |
| | | } else { |
| | | console.log("æªéä¸ä»»ä½é¡¹"); |
| | | } |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | console.log("å½åéä¸çé¨éæ°æ®ï¼", selectedRainfall.value); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | // è¡¨åæ°æ® |
| | | const formData = reactive({ |
| | | name: "æ¹æ¡åç§°", |
| | | selectedRainfall: "", |
| | | type: 2, |
| | | gauges: [ |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计1", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计2", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | ], |
| | | }); |
| | | |
| | | // å·¥å
·å½æ°ï¼æ·±æ·è´å¹¶è®¾ç½®é»è®¤éä¸ç¶æ |
| | | function deepCloneAndSetSelected(data) { |
| | |
| | | required: true, |
| | | }, |
| | | }); |
| | | |
| | | // åç»ä»¶å
é¨ç¶æ |
| | | const rainfallData = ref([]); // é¨éæ°æ® |
| | | const rainfallData = ref([]); |
| | | const tableData = ref({}); // è¡¨æ ¼æ°æ®ï¼æé¨éæ°æ®åç»ï¼ |
| | | const selectedRainfall = ref(""); // å½åéä¸çé¨éæ°æ® |
| | | const isCollapsed = ref(false); // æ§å¶å±å¼/æ¶èµ·ç¶æ |
| | | const saveDialogVisible = ref(false); // æ§å¶ä¿åæ¹æ¡å¯¹è¯æ¡æ¾ç¤ºç¶æ |
| | | |
| | | // 模æä¸ååºåçæ°æ® |
| | | const areaDataMap = { |
| | |
| | | watch( |
| | | () => props.selectedArea, |
| | | (newArea) => { |
| | | if (areaDataMap[newArea]) { |
| | | rainfallData.value = areaDataMap[newArea].rainfallData; |
| | | console.log(newArea.label, "new"); |
| | | if (areaDataMap[newArea.label]) { |
| | | rainfallData.value = areaDataMap[newArea.label].rainfallData; |
| | | // ä½¿ç¨æ·±æ·è´è®¾ç½®é»è®¤éä¸ç¶æ |
| | | tableData.value = deepCloneAndSetSelected(areaDataMap[newArea].tableData); |
| | | selectedRainfall.value = ""; // æ¸
空éä¸çé¨éæ°æ® |
| | | tableData.value = deepCloneAndSetSelected( |
| | | areaDataMap[newArea.label].tableData |
| | | ); |
| | | formData.selectedRainfall = ""; // æ¸
空éä¸çé¨éæ°æ® |
| | | } else { |
| | | rainfallData.value = []; |
| | | tableData.value = {}; |
| | | selectedRainfall.value = ""; |
| | | formData.selectedRainfall = ""; |
| | | } |
| | | }, |
| | | { immediate: true } // ç«å³æ§è¡ä¸æ¬¡ï¼ç¡®ä¿åå§æ°æ®æ£ç¡® |
| | | } |
| | | // { immediate: true } // ç«å³æ§è¡ä¸æ¬¡ï¼ç¡®ä¿åå§æ°æ®æ£ç¡® |
| | | ); |
| | | |
| | | // å¨æè®¡ç®è¡¨æ ¼æ°æ® |
| | | const filteredTableData = computed(() => { |
| | | return selectedRainfall.value && tableData.value[selectedRainfall.value] |
| | | ? tableData.value[selectedRainfall.value] |
| | | return formData.selectedRainfall && tableData.value[formData.selectedRainfall] |
| | | ? tableData.value[formData.selectedRainfall] |
| | | : []; |
| | | }); |
| | | |
| | | // è·åå½åéä¸çé¨éæ°æ®åç§° |
| | | const selectedRainfallName = computed(() => { |
| | | const selected = rainfallData.value.find( |
| | | (item) => item.id === selectedRainfall.value |
| | | (item) => item.id === formData.selectedRainfall |
| | | ); |
| | | return selected ? selected.name : ""; |
| | | }); |
| | |
| | | return filteredTableData.value.filter((item) => item.selected); |
| | | }); |
| | | |
| | | const resetForm = () => { |
| | | formData.name = ""; |
| | | formData.selectedRainfall = ""; |
| | | }; |
| | | |
| | | // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const openSaveDialog = async () => { |
| | | const forms = { |
| | | name: schemeName.value, |
| | | geom: props.selectedArea, |
| | | type: 2, |
| | | gauges: [ |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计1", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计2", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | ], |
| | | }; |
| | | await simStore.addSimCheme(forms); |
| | | try { |
| | | formData.geom = props.selectedArea; |
| | | await simStore.addSimCheme(formData); |
| | | resetForm(); |
| | | EventBus.emit("close-selectArea"); |
| | | } catch (err) {} |
| | | }; |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | async function startPlay() { |
| | | const selectedItems = filteredTableData.value.filter((item) => item.selected); |
| | | if (selectedItems.length > 0) { |
| | | console.log( |
| | | "éä¸ç项ï¼", |
| | | selectedItems.map((item) => item.name) |
| | | ); |
| | | } else { |
| | | console.log("æªéä¸ä»»ä½é¡¹"); |
| | | } |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | // å¼å§æ¨¡æåéè¦å
ä¿åæ¹æ¡ |
| | | formData.geom = props.selectedArea; |
| | | await simStore.addSimCheme(formData); |
| | | EventBus.emit("close-selectArea"); |
| | | }; |
| | | |
| | | // å
³éä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const handleClose = () => { |
| | | saveDialogVisible.value = false; |
| | | }; |
| | | |
| | | // // 确认ä¿å |
| | | // const confirmSave = () => { |
| | | // // æé æ°çæ¹æ¡å¯¹è±¡ |
| | | // const newScheme = { |
| | | // name: schemeName.value,//æ¹æ¡åç§° |
| | | // id: Date.now().toString(), // å¯ä¸ ID |
| | | // area: props.selectedArea, // åºå |
| | | // name: selectedRainfallName.value, // æ¹æ¡åç§°ï¼é¨éæ°æ®ç±»åï¼ |
| | | // createTime: new Date().toISOString(), // å建æ¶é´ |
| | | // taskStatus:1, // åå§ç¶æä¸ºæªå¼å§ |
| | | // rainfallType: selectedRainfallName.value, // é¨éæ°æ®ç±»å |
| | | // devices: selectedDevices.value.map((item) => item.name), // 设å¤ä¿¡æ¯ |
| | | // }; |
| | | |
| | | // // è°ç¨ Store çæ¹æ³æ·»å æ¹æ¡ |
| | | // simStore.addSchemCard(newScheme); |
| | | |
| | | // console.log("ä¿åæ¹æ¡æå", newScheme); |
| | | // ElMessage.success("æ¹æ¡å·²ä¿å"); |
| | | |
| | | // // å
³éå¯¹è¯æ¡ |
| | | // saveDialogVisible.value = false; |
| | | // }; |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | |
| | | const toggleDetails = () => { |
| | | isCollapsed.value = !isCollapsed.value; |
| | |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | padding-right: 10px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .input-item { |
| | |
| | | .table-container { |
| | | font-size: 12px; |
| | | height: 120px; |
| | | width: 90%; |
| | | overflow-y: auto; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | |
| | | .buttons { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | gap: 10px; |
| | | padding-right: 10px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .el-button { |
| | |
| | | url: "/json/line.json", |
| | | color: "#00FF00", |
| | | width: 12.0, |
| | | pointColor: "#73FFA7", |
| | | pointColor: "#FFFF73", |
| | | speed: 2, |
| | | far: 50000, |
| | | }); |
| | |
| | | secure: false |
| | | }, |
| | | '/hp': { |
| | | target: 'http://192.168.56.106:9511', |
| | | target: 'http://192.168.56.106:9522', |
| | | changeOrigin: true, |
| | | pathRewrite: { |
| | | '^/hp': '' |