uni-app —— 小程序登录功能的相关实现

news2024/11/11 22:19:40

文章目录

  • 前言
  • 一、示例图
  • 二、静态页面的搭建
    • 1.登录页面的静态页面
    • css样式设置
    • 2.我的页面的静态页面
    • css样式设置
  • 三、登录页面的实现逻辑
    • 1.进行表单验证的组件
    • 2.验证登录成功的思路
    • 3.具体代码实现


一、示例图

 

二、静态页面的搭建

实现思路:

主要需要实现的功能点:当用户登录与未登录时,“我的页面”的显示状态应随之改变。

1.登录的静态页面

<template>
	<view>
		<image class="bg-img" src="../../static/images/one.jpg"></image>
		<view class="wrapper">

			<!-- 顶部退出按钮 -->

			<!-- 表单区域 -->
			<u-form :model="form" ref="uForm">
				<u-form-item prop="username" class="border-active">
					<u-input v-model="form.username" placeholder="请输入手机号/邮箱/用户名" />
				</u-form-item>
				<u-form-item prop="password">
					<u-input v-model="form.password" placeholder="请输入密码" />
				</u-form-item>
				<view class="m-3 button">
					<u-button @click="submit" text="登录"
						color="linear-gradient(to right, rgb(66, 83, 216), rgb(213, 51, 186))"></u-button>
				</view>
				<u-form-item prop="choose">
					<view class="d-flex m-3">
						<view class="checkbox d-flex" @click="changeChecked">
							<u-checkbox-group>
								<u-checkbox shape="circle" size="34" :checked="isChecked" :name="item.name">
								</u-checkbox>
								请勾选用户协议
							</u-checkbox-group>
						</view>
						<view class="forget-password">
							<text>忘记密码</text>
						</view>
					</view>
				</u-form-item>
			</u-form>



		</view>
	</view>

</template>

css样式设置

<style scoped>
	/* 表单外部容器样式设置 */
	.bg-img {
		position: fixed;
		width: 100%;
		height: 100%;
		top: 0;
		left: 0;
		z-index: -1;
		opacity: .7;
	}

	.wrapper {
		margin: 0 auto;
		margin-top: 150rpx;
		padding: 80rpx;
		width: 500rpx;
		border: 3rpx solid rbg(193, 200, 215);
		border-radius: 30rpx;
		background: #fff;
		opacity: .8;
	}



	.border-active {
		border-color: black;
	}

	.m-3 {
		justify-content: space-between;
		font-size: 30rpx;
	}
</style>

2."我的页面"的静态页面

<template>
	<view>
		<!-- 用户昵称区域 -->
		<view class="head">
			<image class="bg-img" src="../../static/images/bg.jpg" mode=""></image>
			<view class="d-flex user-about">
				<view class="d-flex">
					<view>
						<image class="user-img"
							:src="userinfo.avatar ? userinfo.avatar : '../../static/images/demo/demo6.jpg'" mode="">
						</image>
					</view>
					<view class="user-name">
						<text @click="toLogin">{{userinfo.nickname ?userinfo.nickname : '登录/注册' }}</text>
					</view>
				</view>
				<view class="member" v-if="userinfo.status == 1">
					<text>会员积分</text>
				</view>
			</view>
		</view>

		<!-- 订单信息区域 -->
		<view v-if="userinfo.status == 1">
			<view class="order d-flex a-center">
				<view class="my-order">
					我的订单
				</view>
				<view class="more-order">
					更多
				</view>
			</view>
			<view>
				<scroll-view scroll-x="true">
					<view class="d-flex">
						<view class="order-item">
							<view>
								<image class="order-img" src="../../static/images/demo/demo5.jpg" mode=""></image>
							</view>
							<view>
								小米手机
							</view>
						</view>
						<view class="order-item">
							<view>
								<image class="order-img" src="../../static/images/demo/demo5.jpg" mode=""></image>
							</view>
							<view>
								小米手机
							</view>
						</view>
						<view class="order-item">
							<view>
								<image class="order-img" src="../../static/images/demo/demo5.jpg" mode=""></image>
							</view>
							<view>
								小米手机
							</view>
						</view>
						<view class="order-item">
							<view>
								<image class="order-img" src="../../static/images/demo/demo5.jpg" mode=""></image>
							</view>
							<view>
								小米手机
							</view>
						</view>
						<view class="order-item">
							<view>
								<image class="order-img" src="../../static/images/demo/demo5.jpg" mode=""></image>
							</view>
							<view>
								小米手机
							</view>
						</view>
						<view class="order-item">
							<view>
								<image class="order-img" src="../../static/images/demo/demo5.jpg" mode=""></image>
							</view>
							<view>
								小米手机
							</view>
						</view>
					</view>
				</scroll-view>
			</view>
		</view>

		<!-- 功能列表区域 -->
		<view class="main">
			<view class="main-item" v-for="(item,index) in title" :key="index">
				<text class="iconfont icon" :class="item.icon" :style="'color:'+item.leftIconStyle"></text>
				<text>{{item.title}}</text>
			</view>
		</view>

		<!-- 退出登录区域 -->
		<view class="footer" v-if="userinfo.status == 1">
			<text @click="goLogin">退出登录</text>
		</view>
	</view>
