Files
smart_storage_app/common/http.interceptor.js
2025-06-30 10:21:25 +08:00

105 lines
2.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 此处第二个参数vm就是我们在页面使用的this你可以通过vm获取vuex等操作
const install = (Vue, vm) => {
// 通用请求头设定
const ajaxHeader = "x-ajax";
const sessionIdHeader = "Authorization";
const rememberMeHeader = "x-remember";
const lang = 'lang';
// 请求参数默认配置
Vue.prototype.$u.http.setConfig({
baseUrl: vm.vuex_config.baseUrl,
originalData: true,
// 默认头部http2约定header名称统一小写
header: {
"content-type": "application/json",
"x-requested-with": "XMLHttpRequest",
},
});
// 请求拦截配置Token等参数
Vue.prototype.$u.http.interceptor.request = (req) => {
if (!req.header) {
req.header = [];
}
req.header["source"] = "app";
// 默认指定返回 JSON 数据
if (!req.header[ajaxHeader]) {
req.header[ajaxHeader] = "json";
}
// 设定传递 Token 认证参数
if (!req.header[sessionIdHeader] && vm.vuex_token) {
req.header[sessionIdHeader] = vm.vuex_token;
req.header[lang] = vm.vuex_language;
}
// 为节省流量,记住我数据不是每次都发送的,当会话失效后,尝试重试登录
if (!req.header[rememberMeHeader] && vm.vuex_remember && req.remember) {
req.header[rememberMeHeader] = vm.vuex_remember;
req.remember = false;
}
return req;
};
// 响应拦截,判断状态码是否通过
Vue.prototype.$u.http.interceptor.response = async (res, req) => {
let data = res.data;
if (!data) {
// vm.$u.toast("未连接到服务器");
return false;
}
if (res.data.code !== 200) {
if (res.data.code === 401002 || res.data.code === 401001 || res.data.code === 50014) {
uni.showToast({
title: data.msg ? data.msg : '请重新登陆!',
duration: 3000,
icon:'none'
})
setTimeout(() => {
uni.reLaunch({
url: "/pages/login/index"
});
}, 3000)
}else{
uni.showToast({
title: data.msg ? data.msg : '接口报错,请联系管理员!',
duration:3000,
icon:'none'
})
}
} else {
return res.data
}
};
// 封装 get text 请求
vm.$u.getText = (url, data = {}, header = {}) => {
return vm.$u.http.request({
dataType: "text",
method: "GET",
url,
header,
data,
});
};
// 封装 post json 请求
vm.$u.postJson = (url, data = {}, header = {}) => {
header["content-type"] = "application/json";
return vm.$u.http.request({
url,
method: "POST",
header,
data,
});
};
};
export default {
install,
};