uniapp--登录和注册页面-- login

目录

1.效果展示

2.源代码展示

测试登录 login.js

 测试请求 request.js

测试首页index.js


1.效果展示

          


2.源代码展示

<template>
    <view>
        <f-navbar title="登录" navbarType="4"></f-navbar>
		
        <view class="tips">
            <view class="title">欢迎{{ isLogin ? '登录' : '注册'}}{{ title }}</view>
            <view class="sub-title" style="">便捷高效管理学生信息</view>
        </view>
        <u-form :model="userInfo">
            <view class="container-input">
                <u-form-item>
                    <input placeholder="请输入账号" v-model="userInfo.username" placeholderStyle="color: #c0c4cc" style="height: 25px;"></input>
                </u-form-item>
            </view>
            <view class="container-input" style="margin-top: 40rpx;">
				<view class="eye-input" style="padding: 10px 0;">
					<input :password="pwdOpen" placeholder="请输入密码" v-model="userInfo.password" 
						placeholderStyle="color: #c0c4cc" style="height: 25px;padding-right: 64rpx;width: 100%;">
					</input>
					<view class="eye-image">
						<image v-if="!eyeOpen && userInfo.password" src="../../static/login/eye_close.png" mode="aspectFill" @click="tabEyeClose"></image>
						<image v-if="eyeOpen && userInfo.password" src="../../static/login/eye_open.png" mode="aspectFill" @click="tabEyeOpen"></image>
					</view>
				</view>
            </view>
        </u-form>
        <view class="agree-list">
            <view :class="[radioShow ? 'agree-radio-active' : 'agree-radio']" @click="agree"></view>
            <view class="agree-title">我已阅读并同意
                <text style="font-size: 26rpx;color: #428AF6;" @click="agreement">《用户协议》</text>以及
                <text style="font-size: 26rpx;color: #428AF6;" @click="privacy">《隐私政策》</text>
            </view>
        </view>
		
        <view v-if="isLogin" class="container-bth" @click="login">登录</view>
		<view v-if="!isLogin" class="container-bth" @click="register">注册</view>
		<view class="flex-between" :style="{justifyContent: isLogin ? '' : 'flex-end'}" style="margin: 32rpx 40rpx 0 40rpx;">
			<view class="forget-pwd" @click="checkBtn">{{ !isLogin ? '立即登录?' : '立即注册?'}}</view>
			<view v-if="isLogin" class="forget-pwd" @click="forget">忘记密码?</view>
		</view>
    </view>
</template>

<script>
import { accountLoginStudent } from "@/api/login/login.js"

export default {
    data() {
        return {
			isLogin: true,
            radioShow: true, //默认勾上
            title: 'XXXX',
			eyeOpen: false,
			pwdOpen: true,
            userInfo: {
                username: '',
                password: ''
            }
        }
    },
    methods: {
		// 注册
		register() {
			if(!this.radioShow) {
				this.$tools.toast('用户协议和隐私政策未勾选')
			}else if(!this.userInfo.username) {
				this.$tools.toast('请填写账号')
			}else if(!this.userInfo.password) {
				this.$tools.toast('请输入密码')
			}else {
				this.isLogin = true
				this.userInfo.password = ''
				this.userInfo.username = ''
				
				setTimeout(() => {
					this.$tools.toast('注册成功')
				},500)
				
				// accountLoginStudent(this.userInfo).then((res) => {
				// 	console.log('res: ',res);
				//     if (res.code === 200) {
				//         let token = res.data.token
				//         uni.setStorageSync('token', token)
						
				// 		uni.switchTab({
				// 		    url: '/pages/index/index'
				// 		})
				// 		setTimeout(() => {
				// 			this.$tools.toast('登录成功')
				// 		},500)
				//     }
				// })
			}
		},
		// 登录
        login() {
			if(!this.radioShow) {
				this.$tools.toast('用户协议和隐私政策未勾选')
			}else if(!this.userInfo.username) {
				this.$tools.toast('请填写账号')
			}else if(!this.userInfo.password) {
				this.$tools.toast('请输入密码')
			}else {
				let token = 'token123'
				uni.setStorageSync('token', token)
				
				uni.switchTab({
				    url: '/pages/index/index'
				})
				setTimeout(() => {
					this.$tools.toast('登录成功')
				},500)
				
				// accountLoginStudent(this.userInfo).then((res) => {
				// 	console.log('res: ',res);
				//     if (res.code === 200) {
				//         let token = res.data.token
				//         uni.setStorageSync('token', token)
						
				// 		uni.switchTab({
				// 		    url: '/pages/index/index'
				// 		})
				// 		setTimeout(() => {
				// 			this.$tools.toast('登录成功')
				// 		},500)
				//     }
				// })
			}
        },
		checkBtn() {
			this.isLogin = !this.isLogin
			this.userInfo.username = ''
			this.userInfo.password = ''
			this.eyeOpen = false
			this.pwdOpen = true
		},
		tabEyeClose(){
			this.eyeOpen = true
			this.pwdOpen = false
		},
		tabEyeOpen(){
			this.eyeOpen = false
			this.pwdOpen = true
		},
		agree() {
			this.radioShow = !this.radioShow
		},
        //忘记密码
        forget() {
            uni.navigateTo({
                url: `/pagesHome/editPassword/editPassword`
            })
        },
		// 用户协议
		agreement() {
			this.$tools.toast('用户协议')
		},
		// 隐私政策
		privacy() {
			this.$tools.toast('隐私政策')
		}
    }
}
</script>

