<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>
|
<el-select
|
v-model="rainfallHistory"
|
placeholder="请选择"
|
popper-class="mySelectStyle"
|
>
|
<el-option
|
v-for="item in HistoricalRainData"
|
: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-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>
|
<span>mm</span>
|
</div>
|
<div class="input-item">
|
<label>降雨强度:</label>
|
<el-input
|
v-model="rainfallIntensity"
|
type="number"
|
placeholder="请输入"
|
></el-input>
|
<span>mm/h</span>
|
</div>
|
<div class="input-item">
|
<label>选择时间:</label>
|
<el-date-picker
|
v-model="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"
|
/>
|
<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-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>
|
</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, computed, inject } from "vue";
|
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 { SimAPIStore } from "@/store/simAPI";
|
import { EventBus } from "@/eventBus"; // 引入事件总线
|
|
// 获取 Store 实例
|
const simStore = SimAPIStore();
|
|
// 测试获取雨量数据
|
// const getRainData = () => {
|
// getRainfallData()
|
// .then((a) => {
|
// console.log(a, '宏图获取雨量数据');
|
// })
|
// };
|
|
// 注入模拟操作方法
|
const { startSimulate, endSimulate } = inject("simulateActions");
|
|
// 定义 Props
|
const props = defineProps({
|
selectedArea: {
|
type: Object,
|
required: true,
|
},
|
});
|
|
// 数据绑定
|
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 HistoricalRainData = [
|
{ id: "1", name: "XX年75mm降雨" },
|
{ id: "2", name: "XX年50mm降雨" },
|
{ id: "3", name: "XX年75mm降雨" },
|
{ id: "4", name: "XX年100mm降雨" },
|
{ id: "5", name: "新增降雨历史数据" },
|
];
|
|
// 获取当前选中的历史雨情名称
|
const selectedRainfallName = computed(() => {
|
const selected = HistoricalRainData.find(
|
(item) => item.name === rainfallHistory.value
|
);
|
return selected ? selected.name : "";
|
});
|
|
// 切换详情显示
|
const toggleDetails = () => {
|
isCollapsed.value = !isCollapsed.value;
|
};
|
|
const { calculateHoursDifference } = inject("calculateHours");
|
|
const change = (val) => {
|
rainfallDuration.value = calculateHoursDifference(val);
|
};
|
|
// 打开保存方案对话框
|
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;
|
};
|
|
// 开始模拟
|
function startPlay() {
|
console.log("开始模拟按钮被点击");
|
console.log("当前选中的区域:", props.selectedArea);
|
initeWaterPrimitiveView();
|
startSimulate();
|
}
|
</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;
|
}
|
|
.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;
|
}
|
|
.clickable-text {
|
margin-left: 160px;
|
cursor: pointer;
|
font-size: 14px;
|
color: #61f7d4;
|
}
|
|
/* 自定义 Dialog 的 z-index */
|
.custom-dialog {
|
z-index: 5000 !important;
|
/* 确保对话框覆盖其他元素 */
|
}
|
</style>
|