【前端】云工厂的纸掌柜app
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.

254 lines
7.4 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,
/**
* @value id 企业id
* @value supplierId 供应商id
* @value name 企业名称
* @value fddEnterpriseStatus 法大大认证状态 。1未认证,2认证进行中,3认证成功,4认证失败
* @value isVip 是否是vip企业
* @value vipExpireTime vip到期时间,可能为undefined
*/
supplierInfo = null,
uecToken = null,
searchHistory = null
const supplierInfoParams = ['id', 'name', 'fddEnterpriseStatus', 'supplierId', 'isVip', 'vipExpireTime']
const userInfoParams = ['name', 'userId', 'mobile', 'avatar']
try {
uecToken = uni.getStorageSync('uecToken')
qnToken = uni.getStorageSync('qnToken')
userInfo = uni.getStorageSync('userInfo')
searchHistory = uni.getStorageSync('searchHistory')
if (searchHistory) {
searchHistory = JSON.parse(searchHistory)
}
if (userInfo) {
userInfo = JSON.parse(userInfo)
}
supplierInfo = uni.getStorageSync('supplierInfo')
if (supplierInfo) {
supplierInfo = JSON.parse(supplierInfo)
}
} catch (e) {
console.warn('初始化错误:', e)
}
Vue.use(Vuex)
let store = null
if (!store) {
store = new Vuex.Store({
state: {
uecToken: uecToken || '',
qnToken: qnToken || '', // token
userInfo: userInfo || {}, // 用户信息
supplierInfo: supplierInfo || {}, // 纸盘商信息
nextPage: {
name: '',
data: {}
},
searchHistory: searchHistory || []
},
mutations: {
setUecToken(state, token) {
try {
uni.setStorageSync('uecToken', token)
state.uecToken = token
} catch (e) {
console.warn('更改uecToken失败:', e)
}
},
removeUecToken(state) {
try {
uni.removeStorageSync('uecToken')
state.uecToken = ''
} catch (e) {
console.warn('删除uecToken失败:', 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 i = 0; i < userInfoParams.length; i++) {
if (userInfo[userInfoParams[i]] === undefined) {
console.warn('userInfo必须包含' + userInfoParams[i] + '属性')
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)
}
},
setSupplierInfo(state, supplierInfo) {
if (!isObject(supplierInfo)) {
console.warn('supplierInfo必须是对象')
return
}
for (let i = 0; i < supplierInfoParams.length; i++) {
if (supplierInfo[supplierInfoParams[i]] === undefined) {
console.warn(`supplierInfo必须包含${supplierInfoParams[i]}`)
return
}
}
try {
uni.setStorageSync('supplierInfo', JSON.stringify(supplierInfo))
state.supplierInfo = supplierInfo
} catch (e) {
console.warn('设置supplierInfo失败:', e)
}
},
/**
* 更改当前供应商信息
* @param {*} state 状态
* @param {arr} map 以key-value形式存储的数组
* @value key 需要更改的key
* @value value 更改后的值
*/
changeSupplierInfo(state, map) {
if (!isArray(map)) {
console.warn('map必须是数组')
return
}
let supplierInfo = state.supplierInfo
map.forEach((item) => {
if (supplierInfoParams.includes(item.key)) {
supplierInfo[item.key] = item.value
}
})
try {
uni.setStorageSync('supplierInfo', JSON.stringify(supplierInfo))
state.supplierInfo = supplierInfo
} catch (e) {
console.warn('更改supplierInfo失败:', e)
}
},
removeSupplierInfo(state) {
try {
uni.removeStorageSync('supplierInfo')
state.supplierInfo = {}
} catch (e) {
console.warn('删除supplierInfo失败:', 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 = {}
},
setSearchHistory(state, searchHistory) {
if (!isArray(searchHistory)) {
console.warn('searchHistory必须是数组')
return
}
try {
uni.setStorageSync('searchHistory', JSON.stringify(searchHistory))
state.searchHistory = searchHistory
} catch (e) {
console.warn('更改searchHistory失败:', e)
}
},
clearSearchHistory(state) {
try {
uni.removeStorageSync('searchHistory')
state.searchHistory = []
} catch (e) {
console.warn('删除searchHistory失败:', e)
}
}
},
actions: {
logout({ commit }) {
console.log('logout')
commit('removeUecToken')
commit('removeToken')
commit('removeUserInfo')
commit('removeSupplierInfo')
},
addSearchHistory({ commit, state }, searchHistory) {
const arr = [...state.searchHistory] // 单层数组直接解构
let index = arr.findIndex((item) => item === searchHistory)
if (index > -1) {
arr.splice(index, 1)
}
arr.unshift(searchHistory)
if (arr.length > 10) {
arr = arr.slice(0, 10)
}
commit('setSearchHistory', arr)
}
}
})
}
export default store