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

news2024/11/24 17:36:06

目录

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'

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

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

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

相关文章

基于JSP的电器网上订购系统

本系统利用现在比较广泛的JSP结合后台SpringMybatisAjax编写程序的方式实现的。 在意见箱板块中&#xff0c;运用JSP通过JDBC技术和后台的数据库进行交互的方式将数据信息反馈给用户和管理员&#xff1b;在登录系统中&#xff0c;使用Ajax技术实现异步交互&#xff0c;在不更新…

VulBG: 构建行为图加强基于深度学习的漏洞检测模型

近年来&#xff0c;人们提出了基于深度学习&#xff08;DL&#xff09;的漏洞检测系统&#xff0c;用于从源代码中自动提取特征。这些方法在合成数据集上可以实现理想的性能&#xff0c;但在检测真实世界的漏洞数据集时&#xff0c;准确率却大幅下降。此外&#xff0c;这些方法…

基于Zookeeper 简单实现分布式任务协调组件

一、什么是 Zookeeper ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。 它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维…

Java复习第二十天学习笔记(过滤器Filter),附有道云笔记链接

【有道云笔记】二十 4.8 过滤器Filter https://note.youdao.com/s/dSofip3f 一、为什么要使用过滤器 项目开发中&#xff0c;经常会用到重复代码的实现。 1、请求每个servlet都要设置编码 2、判断用户是否登录&#xff0c;只有登录了才有操作权限。 二、过滤器相关Api int…

【数据结构|C语言版】双向链表

前言1. 初步认识双向链表1.1 定义1.2 结构1.3 储存 2. 双向链表的方法&#xff08;接口函数&#xff09;2.1 动态申请空间2.2 创建哨兵位2.3 查找指定数据2.4 指定位置插入2.5 指定位置删除2.6 头部插入2.7 头部删除2.8 尾部插入2.9 尾部删除2.10 计算链表大小2.11 销毁链表 3.…

怎么样在外网登录访问CRM管理系统?

一、什么是CRM管理系统&#xff1f; Customer Relationship Management&#xff0c;简称CRM&#xff0c;指客户关系管理&#xff0c;是企业利用信息互联网技术&#xff0c;协调企业、顾客和服务上的交互&#xff0c;提升管理服务。为了企业信息安全以及使用方便&#xff0c;企业…

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

【K8s】&#xff1a;在 Kubernetes 集群中部署 MySQL8.0 高可用集群&#xff08;1主2从&#xff09; 一、准备工作二、搭建nfs服务器2.1 安装 NFS 服务器软件包&#xff08;所有节点执行&#xff09;2.2 设置共享目录2.3 启动 NFS 服务器2.4 设置防火墙规则&#xff08;可选&am…

OpenHarmony南向开发实例:【游戏手柄】

介绍 基于TS扩展的声明式开发范式编程语言&#xff0c;以及OpenHarmony的分布式能力实现的一个手柄游戏。 完成本篇Codelab需要两台开发板&#xff0c;一台开发板作为游戏端&#xff0c;一台开发板作为手柄端&#xff0c;实现如下功能&#xff1a; 游戏端呈现飞机移动、发射…

计算机视觉——OpenCV Python基于颜色识别的目标检测

1. 计算机视觉中的颜色空间 颜色空间在计算机视觉领域的应用非常广泛&#xff0c;它们在图像和视频处理、物体检测等任务中扮演着重要角色。颜色空间的主要作用是将颜色以数值形式表示出来&#xff0c;这样计算机算法就能够对其进行处理和分析。不同的颜色空间有着不同的特点和…

Web3D智慧医院平台(HTML5+Threejs)

智慧医院的建设将借助物联网、云计算、大数据、数字孪生等技术&#xff0c;以轻量化渲染、极简架构、三维可视化“一张屏”的形式&#xff0c;让医院各大子系统管理既独立又链接&#xff0c;数据相互融合及联动。 建设医院物联网应用的目标对象&#xff08;人、物&#xff09;都…

基于afx透明视频的视觉增强前端方案

作者 | 青玉 导读 本文介绍了增长前端团队自研的Webview框架下透明视频视觉增强方案&#xff0c;该方案在保证对视觉进行高度还原的同时可投入更少的开发成本&#xff0c;还能获得更优的前端性能表现。文章首先分析了市面上动画方案的优缺点&#xff0c;然后详细介绍了透明视频…

CentOS下GitLab的安装部署_centos 安装部署 gitlab,2024年最新软件测试开发岗还不会这些问题

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

HTML段落标签、换行标签、文本格式化标签与水平线标签

目录 HTML段落标签 HTML换行标签 HTML格式化标签 加粗标签 倾斜标签 删除线标签 下划线标签 HTML水平线标签 HTML段落标签 在网页中&#xff0c;要把文字有条理地显示出来&#xff0c;就需要将这些文字分段显示。在 HTML 标签中&#xff0c;<p>标签用于定义段落…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之十二 简单人脸识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之十二 简单人脸识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之十二 简单人脸识别 一、简单介绍 二、简单人脸识别实现原理 三、简单人脸识别案例实现简…

基于小程序实现的餐饮外卖系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

如何在PPT中获得网页般的互动效果

如何在PPT中获得网页般的互动效果 效果可以看视频 PPT中插入网页有互动效果 当然了&#xff0c;获得网页般的互动效果&#xff0c;最简单的方法就是在 PPT 中插入网页呀。 那么如何插入呢&#xff1f; 接下来为你讲解如何获得&#xff08;此方法在 PowerPoint中行得通&#…

华为配置静态ARP示例

华为配置静态ARP示例 组网图形 图1 配置静态ARP组网图 静态ARP简介配置注意事项组网需求配置思路操作步骤配置文件相关信息 静态ARP简介 静态ARP表项是指网络管理员手工建立IP地址和MAC地址之间固定的映射关系。 正常情况下网络中设备可以通过ARP协议进行ARP表项的动态学习&…

差速机器人模型LQR 控制仿真——路径模拟

LQR路径跟踪要求路径中带角度&#xff0c;即坐标&#xff08;x,y,yaw&#xff09;&#xff0c;而一般我们的规划出来的路径不带角度。这里通过总结相关方法&#xff0c;并提供一个案例。 将点路径拟合成一条完整的线路径算法 将点路径拟合成一条完整的线路径是一个常见的问题…

C#语法知识之变量

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

jenkins从节点配置说明

目的 打包构建时使用从节点&#xff0c;从节点所在服务器配置4C8G5000G&#xff08;服务器2&#xff09; 前提 首先在服务器1上部署jenkins服务&#xff0c;即主节点&#xff0c;默认节点名称为master 步骤 1&#xff09;登录进入jenkins平台&#xff0c;在系统设置中&…