src/store/modules/user.js
actions: {
asyncSetToken(store, data) {
return new Promise((resolve, reject) => {
login(data).then(res => {
console.log(res)
store.commit('setToken', res.data)
resolve()
})
})
},
// 获取用户资料action
asyncGetUserInfo(ctx) {
return new Promise((resolve, reject) => {
getUserInfo().then((res) => {
console.log(res)
ctx.commit('setUserInfo', res)
resolve()
})
})
}
}
组件里调用action函数
handleLogin() {
// 兜底校验 通过组件身上的ref 1-拿到实例对象 2.对象身上的方法validate
this.$refs.loginForm.validate(async(valid) => {
if (valid) {
// 登录
this.$store.dispatch('user/asyncSetToken', this.loginForm).then(res => {
console.log('跳转')
this.$router.push('/')
})
}
})
}
路由权限文件src/permission.js
const token = store.getters.token
if (token) {
// 有token
if (to.path === '/login') {
// 如果有token且去往登录 则跳转到首页去
next('/')
} else {
store.dispatch('user/asyncGetUserInfo').then(res => {
next()
})
// await store.dispatch('user/asyncGetUserInfo')
// next()
}
}