import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) import {code2Session, logout, checkLogin} from '@/api/login.js' import {getLookUpDatas} from '@/api/data.js' let lifeData = {}; try{ // 尝试获取本地是否存在lifeData变量,第一次启动APP时是不存在的 lifeData = uni.getStorageSync('lifeData'); }catch(e){ } // 需要永久存储,且下次APP启动需要取出的,在state中的变量名 let saveStateKeys = ['vuex_carBrandList']; // 保存变量到本地存储中 const saveLifeData = function(key, value){ // 判断变量名是否在需要存储的数组中 if(saveStateKeys.indexOf(key) != -1) { // 获取本地存储的lifeData对象,将变量添加到对象中 let tmp = uni.getStorageSync('lifeData'); // 第一次打开APP,不存在lifeData变量,故放一个{}空对象 tmp = tmp ? tmp : {}; tmp[key] = value; // 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中 uni.setStorageSync('lifeData', tmp); } } const store = new Vuex.Store({ state: { /** * 是否需要强制登录 */ forcedLogin: false, hasLogin: false, isOpenLocation: false, // 用户是否开启授权开启定位 // 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量 // 加上vuex_前缀,是防止变量名冲突,也让人一目了然 vuex_carBrandList: lifeData.vuex_carBrandList ? lifeData.vuex_carBrandList : [] ,// 车型品牌数据 vuex_carType: {}, // 选择的车辆品牌 deviceNo: "", vuex_storeShelf: null, // 数字货架是否启用 vuex_settleRecordDetail: null, // 结算记录详情 vuex_settleOrderDetail: null, // 结算记录订单详情 vuex_shelfChoosePart: [], // 数字货架临配选择配件 vuex_allLookUp: [], // 数据字典 vuex_paymentTypeList: [], // 支付方式 vuex_userInfo: null, vuex_openid: "" }, getters:{ getOpeid(state){ return state.vuex_openid } }, mutations: { login(state, data) { console.log(data) state.hasLogin = true; uni.setStorageSync('token', data.access_token); uni.setStorageSync('userInfo', data.auth_user); state.vuex_userInfo = data.auth_user }, logout(state) { state.hasLogin = false; uni.removeStorageSync('token') uni.removeStorageSync('userInfo') state.vuex_userInfo = null }, openId(state,id) { console.log(id,'----------') state.vuex_openid = id uni.setStorageSync('openid', id); }, $uStore(state, payload) { // 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1 let nameArr = payload.name.split('.'); let saveKey = ''; let len = nameArr.length; if(nameArr.length >= 2) { let obj = state[nameArr[0]]; for(let i = 1; i < len - 1; i ++) { obj = obj[nameArr[i]]; } obj[nameArr[len - 1]] = payload.value; saveKey = nameArr[0]; } else { // 单层级变量,在state就是一个普通变量的情况 state[payload.name] = payload.value; saveKey = payload.name; } // 保存变量到本地,见顶部函数定义 saveLifeData(saveKey, state[saveKey]) }, isOpenLocation(state,isOpenLocation){ state.isOpenLocation = isOpenLocation }, setHasLogin(state,isLogin){ state.hasLogin = isLogin; state.vuex_userInfo = uni.getStorageSync('userInfo') } }, actions: { wxLogin(context,provider){ uni.login({ provider: provider, success(result) { console.log(result) if (result.code) { code2Session({ code: result.code }).then(res => { console.log(res) if (res.status === '200') { context.commit('openId',res.data) }; }); } } }); }, // 登出 userLogout(context,data){ logout().then(res => { console.log(res,'out') if(res.status == 200){ context.commit('logout') } }) }, // 检测是否登录 checkLogin(context,data){ checkLogin().then(res => { if(res.status == '200'){ context.commit('setHasLogin',true) }else{ context.commit('logout') } }) }, // 检测是否开启定位 checkIsOpenLocation(context,data) { uni.authorize({ scope: 'scope.userLocation', success:()=> { // 判断手机设置是否开启对微信的定位服务 const systemInfo = uni.getSystemInfoSync() if(systemInfo.locationAuthorized) { context.commit('isOpenLocation', true) } else { context.commit('isOpenLocation', false) } }, fail() { uni.getSetting({ success(res) { if(!res.authSetting['scope.userLocation'] || !res.authSetting['scope.userLocationBackground']){ context.commit('isOpenLocation', false) } else { context.commit('isOpenLocation', true) } }, fail() { context.commit('isOpenLocation', false) } }) } }) }, } }) export default store