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

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
}