import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const debug = process.env.NODE_ENV !== 'production' import cookie from '@/utils/store/cookie' import { getUserInfo, getUser } from '@/api/user' import dialog from '@/utils/dialog' const loginKey = 'login_status' const vuexStore = new Vuex.Store({ state: { // 是否已经在授权页面 isAuthorizationPage: false, // 是否授权 isAuthorization: false, // 不建议从这里取 token,但是删除掉会影响其他的页面 token: cookie.get(loginKey) || null, userInfo: cookie.get('userInfo'), $deviceType: null, location: { latitude: '', longitude: '', }, storeItems: cookie.get('storeItems') || null, goName: cookie.get('goName') || '', }, mutations: { login(state, token, expires_time) { state.token = token cookie.set(loginKey, token, expires_time) }, logout(state) { console.log('清除数据') state.token = null state.userInfo = null cookie.clearAll() }, backgroundColor(state, color) { state.color = color // document.body.style.backgroundColor = color; }, updateUserInfo(state, userInfo) { state.userInfo = userInfo if (userInfo) { cookie.set('userInfo', userInfo) } else { cookie.set('userInfo', null) } }, updateAuthorizationPage(state, isAuthorizationPage) { state.isAuthorizationPage = isAuthorizationPage }, updateAuthorization(state, isAuthorization) { state.isAuthorization = isAuthorization }, updateDevicetype(state, $deviceType) { state.$deviceType = $deviceType }, setLocation(state, location) { state.location = location }, get_store(state, storeItems) { state.storeItems = storeItems cookie.set('storeItems', storeItems) }, get_to(state, goName) { state.goName = goName cookie.set('goName', goName) }, }, actions: { getLocation({ state, commit }, force) { uni.getLocation({ type: 'gcj02', success: function(res) { console.log(res) commit('setLocation', { longitude: res.longitude, latitude: res.latitude, }) }, }) }, userInfo({ state, commit }, force) { if (state.userInfo !== null && !force) { return Promise.resolve(state.userInfo) } return new Promise(reslove => { getUserInfo().then(res => { commit('updateUserInfo', res.data) reslove(res.data) }) }).catch(() => { uni.showToast({ title: '获取信息失败!', icon: 'none', duration: 2000, }) }) }, getUser({ state, commit }) { if (!state.token) { return Promise.reject('未获取到token') } return new Promise(reslove => { getUserInfo().then(res => { console.log(res) commit('updateUserInfo', res.data) reslove(res.data) }) }).catch(error => { console.log(error) uni.showToast({ title: '获取信息失败!', icon: 'none', duration: 2000, }) }) }, changeLogin({ state, commit }, data, date) { commit('login', data, date) }, setUserInfo({ state, commit }, user) { commit('updateUserInfo', user) }, changeAuthorizationPage({ state, commit }, index) { commit('updateAuthorizationPage', index) }, changeAuthorization({ state, commit }, index) { commit('updateAuthorization', index) }, }, getters: { isAuthorizationPage: state => state.isAuthorizationPage, isAuthorization: state => state.isAuthorization, token: state => state.token, isLogin: state => !!state.token, userInfo: state => state.userInfo || {}, location: state => state.location, storeItems: state => state.storeItems, goName: state => state.goName, $deviceType: state => state.$deviceType, }, strict: debug, }) export default vuexStore