一个vue3注册表单,自定义element-ui的label样式

news2024/9/23 3:32:11
<template>
  <div class="form">
      <div class="backLogin">
        <div class="text">已有账号?</div>
        <el-button @click="toLogin" type='primary'>立即登录</el-button>
      </div>
      <div class="content">
        <div class="header">用户注册</div>
        <el-form ref="loginForm" :rules="rules" :model="form" status-icon>
          <el-form-item prop="email">
            <div class="content_item">
              <i class="icon">*</i>
              <label class="label">邮箱</label>:
              <el-input v-model="form.email" placeholder="请输入您的邮箱" />
            </div>
          </el-form-item>
          <el-form-item prop="password">
            <div class="content_item">
              <i class="icon">*</i>
              <label class="label">密码</label>:
              <el-input type="password" v-model="form.password" placeholder="请输入您的密码" />
            </div>
          </el-form-item>
          <el-form-item prop="confirmThePassword">
            <div class="content_item">
              <i class="icon">*</i>
              <label class="label">确认密码</label>:
              <el-input type="password" v-model="form.confirmThePassword" placeholder="请再次输入您的密码" />
            </div>
          </el-form-item>
          <el-form-item prop="phone">
            <div class="content_item">
              <i class="icon">*</i>
              <label class="label">手机号码</label>:
              <el-input v-model="form.phone" placeholder="请输入您的手机号码" />
            </div>
          </el-form-item>
          <el-form-item prop="captcha">
            <div class="content_item">
              <i class="icon">*</i>
              <label class="label">验证码</label>:
              <div class="captcha">
                <el-input v-model="form.captcha" placeholder="请输入手机验证码" />
                <el-button class="captcha_btn" type="primary">获取手机验证码</el-button>
              </div>
            </div>
          </el-form-item>
        </el-form>
        <el-button class="registerButton" type="primary" @click="submit">注册</el-button>
      </div>
  </div>
</template>

<script setup>
import {ref,reactive} from 'vue'

let loginForm = ref(null)

const form = reactive({
  email: '',
  password: '',
  confirmThePassword: '',
  phone: '',
  captcha: '',
})

const validatePassEmail = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请输入您的邮箱'))
  } else {
    let reg = new RegExp(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)
    if (reg.test(value)) {
      // 发送请求,查验这个邮箱是否注册过
      callback()
    }else{
      callback(new Error('邮箱格式不正确,请重新输入'))
    }

  }
}

const validatePassPassword = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请输入您的密码'))
  } else {
    let reg = new RegExp(/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/)
    if (reg.test(value.trim())) {
      callback()
    }else{
      callback(new Error('密码需包含数字和字母组合,请重新输入'))
    }
  }
}

const validatePassConfirm = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请再次输入您的密码'))
  } else {
    if (value.trim() == form.password) {
      callback()
    }else{
      callback(new Error('两次输入的密码不同,请再次输入'))
    }
  }
}

const validatePassPhone = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请输入您的手机号码'))
  } else {
    let reg = new RegExp(/^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1589]))\d{8}$/)
    if (reg.test(value)) {
      callback()
    }else{
      callback(new Error('手机号格式不正确,请重新输入'))
    }
  }
}

const rules = reactive({
  email: [
    { required: true, validator: validatePassEmail, trigger: 'blur' }
  ],
  password: [
    { required: true, validator: validatePassPassword, trigger: 'blur' }
  ],
  confirmThePassword: [
    { required: true, validator: validatePassConfirm, trigger: 'blur' }
  ],
  phone: [
    { required: true, validator: validatePassPhone, trigger: 'blur' }
  ],
  captcha: [
    { required: true, message: '请输入手机验证码', trigger: 'blur' },
    { min: 4, max: 6, message: '验证码长度不符合', trigger: 'blur' },
  ],
})

const submit = ()=>{
  loginForm.value.validate((valid)=>{
    if(valid){

    }else{

    }
  })
}
</script>


