IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Vue &uni-app(附源码)-----实现登录注册功能 -> 正文阅读

[移动开发]Vue &uni-app(附源码)-----实现登录注册功能

需求:

制作一个简易登录界面

思路:

(1)排版(不细讲)
(2)登录密码的input框,

我们通过v-if来判断输入框的类型、小眼睛的切换、密码是否隐藏

-----输入框的类型?

设置inputType这个变量的初始值为true

<input class="input-phone" type="password" 
v-model="password" placeholder="登录密码" v-if="inputType" />

<input class="input-phone" type="text" 
v-model="password" placeholder="登录密码" v-if="!inputType" />
data() {
			return {
				inputType: true, //初始化时,密码是隐藏,type:password
				password: ''
			}

然后通过点击输入框右侧小眼睛来切换输入框的类型

------小眼睛的切换

?

?在小眼睛上,绑定图片的路径,使用三元表达式,进行切换,

并绑定点击事件@click="changePw"

当inputType:ture时,就会显示图片2,显示密码(就是小黑点),

当inputType:false时,显示明文(数字或者文字)

<image class="input-type"
		:src="inputType ? require('static/mine/apply/2.jpg') :require('static/mine/apply/1.jpg')"
		mode="widthFix" @click="changePw"></image>
//隐藏显示密码
			changePw() {
				let pw = this.password //进行赋值
				this.inputType = !this.inputType 
				this.$nextTick(() => {
					this.password = pw
				})

(3)校验

在按钮上绑定点击事件

<button class="login-btn" type="default" @click="doLogin">登录</button>
//账号密码登录
	async doLogin() {
		var that = this; 声明赋值
		if (that.phone.length == 0 || that.password.length == 0) { 
        //校验非空 当手机号码或者密码没有填时,会有弹框
			wx.showToast({ //弹框提示
				icon: 'none',
				title: '登录账号或密码不能为空!',
				duration: 2000,
			})
		} else if (!this.checked) { 
            //勾选协议  //当服务协议没有打勾时,会有警告弹框
			wx.showToast({ //弹框提示
				icon: 'none',
				title: '请勾选用户服务协议',
				duration: 2000,
			})
		} else { 
			let params = {
				account: that.phone,
				password: that.password,
			};
			let data = await Api.apiCall('post', Api.my.login, params);
			console.log(data);
			if (data.result.code == "0") {
				wx.setStorageSync('account', that.phone);
				wx.setStorageSync('password', that.password);
				wx.setStorageSync('startTime', data.data.startTime);
				wx.setStorage({
					key: "user",
					data: data.data.user,
					success: function() {
						wx.switchTab({
							url: '/pages/home/index'
						});
					}
				});
			} else {  
				wx.showToast({
					icon: 'none',
					title: data.result.msg,
					duration: 2000,
				})
			}
		}

源码展示:

<template>
<view>
	<!-- 登录注册板块 -->
<view class="login">
	<view class="title">请登录</view>
<view class="input-content">
	<view class="input-box">
		<image class="input-bg" 
                      :src="require('static/mine/like/like.png')" 
                         mode="scaleToFill"></image>
	   <input class="input-phone" type="text" v-model="phone" placeholder="登录账号" />
	</view>
	<view class="input-box">
	<image class="input-bg" 
        :src="require('static/mine/like/forward.png')" mode="scaleToFill"></image>
	<input class="input-phone" 
        type="text" v-model="password" placeholder="登录密码" v-if="!inputType" />
	<input class="input-phone" 
        type="password" v-model="password" placeholder="登录密码" v-if="inputType" />
	<image class="input-type":src="inputType ? 
        require('static/mine/apply/2.jpg') : require('static/mine/apply/1.jpg')"
		mode="widthFix" @click="changePw"></image>
</view>
</view>
<button class="login-btn" type="default" @click="doLogin">登录</button>
<!-- 服务协议板块 -->
<view class="checkbox">
	<u-checkbox-group>
		<u-checkbox v-model="checked" shape="circle" size="36" active-color="#CC0000">
						已阅读并同意<text class="user">《用户服务协议》</text>
		</u-checkbox>
	</u-checkbox-group>
</view>
</view>		
	</view>
</template>

<script>
	export default {
		data() {
			return {
				inputType: true, //显示密码
				password: ''
			}
		},
		methods: {
			
			//隐藏显示密码
			changePw() {
				let pw = this.password 
				this.inputType = !this.inputType 
				this.$nextTick(() => {
					this.password = pw
				})
		},
		//账号密码登录
		async doLogin() {
			var that = this;
			if (that.phone.length == 0 || that.password.length == 0) { //校验非空
				wx.showToast({ //弹框提示
					icon: 'none',
					title: '登录账号或密码不能为空!',
					duration: 2000,
				})
			} else if (!this.checked) { //勾选协议
				wx.showToast({ //弹框提示
					icon: 'none',
					title: '请勾选用户服务协议',
					duration: 2000,
				})
			} else {
				let params = {
					account: that.phone,
					password: that.password,
				};
				let data = await Api.apiCall('post', Api.my.login, params);
				console.log(data);
				if (data.result.code == "0") {
					wx.setStorageSync('account', that.phone);
					wx.setStorageSync('password', that.password);
					wx.setStorageSync('startTime', data.data.startTime);
					wx.setStorage({
						key: "user",
						data: data.data.user,
						success: function() {
							wx.switchTab({
								url: '/pages/home/index'
							});
						}
					});
				} else {
					wx.showToast({
						icon: 'none',
						title: data.result.msg,
						duration: 2000,
					})
				}
			}
		},
		onReady() {

		}
	}
	}
</script>

<style scoped lang="scss">
	
	.login {
		.bg-content {
			width: 100%;
			height: 450upx;
			position: relative;
			overflow: hidden;
	
			.bg {
				// width: 100%;
				width: 30upx;
				height: auto;
				position: absolute;
				bottom: 0;
				left: 50%;
				transform: translateX(-50%);
			}
		}
	
		.title {
			padding: 47upx;
			text-indent: 55upx;
			font-size: 48upx;
			font-weight: 400;
			color: #333333;
		}
	
		.input-content {
			padding: 0 23upx;
	
			.input-box {
				position: relative;
				margin: 0 auto;
				padding: 0 50upx;
				height: 120upx;
	
				.input-bg {
					position: absolute;
					left: 0;
					right: 0;
					top: 40upx;
					bottom: 0;
					width: 30upx;
					height: 30upx;
				}
	
				.input-phone {
					width: 100%;
					height: 100upx;
				}
	
				.input-type {
					z-index: 2;
					position: absolute;
					right: 50upx;
					top: 30upx;
					width: 40upx;
					height: auto;
				}
			}
		}
	
		.login-btn {
			margin-top: 86upx;
			width: 92%;
			height: 104upx;
			background: #CC0000;
			border-radius: 52px;
			color: #FFFFFF;
			box-shadow: 0upx 0upx 20upx rgba(204, 0, 0, 0.2);
		}
	
		.checkbox {
			width: 92%;
			margin: 20upx auto;
			font-size: 28upx;
	
			.user {
				color: #0096FF;
			}
		}
	}
</style>

效果展示:

?

?

?

?

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:53:22  更:2021-09-09 11:53:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:29:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码