<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>
|