zoukankan      html  css  js  c++  java
  • 【Vue入门】利用VueCli搭建基本框架--创建登陆页面(三)

    上一节主要讲了框架几个文件的功能并改造了App.vue以及main.js文件

    这节主要完成login页面并在程序运行时检查本地token,如果没有直接跳转到登陆页面

    一、完成login页面,界面如下:

    代码如下:

    <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>
    View Code

    大概功能:

      使用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官网  

         里面简单定义了路由以及路由的跳转规则

      代码如下:

    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
    View Code

    完成之后跑起来就能看到login页面了

  • 相关阅读:
    mysql批量替换指定字符串
    php中英字符串截取
    比较两个JSON字符串是否完全相等
    Java FastJson 介绍
    线程池
    DBUS及常用接口介绍
    在Mac中如何正确地设置JAVA_HOME
    base64 原理
    sizeof与strlen的区别
    Kubernetes 部署失败的 10 个最普遍原因
  • 原文地址:https://www.cnblogs.com/yhnet/p/13851593.html
Copyright © 2011-2022 走看看