赞
踩
目录结构
router.js
- import Vue from 'vue'
- import Router from 'vue-router'
- import Login from './components/Login.vue'
- import Home from './components/Home.vue'
- import Welcome from './components/Welcome.vue'
- Vue.use(Router)
-
- const router = new Router({
- routes: [{
- path: '/',
- redirect: '/login'
- },
- {
- path: '/login',
- component: Login
- },
- {
- path: '/home',
- component: Home,
- redirect:'/welcome',
- children: [{
- path: '/welcome',
- component: Welcome
- }]
- }
- ]
- });
- //挂载路由导航守卫
- router.beforeEach((to, from, next) => {
- if (to.path === '/login') return next();
- //获取token
- const tokenStr = window.sessionStorage.getItem('token')
- if (!tokenStr) return next('/login')
- next();
- })
-
- export default router
login.vue
- <template>
-
- <div class="login_container">
- <div class="login_box">
- <div class="avatar_box">
- <img src="../assets/logo.png">
- </div>
- <!-- 表单区域-->
- <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">
- <!-- 登录区域-->
- <el-form-item prop="username">
- <el-input v-model="loginForm.username" prefix-icon="iconfont icon-user"></el-input>
- </el-form-item>
- <el-form-item prop="password">
- <el-input type="password" v-model="loginForm.password" prefix-icon="iconfont icon-3702mima"></el-input>
- </el-form-item>
- <el-form-item class="btns">
- <el-button type="primary" @click="login">登录</el-button>
- <el-button type="info" @click="resetLoginForm">重置</el-button>
- </el-form-item>
- </el-form>
- </div>
- </div>
-
- </template>
-
- <script>
- export default{
- data(){
- return{
- //这是登录表单的数据
- loginForm:{
- username:'geyao',
- password:'12345678'
- },
- // 表单验证
- loginFormRules: {
- username: [
- { required: true, message: '请输入用户名', trigger: 'blur' },
- { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' }
- ],
- password: [
- { required: true, message: '请输入用户密码', trigger: 'blur' },
- { min: 6, max: 18, message: '长度在 6 到 18 个字符', trigger: 'blur' }
- ]
- }
- }
- },
- methods:{
- resetLoginForm(){
- // console.log(this)
- this.$refs.loginFormRef.resetFields();
- },
- login(){
- this.$refs.loginFormRef.validate(async valid =>{
- if(!valid) return;
- const {data:res}=await this.$http.post('login',this.loginForm);
- if(res.meta.status!==200) return this.$message.error('登录失败');
- this.$message.success('登录成功');
- // 1、将登陆成功之后的token, 保存到客户端的sessionStorage中;
- // 1.1 项目中出现了登录之外的其他API接口,必须在登陆之后才能访问
- // 1.2 token 只应在当前网站打开期间生效,所以将token保存在
- window.sessionStorage.setItem('token', res.data.token)
- // 2、通过编程式导航跳转到后台主页, 路由地址为:/home
- this.$router.push('/home')
- });
- }
- }
- }
- </script>
-
- <style lang="less" scoped>
- .login_container {
- background-color: #2b4b6b;
- height: 100%;
- }
- .lo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。