【前端】印包客H5
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.

201 lines
5.1 KiB

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,
uecToken = null,
/**
* @value id 当前被分享的供应商账号id
*/
userId = null,
/**
* @value shareExpireTime 申请验厂通过的过期时间
*/
shareExpireTime = 0
const userInfoParams = ['name', 'userId', 'mobile', 'avatar']
try {
uecToken = uni.getStorageSync('uecToken')
qnToken = uni.getStorageSync('qnToken')
userId = uni.getStorageSync('userId')
shareExpireTime = uni.getStorageSync('shareExpireTime')
userInfo = uni.getStorageSync('userInfo')
if (userInfo) {
userInfo = JSON.parse(userInfo)
}
} catch (e) {
console.error('初始化错误:', e)
}
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
uecToken: uecToken || '',
qnToken: qnToken || '', // token
userId: userId || '', // 供应商账号id
userInfo: userInfo || {}, // 用户信息
shareExpireTime: shareExpireTime || 0, // 申请验厂通过的过期时间
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
},
setUecToken(state, token) {
try {
uni.setStorageSync('uecToken', token)
state.uecToken = token
} catch (e) {
console.error('更改uecToken失败:', e)
}
},
removeUecToken(state) {
try {
uni.removeStorageSync('uecToken')
state.uecToken = ''
} catch (e) {
console.error('删除uecToken失败:', e)
}
},
setToken(state, token) {
try {
uni.setStorageSync('qnToken', token)
state.qnToken = token
} catch (e) {
console.error('更改token失败:', e)
}
},
removeToken(state) {
try {
uni.removeStorageSync('qnToken')
state.qnToken = ''
} catch (e) {
console.error('删除token失败:', e)
}
},
setUserInfo(state, userInfo) {
if (!isObject(userInfo)) {
console.error('userInfo必须是对象')
return
}
for (let userInfoParam of userInfoParams) {
if (userInfo[userInfoParam] === undefined) {
console.error('userInfo必须包含' + userInfoParam + '属性')
return
}
}
try {
uni.setStorageSync('userInfo', JSON.stringify(userInfo))
state.userInfo = userInfo
} catch (e) {
console.error('设置userInfo失败:', e)
}
},
/**
* 更改当前用户信息
* @param {*} state 状态
* @param {arr} map 以key-value形式存储的数组
* @value key 需要更改的key
* @value value 更改后的值
*/
changeUserInfo(state, map) {
if (!isArray(map)) {
console.error('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.error('更改userInfo失败:', e)
}
},
removeUserInfo(state) {
try {
uni.removeStorageSync('userInfo')
state.userInfo = {}
} catch (e) {
console.error('删除userInfo失败:', e)
}
},
setNextPage(state, nextPage) {
if (!isObject(nextPage)) {
console.error('nextPage必须是对象')
return
}
state.nextPage.name = nextPage.name || ''
state.nextPage.data = nextPage.data || {}
},
removeNextPage(state) {
state.nextPage.name = ''
state.nextPage.data = {}
},
setUserId(state, id) {
try {
uni.setStorageSync('userId', id)
state.userId = id
} catch (e) {
console.error('更改userId失败:', e)
}
},
removeUserId(state) {
try {
uni.removeStorageSync('userId')
state.userId = ''
} catch (e) {
console.error('删除userId失败:', e)
}
},
setShareExpireTime(state, timeStamp) {
try {
uni.setStorageSync('shareExpireTime', timeStamp)
state.shareExpireTime = timeStamp
} catch (e) {
console.error('更改shareExpireTime失败:', e)
}
},
removeShareExpireTime(state) {
try {
uni.removeStorageSync('shareExpireTime')
state.shareExpireTime = 0
} catch (e) {
console.error('删除shareExpireTime失败:', e)
}
}
},
actions: {
logout({ commit }) {
commit('removeUecToken')
commit('removeToken')
commit('removeUserInfo')
}
}
})
export default store