httpServer.js 4.68 KB
Newer Older
qzhxx's avatar
qzhxx 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 139 140 141 142 143 144 145 146 147 148 149
/**
 * Created by supervisor on 2017/11/3.
 */
// import Vue from 'vue'
import axios from 'axios'
// import qs from  'qs'
import store from '../store'
import {Message, MessageBox, Loading} from 'element-ui';
import router from '../router'
import {baseUrl} from './env'
import MyLocalStorage from './myLocalStorage'
// Vue.use($msg)

//axios 拦截器 请求时的拦截
axios.interceptors.request.use(config=>{
  // 发送请求之前做一些处理
  store.commit('UPDATE_LOADING',true) //显示loading
  // 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)
})
// let isOpen=false;
function errorState(status, data) {
  store.commit('UPDATE_LOADING',false)
  if(status === 500 && data.message.indexOf("token invalid")!==-1){
    // if(status == 500 && data == "sessionTimeOut"){
    if(store.state.isOpen){
      return ;
    }
    store.commit('setIsOpen',true)
    MessageBox.alert('您的登录过期,请重新登录!', '提示', {
      confirmButtonText: '确定',
      callback: () => {
        //清除用户信息
        localStorage.removeItem('backToken')
        localStorage.removeItem('userId')
        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}})
        store.commit('isAdminInfo',false);
      }
    });
  } else if (status === 500 && data.message.indexOf("not have permission") !== -1) {
    // router.push({path: 'page403'})
    Message.error("抱歉,你无权访问该页面!")
  }else if (!data) {
    Message.error("网络出小差咯~")
  }
}
function successState(res) {
  store.commit('UPDATE_LOADING',false) //隐藏loading
}

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!=""){
    // 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();
    // httpDefaultOpts.params.roleId = localStorage.getItem('roleId');
    // httpDefaultOpts.params.bankBranchId = localStorage.getItem('bankBranchId');
  }else{
    delete httpDefaultOpts.params
    if(file){
      httpDefaultOpts.data=data;
      // httpDefaultOpts.headers["X-Requested-With"]="multipart/form-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)=>{
      loadingInstance.close();
      clearTimeout(markIndex)
      successState(res)
      if(res){
        resolve(res)
        errorState(res.status, res.data)
      }
    }).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