/* * @Author: 小明丶 * @Date: 2019-08-19 15:23:17 * @LastEditors: 小明丶 * @LastEditTime: 2021-01-05 15:20:51 * @Description: */ import Vue from 'vue'; import Vuex from "vuex"; import md5 from 'blueimp-md5'; import mutations from "./mutations"; import test from "./module/test"; // 数据持久化到session的插件 import createPersistedState from 'vuex-persistedstate'; import { calcArea } from '@/utils/index'; import { SET_SESSION_ID, SET_FOOTER_NAV, SET_USER_PAGE, SET_USER_INFO, SET_AREA_LIST, SET_MESSAGE_CONUT, SET_INVITE_CODE, SET_BCAKCOLOR, SET_BCJBCOLORF, SET_BCJBCOLORB, SET_DEFAULT_BG_COLOR, SET_LAST_COLOR, HNORNX_TYPE, } from './mutations-types'; Vue.use(Vuex); export default new Vuex.Store({ plugins: [createPersistedState({ storage: window.sessionStorage })], state: { AppLoading: false, sessionId: '',//判断是否登录 footerNav: [], //底部导航 userPage: [], //管理页面 用户有的权限页面 userinfo: {}, //用户信息 areaList: {//地区列表 province_list: {}, //省 city_list: {}, //市 county_list: {}, //地区、县 }, msgCount: {}, inviteCode: '', //邀请码 lastColor: '#423d5d', backColor: '#896EDB',//主题色 backJbColorF: '#8F6AFF',//主题渐变色 backJbColorB: '#9459EC', defaultBgColor: 'linear-gradient(180deg, #554E7A, #423D5D)', }, getters: { orgType(state) { return state.userinfo.orgType }, orgId(state) { return state.userinfo.orgId } }, mutations, actions: { loginByAppToken({ commit, dispatch }, { vm, appToken, backUrl, next }) { sessionStorage.appToken = appToken; sessionStorage.backUrl = backUrl; let p = new Promise(function (resolve, reject) { Vue.prototype.$api.loginByMerToken({token: appToken }).then(res => { sessionStorage.jumpUrl = res.body.clientAccessDomain; let lastLoginMgrId = res.body.lastLoginMgrId let sessionId = res.body.sessionId commit(SET_SESSION_ID, sessionId); if (lastLoginMgrId) { resolve(lastLoginMgrId) } else { next('/app/changeMer') } }) }) p.then(lastLoginMgrId => { sessionStorage.sid = lastLoginMgrId; Vue.prototype.$api.getPowerInfo(lastLoginMgrId).then(res => { commit(SET_USER_INFO, res.body) next('/app/home') }) }) }, loginByToken({ commit, dispatch }, { vm, hjToken, next }) { localStorage.hjToken = hjToken Vue.prototype.$api.loginByToken({ token: hjToken }).then(res => { sessionStorage.jumpUrl = res.body.clientAccessDomain; let lastLoginMgrId = res.body.lastLoginMgrId let sessionId = res.body.sessionId commit(SET_SESSION_ID, sessionId); if (lastLoginMgrId) { dispatch('setUserMenu', { vm, lastLoginMgrId, next }) } else { if (next) { next('/mine/toggle-identity'); } else { vm.$router.push('/mine/toggle-identity'); } } }) }, loginByOpenId({ commit, dispatch }, { vm, loginType, verCode, mblNo, merId, wechatOpenId, userId, next }) { Vue.prototype.$api.loginByOpenId({ loginType: loginType, verCode: verCode, mblNo: mblNo, merId: merId, wechatOpenId: wechatOpenId, userId: userId }).then(res => { if (mblNo) { localStorage.sib_wx_mblNo = mblNo } sessionStorage.isLoginByOpenId = 1 localStorage.sib_wx_openId = wechatOpenId localStorage.storeList = JSON.stringify(res.body.storeList) // localStorage.sib_wx_mblNo = res.body.mblNo // localStorage.sib_wx_userId = res.body.userId commit(SET_SESSION_ID, res.body.sessionId); if (res.body.isRegister == 1) { vm.$router.push({ path: '/supplement', query: { storeList: JSON.stringify(res.body.storeList) } }) } else { if (res.body.storeList.length == 1) { let lastLoginMgrId = res.body.storeList[0].id dispatch('setUserMenu', { vm, lastLoginMgrId, next }) } if (res.body.storeList.length > 1) { vm.$router.push({ path: '/mine/toggle-identity', query: { title: '选择门店', storeList: JSON.stringify(res.body.storeList) } }) } } // if(res.body.storeList.length == 1){ // vm.$router.push({ // path:'/main/mine', // query:{ // isLoginByOpenId:1 // } // }) // } // if(res.body.storeList.length > 1){ // vm.$router.push({ // path:'/mine/toggle-identity', // query:{ // title:'选择门店', // storeList:res.body.storeList // } // }) // } }) }, login({ commit, dispatch }, { vm, userNo, password, sib_mer_sysPlat, next }) { window.localStorage.clear() if (sessionStorage.isddxt == 1) { window.document.title = '叮咚学堂' } let tmpPassword = md5(userNo + password); let passwordLogin = { userNo: userNo, password: tmpPassword }; Vue.prototype.$api.login(passwordLogin).then(res => { sessionStorage.jumpUrl = res.body.clientAccessDomain; let { lastLoginMgrId, sessionId } = res.body; commit(SET_SESSION_ID, sessionId); // window.sessionStorage.setItem( // 'jumpUrl', // res.body.clientAccessDomain // ); // // 存储起来自动登录 localStorage.user_account = userNo; localStorage.user_pwd = password; localStorage.sib_mer_sysPlat = sib_mer_sysPlat; // 1 微信 2支付宝 if (lastLoginMgrId) { // setUserMenu(vm, lastLoginMgrId, next); dispatch('setUserMenu', { vm, lastLoginMgrId, next }) } else { if (next) { next('/mine/toggle-identity'); } else { vm.$router.push('/mine/toggle-identity'); } } }); }, // 根据不同的权限设置用户拥有的菜单 async setUserMenu({ commit }, { vm, lastLoginMgrId, next }) { vm.$api.getPowerInfo(lastLoginMgrId).then(data => { let { powerInfoVos, orgType } = data.body; let inviteCode = data.body.inviteCode; let footernav = [] let userPage = [] let path = '' commit(SET_INVITE_CODE, inviteCode); vm.$api.findProvNo().then(res => { // 410000 河南 ,640000宁夏 commit(HNORNX_TYPE, res.body); let nxOrHn = res.body; let footerMenu = [ { powerId: 100001, icon: 'iconshuju_h', Aicon: 'iconshuju', label: '数据', path: '/order/wxScore' }, { powerId: 100003, icon: 'iconshenpi_h', Aicon: 'iconshenpi', label: '审批', path: '/main/approve' }, { powerId: 100006, icon: 'icondingdan', Aicon: 'icondingdan1', label: '办单', path:'/main/product' }, ] let userMenu = [ { powerId: 100004, icon: 'iconshanghuguanli', label: '门店管理', path: '/mine/stores' }, { powerId: 100002, icon: 'iconqudaoguanli', label: '渠道管理', path: '/mine/channel' } ] if (!window.localStorage.hjToken && sessionStorage.isLoginByOpenId != 1) { userMenu.push({ powerId: 100005, icon: 'iconzhanghaoguanli', label: '账号管理', path: '/mine/account' }) } powerInfoVos.map(item => { footerMenu.map(child => { if (item.powerId === child.powerId) { if (child.powerId === 100001 || child.powerId === 100006) { footernav.unshift(child); } else { footernav.push(child); } } }); userMenu.map(child => { if (item.powerId === child.powerId) { userPage.push(child); } }); }); footernav.push({ powerId: 200000, icon: 'iconguanli_h', Aicon: 'iconguanli', label: '我的', path: '/main/mine' }) // 代理角色一定有商户管理、商户注册的菜单 if (orgType === 1 || orgType === 2) { userPage.push({ icon: 'iconshanghuguanli', label: '商户管理', path: '/mine/mer-manager' }); userPage.push({ icon: 'iconshanghuzhuce', label: '商户注册', path: '/user/register' }); } commit(SET_FOOTER_NAV, footernav); commit(SET_USER_PAGE, userPage); commit(SET_USER_INFO, data.body); sessionStorage.sid = lastLoginMgrId; // vm.$setItem('sid', mgrId); if (orgType === 4) { if (sessionStorage.isLoginByOpenId == 1) { path = '/main/mine'; } else { path ='/main/product' } } else { path = '/main/mine'; } if (next) { next(path) } else { vm.$router.push(path) } }); }); }, // 获取地区列表 getArea({ commit }) { Vue.prototype.$api.getArea().then((res) => { let { provList } = res.body; let obj = calcArea(provList) commit(SET_AREA_LIST, { province_list: obj.province_list, city_list: obj.city_list, county_list: obj.county_list }) }).catch((err) => { }); }, //消息count getCount({ commit }) { Vue.prototype.$api.indexInit().then(res => { // let sum = res.body.noticeInfos.some(item => { // return item.needRead === 1 // }) let notice = {}; notice.sum = res.body.hasNotice notice.swiperList = res.body.bannerInfoVos notice.messageList = res.body.noticeInfos.noticeInfos commit(SET_MESSAGE_CONUT, notice) }) }, // 设置主题色 setColor({ commit }, { backColor, backJbColorF, backJbColorB, defaultBgColor, lastColor }) { commit(SET_BCAKCOLOR, backColor) commit(SET_BCJBCOLORF, backJbColorF) commit(SET_BCJBCOLORB, backJbColorB) commit(SET_DEFAULT_BG_COLOR, defaultBgColor) commit(SET_LAST_COLOR, lastColor) } }, modules: { test } })