上一节主要讲了框架几个文件的功能并改造了App.vue以及main.js文件
这节主要完成login页面并在程序运行时检查本地token,如果没有直接跳转到登陆页面
一、完成login页面,界面如下:
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<template> <div class="content"> <el-row> <el-col :span="4" class="left"> <div> </div> </el-col> <el-col :span="16"> <div class="main"> <div > <img width="300" height="300" src="../../assets/login.png" alt="登陆页背景图"> </div> <div class="main-div"> <!-- 用来给元素或子组件注册引用信息,引用信息会在父$refs对象中存在,如果用在普通dom元素,则就指向dom元素,如果用在子组件上,引用就指向组件实例 --> <el-form :model="formInfo" status-icon :rules="rules" ref="form" size="mini"> <el-form-item class="lable" label="账号:" prop="name"> <el-input class="input" size="medium" v-model="formInfo.name"></el-input> </el-form-item> <el-form-item v-if="isActive" class="lable" label="密码:" prop="pass"> <el-input class="input" size="medium" type="password" v-model="formInfo.pass" ref="password" auto-complete="off" > </el-input> <div class="iconEye"> <i class="iconfont icon-yincangmima" @click="hidePass"></i> </div> </el-form-item> <el-form-item v-else class="lable" label="密码:" prop="pass"> <el-input class="input" size="medium" type="text" v-model="formInfo.pass" ref="password" auto-complete="off" > </el-input> <div class="iconEye"> <i class="iconfont icon-xianshimima" @click="showPass"></i> </div> </el-form-item> <el-form-item> <el-button class="button" size="medium" type="primary" @click="submitForm()">提交</el-button> <el-button class="button" size="medium" @click="resetForm()">重置</el-button> </el-form-item> </el-form> </div> </div> </el-col> <el-col :span="4" class="right"><div></div></el-col> </el-row> </div> </template> <script> export default { data(){ //验证登录名 var validateName = (rule, value, callback) => { if (value === '') { callback(new Error('请输入登录名')); } else { callback() } }; var validatePass = (rule,value,callback) =>{ if(value === ''){ callback(new Error('请输入密码')); }else { callback() } }; return{ //formInfo对象 formInfo:{ name:'', pass:'' }, isActive:true, //自定义的验证规则 rules: { name: [ { validator: validateName, trigger: 'blur' } ], pass: [ { validator: validatePass, trigger: 'blur' } ] } }; }, methods:{ //提交方法 submitForm(){ //调用form表单的validate方法,对所有元素进行校验 this.$refs.form.validate((valid)=>{ if (valid) { console.log('输入的账号为:' + this.formInfo.name); console.log('输入的密码为:' + this.formInfo.pass); /////写api调用 } else { console.log('error submit!!'); return false; } }) }, //重置方法 resetForm() { this.$refs.form.resetFields(); //调用form表单的resetFields内部重置方法 }, //显示 showPass(){ console.log('点击了显示密码事件') this.isActive = !this.isActive }, //隐藏 hidePass(){ console.log('点击了隐藏密码事件') this.isActive = !this.isActive } } } </script> <style scoped> .content{ overflow: hidden; margin-top: 5%; } .main{ text-align: center; /* border:1px solid blue; */ } .main-div{ border: 1px solid lightgray; border-radius: 4px; } .left{ border:1px solid white; } .right{ border:1px solid white; } .lable{ border:1px solid white; 75%; margin-left:13%; } .input{ /* text-align: left; */ border:1px solid white; } .button{ 200px; } .iconEye{ border:1px solid white; 20px; height: 20px; position:absolute; left:100%; top:30px; } </style>
大概功能:
使用elementui组件,实现输入内容自定义验证、重置、还有密码的显示与隐藏
在使用过程中图标用了iconfont里面的,具体用法可以百度
二、改造App.vue页面,让它不要再显示之前的页面信息,截图代码如下 注释掉以前的代码 只添加路由标签
<template> <div id="app"> <!-- <el-container> <el-aside width="200px">Aside</el-aside> <el-container> <el-header>Header</el-header> <el-main>Main</el-main> </el-container> </el-container>--> <router-view></router-view> </div> </template>
三、新建路由文件
新建router文件夹,并创建index.js文件
此文件在main.js中需要引入
//导入自己写的router路由 import router from './router/index' Vue.use(router)
然后编辑index.js文件,对路又不熟悉的可参考:vuerouter官网
里面简单定义了路由以及路由的跳转规则
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import Home from '@/views/home/index' import Login from '@/views/login/index' //导入VueRouter import VueRouter from 'vue-router' const router = new VueRouter({ mode: 'history',//去掉#号 routes: [ { path: '/', name: 'Root', component: Login }, { path:'/home', name:'Home', component: Home, redirect: "/Students", children:[ { path: "/students", name: "Students", component: () => import("@/views/students/index") }, ] } ] }) //全局路由守卫 router.beforeEach((to, from, next) => { if (to.path === '/') return next(); // 取出token const token = window.sessionStorage.getItem('token'); if (!token) //没有token的时候 跳转到登陆页面 return next('/'); next(); }) export default router
完成之后跑起来就能看到login页面了