<style lang="scss" scoped>
.form{
  background-color: #090b2d;
  height: 100vh;
  display: flex;
  align-items: center;
  .backLogin{
    display: flex;
    align-items: center;
    color: #fff;
    position: fixed;
    top: 20px;
    right: 20px;
    font-size: 16px;
  }
  .content{
    margin: 0 auto;
    text-align: center;
    background-color: #fff;
    padding: 30px 60px 50px;
    border-radius: 10px;
    .header{
      margin-bottom: 30px;
    }
    .content_item{
      display: flex;
      width: 100%;
      color:#606266;
      .icon{
        color: #f56c6c;
        margin-right: 8px;
      }
      .label{
        width: 82px;
        text-align: justify;
        text-align-last: justify;
      }
    }
    
    .registerButton{
      width: 100%;
      margin-top: 20px;
    }
  }
}
.captcha{
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  .captcha_btn{
    margin: 0 0 0 20px;
  }
}

::v-deep .el-input__validateIcon{
  color: #67C23A
}

::v-deep .el-input__wrapper{
  margin-left: 8px
}
</style>
  

附上简单图片
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

elment-ui的Cascader 级联选择器,点击lable 也能选中前面的复选框

直接mounted里加就OK啦 mounted() {// Cascader 级联选择器: 点击文本就让它自动点击前面的input就可以触发选择。setInterval(function() {document.querySelectorAll(.el-cascader-node__label).forEach(el > {el.onclick function() {if (this.previousElementSibl…

解码奇思妙想:揭秘力扣解压缩编码列表的独特解题之道

本篇博客会讲解力扣“1313. 解压缩编码列表”的解题思路&#xff0c;这是题目链接。 题目要返回一个数组&#xff0c;这个数组是多大呢&#xff1f;由于下标是偶数的元素决定了每个数据要写入几次&#xff0c;所以要对这些项求和&#xff0c;就知道答案数组要开多大了。 接着&…

从零开始理解Linux中断架构(13)--Linux中断域

由于计算机系统日益复杂,外设中断数量不断增加,系统可能同时需要多个中断控制器进行级联,中断源需要统一管理,面对这样的状况,Linux对各种中断控制器进行抽象,对如何进行硬件中断号到IRQ number映射关系上进行进一步抽象出通用与设备无关的架构,通用中断处理代码中就有了…

SpringBoot整合FastDFS笔记

SpringBoot整合FastDFS笔记 FastDFS是国人余庆开发的一个的分布式存储系统&#xff0c;github地址是https://github.com/happyfish100/fastdfsFastDFS的特性:1、分组存储&#xff0c;灵活简洁、对等结构&#xff0c;不存在单点2、 文件ID由FastDFS生成&#xff0c;作为文件访问…

CSDN 周赛 60 期

CSDN 周赛 60 期 60期体验判断题单选题填空题编程题1、题目名称:贝博士的论文审阅统计2、题目名称:括号匹配小结60期体验 本次体验极差,编程题第一题完全看不懂。 然后就是,成绩极差,选择、判断、填空题一共40分,仅仅拿到了十分。 嗯。。。。请允许我先唱两句“都选C”…

[SWPUCTF 2021 新生赛] jicao

需要将json的值进行get传参&#xff0c;以及将id的值进行post传参 因此可以构造payload get传参&#xff1a;?json{"x":"wllm"} post传参&#xff1a;idwllmNB

Z世代消费者崛起,品牌如何靠吉祥物IP增强商业变现能力?

Z世代人群逐渐成为消费者最大主力军&#xff0c;对品牌而言&#xff0c;抓住Z世代消费者的心&#xff0c;就等于抓住机遇。Z世代的年轻人更趋向于为“兴趣”买单&#xff0c;将商品的使用价值与情感价值逐渐分离&#xff0c;拥抱更多的文化&#xff0c;崇尚个性潮流、喜欢新鲜事…

Linux——进程间通信——命名管道

目录 一.命名管道 1.1定义与区别 1.2命名管道的原理 1.3命名管道的创建 1.4命名管道的实现 Comm.hpp 头文件&#xff1a; Sever.cc代码(该进程是读取数据的)&#xff1a; Client.cc(该进程是写数据的)&#xff1a; 1.4.2案例测试&#xff1a; 重新执行Sever: 1.4.3案例…

如何学习PHP常用函数和内置库? - 易智编译EaseEditing

要学习PHP的常用函数和内置库&#xff0c;可以按照以下步骤进行&#xff1a; 学习PHP基础知识&#xff1a; 首先&#xff0c;掌握PHP的基础语法和核心概念。了解变量、数据类型、操作符、控制流程、函数等基本概念和语法规则。 查阅官方文档&#xff1a; PHP官方文档是学习P…

el-date-picker类型是datetimerange然后时间选择器的时分错位和el-time-picker 组件时分秒样式错位

第一种&#xff1a; 现象&#xff1a; 原因&#xff1a; 当分辨率过小且使用了px转换成vw的插件的话&#xff0c;存在vw的精确度不一致导致出现错位&#xff0c;【不知道不用vw转换插件会不会这样&#xff0c;但是解决方法应该是通用的】 解决方法&#xff1a; 在全局引入一…

高通 P-sensor 阈值调整

阈值效果debug 距离传感器调试基本没有太多工作量&#xff0c;主要根据整机来调整阈值&#xff0c;选择最合适的 P-Sensor 感应效果。高通平台sensor代码主要在modem侧&#xff0c;阈值设置是在AP侧&#xff0c;对应配置文件一般是&#xff1a; vendor/qcom/proprietary/senso…

【博客679】LVS NAT模式与FULLNAT模式原理与配置差别

LVS NAT模式与FULLNAT模式原理与配置差别 注意&#xff1a; LVS NAT模式是LVS原生的一种工作方式&#xff0c;而FULLNAT是在NAT模式下通过配置SNAT来 实现FULLNAT的&#xff0c;而且配合SNAT这部分是靠我们自己来实现的 1、LVS NAT模式原理与特点 NAT模式的数据包请求流程&…

基于matlab使用校准相机拍摄的两张图像中恢复相机运动并重建场景的3D结构(附源码)

一、前言 运动结构 &#xff08;SfM&#xff09; 是从一组 3-D 图像估计场景的 2-D 结构的过程。此示例演示如何从两个图像估计校准相机的姿势&#xff0c;将场景的三维结构重建为未知比例因子&#xff0c;然后通过检测已知大小的对象来恢复实际比例因子。 此示例演示如何从使…

如何开一家真人手办店?

从目前的情况来看&#xff0c;在3D建模这一个行业里&#xff0c;真人手办算是一个不错的风口&#xff0c;之前在圈子里刮起了一阵浪潮。手办大家都接触过&#xff0c;真人手办简单来说就是把以前手办的角色变成了真人&#xff0c;作为礼物和纪念品再合适不过。 许多人对这个新生…

【软件安装】Linux系统中安装Nginx服务器(Ubuntu系统)

这篇文章&#xff0c;主要介绍Linux系统中安装Nginx服务器&#xff08;Ubuntu系统&#xff09;。 目录 一、Linux安装Nginx 1.1、下载nginx安装包 &#xff08;1&#xff09;第一种方式 &#xff08;2&#xff09;第二种方式 1.2、上传nginx压缩包到Linux服务器 1.3、解压…

新项目搞完啦!!!

大家好&#xff0c;我是鱼皮。 经过了 7 场直播&#xff0c;总时长近 20 小时&#xff0c;我在 自己的编程导航 的第 5 个 全程直播开发 的项目 —— 智能 BI 项目&#xff0c;完结啦&#xff01; 我在这里对该项目做一个简单的总结&#xff0c;希望让更多需要它的同学看到&am…

爬虫-爬取Bing词典单词相关数据

主要爬取的数据如图片中的红框所示: 爬取效果如下所示: 具体爬虫代码私我&#xff5e;

Seata 四种模式对比总结

一、前言 通过以下系列章节&#xff1a; docker-compose 实现Seata Server高可用部署 | Spring Cloud 51 Seata AT 模式理论学习、事务隔离及部分源码解析 | Spring Cloud 52 Spring Boot集成Seata利用AT模式分布式事务示例 | Spring Cloud 53 Seata XA 模式理论学习、使用…

uniapp中微信小程序不能编译style绑定方法的解决方案

uniapp中动态style问题 这是我的代码设置了根据传参显示不同字体颜色和不同背景色 这两个方法我都写在methods中 methods: {// // 添加不同背景颜色getBackColor(val) {let color "";switch (val[4]) {case 0:color background:${this.colors[0]};break;case 1:col…

Python中的for循环语句及其应用举例(等差数列求和、阶乘、寻找最大值)

Python中的for循环语句及其应用举例(等差数列求和、阶乘、寻找最大值) 在学习任何编程语言的时候&#xff0c;不熟悉判断选择结构和循环结构&#xff0c;就难以发挥计算机优秀的计算能力和提高学习工作效率。本文将重点讲解Python中的for循环语句&#xff0c;并举例等差数列求…