element-ui二次封装实现短信验证码登录组件

2023-05-16

文章目录

  • 前言
  • 一、实现方法
    • 1.创建 PhoneLogin 组件
    • 2.全局注册组件
    • 3.使用组件
  • 二、组件效果
  • 总结


前言

在开发 vue 项目时,我们都可能用到 element-ui,但是有时 element-ui 提供的组件太简单或不满足应用的需求,因此我们需要在其基础上再对组件进行封装。


一、实现方法

需先在项目中安装 element-ui:Vue项目使用element-ui

1.创建 PhoneLogin 组件

在 components 文件夹创建 phoneLogin 文件夹,然后在 accountLogin 文件夹中再创建PhoneLogin.vue 。

PhoneLogin.vue 代码如下:

<template>
  <div>
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm">
        <el-form-item prop="phone">
            <el-input placeholder="请输入手机号" v-model="ruleForm.phone">
                <i slot="prefix" class="el-icon-phone"></i>
            </el-input>
        </el-form-item>
        <el-form-item prop="code">
            <el-row :gutter="20">
                <el-col :span="16">
                    <el-input placeholder="请输入验证码" v-model="ruleForm.code">
                        <i slot="prefix" class="el-icon-tickets"></i>
                    </el-input>
                </el-col>
                <el-col :span="6">
                    <el-button @click="sendCode" :disabled="disabled">{{btnText}}</el-button>
                </el-col>
            </el-row>
        </el-form-item>
        <el-form-item>
            <el-button 
            type="primary" 
            style="width:100%"
            @click="phoneLogin">登录</el-button>
        </el-form-item>
    </el-form>
  </div>
</template>

<script>


export default {
  name: 'PhoneLogin',
  components: {},
  props:{
      ruleForm: {
          type: Object,
          require: true
      },
      countDown: {
          type: Number,
          default: 60
      }
  },
  data(){
      let checkPhone = (rule, value, callback) =>{
          if(!value){
              return callback(new Error('手机号不能为空'))
          }else{
              let reg = /^1[3|4|5|7|8][0-9]\d{8}$/
              if(reg.test(value)){
                  callback()
              }else{
                  return callback(new Error('请输入正确的手机号'))
              }
          }
      }
      return{
          rules: {
              phone: [
                  {validator: checkPhone, trigger: 'change'}
              ],
              code: [
                  {required: true, message: '验证码不能为空', trigger: 'blur'}
              ]
          },
          disabled: false,
          btnText: '发送验证码'
      }
  },
  methods:{
      phoneLogin(){
         this.$refs.ruleForm.validate((valid) => {
              if(valid){
                  this.$emit('submit')
              }else{
                  this.$emit('errHandle')
              }
          })
      },
      sendCode(){
          this.$refs.ruleForm.validateField('phone', errorMessage =>{
              if(errorMessage){
                  this.$message.error(errorMessage)
              }else{
                  // 1.时间开始倒数
                  // 2.按钮进入禁用状态
                  // 3.如果倒计时结束 按钮恢复可用状态 按钮文字变为重新发送, 时间重置
                  // 4.倒计时的过程中 按钮文字为 多少s后重新发送
                  let timer = setInterval(()=>{
                      this.time --;
                      this.btnText = `${this.time}s后重新发送`
                      this.disabled = true
                      if(this.time === 0){
                          this.disabled = false;
                          this.btnText = '重新发送';
                          this.time = this.countDown
                          clearInterval(timer)
                      }
                  }, 1000)
                  this.$emit('send')
              }
          })
      }
  },
  mounted(){
      this.time = this.countDown
  }
}
</script>


2.全局注册组件

在项目根目录下创建 globalComponents 文件夹,在其下新建 index.js, 用于注册全局组件

index.js 代码如下:

//注册全局组件
import Vue from "vue"
import PhoneLogin from "../components/phoneLogin/PhoneLogin" //引入

