import Vue from 'vue' import Vuex from 'vuex' import { isObject, isArray } from '@/utils/is' let qnToken = null, /** * @value avatar 头像 * @value name 用户名 * @value userId 用户id * @value mobile 手机号 */ userInfo = null, openId = null const userInfoParams = ['name', 'userId', 'mobile', 'avatar'] try { openId = uni.getStorageSync('openId') qnToken = uni.getStorageSync('qnToken') userInfo = uni.getStorageSync('userInfo') if (userInfo) { userInfo = JSON.parse(userInfo) } } catch (e) { console.warn('初始化错误:', e) } Vue.use(Vuex) let store = null if (!store) { store = new Vuex.Store({ state: { openId: openId || '', qnToken: qnToken || '', // token userInfo: userInfo || {}, // 用户信息 nextPage: { name: '', data: {} }, /** * 监听cache的type即可,每次取值后都必须调用commit('resetCache') */ cache: { type: 'none', data: null } }, mutations: { setCache(state, { type, data }) { state.cache.type = type state.cache.data = data }, resetCache(state) { state.cache.type = 'none' state.cache.data = null }, setOpenId(state, token) { try { uni.setStorageSync('openId', token) state.openId = token } catch (e) { console.warn('更改openId失败:', e) } }, removeOpenId(state) { try { uni.removeStorageSync('openId') state.openId = '' } catch (e) { console.warn('删除openId失败:', e) } }, setToken(state, token) { try { uni.setStorageSync('qnToken', token) console.log('设置token成功') state.qnToken = token } catch (e) { console.warn('更改token失败:', e) } }, removeToken(state) { try { uni.removeStorageSync('qnToken') console.log('删除token') state.qnToken = '' } catch (e) { console.warn('删除token失败:', e) } }, setUserInfo(state, userInfo) { if (!isObject(userInfo)) { console.warn('userInfo必须是对象') return } for (let param of userInfoParams) { if (userInfo[param] === undefined) { console.warn('userInfo必须包含' + param + '属性') return } } try { uni.setStorageSync('userInfo', JSON.stringify(userInfo)) state.userInfo = userInfo } catch (e) { console.warn('设置userInfo失败:', e) } }, /** * 更改当前用户信息 * @param {*} state 状态 * @param {arr} map 以key-value形式存储的数组 * @value key 需要更改的key * @value value 更改后的值 */ changeUserInfo(state, map) { if (!isArray(map)) { console.warn('map必须是数组') return } let userInfo = state.userInfo map.forEach((item) => { if (userInfoParams.includes(item.key)) { userInfo[item.key] = item.value } }) try { uni.setStorageSync('userInfo', JSON.stringify(userInfo)) state.userInfo = userInfo } catch (e) { console.warn('更改userInfo失败:', e) } }, removeUserInfo(state) { try { uni.removeStorageSync('userInfo') state.userInfo = {} } catch (e) { console.warn('删除userInfo失败:', e) } }, setNextPage(state, nextPage) { if (!isObject(nextPage)) { console.warn('nextPage必须是对象') return } state.nextPage.name = nextPage.name || '' state.nextPage.data = nextPage.data || {} }, removeNextPage(state) { state.nextPage.name = '' state.nextPage.data = {} } }, actions: { logout({ commit }) { commit('removeOpenId') commit('removeToken') commit('removeUserInfo') } } }) } export default store