From e2794b610f6066b20002a202f15038b4e7f5a638 Mon Sep 17 00:00:00 2001
From: guonan <guonan201020@163.com>
Date: 星期三, 07 五月 2025 09:54:03 +0800
Subject: [PATCH] 存储上传文件单位以及上传文件内容中时间按顺序排列

---
 src/views/left/CitySim.vue |  112 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 98 insertions(+), 14 deletions(-)

diff --git a/src/views/left/CitySim.vue b/src/views/left/CitySim.vue
index f4d08b5..e40b495 100644
--- a/src/views/left/CitySim.vue
+++ b/src/views/left/CitySim.vue
@@ -36,6 +36,20 @@
             <template #append>mm/h</template>
           </el-upload>
         </el-form-item>
+        <el-form-item label="闆ㄥ己鍗曚綅" v-if="forms.fileList.length !== 0">
+          <el-select
+            v-model="forms.intensityUnit"
+            placeholder="Select"
+            style="max-width: 600px"
+          >
+            <el-option
+              v-for="item in intensityOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
         <el-form-item
           label="琛屾斂鍖哄煙:"
           v-if="simStore.selectTab == '琛屾斂鍖哄垝浠跨湡'"
@@ -149,6 +163,11 @@
 
 const options = reactive([]);
 
+const intensityOptions = ref([
+  { value: "mm/h", label: "mm/h" },
+  { value: "mm/5min", label: "mm/5min" },
+]);
+
 // 瀹氫箟涓�涓柟娉曪紝鐢ㄤ簬鏍规嵁 type 鑾峰彇鍖哄煙鏁版嵁
 const fetchRegionData = (type) => {
   getRegionData({ type: type }).then((res) => {
@@ -197,6 +216,7 @@
   type: 3,
   rainFallList: [],
   hours: null,
+  intensityUnit: "",
 });
 
 const flyHeight = ref(100000);
@@ -218,13 +238,16 @@
 };
 
 const addSimCheme = async () => {
-  await simStore.addSimCheme(forms);
-  resetForm();
-  EventBus.emit("close-selectArea");
+  try {
+    await simStore.addSimCheme(forms);
+    resetForm(); // 鍙湁鍦ㄤ繚瀛樻垚鍔熷悗鎵嶉噸缃〃鍗�
+    EventBus.emit("close-selectArea");
+  } catch (error) {}
 };
 
 // 閲嶇疆琛ㄥ崟
 const resetForm = () => {
+  forms.name = "";
   forms.geom = "";
   forms.rainfall = null;
   forms.duration = null;
@@ -232,6 +255,7 @@
   forms.fileList = [];
   forms.rainFallList = [];
   forms.hours = null;
+  forms.intensityUnit = "";
 };
 
 // 璁$畻灞炴�э細鑾峰彇涓婁紶鏂囦欢鐨勫悕绉板垪琛�
@@ -288,32 +312,92 @@
   }));
 };
 