Vue.component('phoneLogin', PhoneLogin) //注册

3.使用组件

1.在 views 文件夹下一个视图:Login.vue , 使用组件
Login.vue 代码如下:

<template>
  <div class="login">
      <h1>短信验证码登录组件</h1>
	    <div class="account">
	        <phone-login 
	        :rule-form="phoneForm"
	        @send="send"
	        @submit="submit"
	        @errHandle="errHandle">
	        </phone-login>
	    </div>
  </div>
</template>

<script>
import PhoneLogin from '../components/phoneLogin/PhoneLogin.vue'

export default {
  name: 'Login',
  components: { PhoneLogin},
  props:{},
  data(){
      return{
          phoneForm: {
              phone: '',
              code: ''
          }
      }
  },
  methods:{
      submit(){
          this.$message.success('提交成功')
          console.log("成功")
      },
      errHandle(){
          this.$message.error('表单填写有误,请检查')
          console.log("失败")
      },
      send(){
          this.$message.info('发送验证码成功')
      }
  },
  mounted(){

  }
}
</script>

<style scoped lang="scss">
    .login{ 
        margin-top: 30px;
        margin-left: 30px;
    }
    .account{
        width: 500px;
    }
</style>

2.配置页面路由
router 中的 index.js 代码如下:

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/login',
    name: 'login',
    component: () => import('../views/Login')
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

3.在Home.vue 实现一个页面跳转按钮
Home.vue 代码如下:

<template>
  <div >
    <el-button 
    type="primary" @click="goTo('/login')">
    去往登录页面
    </el-button>
  </div>
</template>

<script>
// @ is an alias to /src


export default {
  name: 'Home',
  components: {
  },
  methods:{
    goTo(path){ //路由跳转
      this.$router.push(path)
    }
  }
}
</script>

在这里插入图片描述

二、组件效果

1.点击前往登录页面,进入登录页面
在这里插入图片描述

2.校验手机号,实现了登录的逻辑
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

以上内容我们在 element-ui 的基础上,对 el-input 和 el-button 组件再封装,使之成为短信验证码登录组件,组件实现了手机号码的校验功能和登录回调的逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

element-ui二次封装实现短信验证码登录组件 的相关文章