<style>
	page {
		background: linear-gradient(270deg, #E1ECFE 0%, #DDFCFF 100%);
	}
</style>

<style lang="scss" scoped>
	.tips {
		margin: 110rpx 0 100rpx 0;
		width: 100%;
		text-align: center;
		.title {
			font-size: 40rpx;
			font-family: PingFang SC, PingFang SC;
			font-weight: bold;
			letter-spacing: 2rpx;
			color: #26344D;
		}
		.sub-title {
			font-size: 28rpx;
			font-family: PingFang SC, PingFang SC;
			letter-spacing: 2rpx;
			color: #26344D;
			margin-top: 10rpx;
		}
	}
	.container-input {
		margin: 0 40rpx;
		background-color: #fff;
		border-radius: 16rpx;
		padding-left: 32rpx;
		padding-right: 32rpx;
		.eye-input {
			width: 100%;
			position: relative;
			display: flex;
			justify-content: space-between;
			align-items: center;
			.eye-image {
				position: absolute;
				right: 0;
				width: 30rpx;
				height: 30rpx;
				margin-left: 20rpx;
				flex-shrink: 0;
				image{
					width: 100%;
					height: 100%;
				}
			}
		}
	}
	.agree-list {
		margin: 16px 0 0 20px;
		display: flex;
		.agree-radio {
			width: 26rpx;
			height: 26rpx;
			border-radius: 50%;
			border: 1px solid #999;
		}
		.agree-radio-active {
			position: relative;
			width: 26rpx;
			height: 26rpx;
			border-radius: 50%;
			border: 1px solid transparent;
			background-color: #428AF6;
		}
		.agree-radio-active::after {
			position: absolute;
			content: '';
			left: 8rpx;
			width: 6rpx;
			height: 14rpx;
			top: 50%;
			transform: translateY(-60%) rotate(38deg);
			border: 4rpx solid #fff;
			border-width: 0 4rpx 4rpx 0;
		}
		.agree-title {
			margin-left: 10rpx;
			font-size: 26rpx;
			color: #333;
		}
	}
	.container-bth {
		margin: 0 40rpx;
		border-radius: 16rpx;
		height: 88rpx;
		background-color: #5990F5;
		margin-top: 60rpx;
		text-align: center;
		color: #fff;
		font-size: 32rpx;
		line-height: 88rpx;
		letter-spacing: 2rpx;
	}
	.forget-pwd {
		display: flex;
		align-items: center;
		justify-content: flex-end;
		font-size: 28rpx;
		font-family: MiSans-Regular, MiSans;
		color: #5990F5;
	}
</style>

测试登录 login.js
import api from '@/common/request.js'

// 登录
export const accountLoginStudent = (data) => {
    return api({
        url: '/app/login/accountLoginStudent',
        method: 'POST',
		data
    })
}


 测试请求 request.js
import config from '@/config/index.js'

const request = (options) => {
	uni.showLoading({
		title: '加载中',
		mask: true,
		icon: 'loading'
	});


	return new Promise((resolve, reject) => {
		uni.request({
			url: config.baseUrl + options.url,
			method: options.method || "GET",
			data: options.data || {},
			header: {
				'content-type': 'application/json',
				'like-admin': uni.getStorageSync('token'),
				terminal: 1
			},
			success: (res) => {
				uni.hideLoading()
				if (res.data.code == 333) {
					uni.navigateTo({
						url: '/pages/login/login'
					})
					uni.showToast({
						title: "您还未登陆 ,请登录",
						icon: 'none',
						duration: 2000
					})
				} else if (res.data.code == 200) {
					
				} else if (res.data.code == 332) {
					uni.removeStorageSync('token')
					uni.removeStorageSync('userinfo')
					uni.removeStorageSync('userId')
					// uni.clearStorageSync()

					uni.navigateTo({
						url: '/pages/login/login'
					})
					uni.showToast({
						title: "登录过期,请重新登陆",
						icon: 'none',
						duration: 2000
					})
				} else {
					setTimeout(() => {
						uni.showToast({
							title: res.data.msg,
							icon: 'none',
							duration: 2000
						})
					}, 0)
				}
				resolve(res.data)
			},
			fail: (error) => {
				uni.hideLoading()
				reject(error)
				// console.log(error);
				setTimeout(() => {
					uni.showToast({
						title: '请求异常',
						icon: 'none',
						duration: 1500
					})
				}, 500)
			},
			complete() {
				uni.hideLoading()
			}
		})
	})
}

export default request
测试首页index.js

import api from '@/common/request.js'

直接使用即可,可以根据自己的需求修改样式!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024蓝桥杯每日一题(最大公约数)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;公约数 试题二&#xff1a;最大公约数 试题三&#xff1a;等差数列 试题四&#xff1a;最大比例 试题五&#xff1a;Hankson的趣味题 试题一&#xff1a;公约数 【题目描述】 …

冯喜运:4.16晚间关注原油EIA数据黄金原油分析

【 黄金技术面分析】&#xff1a;周二黄金价格日内走跌&#xff0c;白盘低点触及2363一线止跌反弹&#xff0c;实时现报价2372一线。目前小时线布林带逐步收口&#xff0c;上轨位于2392一线&#xff0c;下轨布林带在2351位置。今晚阻力关注2389和今日高点2392区域&#xff0c;其…

二级综合医院云HIS系统源码,B/S架构,采用JAVA编程,集成相关医保接口

二级医院云HIS系统源码 云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务&#xff0c;提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站和护士工作站等一系列常规功能&#xff0c;还能与公卫…

海外云手机为什么适合社媒运营?

如今&#xff0c;社媒营销如果做得好&#xff0c;引流效果好的账号&#xff0c;可以用来带货变现&#xff0c;而外贸、品牌出海也同样都在做社媒营销&#xff0c;Tik Tok、facebook、ins等热门的海外社媒平台都是行业密切关注的&#xff0c;必要的时候&#xff0c;大家会使用海…

基于微信小程序投票评选系统的设计与实现(论文+源码)_kaic

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

Unity类银河恶魔城学习记录12-18,19 p140 Options UI-p141 Finalising ToolTip源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_ToolTip.cs using TMPro; using UnityEngine;public class UI_ToolTip :…

AppleScript初体验,让你的mac实现自动化UI操作

AppleScript 简介 AppleScript是苹果公司开发的一种脚本语言&#xff0c;用于操作MacOS及其应用程序&#xff0c;在实现MacOS自动化工作方面非常给力。 我们可以使用AppleScript用来完成一些重复琐碎的工作&#xff0c;AppleScript具有简单自然的语法&#xff0c;另外系统也提…

智能零售:引领购物新时代

智能零售通过整合人工智能、物联网、大数据和机器学习等技术&#xff0c;正在彻底改变传统的购物模式&#xff0c;为消费者和零售商提供前所未有的效率和个性化体验。 智能零售利用消费者数据分析来提供个性化的购物推荐。无论是在线平台或是实体店内&#xff0c;智能系统都能…

C#语法知识之变量

2.变量 一、知识点 1、折叠代码 //#region按Tab键#region MyRegion(描述)#endregion //本质是编译器提供给我们的预处理指令&#xff0c;发布代码是会被自动删除2、声明变量和变量类型 ​ 变量就是可以变化的容器&#xff0c;用来存储各种不同类型数值的一个容器&#xff1b…

和鲸科技将参与第五届空间数据智能学术会议并于应急减灾与可持续发展专题论坛做报告分享

ACM SIGSPATIAL中国分会致力于推动空间数据的研究范式及空间智能理论与技术在时空大数据、智慧城市、交通科学、社会治理等领域的创新与应用。ACM SIGSPATIAL中国分会创办了空间数据智能学术会议&#xff08;SpatialDI&#xff09;&#xff0c;分会将于2024年4月25日-27日在南京…

Go Plugin:动态模块的加载与问题解析_go语言加载动态库的工具(1)

先自我介绍一下&#xff0c;小编浙江大学毕业&#xff0c;去过华为、字节跳动等大厂&#xff0c;目前阿里P7 深知大多数程序员&#xff0c;想要提升技能&#xff0c;往往是自己摸索成长&#xff0c;但自己不成体系的自学效果低效又漫长&#xff0c;而且极易碰到天花板技术停滞…

人工智能与IP代理池:解析网络数据采集的未来

前言 随着互联网的快速发展&#xff0c;数据成为了当今社会最宝贵的资源之一。然而&#xff0c;要获取大量的网络数据并进行有效的分析&#xff0c;往往需要面对诸多挑战&#xff0c;其中之一就是网络封锁与反爬虫机制。在这个背景下&#xff0c;人工智能&#xff08;AI&#x…

JavaEE:JVM

基本介绍 JVM&#xff1a;Java虚拟机&#xff0c;用于解释执行Java字节码 jdk&#xff1a;Java开发工具包 jre&#xff1a;Java运行时环境 C语言将写入的程序直接编译成二进制的机器语言&#xff0c;而java不想重新编译&#xff0c;希望能直接执行。Java先通过javac把.java…

02 - ArcGIS For JavaScript-矢量数据的符号化处理(Symbol)

文章目录 综述Symbol的分类Point的符号化Point符号化为二维几何&#xff1a;Point位图符号化&#xff1a;Point的三维结合符号化Point 符号化为GLTF模型 PolylineSymbol-线符号化基本样式管道样式墙体样式条带样式方管样式 PolygonSymbol-面符号化水面效果拉伸效果填充效果 Mes…

外面收费的彩虹自助下单系统模板

搭建教程 下载之后上传到template文件夹里面 注意带上里面的文件夹 然后去后台替换就行 源码免费下载地址抄笔记 (chaobiji.cn)

PLSQL中文乱码问题 + EZDML导入数据库模型乱码

PLSQL中文乱码问题 EZDML导入数据库模型乱码 查询数据库字符集 select userenv(language) from dual;查询本地字符集编码 select * from V$NLS_PARAMETERS;理论上 数据库字符集 跟 本地字符集编码 是一致的 本地字符集编码需要拼接字段值 NLS_LANGUAGE NLS_TERRITORY NLS…

项目7-音乐播放器2(上传音乐+查询音乐+拦截器)

0.加入拦截器 之后就不用对用户是否登录进行判断了 0.1 定义拦截器 0.2 注册拦截器 生效 1.上传音乐的接口设计 请求&#xff1a; { post, /music/upload {singer&#xff0c;MultipartFile file}&#xff0c; } 响应&#xff1a; { "status": 0, "message&…

免费的 ChatGPT、GPTs、AI绘画(国内版)

&#x1f525;博客主页&#xff1a;白云如幻❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚…

2.4G漂移小车电子方案 酷得智能科技

漂移高速遥控车是一种专门设计用于执行高速漂移动作的遥控车模型。以下是一些关于漂移高速遥控车的功能介绍&#xff1a; 1、高速性能&#xff1a;漂移车通常配备有强力的电机和电池&#xff0c;以便在保持高速的同时进行漂移动作。 2、漂移能力&#xff1a;漂移车的轮胎和悬挂…

计算机网络:MAC地址 IP地址 ARP协议

计算机网络&#xff1a;MAC地址 & IP地址 & ARP协议 MAC地址IP地址ARP协议 MAC地址 如果两台主机通过一条链路通信&#xff0c;它们不需要使用地址就可以通信&#xff0c;因为连接在信道上的主机只有他们两个。换句话说&#xff0c;使用点对点信道的数据链路层不需要使…