From f4551c852cfe34e70a4ea4e84680907e189673ec Mon Sep 17 00:00:00 2001
From: guonan <guonan201020@163.com>
Date: 星期三, 23 四月 2025 11:45:33 +0800
Subject: [PATCH] 实时模拟

---
 src/views/left/KGSimOption/RealTimeSimulation.vue |  198 +++++++++++++++++++++++++++++--------------------
 1 files changed, 116 insertions(+), 82 deletions(-)

diff --git a/src/views/left/KGSimOption/RealTimeSimulation.vue b/src/views/left/KGSimOption/RealTimeSimulation.vue
index 3d5675c..5c5825c 100644
--- a/src/views/left/KGSimOption/RealTimeSimulation.vue
+++ b/src/views/left/KGSimOption/RealTimeSimulation.vue
@@ -2,7 +2,9 @@
   <div class="real-time-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">
@@ -16,7 +18,11 @@
         </div>
         <div class="input-item">
           <label>闆ㄩ噺鏁版嵁:</label>
-          <el-select v-model="selectedRainfall" placeholder="璇烽�夋嫨" popper-class="mySelectStyle">
+          <el-select
+            v-model="selectedRainfall"
+            placeholder="璇烽�夋嫨"
+            popper-class="mySelectStyle"
+          >
             <el-option
               v-for="item in rainfallData"
               :key="item.id"
@@ -27,7 +33,11 @@
         </div>
       </div>
       <div class="table-container">
-        <div class="table-row" v-for="(item, index) in filteredTableData" :key="index">
+        <div
+          class="table-row"
+          v-for="(item, index) in filteredTableData"
+          :key="index"
+        >
           <input type="checkbox" v-model="item.selected" />
           <span>{{ item.name }}</span>
         </div>
@@ -43,7 +53,7 @@
       <el-button type="success" @click="futurePredictions">鏈潵棰勬祴</el-button>
     </div>
 
-    <!-- 淇濆瓨鏂规瀵硅瘽妗� -->
+    <!-- 淇濆瓨鏂规瀵硅瘽妗�
     <el-dialog
       v-model="saveDialogVisible"
       title="淇濆瓨鏂规"
@@ -66,32 +76,37 @@
           <el-button type="primary" @click="confirmSave">纭畾淇濆瓨</el-button>
         </span>
       </template>
-    </el-dialog>
+    </el-dialog> -->
   </div>
 </template>
 
 <script setup>
-import { ref, watch, defineProps, computed, inject } from 'vue';
-import { ElMessage } from 'element-plus';
+import { ref, watch, defineProps, computed, inject } from "vue";
+import { ElMessage } from "element-plus";
 import { initeWaterPrimitiveView } from "@/utils/water";
-import { useSimStore } from "@/store/simulation.js"; // 寮曞叆 Store
+import { SimAPIStore } from "@/store/simAPI";
 
 // 鑾峰彇 Store 瀹炰緥
-const simStore = useSimStore();
+const simStore = SimAPIStore();
+
+// 鑾峰彇 Store 瀹炰緥
 const schemeName = ref("鏂规鍚嶇О"); // 鏂规鍚嶇О
 
 // 娉ㄥ叆妯℃嫙鎿嶄綔鏂规硶
 const { startSimulate, endSimulate } = inject("simulateActions");
 
 function startPlay() {
-  const selectedItems = filteredTableData.value.filter(item => item.selected);
+  const selectedItems = filteredTableData.value.filter((item) => item.selected);
   if (selectedItems.length > 0) {
-    console.log('閫変腑鐨勯」锛�', selectedItems.map(item => item.name));
+    console.log(
+      "閫変腑鐨勯」锛�",
+      selectedItems.map((item) => item.name)
+    );
   } else {
-    console.log('鏈�変腑浠讳綍椤�');
+    console.log("鏈�変腑浠讳綍椤�");
   }
-  console.log('褰撳墠閫変腑鐨勫尯鍩燂細', props.selectedArea);
-  console.log('褰撳墠閫変腑鐨勯洦閲忔暟鎹細', selectedRainfall.value);
+  console.log("褰撳墠閫変腑鐨勫尯鍩燂細", props.selectedArea);
+  console.log("褰撳墠閫変腑鐨勯洦閲忔暟鎹細", selectedRainfall.value);
   initeWaterPrimitiveView();
   startSimulate();
 }
