当前位置: 首页 > news >正文

微信小程序(四十六)登入界面-进阶版

注释很详细,直接上代码

上一篇

此文使用了vant组件库,没有安装配置的可以参考此篇vant组件的安装与配置

新增内容:
1.手机号与验证码格式验证
2.验证码的网络申请和校验

wechat-http模块在好几篇以前已经讲了咋安装的,不记得的友友自己从我的专栏里找一下


这里相较于上一篇需要安装模块wechat-validate
终端输入npm install wechat-validate

在这里插入图片描述
安装成功以后不要忘记构建npm

在这里插入图片描述

出现xxx不在以下 request 合法域名列表中报错的看这篇
微信小程序:xxx不在以下 request 合法域名列表中

源码:

app.json

{"usingComponents": {"van-field": "@vant/weapp/field/index","van-count-down": "@vant/weapp/count-down/index","van-button": "@vant/weapp/button/index"},"pages": ["pages/index/index","pages/logs/logs"],"window": {"navigationBarTextStyle": "black","navigationBarTitleText": "Weixin","navigationBarBackgroundColor": "#ffffff"},"componentFramework": "glass-easel","sitemapLocation": "sitemap.json","lazyCodeLoading": "requiredComponents"
}

app.js

App({globalData:{//定义全局变量token:wx.getStorageSync('token')//如此实现token初始化从内存中读取,也可以用下面注释的内容进行初始化},
//  onLaunch: function () {
//   // 在 onLaunch 生命周期回调函数中获取本地存储中的 token 值
//   const token = wx.getStorageSync('token');//   if (token) {
//     this.globalData.token = token;
//     console.log("0."+this.globalData.token)
//   } else {//     // 如果本地存储中不存在 token 的值,可以设置一个默认值或采取其他处理方式
//     this.globalData.token = '';
//   }
// }
})

index.wxml

<view class="login-header"><view class="label">用户登入</view>
</view>
<view class="login-form"><van-cell-group><!--  1.type 控制弹出手机键盘的类型2.maxlength 控制最大长度3.use-slot 使用插槽4.placeholder-style 占位内容样式5.model:value 双向绑定--><van-field model:value="{{mobile}}" placeholder="请输入手机号码" type="number" maxlength="{{11}}" use-slot placeholder-style="color: #999999;"><!-- slot在官方文档里面有几个特定的类型,可以自己找来康康 --><view wx:if="{{!countDownVisble}}" slot="button"><van-button size="small" type="primary" bind:tap="sendCode">发送验证码</van-button></view><!-- 稍微调整一下文字位置 --><view slot="right-icon" wx:else style="margin-top: -20rpx;"><!-- 倒计时组件 --><!-- 1. time计时时常单位毫秒2.bind:change时间变化触发--><van-count-down use-slot time="{{60*1000}}" bind:change="countDownChange"><text style="color: #999999; ">{{timeData.seconds}}秒后重新获取</text></van-count-down></view></van-field><van-field model:value="{{code}}" placeholder="请输入6位数验证码" maxlength="{{6}}" placeholder-style="color:#999999" /></van-cell-group><view class="login-tip">未注册的手机号验证后将自动注册</view>
</view><!-- 在行内写样式,如果在css文件里要提高权值才行 -->
<button size="mini" style="margin:30rpx 0 0 300rpx; background-color: palegreen; padding: 0 50rpx;" bind:tap="onSubmit">登入</button>

index.wxss

.label{font: 1em SimHei;font-size: 50rpx;margin: 60rpx 0 50rpx 30rpx;
}.login-tip{margin: 20rpx 0 90rpx 30rpx;color: #dadada;font-size: 27rpx;
}

index.js

//导入http包
const { default: http } = require("wechat-http")// 在页面或组件中导入表单验证
import validate from 'wechat-validate'//设置基本网站地址
http.baseURL='https://live-api.itheima.net'Page({// 通过 behaviors 注入 validate 方法behaviors: [validate],data:{countDownVisble:false,//是否显示倒计时timeData: {},//时间数据mobile:'',//用于输入框手机号双向绑定code:''//用于输入框验证码双向绑定},// 定义表单数据的验证规则rules: {mobile: [// required 是否要求必填,message 未填提醒{ required: true, message: '请填写手机号码!' },//pattern 正则校验,message 格式不符提醒{ pattern: /^1[3-9]\d{9}$/, message: '请检查手机号码是否正确!' },],code: [{ required: true, message: '请填写短信验证码!' },{ pattern: /^\d{6}$/, message: '请检查短信验证码是否正确!' }]},//发送验证码(自带一个加载提示框)async sendCode(){//校验电话号码const {valid,message}=this.validate('mobile')//校验成功if(valid){this.setData({countDownVisble:true//出现倒计时})//发出post网络请求(上传手机号)const res=await http.get('/code',{mobile:this.data.mobile})//在控制台打印返回的验证码(因为这只是虚拟的验证码所以并不是通过短信返回)console.log("验证码为:"+res.data.data.code)}else{//电话号码验证失败wx.showToast({title:message,//按之前设定的规则出现提示icon:'none'})}},//验证验证码async onSubmit(){//校验短信验证码格式const {valid,message}=this.validate('code')//校验成功if(valid){//解析获取数据const  {mobile,code}=this.data//上传手机号和验证码进行验证const res= await http.post('/login',{mobile,code})//console.log(res.data.code)//验证成功if(res.data.code===10000){const app=getApp()//console.log('1.'+app.globalData.token)app.globalData.token=res.data.data.token//console.log('2.'+app.globalData.token)wx.setStorageSync('token', app.globalData.token)wx.showToast({title: '登入成功!',icon:"none"})//跳转到log页面(模拟一下登入成功后的跳转)wx.redirectTo({url:'/pages/logs/logs'})}else{//这里其实也可以用拦截器,拦截器之前示范过了,这里为方便手动判断一下wx.showToast({title: '验证码错误!',icon:"none"})}}else{wx.showToast({title:message,icon:'none'})}},//倒计时变化countDownChange(ev){//console.log(ev)this.setData({//倒计时组件数据timeData:ev.detail,//倒计时是否显示判断countDownVisble:ev.detail.minutes===1||ev.detail.seconds>0})}
})

效果演示:(这里会有意演示一下格式不标准会导致的情况)

在这里插入图片描述

http://www.lryc.cn/news/310613.html

相关文章:

  • CSP-201712-2-游戏
  • 记录SSM项目集成Spring Security 4.X版本 之 加密验证和记住我功能
  • [AutoSar]BSW_Com09 CAN driver 模块FULL(BASIC)CAN、FIFO选择
  • WPF真入门教程30--顺风物流单据管理系统
  • Elasticsearch:向量相似度计算 - 可笑的速度
  • 两数相加的问题
  • 微信小程序的单位
  • 软考通过率真的低吗?
  • 国际视频编解码标准提案下载地址
  • 程序员是如何看待“祖传代码”的?
  • Python爬虫之爬取并下载哔哩哔哩视频
  • python 脚本设置输出颜色
  • 安卓websocket(客服端和服务端写在app端) 案例
  • C++面试宝典第34题:整数反序
  • 微信商城小程序设计
  • 如何合理布局子图--确定MATLAB的subplot子图位置参数
  • 【MySQL】基于Docker搭建MySQL一主二从集群
  • k8s 集群调度,标签,亲和性和反亲和性,污点和容忍,pod启动状态 排错详解
  • Idea 启动报错 failed to create jvm:jvm path url
  • 20款Visual Studio实用插件推荐
  • 基于SpringBoot的在线拍卖系统
  • “互动+消费”时代,借助华为云GaussDB重构新零售中消费逻辑
  • AI大全-通往AGI之路
  • CSS中如何解决 1px 问题?
  • IO 与 NIO
  • YOLOv应用开发与实现
  • 【C语言】熟悉文件基础知识
  • 信息系统安全与对抗-作业2
  • 【软考高项】【计算专题】- 5 - 进度类 - 横道图/甘特图
  • Ubuntu20.04使用XRDP安装原生远程桌面