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','vuex_uuidTempData','vuex_cartList']; // 保存变量到本地存储中 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_rewardRule: null, // 红包活动信息 vuex_settleRecordDetail: null, // 结算记录详情 vuex_settleOrderDetail: null, // 结算记录订单详情 vuex_shelfChoosePart: [], // 数字货架临配选择配件 vuex_allLookUp: [], // 数据字典 vuex_paymentTypeList: [], // 支付方式 vuex_priceTypeList:[], // 价格类型 vuex_videoTypeList:[], // 视频类型 vuex_showPrice:[false,'',false], // 价格显示规则 vuex_userInfo: null, // 用户信息 vuex_userPhoto: null, // 用户头像 vuex_permCodes: [], // 权限码 vuex_openid: "", vuex_nowStaffData: null, // 员工临时数据 vuex_nowRoleInfo: null, // 角色 vuex_vinScanNums:null, // 扫描次数 vuex_scanMaxNums: 10, // 最大扫描次数 vuex_storeAuthInfo: null ,// 门店认证状态信息 vuex_tempData: null, // 临时数据 vuex_configPrice: null, // 价格显示配置 vuex_uuidTempData: lifeData.vuex_uuidTempData ? lifeData.vuex_uuidTempData : null, // 唯一码临时数据 vuex_cartList: lifeData.vuex_cartList ? lifeData.vuex_cartList : [], // 购物车列表按活动缓存 vuex_tabBarList: [ { "pagePath": "/pages/index/index", "iconPath": "/static/tab/tab_home_normal.png", "selectedIconPath": "/static/tab/tab_home_pressed.png", "text": "首页", 'customIcon': false, }, { 'iconPath': "/static/tab/tab_scan_normal.png", 'selectedIconPath': "/static/tab/tab_scan_pressed.png", 'text': '扫描VIN', 'customIcon': false, 'midButton': false }, { "pagePath": "/pages/cart/index", "iconPath": "/static/tab/tab_cart_normal.png", "selectedIconPath": "/static/tab/tab_cart_pressed.png", "text": "购物车", 'customIcon': false, }, { "pagePath": "/pages/morePage/morePage", "iconPath": "/static/tab/tab_personal_normal.png", "selectedIconPath": "/static/tab/tab_personal_pressed.png", "text": "我的", 'customIcon': false, } ] }, getters:{ getOpeid(state){ return state.vuex_openid } }, mutations: { login(state, data) { console.log(data,'-----loginSucees-----') state.hasLogin = true; state.vuex_userInfo = data.auth_user; state.vuex_userPhoto = data.auth_user.extInfo&&data.auth_user.extInfo.userExtInfo ? data.auth_user.extInfo.userExtInfo.headImage : '' uni.setStorageSync('userPhoto', state.vuex_userPhoto); // 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); // 删除促销模块 const promoIndex = state.vuex_tabBarList.findIndex(item => item.text == '促销') if(promoIndex > -1){ state.vuex_tabBarList.splice(promoIndex,1) } // 扫描按钮不局中 const scanTab = state.vuex_tabBarList.find(item => item.text == '扫描VIN') if(scanTab){ scanTab.iconPath = "/static/tab/tab_scan_normal.png" scanTab.midButton = false } }, logout(state) { console.log(state,'----logout------') state.hasLogin = false; uni.removeStorageSync('token') uni.removeStorageSync('userInfo') uni.removeStorageSync('permCodes') uni.removeStorageSync('userPhoto') state.vuex_storeShelf = null state.vuex_userInfo = null state.vuex_userPhoto = null state.vuex_permCodes = null state.vuex_storeAuthInfo = null state.vuex_rewardRule = 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) if(res.status == 200){ const showStoreAuthTips = uni.getStorageSync('showStoreAuthTips') if(res.data&&res.data.auditStatus=='PASS'&&!showStoreAuthTips){ uni.setStorageSync('showStoreAuthTips',1) uni.showModal({ title: '提示', content: '门店认证审核已通过,请重新登录!', confirmText: '去登录', showCancel: false, success(e) { console.log(e) if (e.confirm) { context.commit('logout'); uni.navigateTo({ url: '/pages/login/login' }); } } }) } }else{ if(res.errCode == 'ACCOUNT_0001'){ context.commit('logout'); uni.navigateTo({ url: '/pages/login/login' }); } } }) }, // 获取查询次数 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') uni.$emit("refashHome") } }) }, // 检测是否登录 checkLogin(context,callback){ console.log(callback,'--checkLogin--') checkLogin().then(res => { if(res.status == '200'){ context.commit('setHasLogin',true) }else{ context.commit('logout') } callback&&callback(res.status == '200') }) }, // 检测是否开启定位 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