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' import { getScanVinQty } from '@/api/car.js' import { xprhStoreApplyFindLast } from '@/api/xprh.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_permCodes: [], // 权限码 vuex_openid: "", vuex_nowStaffData: null, // 员工临时数据 vuex_nowRoleInfo: null, // 角色 vuex_vinScanNums:null, // 扫描次数 vuex_scanMaxNums: 10, // 最大扫描次数 vuex_storeAuthInfo: null // 门店认证状态信息 }, getters:{ getOpeid(state){ return state.vuex_openid } }, mutations: { login(state, data) { console.log(data,'-----loginSucees-----') state.hasLogin = true; state.vuex_userInfo = data.auth_user; // VISITOR:游客,EMPLOYEE:雇员 data.auth_user['identifyType'] = data.sysUserFlag == '0' ? 'VISITOR' : 'EMPLOYEE'; data.auth_user['sysUserFlag'] = data.sysUserFlag; uni.setStorageSync('token', data.access_token); uni.setStorageSync('userInfo', data.auth_user); // 权限码,游客没有 const permCodes = data.sysUserFlag == '0' ? null : data.auth_user.permCodes.filter(item => item.indexOf("_mini")>=0); state.vuex_permCodes = permCodes; uni.setStorageSync('permCodes', permCodes); }, logout(state) { console.log(state,'----logout------') state.hasLogin = false; uni.removeStorageSync('token') uni.removeStorageSync('userInfo') uni.removeStorageSync('permCodes') state.vuex_userInfo = null state.vuex_permCodes = null }, openId(state,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') }, setScanNums(state,nums) { state.vuex_vinScanNums = nums }, setStoreAuthInfo(state,obj) { state.vuex_storeAuthInfo = obj } }, actions: { // 获取门店审核 getSotreAuth(context,mobile){ xprhStoreApplyFindLast({contactPhone: mobile}).then(res => { console.log(res) context.commit('setStoreAuthInfo',res.data || null) }) }, // 获取查询次数 getScanNums(context,provider){ getScanVinQty().then(res => { context.commit('setScanNums',res.data||0) }) }, 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,callback){ console.log(callback,'--checkLogin--') checkLogin().then(res => { if(res.status == '200'){ context.commit('setHasLogin',true) callback&&callback() }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