@@ -100,7 +115,7 @@
 function deepCloneAndSetSelected(data) {
   const newData = {};
   for (const key in data) {
-    newData[key] = data[key].map(item => ({ ...item, selected: true }));
+    newData[key] = data[key].map((item) => ({ ...item, selected: true }));
   }
   return newData;
 }
@@ -109,14 +124,14 @@
 const props = defineProps({
   selectedArea: {
     type: String,
-    required: true
-  }
+    required: true,
+  },
 });
 
 // 瀛愮粍浠跺唴閮ㄧ姸鎬�
 const rainfallData = ref([]); // 闆ㄩ噺鏁版嵁
 const tableData = ref({}); // 琛ㄦ牸鏁版嵁锛堟寜闆ㄩ噺鏁版嵁鍒嗙粍锛�
-const selectedRainfall = ref(''); // 褰撳墠閫変腑鐨勯洦閲忔暟鎹�
+const selectedRainfall = ref(""); // 褰撳墠閫変腑鐨勯洦閲忔暟鎹�
 const isCollapsed = ref(false); // 鎺у埗灞曞紑/鏀惰捣鐘舵��
 const saveDialogVisible = ref(false); // 鎺у埗淇濆瓨鏂规瀵硅瘽妗嗘樉绀虹姸鎬�
 
@@ -124,52 +139,52 @@
 const areaDataMap = {
   瀛欒儭娌�: {
     rainfallData: [
-      { id: '1', name: '姘旇薄瀹炴椂鏁版嵁 - 瀛欒儭娌�' },
-      { id: '2', name: '闆ㄩ噺璁″疄鏃舵暟鎹� - 瀛欒儭娌�' }
+      { id: "1", name: "姘旇薄瀹炴椂鏁版嵁 - 瀛欒儭娌�" },
+      { id: "2", name: "闆ㄩ噺璁″疄鏃舵暟鎹� - 瀛欒儭娌�" },
     ],
     tableData: {
-      '1': [
-        { id: '001', name: '瀛欒儭娌熸皵璞$珯001' },
-        { id: '002', name: '瀛欒儭娌熸皵璞$珯002' } 
+      1: [
+        { id: "001", name: "瀛欒儭娌熸皵璞$珯001" },
+        { id: "002", name: "瀛欒儭娌熸皵璞$珯002" },
       ],
-      '2': [
-        { id: '003', name: '瀛欒儭娌熼洦閲忚003' },
-        { id: '004', name: '瀛欒儭娌熼洦閲忚004' } 
-      ]
-    }
+      2: [
+        { id: "003", name: "瀛欒儭娌熼洦閲忚003" },
+        { id: "004", name: "瀛欒儭娌熼洦閲忚004" },
+      ],
+    },
   },
   楸兼按娲炲悗娌�: {
     rainfallData: [
-      { id: '1', name: '姘旇薄瀹炴椂鏁版嵁 - 楸兼按娲炲悗娌�' },
-      { id: '2', name: '闆ㄩ噺璁″疄鏃舵暟鎹� - 楸兼按娲炲悗娌�' }
+      { id: "1", name: "姘旇薄瀹炴椂鏁版嵁 - 楸兼按娲炲悗娌�" },
+      { id: "2", name: "闆ㄩ噺璁″疄鏃舵暟鎹� - 楸兼按娲炲悗娌�" },
     ],
     tableData: {
-      '1': [
-        { id: '005', name: '楸兼按娲炲悗娌熸皵璞$珯005' },
-        { id: '006', name: '楸兼按娲炲悗娌熸皵璞$珯006' } 
+      1: [
+        { id: "005", name: "楸兼按娲炲悗娌熸皵璞$珯005" },
+        { id: "006", name: "楸兼按娲炲悗娌熸皵璞$珯006" },
       ],
-      '2': [
-        { id: '007', name: '楸兼按娲炲悗娌熼洦閲忚007' },
-        { id: '008', name: '楸兼按娲炲悗娌熼洦閲忚008' } 
-      ]
-    }
+      2: [
+        { id: "007", name: "楸兼按娲炲悗娌熼洦閲忚007" },
+        { id: "008", name: "楸兼按娲炲悗娌熼洦閲忚008" },
+      ],
+    },
   },
   浜庡瑗挎矡: {
     rainfallData: [
-      { id: '1', name: '姘旇薄瀹炴椂鏁版嵁 - 浜庡瑗挎矡' },
-      { id: '2', name: '闆ㄩ噺璁″疄鏃舵暟鎹� - 浜庡瑗挎矡' }
+      { id: "1", name: "姘旇薄瀹炴椂鏁版嵁 - 浜庡瑗挎矡" },
+      { id: "2", name: "闆ㄩ噺璁″疄鏃舵暟鎹� - 浜庡瑗挎矡" },
     ],
     tableData: {
-      '1': [
-        { id: '009', name: '浜庡瑗挎矡姘旇薄绔�009' },
-        { id: '010', name: '浜庡瑗挎矡姘旇薄绔�010' } 
+      1: [
+        { id: "009", name: "浜庡瑗挎矡姘旇薄绔�009" },
+        { id: "010", name: "浜庡瑗挎矡姘旇薄绔�010" },
       ],
-      '2': [
-        { id: '011', name: '浜庡瑗挎矡闆ㄩ噺璁�011' },
-        { id: '012', name: '浜庡瑗挎矡闆ㄩ噺璁�012' } 
-      ]
-    }
-  }
+      2: [
+        { id: "011", name: "浜庡瑗挎矡闆ㄩ噺璁�011" },
+        { id: "012", name: "浜庡瑗挎矡闆ㄩ噺璁�012" },
+      ],
+    },
+  },
 };
 
 // 鏍规嵁 selectedArea 鏇存柊鏁版嵁
