From 0ef910aa436146bb4ac439694000aaa6b58c741b Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 15 四月 2024 14:16:44 +0800
Subject: [PATCH] #

---
 src/utils/request.js    |   56 ++++++++++++++++++++++++++++
 src/config/setting.js   |    7 +++
 .env                    |    1 
 src/utils/token-util.js |   25 ++++++++++++
 vite.config.js          |    1 
 5 files changed, 90 insertions(+), 0 deletions(-)

diff --git a/.env b/.env
new file mode 100644
index 0000000..927a616
--- /dev/null
+++ b/.env
@@ -0,0 +1 @@
+COOL_API_BASE_URL = 'http://localhost:8080'
diff --git a/src/config/setting.js b/src/config/setting.js
new file mode 100644
index 0000000..ea20bf7
--- /dev/null
+++ b/src/config/setting.js
@@ -0,0 +1,7 @@
+export const API_BASE_URL = import.meta.env.COOL_API_BASE_URL;
+
+export const TOKEN_HEADER_NAME = 'Authorization';
+
+export const UN_AUTH_CODE = 403;
+
+
diff --git a/src/utils/request.js b/src/utils/request.js
new file mode 100644
index 0000000..3c1e896
--- /dev/null
+++ b/src/utils/request.js
@@ -0,0 +1,56 @@
+import axios from 'axios';
+import { API_BASE_URL, TOKEN_HEADER_NAME, UN_AUTH_CODE } from '@/config/setting';
+import { getToken, setToken } from './token-util';
+
+const service = axios.create({
+    baseURL: API_BASE_URL
+});
+
+/**
+ * pre
+ */
+service.interceptors.request.use(
+    (config) => {
+        const token = getToken();
+        if (token && config.headers) {
+            config.headers[TOKEN_HEADER_NAME] = token;
+        }
+        return config;
+    },
+    (error) => {
+        return Promise.reject(error);
+    }
+);
+
+/**
+ * post
+ */
+service.interceptors.response.use(
+    (res) => {
+        if (res.data?.code === UN_AUTH_CODE) {
+            // Modal.destroyAll();
+            // Modal.info({
+            //     title: 'Token has expired, please log in again!',
+            //     okText: 'LOGIN',
+            //     style: "top: 20px",
+            //     onOk: () => {
+            //         logout();
+            //     }
+            // });
+            alert('Token has expired, please log in again!');
+            // todo: logout
+            return Promise.reject(new Error(res.data.message));
+        } else {
+            const token = res.headers[TOKEN_HEADER_NAME.toLowerCase()];
+            if (token) {
+                setToken(token);
+            }
+            return res;
+        }
+    },
+    (error) => {
+        return Promise.reject(error);
+    }
+);
+
+export default service;
\ No newline at end of file
diff --git a/src/utils/token-util.js b/src/utils/token-util.js
new file mode 100644
index 0000000..d66fb33
--- /dev/null
+++ b/src/utils/token-util.js
@@ -0,0 +1,25 @@
+import { TOKEN_HEADER_NAME } from '@/config/setting';
+
+export const getToken = () => {
+    const token = localStorage.getItem(TOKEN_HEADER_NAME);
+    if (!token) {
+        return sessionStorage.getItem(TOKEN_HEADER_NAME);
+    }
+    return token;
+}
+
+export const setToken = (token, remember) => {
+    removeToken();
+    if (token) {
+        if (remember) {
+            localStorage.setItem(TOKEN_HEADER_NAME, token);
+        } else {
+            sessionStorage.setItem(TOKEN_HEADER_NAME, token);
+        }
+    }
+}
+
+export const removeToken = () => {
+    localStorage.removeItem(TOKEN_HEADER_NAME);
+    sessionStorage.removeItem(TOKEN_HEADER_NAME);
+}
\ No newline at end of file
diff --git a/vite.config.js b/vite.config.js
index b7c2745..d2a0475 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -13,4 +13,5 @@
   server: {
     host: '0.0.0.0'
   },
+  envPrefix: "COOL_",
 })

--
Gitblit v1.9.1