| New file |
| | |
| | | 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; |