master
xy 1 year ago
parent 680b9b7007
commit 1e32945654

@ -1,17 +1,23 @@
//api集合
let apiApp = {
login: '/api/mobile/user/applet-login',
userInfo: '/api/mobile/user/get-user-info',
}
// 此处第二个参数vm就是我们在页面使用的this你可以通过vm获取vuex等操作
const install = (Vue, vm) => {
//api方法
//
const login = (params = {}) => vm.$u.get(apiApp.login, params)
const getUserInfo = () => vm.$u.get(apiApp.userInfo)
// end
// 将各个定义的接口名称统一放进对象挂载到vm.$u.api(因为vm就是this也即this.$u.api)下
vm.$u.api = {
login,
getUserInfo
};
}

@ -10,8 +10,8 @@ const install = (Vue, vm) => {
showLoading: true, // 是否显示请求中的loading
loadingMask: true, // 展示loading的时候是否给一个透明的蒙层防止触摸穿透
loadingText: '加载中', // 请求loading中的文字提示
loadingTime: 800,
originalData: false, // 是否在拦截器中返回服务端的原始数据
loadingTime: 2000,
originalData: true, // 是否在拦截器中返回服务端的原始数据
// 设置自定义头部content-type
header: {
'content-type': 'application/json;charset=UTF-8'
@ -22,48 +22,46 @@ const install = (Vue, vm) => {
Vue.prototype.$u.http.interceptor.request = (config) => {
console.log('config-http', config)
// 引用token
// 方式一存放在vuex的token假设使用了uView封装的vuex方式
// 见https://uviewui.com/components/globalVariable.html
config.header.token = vm.vuex_token;
// 方式二如果没有使用uView封装的vuex方法那么需要使用$store.state获取
// config.header.token = vm.$store.state.token;
// 方式三如果token放在了globalData通过getApp().globalData获取
// config.header.token = getApp().globalData.username;
// 方式四如果token放在了Storage本地存储中拦截是每次请求都执行的
// 所以哪怕您重新登录修改了Storage下一次的请求将会是最新值
// const token = uni.getStorageSync('token');
// config.header.token = token;
// 可以对某个url进行特别处理此url参数为this.$u.get(url)中的url值
if (config.url == '/test/jam') config.header.noToken = true;
// 最后需要将config进行return
if (vm.vuex_token) {
config.header['Authorization'] = `Bearer ${vm.vuex_token}`;
}
return config;
// 如果return一个false值则会取消本次请求
// if(config.url == '/user/rest') return false; // 取消某次请求
}
// 响应拦截,如配置,每次请求结束都会执行本方法
Vue.prototype.$u.http.interceptor.response = (res) => {
console.log('res-http',res)
if (res.code == 200) {
// res为服务端返回值可能有coderesult等字段
// 这里对res.result进行返回将会在this.$u.post(url).then(res => {})的then回调中的res的到
// 如果配置了originalData为true请留意这里的返回值
return res.result;
} else if (res.code == 201) {
// 假设201为token失效这里跳转登录
// vm.$u.toast('验证失败,请重新登录');
// setTimeout(() => {
// // 此为uView的方法详见路由相关文档
// vm.$u.route('/pages/user/login')
// }, 1500)
return false;
if (res.statusCode === 200) {
if (res.data.hasOwnProperty("errcode")) {
if (res.data.errcode === 40001) {
Vue.prototype.$u.debounce(() => {
uni.showToast({
icon: "none",
title: "登陆过期,请重新登录"
})
setTimeout(() => {
uni.redirectTo({
url: '/pages/login/login'
})
}, 1500)
})
} else {
uni.showToast({
icon: "none",
title: "系统错误"
})
return false
}
} else
return res.data;
} else {
// 如果返回false则会调用Promise的reject回调
// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中res为服务端的返回值
uni.showToast({
icon: "fail",
title: "系统错误"
})
return false;
}
}

@ -50,7 +50,7 @@
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "",
"appid" : "wx5d24dbf08480c2c0",
"setting" : {
"urlCheck" : false
},

@ -78,17 +78,20 @@ export default {
}
uni.login({
provider: 'weixin', //使
success: (loginRes) => {
console.log(loginRes);
this.$u.api.login({
code: loginRes.code
}).then(res => {
console.log(res)
})
// this.$u.route({
// type: 'switchTab',
// url: '/pages/index/index'
// })
success: async (loginRes) => {
try {
const {token} = await this.$u.api.login({
code: loginRes.code
})
this.$u.vuex('vuex_token', token)
const {user} = await this.$u.api.getUserInfo()
this.$u.vuex('vuex_user', user)
this.$u.route({
type: 'switchTab',
url: '/pages/index/index'
})
} catch (err) {
}
}
});
},

@ -12,7 +12,7 @@ try{
}
// 需要永久存储且下次APP启动需要取出的在state中的变量名
let saveStateKeys = [];
let saveStateKeys = ['vuex_token', 'vuex_user'];
// 保存变量到本地存储中
const saveLifeData = function(key, value){
@ -34,6 +34,8 @@ const store = new Vuex.Store({
// 加上vuex_前缀是防止变量名冲突也让人一目了然
// 如果vuex_version无需保存到本地永久存储无需lifeData.vuex_version方式
vuex_version: '1.0.0',
vuex_token: '',
vuex_user: {},
vuex_location: {
latitude: '',

Loading…
Cancel
Save