@@ -180,11 +195,11 @@
       rainfallData.value = areaDataMap[newArea].rainfallData;
       // 浣跨敤娣辨嫹璐濊缃粯璁ら�変腑鐘舵��
       tableData.value = deepCloneAndSetSelected(areaDataMap[newArea].tableData);
-      selectedRainfall.value = ''; // 娓呯┖閫変腑鐨勯洦閲忔暟鎹�
+      selectedRainfall.value = ""; // 娓呯┖閫変腑鐨勯洦閲忔暟鎹�
     } else {
       rainfallData.value = [];
       tableData.value = {};
-      selectedRainfall.value = '';
+      selectedRainfall.value = "";
     }
   },
   { immediate: true } // 绔嬪嵆鎵ц涓�娆★紝纭繚鍒濆鏁版嵁姝g‘
@@ -199,22 +214,41 @@
 
 // 鑾峰彇褰撳墠閫変腑鐨勯洦閲忔暟鎹悕绉�
 const selectedRainfallName = computed(() => {
-  const selected = rainfallData.value.find(item => item.id === selectedRainfall.value);
-  return selected ? selected.name : '';
+  const selected = rainfallData.value.find(
+    (item) => item.id === selectedRainfall.value
+  );
+  return selected ? selected.name : "";
 });
 
 // 鑾峰彇褰撳墠閫変腑鐨勮澶囦俊鎭�
 const selectedDevices = computed(() => {
-  return filteredTableData.value.filter(item => item.selected);
+  return filteredTableData.value.filter((item) => item.selected);
 });
 
 // 鎵撳紑淇濆瓨鏂规瀵硅瘽妗�
