store 简单引入例子

main.js

import store from './store'

store/index.js

import Vue from 'vue'

import Vuex from 'vuex'

import getters from './getters'

import app from './modules/app'

import settings from './modules/settings'

import user from './modules/user'

import info from './modules/info'

Vue.use(Vuex)

const store = new Vuex.Store({

  modules: {

    app,

    settings,

    user,

    info

  },

  getters

})

export default store

modules/user.js

import { login, getInfo } from '@/api/user'

import { getToken, setToken, removeToken } from '@/utils/auth'

import { resetRouter } from '@/router'

import MyStorage from '@/utils/cache'

// import { setItem } from '@/utils/cache'

import qs from 'qs'

const state = {

  token: getToken(),

  name: MyStorage.getItem('name') || '',

  avatar: MyStorage.getItem('avatar') || ''

}

const mutations = {

  SET_TOKEN: (state, token) => {

    state.token = token

  },

  SET_NAME: (state, name) => {

    MyStorage.setItem('name', name)

    state.name = name

  },

  SET_AVATAR: (state, avatar) => {

    MyStorage.setItem('avatar', avatar)

    state.avatar = avatar

  }

}

const actions = {

  // user login

  login({ commit }, userInfo) {

    const { username, password } = userInfo

    return new Promise((resolve, reject) => {

      login(qs.stringify({ phone: username.trim(), verifCode: password, loginType: 0 })).then(response => {

        const { result } = response;

        if(result.userType!='100'){

          MyStorage.setItem('companyId', result.id)

          MyStorage.setItem('companyName', result.name)

          MyStorage.setItem('lng', result.lng)

          MyStorage.setItem('lat', result.lat)

          commit('SET_TOKEN', response.token || '123456789')

          commit('SET_NAME', result.name)

          commit('SET_AVATAR', result.icon)

          setToken(response.token || '123456789')

          resolve()

        }else{

          reject(new Error("无效账号"));

        }

      }).catch(error => {

        reject(error)

      })

    })

  },

  // get user info

  getInfo({ commit, state }) {

    return new Promise((resolve, reject) => {

      getInfo(state.token).then(response => {

        const { data } = response

        if (!data) {

          reject('Verification failed, please Login again.')

        }

        const { name, avatar } = data

        commit('SET_NAME', name)

        commit('SET_AVATAR', avatar)

        resolve(data)

      }).catch(error => {

        reject(error)

      })

    })

  },

  // user logout

  logout({ commit }) {

    return new Promise((resolve, reject) => {

      MyStorage.clear()

      commit('SET_TOKEN', '')

      commit('SET_NAME', '')

      commit('SET_AVATAR', '')

      removeToken()

      resetRouter()

      resolve()

    })

  },

  // logout({ commit, state }) {

  //   return new Promise((resolve, reject) => {

  //     logout(state.token).then(() => {

  //       commit('SET_TOKEN', '')

  //       removeToken()

  //       resetRouter()

  //       resolve()

  //     }).catch(error => {

  //       reject(error)

  //     })

  //   })

  // },

  // remove token

  resetToken({ commit }) {

    return new Promise(resolve => {

      commit('SET_TOKEN', '')

      removeToken()

      resolve()

    })

  }

}

export default {

  namespaced: true,

  state,

  mutations,

  actions

}

引入使用

 this.$store.dispatch('user/xx', { withoutAnimation: false })

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值