You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.5 KiB
99 lines
2.5 KiB
5 years ago
|
import Fly from "flyio/dist/npm/wx";
|
||
|
import $store from "../store";
|
||
|
import toLogin from "@/libs/login";
|
||
|
import { VUE_APP_API_URL } from "@/config";
|
||
|
|
||
|
|
||
|
const fly = new Fly()
|
||
|
fly.config.baseURL = VUE_APP_API_URL
|
||
|
|
||
|
fly.interceptors.response.use(
|
||
|
response => {
|
||
|
// 定时刷新access-token
|
||
|
return response;
|
||
|
},
|
||
|
error => {
|
||
|
if (error.toString() == 'Error: Network Error') {
|
||
|
toLogin();
|
||
|
return Promise.reject({ msg: "未登录", toLogin: true });
|
||
|
}
|
||
|
if (error.status == 401) {
|
||
|
toLogin();
|
||
|
return Promise.reject({ msg: "未登录", toLogin: true });
|
||
|
}
|
||
|
return Promise.reject(error);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
const defaultOpt = { login: true };
|
||
|
|
||
|
function baseRequest(options) {
|
||
|
const token = $store.state.token;
|
||
|
const headers = options.headers || {};
|
||
|
if (options.login) {
|
||
|
headers["Authorization"] = "Bearer " + token;
|
||
|
}
|
||
|
|
||
|
options.headers = headers;
|
||
|
if (options.login && !token) {
|
||
|
toLogin();
|
||
|
return Promise.reject({ msg: "未登录", toLogin: true });
|
||
|
}
|
||
|
|
||
|
const { url, params, data, login, ...option } = options
|
||
|
return fly.request(url, params || data, {
|
||
|
...option
|
||
|
}).then(res => {
|
||
|
const data = res.data || {};
|
||
|
if (res.status !== 200)
|
||
|
return Promise.reject({ msg: "请求失败", res, data });
|
||
|
|
||
|
if ([410000, 410001, 410002].indexOf(data.status) !== -1) {
|
||
|
toLogin();
|
||
|
return Promise.reject({ msg: res.data.msg, res, data, toLogin: true });
|
||
|
} else if (data.status === 200) {
|
||
|
return Promise.resolve(data, res);
|
||
|
} else {
|
||
|
return Promise.reject({ msg: res.data.msg, res, data });
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* http 请求基础类
|
||
|
* 参考文档 https://www.kancloud.cn/yunye/axios/234845
|
||
|
*
|
||
|
*/
|
||
|
const request = ["post", "put", "patch"].reduce((request, method) => {
|
||
|
/**
|
||
|
*
|
||
|
* @param url string 接口地址
|
||
|
* @param data object get参数
|
||
|
* @param options object axios 配置项
|
||
|
* @returns {AxiosPromise}
|
||
|
*/
|
||
|
request[method] = (url, data = {}, options = {}) => {
|
||
|
return baseRequest(
|
||
|
Object.assign({ url, data, method }, defaultOpt, options)
|
||
|
);
|
||
|
};
|
||
|
return request;
|
||
|
}, {});
|
||
|
|
||
|
["get", "delete", "head"].forEach(method => {
|
||
|
/**
|
||
|
*
|
||
|
* @param url string 接口地址
|
||
|
* @param params object get参数
|
||
|
* @param options object axios 配置项
|
||
|
* @returns {AxiosPromise}
|
||
|
*/
|
||
|
request[method] = (url, params = {}, options = {}) => {
|
||
|
return baseRequest(
|
||
|
Object.assign({ url, params, method }, defaultOpt, options)
|
||
|
);
|
||
|
};
|
||
|
});
|
||
|
|
||
|
export default request;
|