From d3513d94f668cc1ab85b180001854b7652afee83 Mon Sep 17 00:00:00 2001
From: wangjuncheng <1>
Date: 星期三, 16 四月 2025 15:50:09 +0800
Subject: [PATCH] Big Change

---
 src/api/hpApi.js                                 |   48 +++++++++
 src/api/requestTR.js                             |   64 ++++++++++++
 vue.config.js                                    |   34 ++++++
 src/api/trApi.js                                 |   12 ++
 src/views/Home.vue                               |    9 +
 src/views/left/KGSimOption/HistorySimulation.vue |   52 +++-------
 src/api/requestHT.js                             |   64 ++++++++++++
 7 files changed, 243 insertions(+), 40 deletions(-)

diff --git a/src/api/hpApi.js b/src/api/hpApi.js
new file mode 100644
index 0000000..b2e0f5b
--- /dev/null
+++ b/src/api/hpApi.js
@@ -0,0 +1,48 @@
+import axios from "./requestHT";
+
+// 鑾峰彇Token
+export async function fetchToken() {
+  try {
+    const response = await axios.post("/hp/auth/getToken", {
+      username: "yxxx",
+      password: "c2d6bba7f0a67701a97550684e39fa5f",
+      systemName: "RS_SYSTEM",
+    });
+    const token = response.data.data.token;
+    // console.log("Token fetched:", token);
+    localStorage.setItem("HPToken", token);
+    return token;
+  } catch (error) {
+    console.error("Failed to fetch token:", error);
+  }
+}
+// 鑷姩閲嶆柊鑾峰彇token
+export function setupTokenRefresh() {
+  const intervalTime = 28 * 60 * 1000;
+  fetchToken().catch((error) => {
+    console.error("Initial token fetch failed:", error);
+  });
+  setInterval(() => {
+    fetchToken().catch((error) => {
+      console.error("Periodic token fetch failed:", error);
+    });
+  }, intervalTime);
+}
+// 鑾峰彇闆ㄩ噺鏁版嵁
+export async function getRainfallData(year) {
+  try {
+    const response = await axios.post("/hp/rainfallCountyCity/getData", {
+      filterObject: {
+        year: 2024, // 鍔ㄦ�佷紶鍏ョ殑骞翠唤鍙傛暟
+      },
+    });
+    console.log("Response:", response); // 鎵撳嵃瀹屾暣鍝嶅簲锛堣皟璇曠敤锛�
+    return response.data; // 鍋囪鍚庣杩斿洖鐨勬暟鎹湪 response.data 涓�
+  } catch (error) {
+    console.error(
+      "Error fetching rainfall data:",
+      error.response ? error.response.data : error.message
+    );
+    throw error; // 鎶涘嚭閿欒浠ヤ究璋冪敤鏂瑰鐞�
+  }
+}
diff --git a/src/api/requestHT.js b/src/api/requestHT.js
new file mode 100644
index 0000000..bf8ac9a
--- /dev/null
+++ b/src/api/requestHT.js
@@ -0,0 +1,64 @@
+import axios from "axios";
+
+// 鍒涘缓 Axios 瀹炰緥
+const instance = axios.create({
+  baseURL: "/", // 浣跨敤浣犻厤缃殑 /auth 浠g悊
+  timeout: 1000 * 60, // 璇锋眰瓒呮椂鏃堕棿锛堝崟浣嶏細姣锛�
+  headers: {
+    "Content-Type": "application/json", // 榛樿璇锋眰澶�
+  },
+});
+// 璇锋眰鎷︽埅鍣�
+instance.interceptors.request.use(
+  (config) => {
+    // 鍦ㄥ彂閫佽姹備箣鍓嶅仛浜涗粈涔�
+    // 渚嬪锛氭坊鍔� token 鎴栧叾浠栬嚜瀹氫箟閫昏緫
+    const token = localStorage.getItem('HPToken'); // 鍋囪 token 瀛樺偍鍦� localStorage 涓�
+    if (token) {
+      config.headers.Authorization = `Bearer ${token}`;
+    }
+    return config;
+  },
+  (error) => {
+    // 澶勭悊璇锋眰閿欒
+    return Promise.reject(error);
+  }
+);
+
+// // 鍝嶅簲鎷︽埅鍣�
+// instance.interceptors.response.use(
+//   (response) => {
+//     // 瀵瑰搷搴旀暟鎹仛鐐逛粈涔�
+//     // 渚嬪锛氱洿鎺ヨ繑鍥� data 閮ㄥ垎
+//     return response.data;
+//   },
+//   (error) => {
+//     // 瀵瑰搷搴旈敊璇仛鐐逛粈涔�
+//     if (error.response) {
+//       // 鏍规嵁鐘舵�佺爜澶勭悊閿欒
+//       switch (error.response.status) {
+//         case 401:
+//           console.error('鏈巿鏉冿紝璇烽噸鏂扮櫥褰�');
+//           break;
+//         case 403:
+//           console.error('绂佹璁块棶');
+//           break;
+//         case 404:
+//           console.error('璇锋眰璧勬簮涓嶅瓨鍦�');
+//           break;
+//         case 500:
+//           console.error('鏈嶅姟鍣ㄥ唴閮ㄩ敊璇�');
+//           break;
+//         default:
+//           console.error('鏈煡閿欒');
+//       }
+//     } else if (error.request) {
+//       console.error('璇锋眰鏈敹鍒板搷搴�');
+//     } else {
+//       console.error('璇锋眰鍑洪敊:', error.message);
+//     }
+//     return Promise.reject(error);
+//   }
+// );
+
+export default instance;
diff --git a/src/api/requestTR.js b/src/api/requestTR.js
new file mode 100644
index 0000000..8ad4b02
--- /dev/null
+++ b/src/api/requestTR.js
@@ -0,0 +1,64 @@
+import axios from "axios";
+
+// 鍒涘缓 Axios 瀹炰緥
+const instance = axios.create({
+  baseURL: "/api", // 浣跨敤浣犻厤缃殑 /auth 浠g悊
+  timeout: 1000 * 60, // 璇锋眰瓒呮椂鏃堕棿锛堝崟浣嶏細姣锛�
+  headers: {
+    "Content-Type": "application/x-www-form-urlencoded", // 榛樿璇锋眰澶�
+  },
+});
+// 璇锋眰鎷︽埅鍣�
+// instance.interceptors.request.use(
+//   (config) => {
+//     // 鍦ㄥ彂閫佽姹備箣鍓嶅仛浜涗粈涔�
+//     // 渚嬪锛氭坊鍔� token 鎴栧叾浠栬嚜瀹氫箟閫昏緫
+//     const token = localStorage.getItem('HPToken'); // 鍋囪 token 瀛樺偍鍦� localStorage 涓�
+//     if (token) {
+//       config.headers.Authorization = `Bearer ${token}`;
+//     }
+//     return config;
+//   },
+//   (error) => {
+//     // 澶勭悊璇锋眰閿欒
+//     return Promise.reject(error);
+//   }
+// );
+
+// // 鍝嶅簲鎷︽埅鍣�
+// instance.interceptors.response.use(
+//   (response) => {
+//     // 瀵瑰搷搴旀暟鎹仛鐐逛粈涔�
+//     // 渚嬪锛氱洿鎺ヨ繑鍥� data 閮ㄥ垎
+//     return response.data;
+//   },
+//   (error) => {
+//     // 瀵瑰搷搴旈敊璇仛鐐逛粈涔�
+//     if (error.response) {
+//       // 鏍规嵁鐘舵�佺爜澶勭悊閿欒
+//       switch (error.response.status) {
+//         case 401:
+//           console.error('鏈巿鏉冿紝璇烽噸鏂扮櫥褰�');
+//           break;
+//         case 403:
+//           console.error('绂佹璁块棶');
+//           break;
+//         case 404:
+//           console.error('璇锋眰璧勬簮涓嶅瓨鍦�');
+//           break;
+//         case 500:
+//           console.error('鏈嶅姟鍣ㄥ唴閮ㄩ敊璇�');
+//           break;
+//         default:
+//           console.error('鏈煡閿欒');
+//       }
+//     } else if (error.request) {
+//       console.error('璇锋眰鏈敹鍒板搷搴�');
+//     } else {
+//       console.error('璇锋眰鍑洪敊:', error.message);
+//     }
+//     return Promise.reject(error);
+//   }
+// );
+
+export default instance;
diff --git a/src/api/trApi.js b/src/api/trApi.js
new file mode 100644
index 0000000..17319e6
--- /dev/null
+++ b/src/api/trApi.js
@@ -0,0 +1,12 @@
+import axios from "./requestTR.js";
+
+// 鑾峰彇闆ㄩ噺鏁版嵁
+export async function getData() {
+    try {
+      const response = await axios.get("/api/region/selectPage", {
+      });
+      console.log("Response:", response);
+    } catch (error) {
+      console.error("Error fetching data:", error);
+    }
+  }
diff --git a/src/views/Home.vue b/src/views/Home.vue
index e93eab5..aae5a90 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -31,7 +31,7 @@
 </template>
 
 <script setup>
