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