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.
108 lines
2.5 KiB
108 lines
2.5 KiB
import { login } from 'api/user';
|
|
const STORAGE_KEY = 'user-info';
|
|
const TOKEN_KEY = 'token';
|
|
export default {
|
|
namespaced: true,
|
|
state: () => {
|
|
return {
|
|
// 用户 token
|
|
token: uni.getStorageSync(TOKEN_KEY) || '',
|
|
// 用户信息
|
|
userInfo: uni.getStorageSync(STORAGE_KEY) || {}
|
|
};
|
|
},
|
|
mutations: {
|
|
/**
|
|
* 保存 token 到 vuex
|
|
*/
|
|
setToken(state, token) {
|
|
state.token = token;
|
|
this.commit('user/saveToken');
|
|
},
|
|
/**
|
|
* 保存 token 到 本地存储
|
|
*/
|
|
saveToken(state) {
|
|
uni.setStorage({
|
|
key: TOKEN_KEY,
|
|
data: state.token
|
|
});
|
|
},
|
|
/**
|
|
* 删除 token
|
|
*/
|
|
removeToken(state) {
|
|
state.token = '';
|
|
this.commit('user/saveToken');
|
|
},
|
|
/**
|
|
* 保存 用户信息 到 vuex
|
|
*/
|
|
setUserInfo(state, userInfo) {
|
|
state.userInfo = userInfo;
|
|
this.commit('user/saveUserInfo');
|
|
},
|
|
/**
|
|
* 保存 用户信息 到 本地存储
|
|
*/
|
|
saveUserInfo(state) {
|
|
uni.setStorage({
|
|
key: STORAGE_KEY,
|
|
data: state.userInfo
|
|
});
|
|
},
|
|
/**
|
|
* 删除用户信息
|
|
*/
|
|
removeUserInfo(state) {
|
|
state.userInfo = {};
|
|
this.commit('user/saveUserInfo');
|
|
}
|
|
},
|
|
actions: {
|
|
/**
|
|
* 完成登录
|
|
*/
|
|
async login(context, userProfile) {
|
|
// 用户数据
|
|
const rawData = JSON.parse(userProfile.rawData);
|
|
const { data: res } = await login({
|
|
signature: userProfile.signature,
|
|
iv: userProfile.iv,
|
|
nickName: rawData.nickName,
|
|
gender: rawData.gender,
|
|
city: rawData.city,
|
|
province: rawData.province,
|
|
avatarUrl: rawData.avatarUrl
|
|
});
|
|
// 登录逻辑
|
|
this.commit('user/setToken', res.token);
|
|
this.commit('user/setUserInfo', JSON.parse(userProfile.rawData));
|
|
},
|
|
/**
|
|
* 退出登录
|
|
*/
|
|
logout(context) {
|
|
this.commit('user/removeToken');
|
|
this.commit('user/removeUserInfo');
|
|
},
|
|
/**
|
|
* 进行登录判定
|
|
*/
|
|
async isLogin(context) {
|
|
if (context.state.token) return true;
|
|
// 如果用户未登录,则引导用户进入登录页面
|
|
const [error, res] = await uni.showModal({
|
|
title: '登录之后才可以进行后续操作',
|
|
content: '立即跳转到登录页面?(登录后回自动返回当前页面哦~~~)'
|
|
});
|
|
const { cancel, confirm } = res;
|
|
if (confirm) {
|
|
uni.navigateTo({
|
|
url: '/subpkg/pages/login-page/login-page'
|
|
});
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
};
|