123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- "use strict";
- import axios from "axios";
- import store from "@/store";
- import { getAllPromise } from "@/utils/tools";
- import { objKeySort, dateChange } from "@/filters";
- import { Toast } from "vant";
- import md5 from "js-md5";
- import { getCookie } from "@/utils/cookie";
- // 完整配置参考: https://github.com/axios/axios#request-config
- axios.defaults.headers.post["Content-Type"] = "application/json;charset=utf-8";
- let config = {
- baseURL: process.env.BASE_URL || process.env.VUE_APP_JTXT_URL || "",
- timeout: 60 * 1000,
- withCredentials: false,
- crossDomain: true
- };
- const _axios = axios.create(config);
- // 注册all方法,执行多个并发请求
- // 可传入Promise、包含Promise的数组、返回值为Promise的方法
- _axios.all = (...requsets) => {
- // 获取所有Promise对象
- let promiseList = getAllPromise(requsets);
- return new Promise((resolve, reject) => {
- axios.all(promiseList)
- .then(axios.spread((...response) => {
- // 两个请求现在都执行完成
- resolve(response);
- }))
- .catch(error => {
- reject(error);
- });
- });
- };
- _axios.interceptors.request.use(
- config => {
- if (config.url.includes("api/sys/file")) {
- // 上传图片请求,不带请求头参数
- } else {
- let paramsNew = "";
- if (config.method === "get" && config.params) {
- paramsNew = objKeySort(config.params);
- } else if (config.method === "post" && config.data) {
- paramsNew = objKeySort(config.data);
- }
- config.headers.common["Content-Type"] = "application/json;charset=utf-8";
- config.headers.common["Access-Control-Allow-Origin"] = "*";
- config.headers.common["userSig"] = "userSig";
- config.headers.common["clientType"] = "h5";
- config.headers.common["timestamp"] = dateChange();
- config.headers.common["sign"] = md5(encodeURIComponent(paramsNew + config.headers.common.clientType + config.headers.common.timestamp + "n8R7vPaF3nJc"));
- config.headers.common["Authorization"] = getCookie("token");
- }
- return config;
- },
- error => {
- return Promise.reject(error);
- }
- );
- // 拦截响应
- _axios.interceptors.response.use(
- response => {
- // 用来判断是否请求成功
- const success = response.status === 200;
- let message = "";
- if (!success) {
- if (typeof response.data === "string") {
- message = "服务器错误,未获取到响应数据";
- } else {
- if (response.status === 200 && response.data.code === 0) {
- return Promise.reject(response);
- }
- // 请求成功,但在业务上为失败
- message = response.data.message || response.data.errorData || "操作执行失败";
- }
- Toast(message);
- return Promise.reject(response);
- }
- return {
- data: response.data,
- success,
- message
- };
- },
- error => {
- let message = "";
- if (!navigator.onLine) {
- message = "网络连接异常,请检查网络";
- Toast(message);
- return Promise.reject(error);
- }
- if (!error.response) {
- message = "连接服务器失败";
- Toast(message);
- return Promise.reject(error);
- }
- let status = error.response.status;
- if (status === 401) {
- message = "您已在其他地方登录";
- store.dispatch("logout");
- Toast(message);
- return Promise.reject(error);
- }
- if (status < 200) {
- message = `未处理的消息响应,状态码:${status}`;
- } else if (status >= 300 && status < 400) {
- message = `未处理的重定向响应,状态码:${status}`;
- } else if (status === 406) {
- message = "已经参加过该考试";
- window.history.back();
- } else if (status >= 400 && status < 500) {
- message = `客户端错误,状态码:${status}`;
- } else if (status >= 500) {
- message = `服务器错误,状态码:${status}`;
- }
- Toast(message);
- // 系统请求失败
- return Promise.reject(error);
- }
- );
- export default _axios;
|