/** * Created by supervisor on 2017/11/3. */ import axios from 'axios' import router from '../router' import {baseUrl} from './env' import { Message,MessageBox } from 'element-ui'; // Vue.use($msg) const service = axios.create() //axios 拦截器 请求时的拦截 service.interceptors.request.use(config => { // 发送请求之前做一些处理 return config }, error => { // 当请求异常时做一些处理 return new Promise.reject(error) }) // 响应时拦截 service.interceptors.response.use(response => { // 返回响应时做一些处理 return response }, error => { // 当响应异常时做一些处理 return Promise.resolve(error.response) }) function errorState(status, data) { if (!data) { Message.error("网络出小差咯~") } if (status === 401) { this.$confirm('您的用户权限已被禁用,请联系管理员!', '提示', { confirmButtonText: '确定', type: 'warning' }).then(() => { //这个时候点击确定后清除用户信息 sessionStorage.removeItem('sToken') sessionStorage.removeItem('sUserInfo') router.push({ path: '/slogin', }) }).catch(() => { }); } if (status === 500 && data.message) { if(data.message.indexOf("token invalid") !== -1){ MessageBox.alert('您的登录过期,将重新登录!', '', { confirmButtonText: '确定', callback: action => { router.push({ path: '/slogin', }) } }); } if(data.message.indexOf("not have permission") !== -1){ Message.error("抱歉,你无权访问该页面!") }else{ Message.error(data.message) } } else { Message.error(data) } } const httpServer = (opts, data, file, timeout) => { //如果是不需要登录就可以访问的接口 需要设置opts.open let Public = {} //公共参数 let httpDefaultOpts = { method: opts.method, url: baseUrl + opts.url, timeout: timeout ? timeout : 20000, params: Object.assign(Public, data), data: data, headers: opts.headers || {}, }; httpDefaultOpts.headers["Access-control-Allow-Origin"] = "*"; httpDefaultOpts.headers["Access-Control-Allow-Headers"] = "content-type,x-requested-with"; let authToken = ""; if (opts.authType && opts.authType != "") { if (opts.authType === "back") { authToken =sessionStorage.getItem('sToken') || "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInVzZXJfaWQiOiIxIiwiaXNzIjoiSUFUQSIsImV4cCI6MTYxNjY2NTkzOCwiaWF0IjoxNjE2NjUxNTM4fQ._nqZq0LMwkurIBKJtfX-imXLCxQSNwJ-ueGZ8iwW-0oAW880gY7PjNEfroYYQZ91v0u5yQb73Alzvy6EIp6GGg" } else if (opts.authType === "front") { authToken = sessionStorage.getItem("sToken"); } httpDefaultOpts.headers["Authorization"] = authToken } if (opts.method === 'get') { delete httpDefaultOpts.data httpDefaultOpts.params.timestamp_static = new Date().getTime(); } else { // delete httpDefaultOpts.params if (file) { httpDefaultOpts.data = data; } } let promise = new Promise(function (resolve, reject) { let markIndex = setTimeout(function () { }, 10000) service(httpDefaultOpts).then((res) => { clearTimeout(markIndex) if (res.status === 200) { if (res.data.resultCode == '1109') { MessageBox.confirm({ message: '您的登录过期,请重新登录!', callback: action => { //这个时候点击确定后清除用户信息 sessionStorage.removeItem('sToken') sessionStorage.removeItem('sUserInfo') router.push({ path: '/', query: { redirect: router.history.current.fullPath } }) } }); }else{ resolve(res) } }else{ errorState(res.status, res.data) } }).catch((response) => { clearTimeout(markIndex) if (response && response.response && response.response.status && response.response.data) { errorState(response.response.status, response.response.data) } reject(response) if (response.response.data) { if (response.response.data.message) { Message.error(response.response.data.message) } else { Message.error("操作失败!") } } }) }) return promise } export default httpServer