随机推荐

  • 5.7及以下版本mysql不能插入中文

    转载于 xff1a https blog csdn net qq 59500621 article details 122390644 5 7及以下版本mysql默认数据库使用的字符集是Latin1 我们需要为其修改字符集为 xff1a u
  • 备库failover升级

    1 centos 6 9 single06 gt centos7 9 single06std 11 2 0 4 搭建上面的dg 2 adg上打补丁psu xff1a 31537677 3 centos 7 9 上安装19c软件 xff0c
  • Data Guard高级玩法:通过闪回恢复failover备库

    转载于 xff1a Data Guard高级玩法 xff1a 通过闪回恢复failover备库 ITPUB博客 今天看到有一个网友提了一个问题 xff0c 描述很简短 测试DG时 xff0c 主库不能宕机 xff0c 如何测试failove
  • Oracle性能调查之ASH

    转载于 xff1a Oracle性能调查之ASH xff08 一 xff09 腾讯云开发者社区 腾讯云 在ORACLE性能问题调查时 xff0c 有价值的诊断情报多 xff1a STATSPACK xff0c AWR xff0c ASH x
  • 记录一次网卡问题

    问题 xff1a root 64 rac19c01 ip a 1 lo lt LOOPBACK UP LOWER UP gt mtu 65536 qdisc noqueue state UNKNOWN group default qlen
  • CRS-1705: Found 1 configured voting files but 2 voting files are required

    背景 xff1a vmware虚拟机安装两节点19c rac xff0c 执行node1 root脚本时正常 xff0c 执行node2的root脚本时报错 报错如下 xff1a CRS 2672 Attempting to start 3
  • wwid和uuid的区别

    转载于 xff1a https blog csdn net zwjzqqb article details 80321348 1 wwid 每个SCSI磁盘都有一个WWID xff0c 类似于网卡的MAC地址 xff0c 是独一无二的 可以
  • Sm2记录介绍

    SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法 xff0c SM2采用的就是ECC 256位的一种 1 签名验签 SSWINAPI SGD UINT32 DEVAPI SKF ECCSignData SGD HDL
  • xshell之for循环

    转载于 xff1a shell while read line 与for循环的区别 冥想心灵 博客园 cnblogs com 例子 xff1a while read line 是一次性将文件信息读入并赋值给变量line xff0c whil
  • virtualbox安装虚拟增强功能

    1 分配光驱 xff0c 选择windows的光驱 2 会发现出现了CD驱动器VBoxGuestAdditions 双击进去 xff0c 发现目录如下 xff1a 3 双击执行VBoxGuestAdditions exe
  • #蓝桥杯嵌入式组#历年客观题解析

    文章目录 第八届初赛第八届决赛第九届初赛第九届决赛第十届初赛第十届决赛 第八届初赛 C D 线与功能 xff1a 两个或多个输出信号连接在一起可以实现逻辑 与 的功能 OC门 xff0c 即 集电极开路 xff0c 实际上只是一个NPN型三
  • Git在vscode中简单使用

    Git在vscode中简单使用 一 Git安装与配置 1 Git安装 xff08 官网地址 xff1a https git scm com xff09 2 Git配置 xff08 1 xff09 安装好后 xff0c 桌面右键 Git Ba
  • 小程序云开发入门

    文章目录 前言一 开通云开发二 使用云开发1 直接创建云开发项目2 修改配置文件引入云开发 三 云数据库1 介绍2 使用 四 云函数1 介绍2 使用 五 云存储1 介绍2 使用 总结 前言 一个小程序在开发时 xff0c 除了考虑界面功能逻
  • 小程序Mpx框架入门

    文章目录 简介一 Mpx的特点1 使用原因2 设计思路3 与其他框架的区别 二 安装使用1 相关命令2 项目创建演示 三 Mpx在vscode中的相关插件四 学习Mpx框架开发1 Mpx具有的功能特性2 学习的资源 总结 简介 Mpx是一款
  • 小程序云函数调用云函数

    文章目录 前言一 案例说明二 功能实现1 云函数1 xff1a getdata2 云函数2 xff1a deldata 总结 前言 小程序云开发提供了云函数 xff0c 云函数是运行在服务端的代码 xff0c 执行速度快 通常一些复杂的功能
  • Vue项目打包后不能正常显示页面

    项目场景 xff1a 通过 Vue CLI 创建的 vue 项目 xff0c 编写完项目后 xff0c 通过 npm run bulid 对项目进行打包 xff0c 再把打包得到的内容 xff08 dist文件夹 xff09 交给后端部署到
  • element-ui二次封装实现全局回到顶部组件

    文章目录 前言一 实现方法1 创建 BackTop 组件2 全局注册组件3 使用组件 二 组件效果总结 前言 在开发 vue 项目时 xff0c 我们都可能用到 element ui xff0c 但是有时 element ui 提供的组件太
  • element-ui二次封装实现普通登录组件

    文章目录 前言一 实现方法1 创建 AccountLogin 组件2 全局注册组件3 使用组件 二 组件效果总结 前言 在开发 vue 项目时 xff0c 我们都可能用到 element ui xff0c 但是有时 element ui 提
  • CFCA预置证书

    1 单一证书 2 导入数字证书流程 3 加密证书私钥结构
  • element-ui二次封装实现短信验证码登录组件

    文章目录 前言一 实现方法1 创建 PhoneLogin 组件2 全局注册组件3 使用组件 二 组件效果总结 前言 在开发 vue 项目时 xff0c 我们都可能用到 element ui xff0c 但是有时 element ui 提供的