From 9eba6f3e999e7bc1f360b9a4b11dd2b204fb0feb Mon Sep 17 00:00:00 2001
From: guonan <guonan201020@163.com>
Date: 星期二, 15 四月 2025 09:59:43 +0800
Subject: [PATCH] 开始模拟跳转

---
 src/views/left/KGSim.vue                         |   55 +++++---
 src/views/left/KGSimOption/HistorySimulation.vue |  288 ++++++++++++++++++++++++++---------------------
 src/views/left/Simulation.vue                    |    7 
 3 files changed, 200 insertions(+), 150 deletions(-)

diff --git a/src/views/left/KGSim.vue b/src/views/left/KGSim.vue
index c337e65..59b684f 100644
--- a/src/views/left/KGSim.vue
+++ b/src/views/left/KGSim.vue
@@ -29,32 +29,47 @@
 
     <!-- 鍘嗗彶妯℃嫙 -->
     <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" />
       </div>
       <div v-if="selectedSimulation === '棰勬祴妯℃嫙'">
-        <PredictiveSimulation :selectedArea="selectedArea"/>
+        <PredictiveSimulation :selectedArea="selectedArea" />
       </div>
     </div>
   </div>
 </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>
 
@@ -91,7 +106,7 @@
 
 <style scoped>
 .simulation-module {
-  color: #61f7d4;   
+  color: #61f7d4;
 }
 
 .simulation-area {
@@ -99,7 +114,7 @@
 }
 
 .engineering-buttons {
-  .el-button{
+  .el-button {
     width: 100px;
   }
 }
@@ -107,7 +122,7 @@
 .history-simulation-wrapper {
   margin-bottom: 20px;
   height: 100%; /* 鍥哄畾楂樺害 */
-  overflow: auto; 
+  overflow: auto;
 }
 /* 鑷畾涔夊崟閫夋鏍峰紡 */
 :deep(.el-radio__input.is-checked .el-radio__inner) {
@@ -118,13 +133,13 @@
 :deep(.el-radio__input.is-checked + .el-radio__label) {
   color: inherit; /* 璁╂枃瀛楅鑹茶窡闅忕埗绾� */
 }
-:deep(.el-select__placeholder ) {
+:deep(.el-select__placeholder) {
   color: #fff; /* 璁╂枃瀛楅鑹茶窡闅忕埗绾� */
 }
-:deep(.el-radio ) {
+:deep(.el-radio) {
   color: #fff; /* 璁╂枃瀛楅鑹茶窡闅忕埗绾� */
 }
-:deep(.el-input__inner ) {
+:deep(.el-input__inner) {
   color: #fff; /* 璁╂枃瀛楅鑹茶窡闅忕埗绾� */
 }
 /* .mySelectStyle {
@@ -138,4 +153,4 @@
         color: #009688 !important;
     }
 } */
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/left/KGSimOption/HistorySimulation.vue b/src/views/left/KGSimOption/HistorySimulation.vue
index 7a20ee3..bc2b332 100644
--- a/src/views/left/KGSimOption/HistorySimulation.vue
+++ b/src/views/left/KGSimOption/HistorySimulation.vue
@@ -1,91 +1,118 @@
 <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 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 { 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");
+  initeWaterPrimitiveView();
+  emit("start");
 }
 // 瀹氫箟 Props
 const props = defineProps({
-    selectedArea: {
-        type: String,
-        required: true
-    }
+  selectedArea: {
+    type: String,
+    required: true,
+  },
 });
 
 // 鏁版嵁缁戝畾
-const rainfallHistory = ref('2'); // 榛樿閫変腑绗簩椤�
+const rainfallHistory = ref("2"); // 榛樿閫変腑绗簩椤�
 const totalRainfall = ref(50); // 闄嶉洦鎬婚噺
 const rainfallIntensity = ref(70); // 闄嶉洦寮哄害
 const rainfallDuration = ref(5); // 闄嶉洦鏃堕暱
@@ -94,123 +121,130 @@
 
 // 鍘嗗彶闆ㄦ儏鏁版嵁
 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 : "";
 });
 
 // 鍒囨崲璇︽儏鏄剧ず
 const toggleDetails = () => {
-    isCollapsed.value = !isCollapsed.value;
+  isCollapsed.value = !isCollapsed.value;
 };
 
 // 鎵撳紑淇濆瓨鏂规瀵硅瘽妗�
 const openSaveDialog = () => {
-    if (!props.selectedArea || !rainfallHistory.value || !totalRainfall.value || !rainfallIntensity.value || !rainfallDuration.value) {
-        ElMessage.warning('璇峰厛濉啓鎵�鏈夊繀濉」');
-        return;
-    }
-    saveDialogVisible.value = true;
+  if (
+    !props.selectedArea ||
+    !rainfallHistory.value ||
+    !totalRainfall.value ||
+    !rainfallIntensity.value ||
+    !rainfallDuration.value
+  ) {
+    ElMessage.warning("璇峰厛濉啓鎵�鏈夊繀濉」");
+    return;
+  }
+  saveDialogVisible.value = true;
 };
 
 // 鍏抽棴淇濆瓨鏂规瀵硅瘽妗�
 const handleClose = () => {
-    saveDialogVisible.value = false;
+  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;
+  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);
+  console.log("寮�濮嬫ā鎷熸寜閽鐐瑰嚮");
+  console.log("褰撳墠閫変腑鐨勫尯鍩燂細", props.selectedArea);
 };
 </script>
 
 <style scoped>
 .history-simulation {
-    margin-bottom: 20px;
+  margin-bottom: 20px;
 }
 
 .details {
-    margin-top: 10px;
-    transition: height 0.3s ease, opacity 0.3s ease;
-    overflow: hidden;
+  margin-top: 10px;
+  transition: height 0.3s ease, opacity 0.3s ease;
+  overflow: hidden;
 }
 
 .hidden {
-    height: 0;
-    opacity: 0;
+  height: 0;
+  opacity: 0;
 }
 
 .buttons {
-    margin-top: 20px;
-    display: flex;
-    gap: 10px;
+  margin-top: 20px;
+  display: flex;
+  gap: 10px;
 }
 
 .input-group {
-    display: flex;
-    flex-direction: column;
-    gap: 10px;
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
 }
 
 .input-item {
-    display: flex;
-    align-items: center;
+  display: flex;
+  align-items: center;
 }
 
 label {
-    text-align: left;
-    white-space: nowrap;
-    margin-right: 10px;
+  text-align: left;
+  white-space: nowrap;
+  margin-right: 10px;
 }
 
 .el-input {
-    flex: 4;
+  flex: 4;
 }
 
 span {
-    flex: 1;
-    text-align: left;
+  flex: 1;
+  text-align: left;
 }
 
 .el-select {
-    flex: 4;
-    text-align: left;
-    margin-bottom: 10px;
+  flex: 4;
+  text-align: left;
+  margin-bottom: 10px;
 }
 
 .clickable-text {
-    margin-left: 160px;
-    cursor: pointer;
-    font-size: 14px;
-    color: #61f7d4;
+  margin-left: 160px;
+  cursor: pointer;
+  font-size: 14px;
+  color: #61f7d4;
 }
 
 /* 鑷畾涔� Dialog 鐨� z-index */
 .custom-dialog {
-    z-index: 3000 !important;
-    /* 纭繚瀵硅瘽妗嗚鐩栧叾浠栧厓绱� */
+  z-index: 3000 !important;
+  /* 纭繚瀵硅瘽妗嗚鐩栧叾浠栧厓绱� */
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/left/Simulation.vue b/src/views/left/Simulation.vue
index 062861f..004ce79 100644
--- a/src/views/left/Simulation.vue
+++ b/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");

--
Gitblit v1.9.3