-const openSaveDialog = () => {
-  if (!props.selectedArea || !selectedRainfall.value || selectedDevices.value.length === 0) {
-    ElMessage.warning('璇峰厛閫夋嫨鍖哄煙銆侀洦閲忔暟鎹苟鍕鹃�夎澶�');
-    return;
-  }
-  saveDialogVisible.value = true;
+const openSaveDialog = async () => {
+  const forms = {
+    name: schemeName.value,
+    geom: props.selectedArea,
+    type: 2,
+    gauges: [
+      {
+        id: "xxxxxxxxxxxxxx",
+        name: "闆ㄩ噺璁�1",
+        x: 119.0,
+        y: 28.0,
+        r: 10000,
+      },
+      {
+        id: "xxxxxxxxxxxxxx",
+        name: "闆ㄩ噺璁�2",
+        x: 119.0,
+        y: 28.0,
+        r: 10000,
+      },
+    ],
+  };
+  await simStore.addSimCheme(forms);
 };
 
 // 鍏抽棴淇濆瓨鏂规瀵硅瘽妗�
@@ -222,36 +256,36 @@
   saveDialogVisible.value = false;
 };
 
-// 纭淇濆瓨
-const confirmSave = () => {
-  // 鏋勯�犳柊鐨勬柟妗堝璞�
-  const newScheme = {
-    name: schemeName.value,//鏂规鍚嶇О
-    id: Date.now().toString(), // 鍞竴 ID
-    area: props.selectedArea, // 鍖哄煙
-    name: selectedRainfallName.value, // 鏂规鍚嶇О锛堥洦閲忔暟鎹被鍨嬶級
-    createTime: new Date().toISOString(), // 鍒涘缓鏃堕棿
-    taskStatus:1, // 鍒濆鐘舵�佷负鏈紑濮�
-    rainfallType: selectedRainfallName.value, // 闆ㄩ噺鏁版嵁绫诲瀷
-    devices: selectedDevices.value.map((item) => item.name), // 璁惧淇℃伅
-  };
+// // 纭淇濆瓨
+// const confirmSave = () => {
+//   // 鏋勯�犳柊鐨勬柟妗堝璞�
+//   const newScheme = {
+//     name: schemeName.value,//鏂规鍚嶇О
+//     id: Date.now().toString(), // 鍞竴 ID
+//     area: props.selectedArea, // 鍖哄煙
+//     name: selectedRainfallName.value, // 鏂规鍚嶇О锛堥洦閲忔暟鎹被鍨嬶級
+//     createTime: new Date().toISOString(), // 鍒涘缓鏃堕棿
+//     taskStatus:1, // 鍒濆鐘舵�佷负鏈紑濮�
+//     rainfallType: selectedRainfallName.value, // 闆ㄩ噺鏁版嵁绫诲瀷
+//     devices: selectedDevices.value.map((item) => item.name), // 璁惧淇℃伅
+//   };
 
-  // 璋冪敤 Store 鐨勬柟娉曟坊鍔犳柟妗�
-  simStore.addSchemCard(newScheme);
+//   // 璋冪敤 Store 鐨勬柟娉曟坊鍔犳柟妗�
+//   simStore.addSchemCard(newScheme);
 
-  console.log("淇濆瓨鏂规鎴愬姛", newScheme);
-  ElMessage.success("鏂规宸蹭繚瀛�");
+//   console.log("淇濆瓨鏂规鎴愬姛", newScheme);
+//   ElMessage.success("鏂规宸蹭繚瀛�");
 
-  // 鍏抽棴瀵硅瘽妗�
-  saveDialogVisible.value = false;
-};
+//   // 鍏抽棴瀵硅瘽妗�
+//   saveDialogVisible.value = false;
+// };
 
 const toggleDetails = () => {
   isCollapsed.value = !isCollapsed.value;
 };
 
 const futurePredictions = () => {
-  console.log('鏈潵棰勬祴鎸夐挳琚偣鍑�');
+  console.log("鏈潵棰勬祴鎸夐挳琚偣鍑�");
 };
 </script>
 
@@ -342,4 +376,4 @@
 .el-button {
   flex: 1;
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3