</template>

css相关样式

<style scoped>
	/* 顶部区域样式设置 */

	.bg-img {
		position: fixed;
		width: 100%;
		height: 380rpx;
		top: 0;
		left: 0;
		z-index: -1;
		opacity: .7;
	}

	.user-img {
		width: 180rpx;
		height: 180rpx;
		border-radius: 50%;
		margin-right: 30rpx;
	}

	.user-about {
		height: 180rpx;
		line-height: 180rpx;
		margin-top: 150rpx;
		padding: 0 40rpx;
		justify-content: space-between;
	}

	.user-name text {
		font-size: 40rpx;
	}

	.member {
		width: 220rpx;
		height: 80rpx;
		line-height: 80rpx;
		margin-top: 45rpx;
		background: linear-gradient(to right, rgb(170, 170, 255), rgb(201, 134, 142));
		text-align: center;
		border-radius: 50rpx;
	}

	/* 订单区域样式设置 */
	.order {
		bakcground: #bfa;
		padding: 40rpx;
		justify-content: space-between;
		margin-top: 30rpx;
	}

	.more-order {
		width: 140rpx;
		height: 60rpx;
		line-height: 60rpx;
		text-align: center;
		border-radius: 50rpx;
		border: 3rpx solid rgb(244, 244, 244);
	}

	.order-img {
		width: 150rpx;
		height: 150rpx;
		border-radius: 30rpx;
	}

	.order-item {
		margin-left: 33rpx;
	}

	/* 功能区域列表样式设置 */
	.main {
		padding: 0 30rpx;
		margin-top: 55rpx;
		line-height: 80rpx;
	}

	.main-item {
		border-bottom: 3rpx solid rgb(214, 214, 214);
	}

	.icon {
		margin-right: 20rpx;
	}

	/* 退出登录区域样式设置 */
	.footer {
		height: 100rpx;
		line-height: 100rpx;
		margin-top: 20rpx;
		text-align: center;
	}

	.footer text {
		width: 200rpx;
		background: pink;
		height: 80rpx;
		line-height: 80rpx;
		border-radius: 40rpx;
		display: inline-block;
		background: linear-gradient(to right, rgb(203, 211, 216), rgb(192, 122, 141));
	}
</style>

三、登录页面的实现逻辑

1.进行表单验证的组件

在这里可以使用  uview中的 from组件,在进行表单验证时较为简单。

2.验证登录成功的思路

  • 当用户名以及密码格式输入有误时,应有相应的提示。

  • 在用户名与密码输入正确后,若用户没有勾选同意用户协议,也应该有相应提示。

 3.具体代码实现

3.1 登录功能的实现


<script>
	// 引入获取登录页面数据的方法
	import {
		getLogin
	} from '../../api/login.js'

	export default {
		data() {
			return {

				// 用来表示复选框是否被选中
				isChecked: false,
				form: {
					username: '',
					password: '',
					choose: ''
				},
				rules: {
					// 验证用户名
					username: [{
							required: true,
							message: '请输入用户名',
							trigger: ['change', 'blur'],
						},
						{
							// 自定义验证函数,见上说明
							validator: (rule, value, callback) => {

								// 上面有说,返回true表示校验通过,返回false表示不通过
								// uni.$u.test.mobile()就是返回true或者false的
								return uni.$u.test.enOrNum(value);
							},
							message: '用户名不正确',
							// 触发器可以同时用blur和change
							trigger: ['change', 'blur'],
						}
					],
					// 验证密码
					password: [{
							required: true,
							message: '请输入密码',
							trigger: ['change', 'blur'],
						},
						{
							// 自定义验证函数,见上说明
							validator: (rule, value, callback) => {
								// 上面有说,返回true表示校验通过,返回false表示不通过
								// uni.$u.test.mobile()就是返回true或者false的
								return uni.$u.test.enOrNum(value);
							},
							message: '密码不正确',
							// 触发器可以同时用blur和change
							trigger: ['change', 'blur'],
						}
					],

				},

			};
		},

		methods: {
			// 表单提交事件
			submit() {
				if (this.isChecked) {
					this.$refs.uForm.validate().then(res => {
						uni.$u.toast('登录成功!');
						getLogin(this.form).then((response) => {
							console.log(response)
							if (response.msg == 'ok') {
								this.$store.dispatch('login/userInfo', response.data);
							}
						})
						uni.switchTab({
							url: '../../pages/myfile/myfile'
						})
					}).catch(errors => {
						uni.$u.toast('登录失败!')
					})
				} else {
					uni.showModal({
						title: '提示',
						content: '请勾选用户协议!',
					});

				}
			},

			// 复选框的点击事件
			changeChecked() {
				this.isChecked = !this.isChecked;
				console.log(this.isChecked)
			},

		},

		// 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
		onReady() {
			this.$refs.uForm.setRules(this.rules);
		},

	};
