uniapp 之 短信验证码登录

一、需求

输入手机号码,可以获取验证码。

二、实现效果

点击前:

点击后:

三、代码实现

html 复制代码
<template>
	<view class="login">
		<view class="infobox">
			<view class="item">
				<input type="number" placeholder="请输入您的手机号码" v-model="mobile" placeholder-class="login_input" />
			</view>
			
			<view class="item">
				<input type="text" placeholder="请输入验证码" v-model="vxcode" placeholder-class="login_input" />
				<!--主要代码,直接复制使用即可-->
				<view class="yanzhengma" @click="get_code">{{time}} {{text}}</view>
			</view>
		</view>

		<view class="mylogin" @click="submitFun">确定</view>
	</view>

</template>

<script>
	export default {
		data() {
			return {
				//验证码登录
				mobile: '', //手机号码
				vxcode: '', //验证码

				// 验证码(主要代码,直接复制使用即可)
				time: '',
				text: '获取验证码',
			}
		},
		onLoad(e) {},
		onShow() {},

		methods: { 
			//获取验证码(主要代码,直接复制使用即可)
			async get_code() {
				var that = this;
				if (!that.mobile) {
					uni.showToast({
						title: '请输入手机号',
						icon: 'none'
					})
					return;
				}
				var data = {
					mobile: that.mobile,
				}
				this.$api.appPlateForm('post', this.$url.url.auth_vscode, data, (res) => {
					if (res.code == 200) {
						that.disabled = true;
						that.setInterValFunc();

					}
				});
			},
			setInterValFunc() {
				this.time = 60;
				this.text = '秒';
				this.setTime = setInterval(() => {
					if (this.time - 1 == 0) {
						this.time = '';
						this.text = '重新获取';
						this.code = '';
						this.disabled = false;
						clearInterval(this.setTime);
					} else {
						this.time--;
					}
				}, 1000);
			},

			// 确定
			submitFun() {
				var that = this;
				if (!that.mobile) {
					uni.showToast({
						title: '请输入手机号',
						icon: 'none'
					})
					return;
				}
				
				if (!that.vxcode) {
					uni.showToast({
						title: '请输入验证码',
						icon: 'none'
					})
					return;
				}
				
				//调用列表方法
				var data = {
					mobile: that.mobile, //手机号
					code:that.vxcode,//验证码
				}
				this.$api.appPlateForm('post', this.$url.url.auth_forget_password, data, (res) => {
					if (res.code == 200) {
						uni.showToast({
							icon: 'none',
							title: res.msg
						})
						setTimeout(() => {
							uni.navigateBack()
						}, 1000)
					}
				});
			},
		}
	}
</script>



<style>
	.infobox .item {
		display: flex;
		align-items: center;
		justify-content: space-between;
		padding: 10rpx;
		border-bottom: 3rpx solid #DDDDDD;
		margin-bottom: 25rpx;
		position: relative;
	}

	.login_info .infobox .item input {
		width: 70%;
	}

	.login_input {
		font-size: 28rpx;
		font-weight: 400;
		color: #CACACA;
	}
	.yanzhengma {
		position: absolute;
		right: 0;
		top: -8rpx;
		bottom: 0;
		width: 140rpx;
		height: 60rpx;
		line-height: 60rpx;
		text-align: center;
		background: #00BD87;
		border-radius: 30rpx;
		font-size: 22rpx;
		font-family: PingFang SC;
		font-weight: 500;
		color: #FFFFFF;
	}
</style>

完成~

相关推荐
willow1 天前
uniapp实战
uni-app
只会cv的前端攻城狮1 天前
兼容性地狱-Uniapp钉钉小程序环境隔离踩坑实录
前端·uni-app
codingWhat3 天前
小程序里「嵌」H5:一套完整可落地的 WebView 集成方案
前端·uni-app·webview
小时前端4 天前
微信小程序选不了本地文件?用 web-view + H5 一招搞定
前端·微信小程序·uni-app
Mr_li5 天前
给 Vue 开发者的 uni-app 快速指南
vue.js·uni-app
anyup5 天前
🔥2026最推荐的跨平台方案:H5/小程序/App/鸿蒙,一套代码搞定
前端·uni-app·harmonyos
Mintopia6 天前
Vue3 项目如何迁移到 uni-app x:从纯 Web 到多端应用的系统指南
uni-app
Mintopia6 天前
uni-app x 发展前景技术分析:跨端统一的新阶段?
uni-app
不爱说话郭德纲7 天前
告别漫长的HbuilderX云打包排队!uni-app x 安卓本地打包保姆级教程(附白屏、包体积过大排坑指南)
android·前端·uni-app
HashTang8 天前
【AI 编程实战】第 12 篇:从 0 到 1 的回顾 - 项目总结与 AI 协作心得
前端·uni-app·ai编程