微信小程序登录注册页面设计(小程序项目)

ops/2024/11/23 16:31:51/

需求

在微信小程序设计并实现登录页面,并填写相关登录注册函数

实现效果

代码实现

html代码

<view class="top" style="border-bottom-style: none;background-color:#FF8C69;"><!-- <view class="back" bind:tap="back"><van-icon name="arrow-left" size="50rpx" /></view> --><view class="pagetitle-container"><view class="pagetitle">登录.注册</view></view>
</view>
<view class="top-box"><view>Hi</view><view class="next-text">欢迎使用XXXX!</view>
</view>
<!-- 登录、注册 -->
<view class="center-box"><view class="nav"><view class="left {{current==1?'select':''}}" bindtap="click" data-code="1"><text>登录</text></view><view class="right {{current==0?'select':''}}" bindtap="click" data-code="0"><text>注册</text></view></view><!-- 登录 --><view class="input-box" hidden="{{current==0}}"><view class="wei-input"><text slot="icon" class="iconfontgh icon-shoujihao" mode="aspectFit"></text><input class="input" name="phone" placeholder="请输入手机号" value="{{ phone }}" bindinput="bindPhone" /></view><view type="text" style="width: 1rpx;height: 1rpx;overflow: hidden;"><input></input></view><view class="wei-input"><text slot="icon" class="iconfontgh icon-mima" mode="aspectFit"></text><!--index.wxml--><view><input class="input" style="width: 100%;" id="pwdInput" placeholder="请输入密码" password="{{pwdType=='password'}}" name="password" value="{{ password }}" bindinput="bindPwd" /></view><view class="eye-btn"><block wx:if="{{!pwdView}}"><van-icon bindtap="togglePwdView" name="eye-o" /></block><block wx:elif="{{pwdView}}"><van-icon bindtap="togglePwdView" name="closed-eye" /></block></view></view><view class="checkbox-container"><checkbox-group bindchange="onChange"><checkbox value="1" checked="{{checked}}"></checkbox><label class="checkbox-label" for="check">记住密码</label></checkbox-group></view></view><!-- 注册 --><view class="input-box" hidden="{{current==1}}"><view class="wei-input"><text slot="icon" class="iconfontgh icon-shoujihao" mode="aspectFit"></text><input class="input" name="registerPhone" placeholder="请输入您的手机号" value="{{registerPhone}}" bindinput="bindRegisterPhone" /></view><view class="wei-input"><text slot="icon" class="iconfontgh icon-touxiang" mode="aspectFit"></text><input class="input" name="name" placeholder="请输入您的姓名" value="{{name}}" bindinput="bindName" /></view><view class="wei-input"><text slot="icon" class="iconfontgh icon-gonghao" mode="aspectFit"></text><input class="input" name="oa_num" placeholder="请输入您的工号" value="{{oa_num}}" bindinput="bindOaNum" /></view><view class="wei-input"><text slot="icon" class="iconfontgh icon-bumenguanli" mode="aspectFit"></text><input class="input" name="department" placeholder="请输入您的部门" value="{{section}}" bindinput="bindDepartment" /></view><view class="bottom-box">注册</view></view><view class="sumbit-btn"><button bindtap="handleButtonClick" class="button" style="background-color: #F9BB8E;font-size: 30rpx;" type="primary">立即{{current==1?'登录':'注册'}}</button></view>
</view>
<!-- 重影 -->
<view class="shadow shadow-1"></view>
<view class="shadow shadow-2"></view>
<!-- 说明 -->

css代码