</script>

3.2 “我的页面”功能实现

<script>
	import {
		mapState
	} from 'vuex';
	export default {
		data() {
			return {
				title: [{
						title: '小米会员',
						icon: 'icon-VIP',
						leftIconStyle: '#FDBF2E'
					},
					{
						title: '会员中心',
						icon: 'icon-huangguan',
						leftIconStyle: '#FCBE2D'
					},
					{
						title: '服务中心',
						icon: 'icon-service',
						leftIconStyle: '#FA6C5E'
					},
					{
						title: '小米之家',
						icon: 'icon-home',
						leftIconStyle: '#FE8B42'
					},
					{
						title: '更多功能',
						icon: 'icon-gengduo',
						leftIconStyle: '#9ED45A'
					},
				]
			}
		},
		computed: {
			...mapState('login', ['userinfo'])
		},
		methods: {
			// 退出登录跳转到登录页面
			goLogin() {
				uni.navigateTo({
					url: '../../pages/login/login'
				})
				this.$store.dispatch('login/loginout')
			},
			// 点击登录字体登录
			toLogin() {
				uni.navigateTo({
					url: '../../pages/login/login'
				})
			}
		}
	}
</script>

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

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

相关文章

企业为什么做不好生产计划?

生产计划是企业对生产任务作出统筹安排&#xff0c;具体拟定生产产品的品种、数量、质量和进度的计划。是企业经营计划的重要组成部分&#xff0c;是企业进行生产管理的重要依据。既是实现企业经营目标的重要手段&#xff0c;也是组织和指导企业生产活动有计划进行的依据。企业…

【微服务】SpringCloud微服务注册源码解析

