<template>
|
<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="formData.history"
|
placeholder="请选择"
|
popper-class="mySelectStyle"
|
>
|
<el-option
|
v-for="item in HistoricalRainData"
|
:key="item.id"
|
:label="item.name"
|
:value="item.name"
|
/>
|
</el-select>
|
</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="formData.rainfall"
|
type="number"
|
placeholder="请输入"
|
>
|
<template #append>mm</template>
|
</el-input>
|
</el-form-item>
|
|
<el-form-item label="降雨强度:" prop="intensity">
|
<el-input
|
v-model="formData.intensity"
|
type="number"
|
placeholder="请输入"
|
>
|
<template #append>mm/h</template>
|
</el-input>
|
</el-form-item>
|
|
<el-form-item label="选择时间:" prop="hours">
|
<el-date-picker
|
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="handleTimeChange"
|
/>
|
</el-form-item>
|
|
<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>
|
</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, reactive, inject } from "vue";
|
import { ElMessage } from "element-plus";
|
import { initeWaterPrimitiveView } from "@/utils/water";
|
import { useSimStore } from "@/store/simulation.js";
|
import { SimAPIStore } from "@/store/simAPI";
|
import { EventBus } from "@/eventBus";
|
|
// 获取 Store 实例
|
const simStore = SimAPIStore();
|
|
// 注入模拟操作方法
|
const { startSimulate, endSimulate } = inject("simulateActions");
|
|
// 定义 Props
|
const props = defineProps({
|
selectedArea: {
|
type: Object,
|
required: true,
|
},
|
});
|
|
// 表单数据
|
const formData = reactive({
|
history: "XX年50mm降雨",
|
name: "方案名称",
|
rainfall: 50,
|
intensity: 70,
|
hours: null,
|
duration: null,
|
type: 3,
|
});
|
|
// 控制详情的展开/收起状态
|
const isCollapsed = 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 === formData.history
|
);
|
return selected ? selected.name : "";
|
});
|
|
// 切换详情显示
|
const toggleDetails = () => {
|
isCollapsed.value = !isCollapsed.value;
|
};
|
|
const { calculateHoursDifference } = inject("calculateHours");
|
|
const handleTimeChange = (val) => {
|
formData.duration = calculateHoursDifference(val);
|
};
|
|
const resetForm = () => {
|
formData.name = "方案名称";
|
formData.rainfall = 50;
|
formData.intensity = 70;
|
formData.hours = null;
|
formData.duration = null;
|
};
|
|
// 打开保存方案对话框
|
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);
|
}
|
}
|
|
// 开始模拟
|
async function startPlay() {
|
try {
|
formData.geom = props.selectedArea;
|
// 保存方案
|
const res = await simStore.addSimCheme(formData);
|
const schemeId = res.data?.data?.id;
|
|
if (!schemeId) {
|
ElMessage.error("方案保存失败,未获取到有效 ID");
|
return;
|
}
|
|
// 调用求解器
|
const simStartRes = await getSimStart(schemeId);
|
console.log(simStartRes, "getSimStart 返回结果");
|
|
// 关闭选择区域窗口、初始化视图并开始模拟
|
EventBus.emit("close-selectArea");
|
// 暂时不在此处开始模拟,模拟都在方案列表中进行模拟
|
// initeWaterPrimitiveView();
|
// startSimulate();
|
|
ElMessage.warning({
|
message: "请返回方案列表开始模拟!",
|
duration: 10000, // 提示框显示时长,单位为毫秒,默认是3000毫秒
|
});
|
|
} catch (error) {
|
ElMessage.error("启动模拟失败,请稍后再试");
|
}
|
}
|
</script>
|
|
<style scoped>
|
.history-simulation {
|
padding: 10px 10px 0px 0px;
|
box-sizing: border-box;
|
}
|
|
.buttons {
|
margin-top: 20px;
|
display: flex;
|
gap: 10px;
|
justify-content: flex-end;
|
padding-right: 10px;
|
box-sizing: border-box;
|
}
|
|
.clickable-text {
|
margin-left: 160px;
|
cursor: pointer;
|
font-size: 14px;
|
color: #61f7d4;
|
}
|
|
: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>
|