import axios from "axios";
import qs from "qs";
import Vue from "vue";
import { Dialog, Toast } from "cube-ui";
import router from "../router";
Vue.use(Dialog);
Vue.use(Toast);
axios.interceptors.request.use(
config => {
if (sessionStorage.getItem("token")) {
config.headers.token = sessionStorage.getItem("token");
}
return config;
},
error => {
return Promise.reject(error);
}
);
axios.interceptors.response.use(
response => {
return response;
},
error => {
return Promise.resolve(error.response);
}
);
function checkStatus(response) {
// loading
// 如果http狀態(tài)碼正常,則直接返回?cái)?shù)據(jù)
if (
response &&
(response.status === 200 ||
response.status === 304 ||
response.status === 400)
) {
return response;
// 如果不需要除了data之外的數(shù)據(jù),可以直接 return response.data
} else {
// 如果狀態(tài)錯(cuò)誤,刪除token,刪除token,路由守衛(wèi)就會(huì)判斷。
sessionStorage.removeItem("token");
return {
status: 404,
msg: "網(wǎng)絡(luò)異常"
};
}
}
function checkCode(res) {
// 如果code異常(這里已經(jīng)包括網(wǎng)絡(luò)錯(cuò)誤,服務(wù)器錯(cuò)誤,后端拋出的錯(cuò)誤),可以彈出一個(gè)錯(cuò)誤提示,告訴用戶(hù)
if (res.status != 404) {
if (res.data.code == "1" || res.data.code == "0") {
return res.data;
} else {
Dialog.$create({
type: "confirm",
icon: "",
title: "",
content: res.data.msg,
confirmBtn: {
text: "去登錄",
active: true,
disabled: false,
href: "javascript:;"
},
cancelBtn: {
text: "取消",
active: false,
disabled: false,
href: "javascript:;"
},
onConfirm: () => {
router.push({ name: "login" });
},
onCancel: () => {}
}).show();
return;
}
} else {
Toast.$create({
txt: "網(wǎng)絡(luò)錯(cuò)誤",
type: "txt"
}).show();
}
}
export default {
post(url, data) {
return axios({
method: "post",
baseURL: "/apis/api-app/",
url,
data: qs.stringify(data),
timeout: 2000,
headers: {
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
})
.then(response => {
return checkStatus(response);
})
.then(res => {
return checkCode(res);
});
}
};
1、token的配置
2、返回code的判斷(接口返回成功的code,是和后臺(tái)商定的。)
3、彈窗的引用
4、路由的跳轉(zhuǎn)