guonan
2025-04-15 9eba6f3e999e7bc1f360b9a4b11dd2b204fb0feb
开始模拟跳转
已修改3个文件
144 ■■■■■ 文件已修改
src/views/left/KGSim.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/left/KGSimOption/HistorySimulation.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/left/Simulation.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/left/KGSim.vue
@@ -29,13 +29,17 @@
    <!-- 历史模拟 -->
    <div class="history-simulation-wrapper">
      <el-radio-group v-model="selectedSimulation" style="margin-bottom: 10px;">
      <el-radio-group v-model="selectedSimulation" style="margin-bottom: 10px">
        <el-radio label="历史模拟">历史模拟</el-radio>
        <el-radio label="实时模拟">实时模拟</el-radio>
        <el-radio label="预测模拟">预测模拟</el-radio>
      </el-radio-group>
      <div v-if="selectedSimulation === '历史模拟'">
        <HistorySimulation :selectedArea="selectedArea"/>
        <HistorySimulation
          :selectedArea="selectedArea"
          @start="start"
          @end="end"
        />
      </div>
      <div v-if="selectedSimulation === '实时模拟'">
        <RealTimeSimulation :selectedArea="selectedArea" />
@@ -48,13 +52,24 @@
</template>
<script setup>
import { ref, computed } from 'vue';
import HistorySimulation from './KGSimOption/HistorySimulation.vue';
import PredictiveSimulation from './KGSimOption/PredictiveSimulation.vue';
import RealTimeSimulation from './KGSimOption/RealTimeSimulation.vue';
import { ref, computed } from "vue";
import HistorySimulation from "./KGSimOption/HistorySimulation.vue";
import PredictiveSimulation from "./KGSimOption/PredictiveSimulation.vue";
import RealTimeSimulation from "./KGSimOption/RealTimeSimulation.vue";
const selectedSimulation = ref('历史模拟');
const selectedArea = ref('孙胡沟');
const emit = defineEmits(["start", "end"]);
function end() {
  emit("end");
}
function start() {
  // initeWaterPrimitiveView();
  emit("start");
}
const selectedSimulation = ref("历史模拟");
const selectedArea = ref("孙胡沟");
const earesOptions = [
  { value: "孙胡沟", label: "孙胡沟" },
  { value: "鱼水洞后沟", label: "鱼水洞后沟" },
@@ -64,9 +79,9 @@
];
// 动态过滤选项
const searchQuery = ref('');
const searchQuery = ref("");
const filteredOptions = computed(() => {
  return earesOptions.filter(option =>
  return earesOptions.filter((option) =>
    option.label.toLowerCase().includes(searchQuery.value.toLowerCase())
  );
});
@@ -77,11 +92,11 @@
};
const handleStart = () => {
  console.log('开始按钮被点击');
  console.log("开始按钮被点击");
};
const handleAdd = () => {
  console.log('加载按钮被点击');
  console.log("加载按钮被点击");
};
</script>
src/views/left/KGSimOption/HistorySimulation.vue
@@ -2,38 +2,60 @@
    <div class="history-simulation">
        <div class="left-top">
            <span>历史模拟</span>
            <span class="clickable-text" @click="toggleDetails">{{ isCollapsed ? '展开' : '收起' }}</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
            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>
          <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>
          <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>
          <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 style="width: 100%; height: 60px; background-color: #fff"></div>
            </div>
        </div>
        <div class="buttons">
@@ -42,8 +64,13 @@
        </div>
        <!-- 保存方案对话框 -->
        <el-dialog v-model="saveDialogVisible" title="保存方案" width="50%" :before-close="handleClose"
            custom-class="custom-dialog">
    <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>
@@ -63,11 +90,11 @@
</template>
<script setup>
import { ref, computed } from 'vue';
import { ElMessage } from 'element-plus';
import { ref, computed } from "vue";
import { ElMessage } from "element-plus";
import { initeWaterPrimitiveView } from "@/utils/water";
const emit = defineEmits(["start", "end"]);
function endPlay() {
  emit("end");
}
@@ -80,12 +107,12 @@
const props = defineProps({
    selectedArea: {
        type: String,
        required: true
    }
    required: true,
  },
});
// 数据绑定
const rainfallHistory = ref('2'); // 默认选中第二项
const rainfallHistory = ref("2"); // 默认选中第二项
const totalRainfall = ref(50); // 降雨总量
const rainfallIntensity = ref(70); // 降雨强度
const rainfallDuration = ref(5); // 降雨时长
@@ -94,17 +121,19 @@
// 历史雨情数据
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: '新增降雨历史数据' }
  { 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 selected = HistoricalRainData.find(
    (item) => item.id === rainfallHistory.value
  );
  return selected ? selected.name : "";
});
// 切换详情显示
@@ -114,8 +143,14 @@
// 打开保存方案对话框
const openSaveDialog = () => {
    if (!props.selectedArea || !rainfallHistory.value || !totalRainfall.value || !rainfallIntensity.value || !rainfallDuration.value) {
        ElMessage.warning('请先填写所有必填项');
  if (
    !props.selectedArea ||
    !rainfallHistory.value ||
    !totalRainfall.value ||
    !rainfallIntensity.value ||
    !rainfallDuration.value
  ) {
    ElMessage.warning("请先填写所有必填项");
        return;
    }
    saveDialogVisible.value = true;
@@ -128,22 +163,21 @@
// 确认保存
const confirmSave = () => {
    console.log('保存方案成功', {
  console.log("保存方案成功", {
        区域: props.selectedArea,
        模拟类型: '历史模拟',
    模拟类型: "历史模拟",
        历史雨情: selectedRainfallName.value,
        降雨总量: `${totalRainfall.value} mm`,
        降雨强度: `${rainfallIntensity.value} mm/h`,
        降雨时长: `${rainfallDuration.value} h`
    降雨时长: `${rainfallDuration.value} h`,
    });
    ElMessage.success('方案已保存');
  ElMessage.success("方案已保存");
    saveDialogVisible.value = false;
};
// 开始模拟
const startSimulation = () => {
    console.log('开始模拟按钮被点击');
    console.log('当前选中的区域:', props.selectedArea);
  console.log("开始模拟按钮被点击");
  console.log("当前选中的区域:", props.selectedArea);
};
</script>
src/views/left/Simulation.vue
@@ -9,11 +9,11 @@
    <el-tab-pane label="行政区划仿真" name="first"
      ><city-sim :clickValue="clickValue" @start="start" @end="end"
    /></el-tab-pane>
    <el-tab-pane label="重点区域仿真" name="second" @start="start" @end="end"
      ><city-sim :clickValue="clickValue"
    <el-tab-pane label="重点区域仿真" name="second"
      ><city-sim :clickValue="clickValue" @start="start" @end="end"
    /></el-tab-pane>
    <el-tab-pane label="重点沟仿真" name="third">
      <kg-sim :clickValue="clickValue" />
      <kg-sim :clickValue="clickValue" @start="start" @end="end" />
    </el-tab-pane>
  </el-tabs>
</template>
@@ -35,6 +35,7 @@
function start() {
  emits("start");
  console.log("开始模拟");
}
function end() {
  emits("end");