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.

126 lines
3.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import {
ROOTPATH as baseUrl
} from "@/common/config.js"
// 这里的Vue为Vue对象(非创建出来的实例)vm为main.js中“Vue.use(httpInterceptor, app)”这一句的第二个参数,
// 为一个Vue的实例也即每个页面的"this"
// 如果需要了解这个install方法是什么请移步https://uviewui.com/components/vueUse.html
const install = (Vue, vm) => {
// 此为自定义配置参数,具体参数见上方说明
Vue.prototype.$u.http.setConfig({
baseUrl,
showLoading: false, // 是否显示请求中的loading
loadingMask: false, // 展示loading的时候是否给一个透明的蒙层防止触摸穿透
loadingText: '', // 请求loading中的文字提示
loadingTime: 800,
originalData: true, // 是否在拦截器中返回服务端的原始数据
// 设置自定义头部content-type
header: {
'content-type': 'application/json;charset=UTF-8'
}
});
// 请求拦截部分,如配置,每次请求前都会执行
Vue.prototype.$u.http.interceptor.request = (config) => {
console.log('config-http', config)
let stbc1_lifeData = uni.getStorageSync('stbc1_lifeData')
let vuex_token = stbc1_lifeData.vuex_token;
if (vuex_token || vm.vuex_token) {
config.header['Authorization'] = `Bearer ${vuex_token || vm.vuex_token}`;
}
return config;
}
// 响应拦截,如配置,每次请求结束都会执行本方法
Vue.prototype.$u.http.interceptor.response = (res) => {
console.log('res-http', res)
if (res.statusCode === 200) {
if (res.data.hasOwnProperty("errcode")) {
if (res.data?.errcode === 40001) {
uni.showModal({
title: '用户信息已失效',
confirmText: '重新获取',
success: function(res) {
if (res.confirm) {
uni.removeStorageSync('stbc1_lifeData')
uni.login({
provider: 'weixin',
success: (res) => {
let url = `${baseUrl}/api/mobile/user/applet-login`
uni.request({
url: url,
data: {
code: res.code
},
method: 'GET',
success: result => {
uni.setStorageSync("stbc1_lifeData", {'vuex_token': result.data.token})
uni.request({
url: `${baseUrl}/api/mobile/user/get-user-info`,
header: {
Authorization: `Bearer ${result.data.token}`
},
data: {},
method: 'GET',
success: result1 => {
uni.setStorageSync("stbc1_lifeData", {
'vuex_token': result.data.token,
"vuex_user": result1.data.user})
uni.reLaunch({
url: '/pages/index/index'
});
},
fail(err){
console.log("uesr-error",err)
}
});
},
fail(err){
console.log("login-error",err)
}
});
},
fail(err){
console.log("code-error",err)
}
});
// login end
}
}
}) // showConfirm end
return
} else {
setTimeout(function() {
uni.showToast({
icon: "none",
title: res.data.errmsg,
duration: 2000
})
}, 20)
}
return false;
} else {
return res.data;
}
} else {
setTimeout(function() {
uni.showToast({
icon: "none",
title: '' + res.statusCode,
duration: 2000
})
}, 20)
return false;
}
}
}
export default {
install
}