import axios from 'axios' import qs from 'qs' import util from '@/js/util' import { TIME_OUT } from '@/config' import router from '@/router'; import { Message } from 'element-ui' import { showLoading, hideLoading } from './loading'; // 网络请求前拦截器 axios.interceptors.request.use(resquest => { console.log(resquest) showLoading(); // if(resquest && resquest.data && typeof (resquest.data) === 'object'){ // 若每个接口需要添加时间戳时 // resquest.data.currentDateTime = util.getFormatDate('yyyy-mm-dd hh:mm:ss') // } return resquest }, error => { console.log(error) return Promise.reject(error) }) // 网络响应后拦截器 // 响应拦截器 axios.interceptors.response.use( response => { hideLoading(); if (response && response.status === 200 || response && response.status === 304) { return Promise.resolve(response); } else { return Promise.reject(response); } }, // 服务器状态码不是200的情况 error => { hideLoading(); if (error.response.status) { switch (error.response.status) { // 401: 未登录 // 未登录则跳转登录页面,并携带当前页面的路径 // 在登录成功后返回当前页面,这一步需要在登录页操作。 case 401: Message.error('登陆信息失效,请重新登录') localStorage.removeItem("accessToken") router.replace({ path: '/', query: { redirect: router.currentRoute.fullPath } }); break; // 403 token过期 // 登录过期对用户进行提示 // 清除本地token和清空vuex中token对象 // 跳转登录页面 case 403: Message.error('登陆失效,请重新登录') // 清除token localStorage.removeItem("accessToken") // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面 setTimeout(() => { router.replace({ path: '/', query: { redirect: router.currentRoute.fullPath } }); }, 1000); break; // 404请求不存在 case 404: Message.error('404 Not Found') break; // 其他错误,直接抛出错误提示 default: Message.error('网络错误') } return Promise.reject(error.response); } // else { // Message.error('登陆失效,请重新登录') // localStorage.removeItem("accessToken") // router.replace({ // path: '/', // query: { redirect: router.currentRoute.fullPath } // }); // } } ); // 数据统一处理来自网络及服务器的错误 function checkStatus (response) { console.log("11123456") if (response && response.status === 200 || response && response.status === 304){ // Message.success('请求成功') return response.data } // if (response && response.status === 401){ // localStorage.removeItem("accessToken") // router.replace({ // path: '/' // 到登录页重新获取token // }) // Message.error('登陆失效,请重新登录') // } // if (response && response.status === 404){ // router.replace({ // path: '*' // 到登录页重新获取token // }) // Message.error('404 Not Found') // } // if (response && response.status === 500){ // router.replace({ // path: '*' // 到登录页重新获取token // }) // Message.error('服务器问题') // } else { // Message.error('登陆失效,请重新登录') // localStorage.removeItem("accessToken") // router.replace({ // path: '/' // 到登录页重新获取token // }) // return response && response.statusText || '网络错误' // } } // 处理来自程序的异常 function checkCode (response) { console.log("chucuole") if (response.status && response.status !== 'ok'){ response.error = response.error || '出错了!' } return response } let accessToken = localStorage.getItem("accessToken") // let accessToken = "evbOfyzBDlwwi2Tn8KTc5h3sWKsbrpbiazL7wYh7vyTs9KtJ1vANq6j3DmOwFjbL" // export default ({method = 'post', url = '', params = {}}) => { // return new Promise((resolve, reject) => { // axios[method.toLowerCase()](url, params).then(response => { // resolve(response) // }, err => { // reject(err) // }).catch(err => { // reject(err) // }) // }) // } export default { Tokenpost (url, data) { const params = data; return axios({ method:'post', // url, url: `${url}?${qs.stringify(params)}`, timeout: TIME_OUT, data, // data: qs.stringify(data), headers:{ 'Content-Type': 'application/json', // 'Content-Type':'application/x-www-form-urlencoded' } }).then(checkStatus).then(checkCode) }, post (url, data) { if (!accessToken){ accessToken = localStorage.getItem("accessToken"); } const params = {accessToken}; return axios({ method:'post', // url, url: `${url}?${qs.stringify(params)}`, timeout: TIME_OUT, data, // data: qs.stringify(data), headers:{ 'Content-Type': 'application/json', // 'Content-Type':'application/x-www-form-urlencoded' } }).then(checkStatus).then(checkCode) }, get (url, params){ return axios({ method: 'get', url: `${url}?${qs.stringify(params)}`, timeout: TIME_OUT, headers:{ 'Content-Type':'text/plain', }, }).then(checkStatus).then(checkCode) }, }