1.用vue+elementUi做一个简易登录页面,要有必填等验证,通过后跳转到home页面。 2.登录时,将用户姓名等信息放到vuex的状态中。 3.加一个全局路由守卫,如果没有在vuex中获取到用户名,则强制跳转回到登录页面。
时间: 2024-04-10 08:33:38 浏览: 59
可以参考以下代码实现你的需求:
1. 简易登录页面的实现:
```vue
<template>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules">
<el-form-item label="用户名" prop="username">
<el-input v-model="loginForm.username"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="loginForm.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="login">登录</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
loginForm: {
username: '',
password: ''
},
loginRules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' }
]
}
}
},
methods: {
login() {
this.$refs.loginForm.validate((valid) => {
if (valid) {
// 登录验证通过,进行跳转
this.$router.push('/home');
} else {
console.log('登录验证失败');
return false;
}
});
}
}
}
</script>
```
2. 将用户信息放入 vuex 状态中:
```javascript
// 在 store 中定义一个全局的 user 模块
// store/user.js
const state = {
userInfo: null
};
const mutations = {
SET_USER_INFO(state, userInfo) {
state.userInfo = userInfo;
}
};
const actions = {
setUserInfo({ commit }, userInfo) {
commit('SET_USER_INFO', userInfo);
}
};
export default {
namespaced: true,
state,
mutations,
actions
};
```
在登录成功后,调用 `this.$store.dispatch('user/setUserInfo', userInfo)` 将用户信息存入 vuex 中。
3. 全局路由守卫的实现:
在路由配置中添加全局路由守卫,判断是否在 vuex 中获取到用户名,如果没有则强制跳转回登录页面。
```javascript
// router/index.js
import store from '@/store';
router.before {
to, from, next) => const userInfo = store.state.user.userInfo;
if (!userInfo && to.path !== '/login') {
next('/login');
} else {
next();
}
});
```
这样,当用户没有在 vuex 中获取到用户名时,访问其他路由页面会自动跳转回登录页面。