-import { computed } from "vue";
+import { computed, onMounted } from "vue";
 import { useRoute } from "vue-router";
 import { useSimStore } from "@/store/simulation";
 import { storeToRefs } from "pinia";
@@ -60,6 +60,8 @@
 import ResultAssess from "@/components/monifangzhen/ResultAssess.vue";
 // import DangerAssess from "@/components/monifangzhen/DangerAssess.vue";
 import { showDeviceDetail } from "@/store";
+import { setupTokenRefresh  } from "@/api/hpApi.js"
+import { getData  } from "@/api/trApi.js"
 
 const route = useRoute();
 const simStore = useSimStore();
@@ -79,7 +81,10 @@
 
 // 璁$畻灞炴��
 const showDetail = computed(() => showDeviceDetail.value);
-
+onMounted(() => {
+  setupTokenRefresh()// 鑾峰彇瀹忓浘token
+  getData() //娴嬭瘯tr鍚庣
+});
 // 鍒濆鍖�
 init();
 </script>
diff --git a/src/views/left/KGSimOption/HistorySimulation.vue b/src/views/left/KGSimOption/HistorySimulation.vue
index 54e5cac..213a885 100644
--- a/src/views/left/KGSimOption/HistorySimulation.vue
+++ b/src/views/left/KGSimOption/HistorySimulation.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="history-simulation">
     <div class="left-top">
