From 089bf5d2378b3c4a61d795b2a92bede2c193b771 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Tue, 06 Jan 2026 11:22:58 +0800
Subject: [PATCH] 1

---
 src/utils/httpRequest.js |  180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 180 insertions(+), 0 deletions(-)

diff --git a/src/utils/httpRequest.js b/src/utils/httpRequest.js
new file mode 100644
index 0000000..e0d66d0
--- /dev/null
+++ b/src/utils/httpRequest.js
@@ -0,0 +1,180 @@
+import Vue from "vue";
+import axios from "axios";
+import router from "@/router";
+import qs from "qs";
+import merge from "lodash/merge";
+import MyDialog from "@/components/ipPop/ip-update.vue"; // 导入外部组件
+import { clearLoginInfo } from "@/utils";
+import { Message } from "element-ui";
+import { signatureGenerate } from '@/utils/crypto'
+// import store from "@/store";
+let dialogInstance = null;
+const http = axios.create({
+  timeout: 1000 * 30,
+  withCredentials: true,
+  headers: {
+    "Content-Type": "application/json; charset=utf-8",
+  },
+});
+
+/**
+ * 请求拦截
+ */
+http.interceptors.request.use(
+  (config) => {
+    config.headers["Authorization"] = Vue.cookie.get("Authorization"); // 请求头带上token
+
+    const signature = signatureGenerate();
+    config.headers["Sign"] = signature.signature;
+    config.headers["Systemrandom"] = signature.systemRandom;
+    config.headers["Tissuepaper"] = signature.timestamp;
+  
+    // console.log("config => " + JSON.stringify(config));
+
+    return config;
+  },
+  (error) => {
+    return Promise.reject(error);
+  }
+);
+
+/**
+ * 响应拦截
+ */
+http.interceptors.response.use(
+  (response) => {
+    if (
+      response.data.code == "403" ||
+      response.data.code == "401" 
+    ) {
+      Message({
+        message: response.data.msg,
+        type: "error",
+        duration: 1500,
+        customClass: "element-error-message-zindex",
+      });
+     
+      clearLoginInfo();
+      router.push({ name: "login" });
+      return Promise.reject(response);
+    }
+    console.log(response.data);
+    if (response.data.code == "1001") {
+      // 在这里触发弹窗组件
+      if (dialogInstance) {
+        return false;
+      }
+      //console.log(3);
+      //console.log(store.user);
+      // 获取当前路由信息
+      const currentRoute = router.currentRoute;
+      //console.log(currentRoute);
+      if (currentRoute.path == "/") {
+        //console.log("qqq");
+        document.body.removeChild(dialogInstance.$el);
+        return false;
+      }
+      const DialogConstructor = Vue.extend(MyDialog);
+      dialogInstance = new DialogConstructor();
+      dialogInstance.$mount();
+      // 监听弹窗关闭事件
+      // dialogInstance.$on("close", () => {
+      //   console.log("qqq");
+      //   document.body.removeChild(dialogInstance.$el);
+      // });
+
+      // 将弹窗组件实例挂载到页面中
+      document.body.appendChild(dialogInstance.$el);
+      return Promise.reject(error);
+    }
+    return response;
+  },
+  (error) => {
+    if (!error.response) {
+      console.log("error = " + JSON.stringify(error));
+    }
+    switch (error.response.status) {
+      case 400:
+        Message({
+          message: error.response.data,
+          type: "error",
+          duration: 1500,
+          customClass: "element-error-message-zindex",
+        });
+        break;
+      case 401:
+        clearLoginInfo();
+        router.push({ name: "login" });
+        console.log(1);
+        if (dialogInstance) {
+          console.log(2);
+          document.body.removeChild(dialogInstance.$el);
+        }
+        break;
+      case 405:
+        Message({
+          message: "http请求方式有误",
+          type: "error",
+          duration: 1500,
+          customClass: "element-error-message-zindex",
+        });
+        break;
+      case 500:
+        Message({
+          message: "服务器出了点小差,请稍后再试",
+          type: "error",
+          duration: 1500,
+          customClass: "element-error-message-zindex",
+        });
+        break;
+      case 501:
+        Message({
+          message: "服务器不支持当前请求所需要的某个功能",
+          type: "error",
+          duration: 1500,
+          customClass: "element-error-message-zindex",
+        });
+        break;
+    }
+    return Promise.reject(error);
+  }
+);
+
+/**
+ * 请求地址处理
+ * @param {*} actionName action方法名称
+ */
+http.adornUrl = (actionName) => {
+  // 非生产环境 && 开启代理, 接口前缀统一使用[/proxyApi/]前缀做代理拦截!
+  return (process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY ? '/proxyApi' : process.env.VUE_APP_BASE_API) + actionName
+}
+
+/**
+ * get请求参数处理
+ * @param {*} params 参数对象
+ * @param {*} openDefultParams 是否开启默认参数?
+ */
+http.adornParams = (params = {}, openDefultParams = true) => {
+  var defaults = {
+    t: new Date().getTime(),
+  };
+  return openDefultParams ? merge(defaults, params) : params;
+};
+
+/**
+ * post请求数据处理
+ * @param {*} data 数据对象
+ * @param {*} openDefultdata 是否开启默认数据?
+ * @param {*} contentType 数据格式
+ *  json: 'application/json; charset=utf-8'
+ *  form: 'application/x-www-form-urlencoded; charset=utf-8'
+ */
+http.adornData = (data = {}, openDefultdata = true, contentType = "json") => {
+  var defaults = {
+    t: new Date().getTime(),
+  };
+  data = openDefultdata ? merge(defaults, data) : data;
+  return contentType === "json" ? JSON.stringify(data) : qs.stringify(data);
+};
+
+export default http;

--
Gitblit v1.9.3