<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-item">
|
<label>预测数据:</label>
|
<el-select v-model="selectedForecastData" placeholder="请选择" popper-class="mySelectStyle">
|
<el-option
|
v-for="item in ForecastData"
|
:key="item.id"
|
:label="item.name"
|
:value="item.id"
|
></el-option>
|
</el-select>
|
</div>
|
<div class="input-item" style="margin-bottom: 10px;">
|
<label>降雨雨量:</label>
|
<el-input v-model="totalRainfall" type="number" placeholder="请输入"></el-input>
|
<span>mm</span>
|
</div>
|
<div class="input-item" style="margin-bottom: 10px;">
|
<label>降雨强度:</label>
|
<el-input v-model="rainfallIntensity" type="number" placeholder="请输入"></el-input>
|
<span>mm/h</span>
|
</div>
|
<div class="input-item">
|
<label>降雨模式:</label>
|
<el-select v-model="selectedRainfallPatterns" placeholder="请选择" popper-class="mySelectStyle">
|
<el-option
|
v-for="item in RainfallPatterns"
|
:key="item.id"
|
:label="item.name"
|
:value="item.id"
|
></el-option>
|
</el-select>
|
</div>
|
<div class="input-item">
|
<label>预计时长:</label>
|
<el-input v-model="rainfallDuration" type="number" placeholder="请输入"></el-input>
|
<span>h</span>
|
</div>
|
<div>
|
<label>仿真参数:</label>
|
<div style="width: 100%; height: 60px; background-color: #fff;"></div>
|
</div>
|
</div>
|
<div class="buttons">
|
<el-button type="primary" @click="openPlan">打开方案</el-button>
|
<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>{{ selectedForecastDataName }}</p>
|
<p><strong>降雨雨量:</strong>{{ totalRainfall }} mm</p>
|
<p><strong>降雨强度:</strong>{{ rainfallIntensity }} mm/h</p>
|
<p><strong>降雨模式:</strong>{{ selectedRainfallPatternsName }}</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 } from 'element-plus';
|
import { initeWaterPrimitiveView } from "@/utils/water";
|
const { startSimulate, endSimulate } = inject("simulateActions");
|
|
function startPlay() {
|
console.log("开始模拟按钮被点击");
|
console.log("当前选中的区域:", props.selectedArea);
|
initeWaterPrimitiveView();
|
startSimulate();
|
}
|
// 定义 Props
|
const props = defineProps({
|
selectedArea: {
|
type: String,
|
required: true
|
}
|
});
|
|
// 数据绑定
|
const isCollapsed = ref(false); // 控制展开/收起状态
|
const totalRainfall = ref(50); // 降雨雨量
|
const rainfallIntensity = ref(70); // 降雨强度
|
const rainfallDuration = ref(5); // 预计时长
|
const selectedForecastData = ref('4'); // 默认选中“自定义参数”
|
const selectedRainfallPatterns = ref('1'); // 默认选中“正态分布”
|
const saveDialogVisible = ref(false); // 控制保存方案对话框的显示状态
|
|
// 预测数据选项
|
const ForecastData = [
|
{ id: '1', name: '降雨场次' },
|
{ id: '2', name: '气象数据' },
|
{ id: '3', name: '逐小时预报数据' },
|
{ id: '4', name: '自定义参数' }
|
];
|
|
// 降雨模式选项
|
const RainfallPatterns = [
|
{ id: '1', name: '正态分布' },
|
{ id: '2', name: '平均分布' },
|
{ id: '3', name: '波动平均分布' },
|
{ id: '4', name: '持续上升' }
|
];
|
|
// 计算属性:获取当前选中的预测数据名称
|
const selectedForecastDataName = computed(() => {
|
const selected = ForecastData.find(item => item.id === selectedForecastData.value);
|
return selected ? selected.name : '';
|
});
|
|
// 计算属性:获取当前选中的降雨模式名称
|
const selectedRainfallPatternsName = computed(() => {
|
const selected = RainfallPatterns.find(item => item.id === selectedRainfallPatterns.value);
|
return selected ? selected.name : '';
|
});
|
|
// 切换详情显示
|
const toggleDetails = () => {
|
isCollapsed.value = !isCollapsed.value;
|
};
|
|
// 打开保存方案对话框
|
const openSaveDialog = () => {
|
if (!props.selectedArea || !selectedForecastData.value || !totalRainfall.value || !rainfallIntensity.value || !selectedRainfallPatterns.value || !rainfallDuration.value) {
|
ElMessage.warning('请先填写所有必填项');
|
return;
|
}
|
saveDialogVisible.value = true;
|
};
|
|
// 关闭保存方案对话框
|
const handleClose = () => {
|
saveDialogVisible.value = false;
|
};
|
|
// 确认保存
|
const confirmSave = () => {
|
console.log('保存方案成功', {
|
区域: props.selectedArea,
|
模拟类型: '预测模拟',
|
预测数据: selectedForecastDataName.value,
|
降雨雨量: `${totalRainfall.value} mm`,
|
降雨强度: `${rainfallIntensity.value} mm/h`,
|
降雨模式: selectedRainfallPatternsName.value,
|
预计时长: `${rainfallDuration.value} h`
|
});
|
ElMessage.success('方案已保存');
|
saveDialogVisible.value = false;
|
};
|
|
// 打开方案
|
const openPlan = () => {
|
console.log('打开方案按钮被点击');
|
};
|
</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: 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>
|