手机号验证码登录

点击获取验证码登录---点击获取验证码的时候要对手机号进行校验点击登录按钮的时候也要对表单进行一个校验

静态页面

1、静态页面代码---样式自己写1

<template><!-- #ifdef APP || H5 --><uni-forms class="login-form" :rules="mobileRules" ref="form" :model="formData"><view class="title"><text>手机验证码登录</text></view><uni-forms-item name="mobile"><input type="text" placeholder="请输入手机号" v-model="formData.mobile" class="uni-input-input" placeholder-style="color: #818181" /></uni-forms-item><uni-forms-item name="code"><input type="text" placeholder="请输入验证码" v-model="formData.code" class="uni-input-input" placeholder-style="color: #818181" /><text class="text-button" @click="getCode">{{ time == 5 ? '获取验证码' : `${time}秒后重新获取` }}</text></uni-forms-item><button type="primary" @click="submitButton" class="submitButton">登录</button></uni-forms><!-- #endif -->
</template>

2、定义一个手机号和验证码的表单 && 校验规则

<script setup>
import { ref } from 'vue';const formData = ref({mobile: '',code: ''
});// 校验规则
const mobileRules = ref({mobile: {rules: [{ required: true, errorMessage: '请输入手机号' },{ pattern: /^1[3-9]\d{9}$/, errorMessage: '手机号格式不正确' }]},code: {rules: [{ required: true, errorMessage: '请输入验证码' },{ pattern: '^\\d{6}$', errorMessage: '验证码格式不正确' }]}
});
<script>

3、点击获取验证码的时候--- 对手机号进行校验----校验通过之后--进行倒计时---调接口----要把手机号的参数传给后台

