/** * axios全局配置 */ import axios from "axios"; import config from '@/config/index'; // import store from "../store" // import router from "../router" import Vue from "vue"; import { Message } from "element-ui"; import Cookies from "js-cookie"; let loseToken = false, serverError = false; /** * baseUrl */ function getUrl() { return 'https://park.lhzhtc.cn'; } /** * baseUrl */ function getTokenUrl() { return Vue.prototype.tokenUrl; } axios.defaults.timeout = 30000; axios.defaults.withCredentials = false; //配置为false /** * 超时设置 */ const service = axios.create({ // baseURL: process.env.NODE_ENV === "production" ? getUrl() : "", baseURL: getUrl(), timeout: 30000 // 请求超时时间 }); //刷新token async function refreshToken() { let tokenUrl = getTokenUrl(); let url = `${tokenUrl}/cas/jwt/token`; await axios.get(url).then( response => { console.log(response.data); if (response.data.status === true) { Cookies.set("jwtToken", response.data.jwtToken, { expires: 7, path: "/" }); } }, error => { console.log("错误", error.message); } ); } //检查token有效期 // function check() { // const token = Cookies.get("jwtToken") // if (!token) { // return false // } // let infostr = token.substring(token.indexOf(".") + 1, token.lastIndexOf(".")) // let Base64 = require("js-base64").Base64 // let info = Base64.decode(infostr) // //解析token为对象json // let infoObject = JSON.parse(info) // //当前时间戳 // let current = new Date().getTime() / 1000 // //当有效期过期时需要删除本地的token以及续签token // if (infoObject.exp < current) { // Cookies.set("jwtToken", null, { expires: 0 }) // return false // } else if (infoObject.exp - current < 60 * 30) { // //当有效期还剩半小时过期时主动更新token // refreshToken() // } // return true // } // http request 拦截器 // 每次请求都为http头增加Authorization字段,其内容为token service.interceptors.request.use( config => { config.url = getUrl() + config.url; //config.baseURL = getUrl() // if (check()) { // 判断是否存在token,如果存在的话,则每个http header都加上token const token = Cookies.get("jwtToken"); // config.headers.Authorization = token // } return config; }, err => { return Promise.reject(err); } ); // http response 拦截器 // 针对响应代码确认跳转到对应页面 service.interceptors.response.use( response => { //token失效拦截 if (response.data.code == 1001) { //访问后场失败:1001 token失效 //清空token //清空首页的vuex的state // store.commit("user/setIsLogin", false) // store.commit("user/setAcctInfo", {}) //跳转到首页 //router.push('/home'); if (!loseToken) { Message({ message: "登录账号已过期或无访问权限,请重新登录", type: "error", showClose: true }); } loseToken = true; setTimeout(() => { loseToken = false; }, 5000); top.location = 'https://park.lhzhtc.cn/SaaS-Platform'; return Promise.reject(response); } //业务异常拦截 (code8) else if (response.data.code == 8) { Message({ message: `${response.data.msg}`, type: "warning", showClose: true }); return Promise.reject(response); } //运行时异常拦截 (不显示具体信息) else if (response.data.code == 9) { Message({ message: "系统内部错误,请联系管理员或稍后重试", type: "error", showClose: true }); return Promise.reject(response); } return Promise.resolve(response.data); }, error => { if ( error.code == "ECONNABORTED" || error.message.indexOf("timeout") != -1 ) { ("请求超时"); } if (!serverError) { Message({ message: `连接服务器错误:${error.message}`, type: "error", showClose: true }); } serverError = true; setTimeout(() => { serverError = false; }, 5000); return Promise.reject(error); // 返回接口返回的错误信息 } ); export default service;