index.js 1.55 KB
import Vuex from 'vuex'

const createStore = () => {
  return new Vuex.Store({
    state: {
      user: {},
      snackbar: {
        display: false,
        msg: ''
      }
    },
    mutations: {
      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        
      }
    },
    actions: {
      async nuxtServerInit ({ commit }, { req, res, app, query, redirect, store, params }) {
        console.log(12312312312)
        if (!store.state.user.id) {
          let {headers, data} = await app.$axios.get(`/user?code=${query.code || ''}`)
          console.log(headers)
          if (headers['set-cookie']) {
            console.log('server:', process.server)
            if (process.server) {
              console.log('set cookie', headers['set-cookie'])
              res.setHeader('Set-Cookie', headers['set-cookie']); 
            } 
          }
          if (!data.success) {
            redirect(301, data.redirect)
          } else {
            store.commit('createUserInfo', data.user)
          }
        }
      },
      displayMessage({ commit }, msg) {
        commit('displayMessage', msg)
      },
      hideMessage({ commit }) {
        commit('hideMessage')
      }
    }
  })
}

export default createStore