-      <span>鍘嗗彶妯℃嫙</span>
+      <span @click="getRainData">鍘嗗彶妯℃嫙</span>
       <span class="clickable-text" @click="toggleDetails">{{
         isCollapsed ? "灞曞紑" : "鏀惰捣"
       }}</span>
@@ -10,46 +10,26 @@
       <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>
@@ -64,13 +44,8 @@
     </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>
@@ -94,9 +69,16 @@
 import { ElMessage } from "element-plus";
 import { initeWaterPrimitiveView } from "@/utils/water";
 import { useSimStore } from "@/store/simulation.js"; // 寮曞叆 Store
-
+import { getRainfallData  } from "@/api/hpApi.js"
 // 鑾峰彇 Store 瀹炰緥
 const simStore = useSimStore();
+// 娴嬭瘯鑾峰彇闆ㄩ噺鏁版嵁
+// const getRainData = () => {
+//   getRainfallData()
+//     .then((a) => {
+//       console.log(a, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
+//     })
+// };
 
 // 娉ㄥ叆妯℃嫙鎿嶄綔鏂规硶
 const { startSimulate, endSimulate } = inject("simulateActions");
diff --git a/vue.config.js b/vue.config.js
index ca0d342..5703929 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -1,13 +1,41 @@
 const { defineConfig } = require('@vue/cli-service');
-const path = require("path");
+const path = require('path');
 
 module.exports = defineConfig({
+  runtimeCompiler: false,     //鏂板
+  productionSourceMap: false, //鏂板
   transpileDependencies: true,
   configureWebpack: {
     resolve: {
       alias: {
-        "@": path.resolve("src")
+        '@': path.resolve(__dirname, 'src')
+      }
+    }
+  },
+  //鏂板
+  devServer: {
+    port: 8080, 
+    open: true, 
+    host: '0.0.0.0',
+    https: false, 
+    hot: true, 
+    proxy: {
+      '/api': {
+        target: 'http://192.168.1.106:8079',
+        changeOrigin: true,
+        pathRewrite: {
+          '^/api': '' 
+        },
+        secure: false 
+      },
+      '/hp': {
+        target: 'http://192.168.56.106:9511',
+        changeOrigin: true,
+        pathRewrite: {
+          '^/hp': ''
+        },
+        secure: false
       }
     }
   }
-})
+});
\ No newline at end of file

--
Gitblit v1.9.3