import Vue from "vue"; import store from "../store"; import axios from "axios"; import { VueAxios } from "./axios"; // 创建 axios 实例 const service = axios.create({ // baseURL: 'http://121.43.55.7:8888', timeout: 40000, // 请求超时时间, headers: { "Content-Type": "application/form-data", }, }); const fileService = axios.create({ baseURL: "", timeout: 40000, // 请求超时时间, headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", }, responseType: "json", }); const err = (error) => { if (error.response) { // 可在此处统一处理服务器端报错 // const { data } = error.response // notification.error({ // message: 'Error', // description: data.message || 'Try Again Later.' // }) } return Promise.reject(error); }; service.interceptors.request.use((config) => { // 可在此处添加请求自定义 token 请根据实际情况自行修改 // const token = Vue.ls.get('Access-Token') config.headers.Authorization = "jwt " + window.localStorage.getItem("changeAccess_token"); return config; }, err); // response interceptor service.interceptors.response.use((response) => response.data, err); const installer = { vm: {}, install(Vue) { Vue.use(VueAxios, service); }, }; /** * 整合url中拼接的参数 * @method * @param {Object} params 传入需要拼接的参数对象 * @return {String} 返回的参数字符串 例:keyword=黄河&number=1&string=huanghe */ function splicingParam(params) { let str = ""; for (const key in params) { if (Object.prototype.hasOwnProperty.call(Object, "key")) { str += "&" + key + "=" + params[key]; } } return str.substr(1, str.length); } function get(url, params) { return new Promise((resolve, reject) => { service({ method: "GET", url, params: params, headers: { token: localStorage.getItem("TOKEN"), }, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } function getFile(url) { return new Promise((resolve, reject) => { fileService({ method: "GET", url, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } function post(url, data) { return new Promise((resolve, reject) => { service({ method: "POST", url, data: data, headers: { token: localStorage.getItem("TOKEN"), "Content-Type": "multipart/form-data;", }, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } function postform(url, data) { return new Promise((resolve, reject) => { service({ method: "POST", url, data: JSON.stringify(data), headers: { token: localStorage.getItem("TOKEN"), "Content-Type": "multipart/form-data;", }, // headers: { // 'Content-Type': 'application/x-www-form-urlencoded;' // } }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } function put(url, data) { return new Promise((resolve, reject) => { service({ method: "PUT", url, data: data, headers: { "Content-Type": "application/json;", }, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } function putform(url, data) { return new Promise((resolve, reject) => { service({ method: "PUT", url, data: JSON.stringify(data), headers: { "Content-Type": "application/x-www-form-urlencoded;", }, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } function del(url, data) { return new Promise((resolve, reject) => { service({ method: "DELETE", url, data: data, headers: { "Content-Type": "application/json;", }, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } function delform(url, data) { return new Promise((resolve, reject) => { service({ method: "DELETE", url, data: JSON.stringify(data), headers: { "Content-Type": "application/x-www-form-urlencoded;", }, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } function postFile(url, data) { return new Promise((resolve, reject) => { service({ method: "POST", url, data: data, contentType: false, processData: false, headers: { "Content-Type": "multipart/form-data", }, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); } export { installer as VueAxios, service as axios, splicingParam, get, post, del, put, putform, postform, delform, postFile, getFile, };