index.js 1.85 KB
import Vuex from 'vuex'

const createStore = () => {
  return new Vuex.Store({
    state: {
      token: "",
      redirect: "",
      user: {},
      index: {
        tab: 'borrow',
        height: 0,
      },
      snackbar: {
        display: false,
        msg: ''
      }
    },
    mutations: {
      updateUserToken (state, token) {
        state.token = token
      },
      createUserInfo (state, info) {
        state.user = Object.assign({}, info)
      },
      updateUser (state, info) {
        let oldInfo = Object.assign({}, state.user)
        state.user = Object.assign(oldInfo, info)
      },
      displayMessage(state, msg) {
        state.snackbar.msg = msg
        state.snackbar.display = true
      },
      hideMessage(state) {
        state.snackbar.display = false        
      },
      setRedirect(state, url) {
        state.redirect = url
      },
      cleanRedirect(state) {
        state.redirect = ''
      },
      changeIndexTab(state) {
        state.index.tab = state.index.tab === 'borrow' ? 'credit' : 'borrow'
      }
    },
    actions: {
      async nuxtServerInit ({ commit }, { req, res, app, query, redirect, store, params }) {
        if (!store.state.user.id || !store.state.token) {
          let { data, headers } = await app.$axios.get(`/user?code=${query.code || ''}`)
          if (!data.success) {
            console.log('redirect')
            redirect(301, data.redirect)
          } else {
            res.cookie('qicaidai_token', data.token, {maxAge: 2592000000, signed: true, httpOnly: true})
            store.commit('updateUserToken', data.token)
            store.commit('createUserInfo', data.user)
          }
        }
      },
      displayMessage({ commit }, msg) {
        commit('displayMessage', msg)
      },
      hideMessage({ commit }) {
        commit('hideMessage')
      }
    }
  })
}

export default createStore