/** * 全站http配置 * * axios参数说明 * isSerialize是否开启form表单提交 * isToken是否需要token */ import "nprogress/nprogress.css"; import website from "@/config/website"; import router from "@/router/router"; import store from "@/store/"; import { getToken } from "@/util/auth"; import { serialize } from "@/util/util"; import axios from "axios"; import { Message } from "element-ui"; import { Base64 } from "js-base64"; import NProgress from "nprogress"; const service = axios.create({ // baseURL: 'https://jibaoadmin.qemcap.com/api', timeout: 60000 }); const replaceStr = JSON.parse(process.env.VUE_APP_REPLACE_STR); //默认超时时间 service.defaults.timeout = 60000; //返回其他状态码 service.defaults.validateStatus = function(status) { return status >= 200 && status <= 500; }; //跨域请求,允许保存cookie service.defaults.withCredentials = true; // NProgress 配置 NProgress.configure({ showSpinner: false }); // http request拦截 service.interceptors.request.use( config => { //开启 progress bar NProgress.start(); const meta = config.meta || {}; const isToken = meta.isToken === false; config.headers["Authorization"] = `Basic ${Base64.encode( `${website.clientId}:${website.clientSecret}` )}`; if (getToken() && !isToken) { //让每个请求携带token--['Authorization']为自定义key 请根据实际情况自行修改 config.headers["Jobslink-Auth"] = "bearer " + getToken(); } // headers中配置serialize为true开启序列化 if (config.method === "post" && meta.isSerialize === true) { config.data = serialize(config.data); } return config; }, error => { return Promise.reject(error); } ); axios.interceptors.request.use( config => { //开启 progress bar NProgress.start(); const meta = config.meta || {}; const isToken = meta.isToken === false; config.headers["Authorization"] = `Basic ${Base64.encode( `${website.clientId}:${website.clientSecret}` )}`; if (getToken() && !isToken) { //让每个请求携带token--['Authorization']为自定义key 请根据实际情况自行修改 config.headers["Jobslink-Auth"] = "bearer " + getToken(); } // headers中配置serialize为true开启序列化 if (config.method === "post" && meta.isSerialize === true) { config.data = serialize(config.data); } return config; }, error => { return Promise.reject(error); } ); // http response 拦截 service.interceptors.response.use( res => { //关闭 progress bar NProgress.done(); //获取状态码 const status = res.data.code || res.status; const statusWhiteList = website.statusWhiteList || []; const message = res.data.msg || res.data.error_description || "未知错误"; //如果在白名单里则自行catch逻辑处理 if (statusWhiteList.includes(status)) return Promise.reject(res); //如果是401则跳转到登录页面 if (status === 401) { store.dispatch("FedLogOut").then(() => { if (process.env.NODE_ENV !== "development") { window.location.href = process.env.VUE_APP_LOGIN_NEXT; } }); // store.dispatch('FedLogOut').then(() => router.push({path: '/login'})); } // 如果请求为500统一处理 const err = new Error(message); err.response = res; err.status = status; if (message.length > 100) { Message({ message: "系统繁忙", type: "error" }); return Promise.reject(err); } // 如果请求为非200否者默认统一处理 if (status !== 200) { Message({ message: message, type: "error" }); return Promise.reject(err, res); } if (res.data instanceof Blob) { return res; } return transformReplaceStr(res); }, error => { NProgress.done(); if (error.message.includes("timeout")) { Message({ message: "请求超时", type: "error" }); } return Promise.reject(new Error(error), error); } ); // 递归替换 url function transformReplaceStr(props) { if (typeof props !== "object" || props === null) { for (const key in replaceStr) { if (typeof props === "string") { props = props.replace(key, replaceStr[key]); } } return props; } let result; if (props instanceof Array) { result = []; } else { result = {}; } for (let key in props) { if (props.hasOwnProperty(key)) { result[key] = transformReplaceStr(props[key]); } } return result; } export default service;