/*  */
page {height: 100%;background-color: white;margin: 0px;padding: 0px;
}
.top {position: fixed;top: 0;left: 0;right: 0;display: flex;align-items: center;justify-content: space-between;background-color: #fff; /* 可以根据需要设置背景色 */z-index: 1000; /* 确保它覆盖在其他元素之上 */padding: 0 20rpx; /* 添加左右内边距以便于阅读 */height: 180rpx; /* 设置固定高度 */border-bottom-width: 1rpx;border-bottom-style: solid;
}
.pagetitle-container {display: flex;align-items: center;justify-content: center;margin: auto;background-color: #FF8C69;
}
.pagetitle {font-size: 30rpx;font-weight: bold;margin-bottom: -80rpx;}
/* 顶部背景 */
.top-box {margin-top: 180rpx;height: 30%;background-image: linear-gradient(#FF8C69,#F9BB8E);padding: 30rpx;color: white;font-weight: bold;
}/* index.wxss */
.eye-btn {right: 20rpx;margin-top: 10rpx;position: absolute;
}.next-text {margin-top: 15rpx;
}/* 内容 */
.center-box {background-color: white;margin: -20% 20rpx 0rpx 20rpx;padding: 25rpx;border-radius: 15rpx;-webkit-filter: drop-shadow(0 0 8rpx #F9BB8E);filter: drop-shadow(0 0 8rpx #FF8C69);
}/* 导航 */
.nav {display: flex;text-align: center;font-size: 32rpx;margin-bottom: 8%;
}.left {flex: 1;font-weight: bold;
}.right {flex: 1;font-weight: bold;
}.select {font-weight: bold;color: #F9BB8E;
}.select text {padding-bottom: 5rpx;border-bottom-left-radius: 10rpx;border-bottom-right-radius: 10rpx;border-bottom: 5rpx solid #F9BB8E;
}.wei-input {position: relative;display: flex;flex-direction: row;align-items: center;margin-top: 40rpx;padding-bottom: 20rpx;border-bottom: 1rpx solid #f1f1f1;
}.input-box {margin: 20rpx;
}.input {padding-left: 20rpx;font-size: 30rpx;
}.input-code {position: absolute;right: 40rpx;font-size: 26rpx;padding: 10rpx 15rpx;color: white;background-color: #FF8C69;border-radius: 10rpx;
}.checkbox-container {font-size: 26rpx;color: #FF8C69;margin-top: 20rpx;text-align: right;display: flex;align-items: center; /* 垂直居中对齐 */
}
.wx-checkbox-input {width: 33rpx !important;height: 33rpx !important;border: 2rpx solid #FF8C69 !important;
}
.wx-checkbox-input-checked{width: 33rpx !important;height: 33rpx !important;border: 2rpx solid #FF8C69 !important;color: #FF8C69 !important;
}.sumbit-btn {margin: 6% 30rpx 30rpx 30rpx;
}/* 重影 */
.shadow {box-shadow: 0rpx 0rpx 10rpx 0rpx #FF8C69;border-radius: 25rpx;background-color: white;
}.shadow-1 {height: 40rpx;margin: -20rpx 50rpx 0 50rpx;
}.shadow-2 {position: relative;z-index: -888;height: 50rpx;margin: -30rpx 80rpx 0 80rpx;
}/* 最底部 */
.bottom-box {bottom: 5rpx;width: 100%;font-size: 24rpx;color: gray;display: flex;justify-content: center;
}/* 弹窗背景蒙层 */
.modal-overlay {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0, 0, 0, 0.6);display: flex;justify-content: center;align-items: center;
}/* 弹窗内容 */
.modal {background-color: #FFFFFF;width: 80%; /* 弹窗宽度,根据实际需要调整 */max-width: 600px; /* 最大宽度限制 */border-radius: 10px;padding: 20px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.5);display: flex;flex-direction: column;align-items: center;
}

js代码

const util = require('../../utils/util.js'),
app = getApp();
Page({/*** 页面的初始数据*/data: {"pwdType": 'password', // 默认为密码类型"pwdView": true, // 控制是否显示密码"current": 1,"codeText": '获取验证码',"counting": false,"phone": "","password": "",checked: false,modalVisible: false,is_login: false},//注册功能bindName: function (e) {this.setData({name: e.detail.value});},bindRegisterPhone: function (e) {this.setData({registerPhone: e.detail.value});},bindOaNum: function (e) {this.setData({oa_num: e.detail.value});},bindDepartment: function (e) {this.setData({department: e.detail.value});},// 登陆功能bindPhone: function (e) {this.setData({phone: e.detail.value});},bindPwd: function (e) {this.setData({password: e.detail.value});},register: function () {if (!this.data.registerPhone) {wx.showToast({icon: 'none',title: '请填写手机',})} else if (!this.data.name) {wx.showToast({icon: 'none',title: '请填写名称',})} else if (!this.data.oa_num) {wx.showToast({icon: 'none',title: '请填写工号',})} else if (!this.data.department) {wx.showToast({icon: 'none',title: '请填写部门',})} else {wx.cloud.init()wx.cloud.callContainer({XXXXXXXX}).then(res => {console.log(res)if (res.data.data == 1) {wx.showToast({title: '账号申请成功!',icon: 'success',duration: 2500})} else {wx.showToast({title: res.data.msg,icon: 'error',duration: 2500})}})}},create_login(e) {let user = e// console.log(user)if (!user.phone) {wx.showToast({icon: 'none',title: '请填写手机',})} else if (!user.password) {wx.showToast({icon: 'none',title: '请填写密码',})} else {wx.cloud.init()wx.cloud.callContainer({XXXXX}).then(res => {console.log('获取登录结果', res.data)let msg = res.data.msgif (msg == "登录成功") {console.log(user.phone)wx.setStorage({ key: 'currentUser', data: user.phone, encrypt: true })var app = getApp();app.globalData.userforPerson = user.phone;var logs = (wx.getStorageSync('logs') || []).map(log => {return {date: util.formatTime(new Date(log)),timeStamp: log}})// console.log(logs[0])wx.setStorage({key: 'LastLoginTime',data: logs[0],});wx.setStorage({key: 'passwordIsEdit',data: res.data.password_is_edit,});wx.setStorage({key: 'currentUser',data: user.phone,encrypt: true});wx.setStorage({key: 'currentUserPassword',data: user.password,encrypt: true});wx.switchTab({url: "/pages/home/home",success: function (res) {var page = getCurrentPages().pop();if (page == undefined || page == null) return;page.onShow();console.log('跳转成功')// success},fail: function (res) {console.log('跳转失败')  // fail},complete: function (res) {console.log('跳转页面完成') // complete}})} else {wx.showToast({title: res.data.msg,icon: "error"})}}).catch(res => {console.log('获取登录结果失败', res)})}},handleButtonClick() {//current==1登录if (this.data.current == 1) {wx.setStorage({key: 'RememberPassword',encrypt: true,data: this.data.checked,})this.create_login({"phone": this.data.phone,"password": this.data.password})}//current==1注册if (this.data.current == 0) {this.register()}},ToRegister() {wx.navigateTo({url: '/pages/register/register',})},// 登陆注册监听click(e) {let index = e.currentTarget.dataset.code;this.setData({current: index})},togglePwdView: function () {this.setData({pwdType: this.data.pwdType === 'password' ? 'text' : 'password',pwdView: !this.data.pwdView,});},onChange(e) {this.setData({checked: e.detail.value.includes('1')})},CloseActivity(){},/*** 生命周期函数--监听页面加载*/onLoad(options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {},/*** 页面上拉触底事件的处理函数*/onReachBottom() {},/*** 用户点击右上角分享*/onShareAppMessage() {},showModal: function() {this.setData({modalVisible: true});},hideModal: function() {this.setData({modalVisible: false});},});


http://www.ppmy.cn/ops/136079.html

相关文章

【Python TensorFlow】进阶指南(续篇三)

在前几篇文章中&#xff0c;我们探讨了TensorFlow的高级功能&#xff0c;包括模型优化、分布式训练、模型解释等多个方面。本文将进一步深入探讨一些更具体和实用的主题&#xff0c;如模型持续优化的具体方法、异步训练的实际应用、在线学习的实现细节、模型服务化的最佳实践、…

transformer.js(三):底层架构及性能优化指南

Transformer.js 是一个轻量级、功能强大的 JavaScript 库&#xff0c;专注于在浏览器中运行 Transformer 模型&#xff0c;为前端开发者提供了高效实现自然语言处理&#xff08;NLP&#xff09;任务的能力。本文将详细解析 Transformer.js 的底层架构&#xff0c;并提供实用的性…

NUXT3学习日记四(路由中间件、导航守卫)

前言 在 Nuxt 3 中&#xff0c;中间件&#xff08;Middleware&#xff09;是用于在页面渲染之前或导航发生之前执行的函数。它们允许你在路由切换时执行逻辑&#xff0c;像是身份验证、重定向、权限控制、数据预加载等任务。中间件可以被全局使用&#xff0c;也可以只在特定页…

Spring Boot图书馆管理系统:疫情中的技术实现

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了疫情下图书馆管理系统的开发全过程。通过分析疫情下图书馆管理系统管理的不足&#xff0c;创建了一个计算机管理疫情下图书馆管理系统的方案。文章介绍了疫情下图…

redis-击穿、穿透、雪崩

击穿、穿透、雪崩经常听人说吧&#xff1f; 那他到底是啥呢&#xff1f;无非就是在有缓存层的情况下&#xff0c;对各种绕过缓存层从而直接落到了DB上的情况进行的分类。 概念性的东西大概如下&#xff0c;我是记不住&#xff0c;后期具体使用与规避这些问题才是大事&#xff…

【漏洞复现】某UI自动打印小程序任意文件上传漏洞复现

漏洞描述 在数字化时代,打印服务的需求与日俱增。为了满足用户的便利需求,全新UI的自助打印系统/云打印小程序。 全新UI设计:采用2023年最新的UI设计风格,界面简洁美观,用户体验极佳。 云打印功能:支持用户通过小程序上传文件并进行云端打印,方便快捷。 自助服务:用…

独立资源池与共享资源池在云计算中各自的优势

在云计算领域&#xff0c;独立资源池和共享资源池是两种关键的资源管理策略&#xff0c;它们各自具有独特的优势&#xff0c;以适应不同的业务需求和场景。 独立资源池的优势 资源独占性&#xff1a;独立资源池为特定应用或用户提供专属的资源&#xff0c;这意味着资源不会被其…

ReactPress vs VuePress vs WordPress

ReactPress&#xff1a;重塑内容管理的未来 在当今数字化时代&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为各类网站和应用的核心组成部分。ReactPress作为一款融合了现代Web开发多项先进技术的开源发布平台&#xff0c;正以其卓越的性能、灵活性和可扩展性&…