index.js 2.24 KB
import Vuex from 'vuex'

const createStore = () => {
  return new Vuex.Store({
    state: {
      firstUrl: '',
      token: "",
      redirect: "",
      user: {},
      index: {
        tab: 'borrow',
        height: 0,
      },
      snackbar: {
        display: false,
        msg: '',
        redirect: ''
      }
    },
    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, type) {
        state.index.tab = type
      },
      updateFirstUrl(state, url) {
        state.firstUrl = url
      },
      setMessageRedirect(state, redirect) {
        state.snackbar.redirect = redirect
      }
    },
    actions: {
      async nuxtServerInit ({ commit }, { req, res, app, query, redirect, store, params, route }) {
        console.log(route)
        store.commit('updateFirstUrl', `https://www.51liuliang.cc/netiou${route.fullPath}`)
        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')
      },
      setMessageRedirect({ commit }, redirect) {
        commit('setMessageRedirect', redirect)
      }
    }
  })
}

export default createStore