httpServer.js 4.33 KB
Newer Older
Your Name's avatar
Your Name committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
/**
 * Created by supervisor on 2017/11/3.
 */
import axios from 'axios'
import { Message, MessageBox, Loading } from 'element-ui';
import router from '../router'
import { baseUrl } from './env'
import MyLocalStorage from './myLocalStorage'
import { loginOut } from './loginOut'

//axios 拦截器 请求时的拦截
axios.interceptors.request.use(config => {
  // 发送请求之前做一些处理
  // config.headers = {
  //   'Content-Type': 'application/json'
  // };
  return config
}, error => {
  // 当请求异常时做一些处理
  return new Promise.reject(error)
})
// 响应时拦截
axios.interceptors.response.use(response => {
  // 返回响应时做一些处理
  return response
}, error => {
  // 当响应异常时做一些处理
  return Promise.resolve(error.response)
})
function errorState(status, data) {
  if (data.resultCode == '1109') {
    loginOut()
    MessageBox.alert('您的登录过期,请重新登录!', '提示', {
      confirmButtonText: '确定',
      callback: () => {
        router.push({ path: '/', query: { redirect: router.history.current.fullPath } })
      }
    });
  } else if (status === 401) {
    MessageBox.alert('您的用户权限已被禁用,请联系管理员!', '提示', {
      confirmButtonText: '确定',
      callback: () => {
        //这个时候点击确定后清除用户信息
        localStorage.removeItem('backToken')
        localStorage.removeItem('userId')
        router.push({ path: '/', query: { redirect: router.history.current.fullPath } })
      }
    });
  } else if (status === 500 && data.message.indexOf("not have permission") !== -1) {
    Message.error("抱歉,你无权访问该页面!")
  } else if (!data) {
    Message.error("网络出小差咯~")
  }
}
function successState(res) {
}

const httpServer = (opts, data, file, timeout) => {
  //如果是不需要登录就可以访问的接口 需要设置opts.open
  let Public = {} //公共参数
  let httpDefaultOpts = {
    method: opts.method,
    url: baseUrl + opts.url,
    timeout: timeout ? timeout : 10800000,
    params: Object.assign(Public, data),
    data: data,
    headers: opts.headers || {},
    responseType: opts.responseType || '' 

  };
  httpDefaultOpts.headers["Access-control-Allow-Origin"] = "*";
  httpDefaultOpts.headers["Access-Control-Allow-Headers"] = "content-type,x-requested-with";
  let authToken = "";
  if (opts.authType && opts.authType != "") {
    // Authorization
    if (opts.authType === "back") {
      authToken = localStorage.getItem('backToken');
    } else if (opts.authType === "front") {
      authToken = localStorage.getItem("token") || MyLocalStorage.Cache.get('token');
    }
    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 loadingInstance = Loading.service({
      fullscreen: true,
      lock: true,
      background: 'rgba(0,0,0,.5)',
      text: 'Loading',
      spinner: 'el-icon-loading'
    })
    // let markIndex = setTimeout(function () {
    //   loadingInstance.close();
    // }, 10000)
    axios(httpDefaultOpts).then((res) => {
      // console.log(res)
      if (res.data) {
        loadingInstance.close();
        // clearTimeout(markIndex)
      }

      if (res.data.resultCode == '1109' && localStorage.getItem('backToken')) {
        //清除用户信息
        errorState(res.status, res.data)
      } else {
        successState(res)
        resolve(res)
      }
    }).catch((response) => {
      loadingInstance.close();
      clearTimeout(markIndex)
      console.log("catch")
      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