// vuex两种写法
// import axios from 'axios'
// export default {
//   state: {
//     userInfo: JSON.parse(sessionStorage.getItem('userInfo')),
//   },
//   mutations: {
//     userSign(state, userInfo) {
//       state.userInfo = userInfo
//       sessionStorage.setItem('userInfo', JSON.stringify(userInfo))
//     },
//   },
//   actions: {
//     userLogin ({commit}, params) {
//       return axios.post('/metroapi/login', params).then(res => {
//         const { httpCode, msg, data } = res.data
//         if (httpCode !== 1) {
//           throw new Error(msg)
//         }
//         commit('userSign', data)
//       })
//     },
//   },
//   getters: {
//     getMenuList: state => state.userInfo.menus
//   }
// }
import axios from 'axios'
const state =  { // state状态树 保留变量数据 （其他页面调用state里的值是 this.$store.state.user.userInfo）
  userInfo: JSON.parse(sessionStorage.getItem('userInfo'))
}
const mutations = { //更改 Vuex 的 store 中的状态的唯一方法是提交 mutation (mutation 必须是同步函数)
  userSign (state, userInfo) {
    state.userInfo = userInfo
    sessionStorage.setItem('userInfo', JSON.stringify(userInfo))
  },
}

const actions = { // Action 类似于 mutation. Action 提交的是 mutation，而不是直接变更状态。 Action 可以包含任意异步操作
  userLogin ({commit}, params) {
    return axios.post('/metroapi/login', params).then(res => {
      const { httpCode, msg, data } = res.data
      if (httpCode !== 1) {
        throw new Error(msg)
      }
      commit('userSign', data)
    })
  },
}
const getters = {
  getMenuList: state => state.userInfo.menus //store 中的 state 中派生出一些状态 通过属性访问this.$store.getters.getMenuList 也可以通过方法访问
}

export default {
  // namespaced: true,
  state,
  mutations,
  actions,
  getters
}