MD5加密和注册页面的编写

MD5加密

1.导入包

复制代码
npm install --save ts-md5

2.使用方式

复制代码
import { Md5 } from 'ts-md5';
//md5加密后的密码
const md5Pwd=Md5.hashStr("123456").toUpperCase();

遇见的问题及用到的技术

注册页面

register.vue代码

复制代码
<template>
  <div class="wapper">

    <el-card style="max-width: 480px">
      <template #header>
        <div class="card-header">
          <span>欢迎登录</span>
        </div>
      </template>

      <el-form ref="formRef" :model="FormData" :rules="rules" label-width="auto" status-icon> 
        <el-form-item label="邮箱" prop="email">
          <el-input v-model="FormData.email" />
        </el-form-item>
        <el-form-item label="电话" prop="tel">
          <el-input v-model="FormData.tel" />
        </el-form-item>
        <el-form-item label="验证码" prop="code">
          <el-row :gutter="20">
            <el-col :span="15"> <el-input v-model="FormData.code" /></el-col>
            <el-col :span="6"> <el-button type="primary" @click="sendCode">发送验证码</el-button></el-col>
          </el-row>
        </el-form-item>
        <el-form-item label="密码" prop="password">
          <el-input v-model="FormData.password" />
        </el-form-item>
        <el-form-item label="确认密码" prop="password1">
          <el-input v-model="FormData.password1" />
        </el-form-item>
        <el-form-item label="昵称" prop="nackName">
          <el-input v-model="FormData.nackName" />
        </el-form-item>


        <el-form-item class="btn-box">
          <el-button type="primary" @click="submitForm(formRef)">
            注册
          </el-button>
          <!-- 重置表单 -->
          <el-button @click="resetForm(formRef)">重置</el-button>
        </el-form-item>

      </el-form>

      <template #footer>已有账号,去登录 <span> </span>
        <el-button type="success">登录</el-button>
      </template>
    </el-card>



  </div>

</template>


<script setup lang="ts">
import { reactive,ref } from 'vue';
import { userApi } from '@/api/index';
import { ElMessage } from 'element-plus';
import {useRoute,useRouter} from 'vue-router';
import { Md5 } from 'ts-md5';

const route = useRoute()
const router = useRouter()


const formRef = ref()

const FormData = reactive({
  tel: '',
  email: '',
  code:'',
  password: '',
  password1: '',
  nackName: '',
 
})

//表单验证规则,表单中的prop属性
const rules = reactive<any>({
  tel: [
    { required: true, message: '请输入手机号', trigger: 'blur' },
    { pattern: /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/, message: '手机号格式错误', trigger: 'blur' },
  ],
  code: [
    { required: true, message: '请输入验证码', trigger: 'blur' },
    { pattern: /^\d{4}$/, message: '验证码为4位数字', trigger: 'blur' },
  ],
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' },
    { pattern: /^[a-zA-Z]\w{5,17}$/, message: '密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)', trigger: 'blur' },
  ],
  password1: [
    { required: true, message: '请确认密码', trigger: 'blur' },
    { pattern: /^[a-zA-Z]\w{5,17}$/, message: '密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)', trigger: 'blur' },
  ],
  email: [
    { required: true, message: '请输入邮箱地址', trigger: 'blur' },
    { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
  ],
})


//发送手机验证码
const sendCode = () => {
  if (FormData.tel == "") {
        ElMessage.error("请输入手机号")
        return
    }
  userApi.sendCodeTel.call({tel:FormData.tel}).then((res: any) => {
    ElMessage.success("验证码发送成功")
  })
}

//点击注册后调用的被抽出来的方法
const submitFormData = () => {

  if(FormData.password != FormData.password1){
    ElMessage.error("两次输入密码不一致")
    return
  }

  //使用MD5对密码进行加密
  const md5Pwd=Md5.hashStr(FormData.password).toUpperCase();
  //传入后端的参数
  let params = {
    tel: FormData.tel,
    email: FormData.email,
    password:md5Pwd ,
    nickName: FormData.nackName,
    code:FormData.code,
  }
  userApi.register.call(params).then((res: any) => {
    ElMessage.success("注册成功")
    router.push({ name: "login" })
  })
  console.log(FormData)

}


//点击注册按钮后
const submitForm = async (formEl: any) => {
  await formEl.validate((valid: any, fields: any) => {
    
    if (valid) {    
      //抽出来方法来数据提交后
      submitFormData()
    }
  })
}

// 重置表单
const resetForm = (formEl: any) => {
  if (!formEl) return
  formEl.resetFields()
}
</script>

<style>
.wapper {
  height: 100vh;
  background-color: antiquewhite;
  display: flex;
  justify-content: center;
  align-items: center;
}

.btn-box {
  padding-left: 25%;
}
</style>

路由

使用Api时每次都要导入

封装了一下

使用时

相关推荐
optimistic_chen1 分钟前
【Vue入门】scoped与组件通信
linux·前端·javascript·vue.js·前端框架·组件通信
SuperEugene7 分钟前
前端空值处理规范:Vue 实战避坑,可选链、?? 兜底写法|项目规范篇
前端·javascript·vue.js
前端百草阁8 分钟前
Vue3 Diff 算法详解
前端·javascript·vue.js·算法·前端框架
im_AMBER9 分钟前
前后端对接: ESM配置与React Router
前端·javascript·学习·react.js·性能优化·前端框架·ecmascript
学且思11 分钟前
使用import.meta.url实现传递路径动态加载资源
前端·javascript·vue.js
problc13 分钟前
OpenClaw 的前端用的React还是Vue?
前端·vue.js·react.js
凰轮16 分钟前
vue实现大文件切片上传
vue.js
冰暮流星16 分钟前
javascript里面的return语句讲解
开发语言·前端·javascript
步步为营DotNet20 分钟前
使用.NET 11的Native AOT提升应用性能
java·前端·.net
左耳咚23 分钟前
Claude Code 记忆系统与 CLAUDE.md
前端·人工智能·claude