<script setup>
const getCode = async () => {console.log('点击验证码', 1111);try {const mobile = formData.value.mobile;//点击---获取验证码--校验--手机号格式const mobileRegex = /^1[1-9]\d{9}$/;if (!mobileRegex.test(mobile)) {uni.showToast({title: '手机号码格式不正确',icon: 'none'});return;}if (time.value == 5) {// 调验证码接口const yzm = await login({ phoneNumber: formData.value.mobile });console.log('验证码', yzm);// 成功的提示if (yzm.code !== 500) {uni.showToast({title: yam.message,icon: 'success',duration: 2000});} else {uni.showToast({title: yzm.message,icon: 'none',duration: 2000});}let timer = setInterval(() => {time.value--;if (time.value == 0) {clearInterval(timer);time.value = 5;console.log('重置后的time', time.value);}}, 1000);} else {// uni.showToast({//   title: '请勿重复获取验证码',//   icon: 'none'// });}} catch (error) {uni.showToast({title: '验证码已发送',icon: 'none',duration: 2000});}
};
</script>

 

 

 

4、点击登录-- 调接口--传手机号和验证码两个参数

<script setup>
// 登录
const time = ref(5);
const form = ref();
import { useUserStore } from '@/stores/user.js';
// 存储token
const userStore = useUserStore();
// 点击登录按钮
const submitButton = async () => {console.log('点击登录', 1111);const formJy = await form.value.validate();if (formJy) {// 调登录按钮---->>接口--->把手机号和验证码传给后台const loginAPI = await loginButton({ phoneNumber: formData.value.mobile, verifyCode: formData.value.code });console.log('loginAPI,', loginAPI);if (loginAPI.code == 200) {// 保存tokenuserStore.token = loginAPI.data.access_token;// console.log('userStore11', userStore.token);await uni.showToast({title: '登录成功',icon: 'success',duration: 1000});setTimeout(() => {uni.navigateTo({url: '/pages/index/index'});}, 1000);} else {uni.showToast({title: '登录失败',icon: 'none'});}console.log('登录接口--数据', loginAPI);} else {uni.showToast({title: '登录失败',icon: 'none'});}
};
</script>

 

 

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

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

相关文章

怎么获取Unity的安装目录

现成api EditorApplication.applicationPath 获取结果&#xff1a;C:/Program Files/Unity/Hub/Editor/2021.3.10f1/Editor/Unity.exe EditorApplication.applicationContentsPath 获取结果&#xff1a;C:/Program Files/Unity/Hub/Editor/2021.3.10f1/Editor/Data

量化地形处理

1: 量化地形切片&#xff1a;GDAL查询数据&#xff1b;CTB算法转mesh&#xff1b;高度图需要和周围高度图边界做高度融合&#xff0c;四顶点需要做平均值融合&#xff1b;法线想要在前端显示正确必须将mesh坐标转为4326或者3857&#xff1b; 这个使用开源即可&#xff1a;cesi…

PoseC3D数据预处理

poseC3D需要根据以下配置文件进行数据预处理 test_pipeline [dict(typeUniformSampleFrames, clip_len48, num_clips10),dict(typePoseDecode),dict(typePoseCompact, hw_ratio1., allow_imgpadTrue),dict(typeResize, scale(64, 64), keep_ratioFalse),dict(typeGeneratePos…

Flume进阶

目录 第1关:拦截器的使用 第2关:自定义拦截器 第1关:拦截器的使用 代码文件: # Define source, channel, sink #agent名称为a1# Define source #source类型配置为avro,监听8888端口,后台会自动发送数据到该端口 #拦截后台发送过来的数据,将y.开头的保留下来# Define chan…

asp.net结课作业中遇到的问题解决3

目录 1、想实现不止鼠标滑过就显示图片&#xff0c;初始化状态下也可以显示图片&#xff0c;且每个图片还会自动变化&#xff0c;该如何实现 2、 同一个项目下的网页之间可以直接在地址栏输入跳转到阅读界面从而实现在这个跳转&#xff0c;那么如何防止这种现象呢&#xff1f;…

自主实现Telnet流量抓取

自主实现Telnet流量抓取 根据测试需求&#xff0c;需要抓取Telnet流量包&#xff0c;使用wireshark Python&#xff08;socket、telnetlib库&#xff09;实现 实现代码 主要此处有坑&#xff0c; 根据协议规则&#xff0c;wireshark 默认端口为23 的是Telnet协议&#xff0…

【JavaEE精炼宝库】计算机是如何工作的

目录 前言&#xff1a; 一、冯诺依曼体系 二、CPU基本知识 2.1 硬盘|内存|CPU关系&#xff1a; 2.2 指令&#xff1a; 2.3 CPU是如何执行指令的&#xff08;重点&#xff09;&#xff1a; 2.4 小结&#xff1a; 三、编程语言 3.1 程序&#xff1a; 3.2 编程语言发展&a…

Java中HashSet、LinkedHashSet和TreeSet的底层原理

HashSet Java中的HashSet的底层原理主要基于哈希表&#xff08;HashMap&#xff09;来实现。以下是HashSet底层原理的简要总结&#xff1a; 数据结构&#xff1a; HashSet内部使用哈希表&#xff08;实际上是一个HashMap的实例&#xff09;来存储元素。哈希表由一个数组&#…

C#面:解释什么是WCF?目前最新的版本是多少

WCF&#xff08;Windows Communication Foundation&#xff09;是微软提供的一种用于构建分布式应用程序的框架。它提供了一种统一的编程模型&#xff0c;使开发人员能够使用多种通信协议&#xff08;如HTTP、TCP、MSMQ等&#xff09;在不同的平台上进行通信。 WCF的主要目标是…

线程传参、线程ID

传递临时对象作线程参数 #include<ioatream> #include<thread> using namespace std; void nowork(const int& a) {cout<<huyanluanyu<<endl; } int main() {int a677;thread newdozer(nowork,a);newdozer.detach(); } 向新创建的线程中传递参数…

【人工智能】博弈搜索(极小极大值、α-β剪枝)

1. 极小极大值算法 人工智能中 “博弈” 通常专指博弈论专家们称为有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏&#xff08;如国际象棋)。术语中&#xff0c;这是指在确定的、完全可观察的环境中两个 Agent必须轮流行动&#xff0c;在游戏结束时效用值总是相等并…

Python 进阶(十九):解析命令行参数(argparse 模块)

大家好&#xff0c;我是水滴~~ 当处理命令行参数时&#xff0c;Python 的 argparse 模块是一个强大而灵活的工具。它提供了一个简单且一致的方式来定义命令行参数、选项和子命令&#xff0c;并帮助你解析和验证用户提供的输入。本教程将详细介绍 argparse 模块的使用方法和常见…

Ansys电力变压器解决方案

电力变压器设计挑战 目前面临的挑战&#xff1a; 1、磁场 • 非线性材料 • 涡流电流 • 磁场随时间的变化 • 瞬态激励源下的磁场变化 • 空间磁场分布 2、电场 • 介电常数的变化 • 电极的尺寸和形状 • 空间电场分布 变压器的两个类别 变压器可以分为两类进行F…

springboot项目中引入Xxl-Job并部署和使用

目录 模块划分 配置调度中心 配置执行器 添加执行器 写一个简单的定时任务 XxlJobHelper xxl-job是分布式任务调度平台&#xff0c;部署为独立的调度服务平台 github地址&#xff1a;xuxueli/xxl-job: A distributed task scheduling framework.&#xff08;分布式任务调度…

视频怎么去水印?这三款工具助你轻松搞定

在视频处理的过程中&#xff0c;水印常常成为我们的一大难题。它不仅影响了视频的美观度&#xff0c;还可能涉及版权问题。那么&#xff0c;如何高效去除视频中的水印呢&#xff1f;接下来&#xff0c;我将为大家推荐三款国内外备受好评的视频去水印工具&#xff1a;水印云、In…

Jmeter性能测试(五)

一、Jmeter参数化常用方式 1、CSV 数据文件设置 2、查询数据库(JDBC Connection Configuration) 二、CSV 数据文件设置 1、准备一个txt文件(不需要写表头&#xff0c;直接写你要用的数据就行了&#xff0c;多个字段用英文逗号隔开) 2、添加一个CSV 数据文件设置(放全局最上…

让《行列视》解放数据力量,提升业务洞察

在当今信息化浪潮下&#xff0c;数据已经成为企业发展的核心驱动力之一。如何更好地管理和利用数据&#xff0c;已成为企业发展过程中亟需解决的问题之一。而报表工具作为数据可视化和分析的利器&#xff0c;正逐渐受到企业的重视和青睐。 一、《行列视》作为报表工具的重要性…

RabbitMQ基础入门

初识MQ 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不能跟多个人同…

栈的2道面试题【有效的括号】【用栈实现队列】

栈的面试题&#xff1a; 1.有效的括号 题目&#xff1a; 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合…

560. 和为 K 的子数组 974. 和可被 K 整除的子数组 【前缀和】

题目链接 ​​​​​​​974. 和可被 K 整除的子数组 560. 和为 K 的子数组 今天刷题的时候&#xff0c;刷了这两题&#xff0c;感觉挺有意思的。代码写起来挺简单的&#xff0c;但是思路和其中的细节以及涉及到的知识点确实让我挺意外的。这里写个博客解析一波&#xff0c;也是…