request.js 5.68 KB
Newer Older
乐宝呗666's avatar
乐宝呗666 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
/**
 * Created by supervisor on 2017/11/3.
 */
import axios from 'axios'
import router from '../router'
import {baseUrl} from './env'
import {
    Toast
} from 'vant';
// Vue.use($msg)

//axios 拦截器 请求时的拦截
axios.interceptors.request.use(config => {
    // 发送请求之前做一些处理
    Toast.loading({
        message: '加载中...',
        forbidClick: true,
        duration: 0,
    });
    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) {
    Toast.clear() // 关闭 loading
36 37 38 39
    if (!data) {
        Toast.fail("网络出小差咯~")
    }
    if (status === 401) {
乐宝呗666's avatar
乐宝呗666 committed
40 41 42 43
        Toast({
            message: '您的用户权限已被禁用,请联系管理员!',
            onClose: () => {
                //这个时候点击确定后清除用户信息
乐宝呗666's avatar
乐宝呗666 committed
44 45
                sessionStorage.removeItem('backToken')
                sessionStorage.removeItem('userId')
乐宝呗666's avatar
乐宝呗666 committed
46 47 48 49 50 51 52 53
                router.push({
                    path: '/',
                    query: {
                        redirect: router.history.current.fullPath
                    }
                })
            }
        });
54 55 56 57 58 59 60
    }
    if (status === 500 && data.message) {
        if(data.message.indexOf("token invalid") !== -1){
            Toast({
                message: '您的登录过期,将重新登录!',
                onClose: () => {
                    //清除用户信息
乐宝呗666's avatar
乐宝呗666 committed
61 62
                    sessionStorage.removeItem('backToken')
                    sessionStorage.removeItem('userId')
63 64 65 66 67 68 69 70 71 72 73
                    router.push({
                        path: '/',
                        query: {
                            redirect: router.history.current.fullPath
                        }
                    })
                }
            });
        }
        if(data.message.indexOf("not have permission") !== -1){
            Toast.fail("抱歉,你无权访问该页面!")
乐宝呗666's avatar
乐宝呗666 committed
74 75
        }else{
            Toast.fail(data.message)
76 77 78
        }
    } else {
        Toast.fail(data)
乐宝呗666's avatar
乐宝呗666 committed
79 80 81
    }
}

乐宝呗666's avatar
乐宝呗666 committed
82 83 84
// function successState() {
//     Toast.clear() //隐藏loading
// }
乐宝呗666's avatar
乐宝呗666 committed
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

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") {
乐宝呗666's avatar
乐宝呗666 committed
102
            authToken =sessionStorage.getItem('token') || "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInVzZXJfaWQiOiIxIiwiaXNzIjoiSUFUQSIsImV4cCI6MTYxNjY2NTkzOCwiaWF0IjoxNjE2NjUxNTM4fQ._nqZq0LMwkurIBKJtfX-imXLCxQSNwJ-ueGZ8iwW-0oAW880gY7PjNEfroYYQZ91v0u5yQb73Alzvy6EIp6GGg"
乐宝呗666's avatar
乐宝呗666 committed
103
        } else if (opts.authType === "front") {
乐宝呗666's avatar
乐宝呗666 committed
104
            authToken = sessionStorage.getItem("token");
乐宝呗666's avatar
乐宝呗666 committed
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
        }
        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) {
        Toast.loading({
            message: '加载中...',
            forbidClick: true,
            duration: 0,
        });
        let markIndex = setTimeout(function () {
            Toast.clear()
        }, 10000)
        axios(httpDefaultOpts).then((res) => {
            Toast.clear()
            clearTimeout(markIndex)
130
            if (res.status === 200) {
乐宝呗666's avatar
乐宝呗666 committed
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
                Toast.clear() //隐藏loading
                if (res.data.resultCode == '1109') {
                    Toast({
                        message: '您的登录过期,请重新登录!',
                        onClose: () => {
                            //这个时候点击确定后清除用户信息
                            sessionStorage.removeItem('backToken')
                            sessionStorage.removeItem('userId')
                            router.push({
                                path: '/',
                                query: {
                                    redirect: router.history.current.fullPath
                                }
                            })
                        }
                    });
                }else{
                    resolve(res)
                }
                
151
            }else{
乐宝呗666's avatar
乐宝呗666 committed
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
                errorState(res.status, res.data)
            }
        }).catch((response) => {
            Toast.clear()
            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) {
                    Toast.fail(response.response.data.message)
                } else {
                    Toast.fail("操作失败!")
                }
            }
        })
    })
    return promise
}

export default httpServer