<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.id"
|
></el-option>
|
</el-select>
|
</div>
|
</div>
|
<div class="input-group">
|
<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-input
|
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>{{ 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 } from "vue";
|
import { ElMessage } from "element-plus";
|
import { initeWaterPrimitiveView } from "@/utils/water";
|
const emit = defineEmits(["start", "end"]);
|
|
function endPlay() {
|
emit("end");
|
}
|
|
function startPlay() {
|
initeWaterPrimitiveView();
|
emit("start");
|
}
|
// 定义 Props
|
const props = defineProps({
|
selectedArea: {
|
type: String,
|
required: true,
|
},
|
});
|
|
// 数据绑定
|
const rainfallHistory = ref("2"); // 默认选中第二项
|
const totalRainfall = ref(50); // 降雨总量
|
const rainfallIntensity = ref(70); // 降雨强度
|
const rainfallDuration = ref(5); // 降雨时长
|
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.id === rainfallHistory.value
|
);
|
return selected ? selected.name : "";
|
});
|
|
// 切换详情显示
|
const toggleDetails = () => {
|
isCollapsed.value = !isCollapsed.value;
|
};
|
|
// 打开保存方案对话框
|
const openSaveDialog = () => {
|
if (
|
!props.selectedArea ||
|
!rainfallHistory.value ||
|
!totalRainfall.value ||
|
!rainfallIntensity.value ||
|
!rainfallDuration.value
|
) {
|
ElMessage.warning("请先填写所有必填项");
|
return;
|
}
|
saveDialogVisible.value = true;
|
};
|
|
// 关闭保存方案对话框
|
const handleClose = () => {
|
saveDialogVisible.value = false;
|
};
|
|
// 确认保存
|
const confirmSave = () => {
|
console.log("保存方案成功", {
|
区域: props.selectedArea,
|
模拟类型: "历史模拟",
|
历史雨情: selectedRainfallName.value,
|
降雨总量: `${totalRainfall.value} mm`,
|
降雨强度: `${rainfallIntensity.value} mm/h`,
|
降雨时长: `${rainfallDuration.value} h`,
|
});
|
ElMessage.success("方案已保存");
|
saveDialogVisible.value = false;
|
};
|
// 开始模拟
|
const startSimulation = () => {
|
console.log("开始模拟按钮被点击");
|
console.log("当前选中的区域:", props.selectedArea);
|
};
|
</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;
|
}
|
|
.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: 3000 !important;
|
/* 确保对话框覆盖其他元素 */
|
}
|
</style>
|