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.
240 lines
5.5 KiB
240 lines
5.5 KiB
2 years ago
|
// 用户数据模块
|
||
|
import http from '@/shopro/request/index'
|
||
|
import store from '@/shopro/store'
|
||
|
import tools from '@/shopro/utils/tools'
|
||
|
import wechat from '@/shopro/wechat/wechat'
|
||
|
import share from '@/shopro/share'
|
||
|
|
||
|
const state = {
|
||
|
token: uni.getStorageSync("token") || "",
|
||
|
isLogin: uni.getStorageSync("isLogin") || false, // 是否登陆
|
||
|
userInfo: uni.getStorageSync("userInfo") || {}, // 用户信息
|
||
|
agentInfo: {}, //分销商信息
|
||
|
userData: {}, //用户其他相关信息
|
||
|
subscribeMessageIdsMap: [], //小程序订阅消息模板ids
|
||
|
authType: '' // smsLogin:手机号登录注册, accountLogin:密码登录, forgotPwd:忘记密码, changePwd:修改密码, bindMobile:绑定手机号
|
||
|
}
|
||
|
|
||
|
const getters = {
|
||
|
token: state => state.token,
|
||
|
isLogin: state => state.isLogin,
|
||
|
userInfo: state => state.userInfo,
|
||
|
agentInfo: state => state.agentInfo,
|
||
|
userOtherData: state => state.userData,
|
||
|
authType: state => state.authType,
|
||
|
subscribeMessageIdsMap: state => state.subscribeMessageIdsMap
|
||
|
}
|
||
|
|
||
|
const actions = {
|
||
|
// 获取用户信息
|
||
|
getUserInfo({
|
||
|
commit,
|
||
|
dispatch,
|
||
|
getters,
|
||
|
state
|
||
|
}, token = '') {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
token && uni.setStorageSync('token', token);
|
||
|
http('user.info').then(res => {
|
||
|
if (res.code === 1) {
|
||
|
let lastLoginStatus = getters.isLogin;
|
||
|
commit('userInfo', res.data);
|
||
|
commit('isLogin', true);
|
||
|
dispatch('showAuthModal', '');
|
||
|
!lastLoginStatus && share.setShareInfo();
|
||
|
// 存在分享信息 添加分享记录
|
||
|
let spm = uni.getStorageSync('spm');
|
||
|
if (spm) {
|
||
|
http('common.shareAdd', {
|
||
|
spm: spm
|
||
|
});
|
||
|
uni.removeStorageSync('spm');
|
||
|
}
|
||
|
resolve(res.data)
|
||
|
}
|
||
|
|
||
|
}).then(() => {
|
||
|
// 只有在登录的时候请求购物车信息,订单信息,获取登录信息之后。
|
||
|
token && dispatch('getCartList');
|
||
|
token && dispatch('getUserData');
|
||
|
})
|
||
|
.catch(e => {
|
||
|
reject(e)
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
// 用户其他相关信息
|
||
|
getUserData({
|
||
|
commit
|
||
|
}) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
http('user.userData').then(res => {
|
||
|
commit('USER_DATA', res.data);
|
||
|
resolve(res)
|
||
|
}).catch(e => {
|
||
|
reject(e)
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
|
||
|
// 获取分销商身份信息
|
||
|
getAgent({
|
||
|
commit
|
||
|
}) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
http('commission.auth').then(res => {
|
||
|
if (res.code === 1) {
|
||
|
commit('AGENT_INFO', res.data.data);
|
||
|
}
|
||
|
resolve(res)
|
||
|
}).catch(e => {
|
||
|
reject(e)
|
||
|
});
|
||
|
})
|
||
|
},
|
||
|
|
||
|
|
||
|
// 自动登录
|
||
|
async autoLogin({
|
||
|
getters,
|
||
|
dispatch
|
||
|
}) {
|
||
|
if (getters.initWechat?.autologin && !getters.isLogin) { // 微信开启自动登录 并且当前未登录,进入自动登录流程
|
||
|
let token = '';
|
||
|
|
||
|
// #ifdef H5
|
||
|
wechat.login();
|
||
|
// #endif
|
||
|
|
||
|
// #ifdef MP-WEIXIN
|
||
|
token = await wechat.getWxMiniProgramSessionKey(true)
|
||
|
// #endif
|
||
|
|
||
|
token && await dispatch('getUserInfo', token);
|
||
|
} else if (getters.isLogin) { // 已经登录,直接获取用户信息
|
||
|
await dispatch('getUserInfo');
|
||
|
}
|
||
|
share.setShareInfo();
|
||
|
// 初始化小程序session_key
|
||
|
// #ifdef MP-WEIXIN
|
||
|
if (!getters.initWechat?.autologin) {
|
||
|
await wechat.getWxMiniProgramSessionKey(false);
|
||
|
}
|
||
|
// #endif
|
||
|
},
|
||
|
|
||
|
// 登录弹窗控制
|
||
|
showAuthModal({
|
||
|
commit
|
||
|
}, type = 'accountLogin') {
|
||
|
commit('AUTH_TYPE', type);
|
||
|
},
|
||
|
|
||
|
// 退出登录
|
||
|
logout({
|
||
|
commit,
|
||
|
dispatch
|
||
|
}) {
|
||
|
uni.getStorageSync('token') && http('user.logout');
|
||
|
commit('token', "");
|
||
|
uni.removeStorageSync('chatSessionId');
|
||
|
commit('isLogin', false);
|
||
|
commit('userInfo', {});
|
||
|
commit('CART_LIST', []);
|
||
|
commit('USER_DATA', {});
|
||
|
// 重置全局分享信息
|
||
|
share.setShareInfo();
|
||
|
},
|
||
|
|
||
|
// 获取订阅消息模板ids;
|
||
|
getMessageIds({
|
||
|
commit,
|
||
|
state
|
||
|
}) {
|
||
|
http('user.messageIds').then(res => {
|
||
|
commit('formatMessage', res.data)
|
||
|
Promise.resolve(res.data)
|
||
|
}).catch(e => {
|
||
|
Promise.reject(e)
|
||
|
})
|
||
|
|
||
|
},
|
||
|
}
|
||
|
|
||
|
const mutations = {
|
||
|
token(state, payload) {
|
||
|
state.token = payload;
|
||
|
uni.setStorageSync("token", payload);
|
||
|
},
|
||
|
// 登录态
|
||
|
isLogin(state, data) {
|
||
|
state.isLogin = data;
|
||
|
uni.setStorageSync('isLogin', data);
|
||
|
},
|
||
|
// 用户信息
|
||
|
userInfo(state, data) {
|
||
|
state.userInfo = data;
|
||
|
uni.setStorageSync("userInfo", data);
|
||
|
},
|
||
|
// 分销商信息
|
||
|
AGENT_INFO(state, data) {
|
||
|
state.agentInfo = data;
|
||
|
},
|
||
|
// 小程序订阅消息模板ids
|
||
|
MESSAGE_IDS(state, data) {
|
||
|
state.subscribeMessageIds = data;
|
||
|
},
|
||
|
USER_DATA(state, data) {
|
||
|
state.userData = data;
|
||
|
},
|
||
|
AUTH_TYPE(state, data) {
|
||
|
data ? uni.hideTabBar() : uni.showTabBar();
|
||
|
state.authType = data;
|
||
|
},
|
||
|
|
||
|
// 订阅消息
|
||
|
subscribeMessage(state, type) {
|
||
|
let arr = state.subscribeMessageIdsMap[type];
|
||
|
arr.length && uni.requestSubscribeMessage({
|
||
|
tmplIds: arr,
|
||
|
success: (res) => {
|
||
|
console.log(res);
|
||
|
},
|
||
|
fail: (err) => {
|
||
|
console.log(err);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// 解析订阅消息数据
|
||
|
formatMessage(state, messageIdsObj) {
|
||
|
// 各场景下用到的订阅模板
|
||
|
let typeMap = {
|
||
|
'result': ['order_sended', 'wallet_change'], //支付成功
|
||
|
'grouponResult': ['groupon_success', 'groupon_fail', 'order_sended'], //拼团支付成功后
|
||
|
'aftersale': ['refund_agree', 'aftersale_change', 'wallet_change'], //点击售后
|
||
|
'wallet': ['score_change', 'wallet_apply', 'wallet_change'], //提现提醒
|
||
|
'store': ['store_order_new'], //门店新订单通知
|
||
|
'storeApply': ['store_apply'] //门店申请通知
|
||
|
}
|
||
|
let idsMap = {}
|
||
|
Object.keys(typeMap).forEach(key => {
|
||
|
idsMap[key] = []
|
||
|
typeMap[key].forEach(item => {
|
||
|
idsMap[key].push(messageIdsObj[item])
|
||
|
})
|
||
|
})
|
||
|
state.subscribeMessageIdsMap = idsMap
|
||
|
},
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
export default {
|
||
|
state,
|
||
|
mutations,
|
||
|
actions,
|
||
|
getters
|
||
|
}
|