目录 一、前言 1、简述 2、SpringCloudCommons 项目 二、客户端服务注册 1、流程图 2、入口 2.1、客户端注册引入依赖 3、EurekaServiceRegistry服务注册机 3.1、EurekaServiceRegistry注册逻辑 4、ApplicationInfoManager 4.1、setInstanceStatus(InstanceStatus s…

【区块链技术与应用】(七)

资料来源 https://pkg.go.dev/github.com/hyperledger/fabric-sdk-go#section-readme https://github.com/hyperledger/fabric-sdk-go https://wiki.hyperledger.org/display/fabric https://github.com/hyperledger/fabric-samples 书接上回&#xff0c;补充getway链码分析 上…

maven assembly打包生成Java应用启动脚本bat和sh

1. maven插件介绍 springboot应用通过maven插件appassembler-maven-plugi生成启动脚本bat和sh。根据官网介绍&#xff0c;这个插件主要用于生成启动 java应用程序的脚本&#xff0c;能将项目依赖jar能够打包目录中&#xff0c;并且它们加入启动脚本类路径中。 主要命令 appas…

springboot瑞吉外卖

创建数据库,项目初始化静态资源不在static目录下&#xff0c;如何映射结果类登录过滤器拦截路径全局异常处理器分页查询消息转换器修改禁用分页编辑公共字段自动填充使用ThreadLocal新增用户绑定的数据不可删除上传下载前端传递的数据&#xff0c;不在同一张表时&#xff0c;DT…

java设计模式之策略模式

一&#xff1a;策略模式 1.什么是策略模式? 模板方法模式是一种行为设计模式&#xff0c; 它在超类中定义了一个算法的框架&#xff0c; 允许子类在不修改结构的情况下重写算法的特定步骤。 策略模式的基本介绍 1.策略模式&#xff08;Strategy Pattern&#xff09;中&#x…

【MQ基本概念 MQ的工作原理】

一、MQ基本概念 1、MQ概述 MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存 消息的容器。多用于分布式系统之间进 行通信。 小结 MQ&#xff0c;消息 队列&#xff0c;存储消息的中间件 分布式系统通信两种方式&#xff1a;直接远程…

2022年数维杯D题 极端天气问题思路指导

D题损失评估与应对策略的研究三重拉尼娜事件下的极端气候灾害 很明显D题是一个数据收集➕数据处理类型题目&#xff0c;这与美赛中的E题题型相似。该题所涉及的极端天气与2021年小美赛极端天气题目高度相似。因此&#xff0c;我们首先对大家整理了去年小美赛极端天气的相关论文…

Kubeadm搭建kubernetes集群

Kubeadm搭建kubernetes集群 环境说明 | 角色 | ip | 操作系统 |组件 | | – | – | – | | master | 192.168.226.10 |centos8 | docker&#xff0c;kubectl&#xff0c;kubeadm&#xff0c;kubelet | | node1 | 192.168.226.20 |centos8 |docker&#xff0c;kubectl&#xff…

登陆拦截案例

登陆拦截案例 登陆拦截器小案例&#xff0c;判断登陆的用户名及密码是否正确&#xff1b;&#xff1a; 1.创建一个maven项目&#xff0c;导入相关的坐标&#xff1a; <dependencies><dependency><groupId>org.springframework</groupId><artifact…

【Hack The Box】windows练习-- Blackfield

HTB 学习笔记 【Hack The Box】windows练习-- Blackfield &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &…

[Games 101] Lecture 10 Geometry 1 (Introduction)

Geometry 1 (Introduction) Ways to Represent Geometry 隐式 (Implicit) 几何 只告诉点满足某种约束或关系&#xff0c;并不给出实际的点&#xff0c;也就是说&#xff0c;定义 f(x,y,z)0f(x,y,z) 0 f(x,y,z)0 例如&#xff0c;定义三维空间中的点&#xff0c;满足&#…

上海亚商投顾:信创概念掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪指数早盘低开低走&#xff0c;沪指一度跌超1%&#xff0c;失守3100点关口&#xff0c;创业板指盘中跌逾2%&#xff…

软件工程毕业设计 SSM计算机毕设项目合集【源码+论文】

文章目录前言 题目1 : 基于SSM的网上租车系统 <br /> 题目2 : 基于SSM的药品管理系统 <br /> 题目3 : 基于SSM的药源药品商城保健品购物网站 <br /> 题目4 : 基于SSM的疫情防控物业管理系统 <br /> 题目5 : 基于SSM的音乐网站 <br />前言 &…

如何通过更好的文档管理减轻小型企业的压力

如何通过更好的文档管理减轻小型企业的压力 企业如何处理企业文档在很大程度上体现了企业以目前的形式茁壮成长的能力以及在当今的市场中成长为成熟的、有竞争力的实体的能力。 具体来说&#xff0c;在小型企业中&#xff0c;许多员工都需要承担多种职责&#xff0c;每一分钟…

代码随想录58——单调栈:739每日温度、 496下一个更大元素I

文章目录1.739每日温度1.1.题目1.2.解答1.2.1.单调栈使用情况1.2.2.本题解答2. 496下一个更大元素I2.1.题目2.2.解答1.739每日温度 参考&#xff1a;代码随想录&#xff0c;739每日温度&#xff1b;力扣题目链接 1.1.题目 1.2.解答 1.2.1.单调栈使用情况 首先想到的当然是暴…

通过STM32Cube配置完成基于I2C协议的AHT20温湿度传感器的数据采集

文章目录前言一、I2C协议1、应用2、组成3、软件I2C和硬件I2C3.1软件I2C3.2硬件I2C二、通过硬件I2C协议采集AHT20的数据1、配置项目2、配置代码三、效果四、总结五、参考资料前言 硬件&#xff1a;stm32f103c8t6 核心板软件&#xff1a;STM32CubeMX 6.4.0软件&#xff1a;keil5…

java常见集合框架的区别

1.说说有哪些常见集合&#xff1f; 集合相关类和接口都在java.util中&#xff0c;主要分为3种&#xff1a;List&#xff08;列表&#xff09;、Map&#xff08;映射&#xff09;、Set(集)。 Java集合主要关系 其中Collection是集合List、Set的父接口&#xff0c;它主要有两个子…

澳大利亚博士后招聘|国立大学—太阳能电池方向

【国外博士后招聘-知识人网】澳大利亚国立大学博士后—太阳能电池方向 澳大利亚国立大学&#xff08;The Australian National University&#xff09;&#xff0c;简称ANU&#xff0c;始建于1946年&#xff0c;坐落于澳大利亚首都堪培拉&#xff0c;是公立研究型综合类大学&am…

Ernie-SimCSE对比学习在内容反作弊上应用

作者 | ANTI 导读 AI技术在不同行业和业务被广泛的应用&#xff0c;本文介绍了反作弊团队在与spammer对抗愈演愈烈的趋势下&#xff0c;不断探索前沿技术&#xff0c;将百度NLP预训练模型结合对比学习用于解决spam内容中知道提问群发推广作弊的技术方案。 本次分享&#xff0c;…