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