+/**
+ * 妫�鏌ユ椂闂村垪鏄惁鎸夊崌搴忔帓鍒�
+ * @param {Array} data - 琛ㄦ牸鏁版嵁
+ * @param {string} timeColumn - 鏃堕棿鍒楃殑瀛楁鍚�
+ * @returns {boolean} - 鏄惁鎸夊崌搴忔帓鍒�
+ */
+const isTimeColumnSorted = (data, timeColumn) => {
+  for (let i = 1; i < data.length; i++) {
+    const prevTime = parseDateTime(data[i - 1][timeColumn]);
+    const currentTime = parseDateTime(data[i][timeColumn]);
+
+    // 濡傛灉鍓嶄竴涓椂闂� > 褰撳墠鏃堕棿锛岃鏄庝笉鏄崌搴�
+    if (prevTime > currentTime) {
+      console.error(`鏃堕棿涔卞簭锛氱 ${i} 琛宍, {
+        prevTime: new Date(prevTime),
+        currentTime: new Date(currentTime),
+      });
+      return false;
+    }
+  }
+  return true; // 鎵�鏈夋椂闂撮兘鎸夊崌搴忔帓鍒�
+};
+
+/**
+ * 浠庤〃澶存彁鍙栧崟浣嶏紙濡� "灏忔椂闆ㄥ己mm/h" 鈫� "mm/h"锛�
+ * @param {string} header - 琛ㄥご瀛楃涓�
+ * @returns {string} - 鎻愬彇鐨勫崟浣嶏紙濡� "mm/h"锛夛紝榛樿杩斿洖绌哄瓧绗︿覆
+ */
+const extractUnitFromHeader = (header) => {
+  if (!header) return "";
+
+  // 鐩存帴鍖归厤 "mm/h"銆�"m/s" 绛夊父瑙佸崟浣�
+  const unitRegex = /(mm\/h|m\/s|mm|鈩億%|hPa|km\/h)/; // 鏍规嵁闇�瑕佹墿灞�
+  const match = header.match(unitRegex);
+  return match ? match[0] : "";
+};
+
 // 澶勭悊鏁版嵁
 const processData = (data) => {
+  // 1. 妫�鏌ユ暟鎹槸鍚︿负绌�
+  if (data.length === 0) {
+    ElMessage.warning("鏂囦欢鍐呭涓虹┖锛�");
+    return;
+  }
+
+  // 2. 鑾峰彇琛ㄥご锛堢涓�鍒楁槸鏃堕棿鍒楋級
+  const tableColumns = Object.keys(data[0]);
+  const timeColumn = tableColumns[0]; // 鍋囪绗竴鍒楁槸鏃堕棿
+
+  // 3. 鏍¢獙鏃堕棿鍒楁槸鍚︽寜鍗囧簭鎺掑垪
+  if (!isTimeColumnSorted(data, timeColumn)) {
+    ElMessage.error("鏃堕棿鍒楀繀椤绘寜鍗囧簭鎺掑垪锛�");
+    forms.fileList = [];
+    return; // 缁堟澶勭悊
+  }
+
+  const intensityColumn = tableColumns[1]; // 闆ㄥ己鍒楋紙濡� "灏忔椂闆ㄥ己(mm/h)"锛�
+  console.log(intensityColumn, "intensityColumnintensityColumnintensityColumn");
+  // 3. 鎻愬彇绗簩鍒楃殑鍗曚綅锛堝 "(mm/h)" 鈫� "mm/h"锛�
+  const intensityUnit = extractUnitFromHeader(intensityColumn);
+  console.log(
+    intensityUnit,
+    "intensityUnitintensityUnitintensityUnitintensityUnit"
+  );
+  forms.intensityUnit = intensityUnit; // 瀛樺偍鍗曚綅锛堝彲閫夛級
+
+  // 4. 濡傛灉鏍¢獙閫氳繃锛岀户缁鐞嗘暟鎹�
   forms.rainFallList = transformKeys(data);
   console.log(forms.rainFallList, "data");
-  if (data.length === 0) return;
 
-  const tableColumns = Object.keys(data[0]);
-
-  // 绗竴鍒楋細鏃堕棿
-  const firstTime = parseDateTime(data[0][tableColumns[0]]);
-  const lastTime = parseDateTime(data[data.length - 1][tableColumns[0]]);
+  // 5. 璁$畻闄嶉洦鏃堕暱銆佹渶澶ч洦寮恒�佺疮璁¢洦閲忥紙鍘熼�昏緫锛�
+  const firstTime = parseDateTime(data[0][timeColumn]);
+  const lastTime = parseDateTime(data[data.length - 1][timeColumn]);
   const timeDuration = Math.floor((lastTime - firstTime) / 1000);
-  forms.duration = (timeDuration / 3600).toFixed(2); // 鏇存柊闄嶉洦鏃堕暱
+  forms.duration = (timeDuration / 3600).toFixed(2);
 
-  // 绗簩鍒楋細闄嶉洦寮哄害
   const maxValue = Math.max(
     ...data.map((row) => {
       const value = parseFloat(row[tableColumns[1]]);
       return isNaN(value) ? -Infinity : value;
     })
   ).toFixed(2);
-  forms.intensity = maxValue; // 鏇存柊闄嶉洦寮哄害
+  forms.intensity = maxValue;
 
-  // 绗笁鍒楋細绱闄嶉洦閲�
   const lastValue = data[data.length - 1][tableColumns[2]];
-  forms.rainfall = lastValue; // 鏇存柊闄嶉洦閲�
+  forms.rainfall = lastValue;
 };
 
 /**

--
Gitblit v1.9.3