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