【微信小程序开发】宠物预约医疗项目实战-注册实现

【微信小程序开发】宠物预约医疗项目实战-注册实现

第二章 宠物预约医疗项目实战-注册实现

文章目录

  • 【微信小程序开发】宠物预约医疗项目实战-注册实现
  • 前言
  • 一、打开项目文件
  • 二、编写wxss代码
    • 2.1 什么是wxss
    • 2.2 配置主程序全局样式
  • 三. 在sign文件下的wxml文件中编写如下代码并保存
  • 四 .sign.js文件代码编写如下
    • 4.1 js函数使用
    • 4.2 全局变量与局部变量使用
    • 4.3 request方法请求接口的使用
    • 4.4 在sign.ts中引入全局配置
    • 4.5. 代码编写
    • 4.6. 运行
  • 总结


前言


注册是指向某个平台、网站或应用程序提供您的个人信息以获取账户的过程。注册对于现代社会的人们来说非常重要,以下是几个原因:

方便性:注册后,您可以随时登录到您的账户,使您能够方便地管理和使用平台的服务和功能。

个性化服务:许多网站和应用程序需要您提供个人信息以提供个性化的服务,例如推荐商品或根据您的兴趣推送内容。

安全性:通过注册,您可以创建一个账户和密码,使您的个人信息更安全。此外,许多网站和应用程序要求您使用多种安全措施,例如启用两步验证(2FA)等。

沟通:注册后,您可以参与交流、评论或定期接收电子邮件通知,这有助于您跟进相关信息和最新动态。

授权:某些平台需要您注册才能提供访问内容或服务的授权,例如社交媒体平台或在线购物网站。

总之,注册是连接您和平台、网站和应用程序的重要步骤,可以为您提供许多方便、个性化的服务,并加强您的个人安全。`

一、打开项目文件

在这里插入图片描述
1.在pages里新建注册页面然后ctrl+s保存

    "pages/sign/sign",

在这里插入图片描述
2.确认登录页面被新建出来
在这里插入图片描述

二、编写wxss代码

2.1 什么是wxss

wxss文件是微信小程序中的样式文件,用于定义小程序页面的样式和布局。与CSS类似,wXss文件支持选择器、属性和值等基本语法,但是它有着自己的特点和限制。例如,wXss不支持外部链接和@import语句,需要直接在文件中定义所有样式。此外,wXss还支持一些微信小程序特有的样式属性,例如rpx(响应式像素)用于适配不同屏幕大小的移动设备。 大家可以理解为是css

2.2 配置主程序全局样式

  1. 点击进入app.wxss文件
    在这里插入图片描述
  2. 编写下面罗列的代码后保存运行
/**app.wxss**/
.container {display: flex;flex-direction: column;align-items: center;box-sizing: border-box;
} button {background: initial;
}button:focus{outline: 0;
}button::after{border: none;
}page {background: #f6f6f6;display: flex;flex-direction: column;justify-content: flex-start;
}.userinfo, .uploader, .tunnel {margin-top: 40rpx;height: 140rpx;width: 100%;background: #fff;border: 1px solid rgba(0, 0, 0, 0.1);border-left: none;border-right: none;display: flex;flex-direction: row;align-items: center;transition: all 300ms ease;
}.userinfo-avatar {width: 100rpx;height: 100rpx;margin: 20rpx;border-radius: 50%;background-size: cover;background-color: white;
}.userinfo-avatar:after {border: none;
}.userinfo-nickname {font-size: 32rpx;color: #007aff;background-color: white;background-size: cover;
}.userinfo-nickname::after {border: none;
}.uploader, .tunnel {height: auto;padding: 0 0 0 40rpx;flex-direction: column;align-items: flex-start;box-sizing: border-box;
}.uploader-text, .tunnel-text {width: 100%;line-height: 52px;font-size: 34rpx;color: #007aff;
}.uploader-container {width: 100%;height: 400rpx;padding: 20rpx 20rpx 20rpx 0;display: flex;align-content: center;justify-content: center;box-sizing: border-box;border-top: 1px solid rgba(0, 0, 0, 0.1);
}.uploader-image {width: 100%;height: 360rpx;
}.tunnel {padding: 0 0 0 40rpx;
}.tunnel-text {position: relative;color: #222;display: flex;flex-direction: row;align-content: center;justify-content: space-between;box-sizing: border-box;border-top: 1px solid rgba(0, 0, 0, 0.1);
}.tunnel-text:first-child {border-top: none;
}.tunnel-switch {position: absolute;right: 20rpx;top: -2rpx;
}.disable {color: #888;
}.service {position: fixed;right: 40rpx;bottom: 40rpx;width: 140rpx;height: 140rpx;border-radius: 50%;background: linear-gradient(#007aff, #0063ce);box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3);display: flex;align-content: center;justify-content: center;transition: all 300ms ease;
}.service-button {position: absolute;top: 40rpx;
}.service:active {box-shadow: none;
}.request-text {padding: 20rpx 0;font-size: 24rpx;line-height: 36rpx;word-break: break-all;
}

三. 在sign文件下的wxml文件中编写如下代码并保存

在这里插入图片描述

=<view class="container"><image   src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F201502%2F24%2F20150224235124_vda4m.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1677326688&t=b461a24be6ba1e8736e3bb9c525f925f"></image></view><view class="login_box"><view class="section"><input placeholder="请输入用户名" placeholder-class="color" bindblur='username' /></view><view class="section"><input type='number' maxlength='11' placeholder="请输入手机号" placeholder-class="color" bindblur='mobile' /><image src=""></image></view><view class="section"><input password="true" placeholder="请输入密码" placeholder-class="color" bindblur='pass1' /><image src=""></image></view><view class="section"><input password="true" placeholder="确认密码" placeholder-class="color" bindblur='pass2' /><image src=""></image></view>
<button class="login1" type="primary" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">用户注册</button>
<button class="register" type="warn" open-type="getUserInfo" bindgetuserinfo="okzhuche">已有账号/登录</button><!--底部确认--><view class="shen_title"><image class="about" src="" />使用申明</view><view class="des">1. 在未经您同意及确认之前,本程序不会将您的注册信息用于任何其它商业目的。</view><view class="des">2. 本程序将对您的信息进行严格的保护</view><view class="des">3. 请您放心使用!</view>
</view>

此时保存后编译,你可以看见展示的效果,但是注册点击时没有效果的。原因在于,没有编写sign.js文件接入数据

四 .sign.js文件代码编写如下

涉及知识点:

  1. js函数调用使用
  2. 全局变量与局部变量使用
  3. request方法请求接口的使用

下面我们一个一个来:

4.1 js函数使用

函数的定义与java不同:
函数名称+函数输入参数+花括号
比如下段:

 onReady: function(a) {//函数体},

其中onReady为函数名称,function(a)为函数定义参数。多个参数通过,区分,如function(a,b)
代码亦可以简化为:

 onReady(a) {//函数体},

4.2 全局变量与局部变量使用

在这里插入图片描述
页面的全局变量定义在data中,当需要获取data中的数据时,通常写法如下:

 onReady: function(a) {//函数体var a = this.data.username;},

我们将data中的username的值传给了var a局部变量

设置全局变量data的写法如下:

  username(e) {this.setData({username: e.detail.value})},

通过 this.setData({ ---- })的方式将传入函数中的值赋值给data中的username


4.3 request方法请求接口的使用

注册的接口见先导篇中我提供的接口文档,下面带大家使用使用
1.登录接口文档地址:
点击进入文档地址
在这里插入图片描述
2. 找到用户增加接口
在这里插入图片描述
3.在app.ts和index.d.ts中引入域名接口并保存
在这里插入图片描述
在这里插入图片描述

  mydata: {// ip:"http://127.0.0.1:9004/",ip:"http://122.51.174.157:9004/"},

在定义一个时间生成函数

  time() {var date = new Date();const year = date.getFullYear();const month = date.getMonth() + 1;const day = date.getDate();const hour = date.getHours();const minute = date.getMinutes();const second = date.getSeconds();var time = year + '-' + month + '-' + day + ' ' + hour + '时' + minute +'分'+ second+'秒';return time;},

整体代码编写为:

// app.ts
App({globalData: {},mydata: {// ip:"http://127.0.0.1:9004/",ip:"http://122.51.174.157:9004/"},time() {var date = new Date();const year = date.getFullYear();const month = date.getMonth() + 1;const day = date.getDate();const hour = date.getHours();const minute = date.getMinutes();const second = date.getSeconds();var time = year + '-' + month + '-' + day + ' ' + hour + '时' + minute +'分'+ second+'秒';return time;},onLaunch() {// 展示本地存储能力const logs = wx.getStorageSync('logs') || []logs.unshift(Date.now())wx.setStorageSync('logs', logs)// 登录wx.login({success: res => {console.log(res.code)// 发送 res.code 到后台换取 openId, sessionKey, unionId},})},})

4.4 在sign.ts中引入全局配置


在这里插入图片描述

// 获取应用实例
const app = getApp<IAppOption>()

如果你版本较低,文件为sign.js则引入

var app = getApp();

4.5. 代码编写


// 获取应用实例
const app = getApp<IAppOption>()
Page({/*** 页面的初始数据*/data: {username: '', //用户名mobile: '', //手机号pass1: '', //密码pass2: '', //确认密码},// 用户名失去焦点username(e) {this.setData({username: e.detail.value})},// 手机号失去焦点mobile(e) {this.setData({mobile: e.detail.value})},// 密码失去焦点pass1(e) {var pattern = /^[\w_]{0,6}$/; //密码正则if (!pattern.test(e.detail.value)) {this.setData({pass1: ''})wx.showToast({title: '密码长度必须为0-6位,并且由字母,数字或下划线组成',icon: 'none',duration: 3000})} else {this.setData({pass1: e.detail.value})}},// 确认密码失去焦点pass2(e) {this.setData({pass2: e.detail.value})},// 接种用户点击注册按钮bindGetUserInfo: function(e){if (e.detail.userInfo) {//用户按了允许授权按钮wx.showLoading({title: '正在注册...',})if (this.data.username == '') {wx.showToast({title: '用户名不能为空',icon: 'none',duration: 2000})} else if (this.data.mobile == '') {wx.showToast({title: '手机号不能为空',icon: 'none',duration: 2000})} else if (!(/^1[3456789]\d{9}$/.test(this.data.mobile))) {wx.showToast({title: '手机号码格式有误,请重新输入!',icon: 'none',duration: 2000})} else if (this.data.pass1 == '') {wx.showToast({title: '密码不能为空',icon: 'none',duration: 2000})} else if (this.data.pass2 == '') {wx.showToast({title: '请再次输入密码',icon: 'none',duration: 2000})} else if (this.data.pass1 != this.data.pass2) {wx.showToast({title: '两次密码输入不一致,请重新输入!',icon: 'none',duration: 2000})} else {var that = this// 注册这个账户之前,我们首先要做的就是查询一下这个集合表中是否已经存在过这个用户了wx.request({url: app.mydata.ip+'api/user/checkname',data: {username:this.data.username,},header: {// 'content-type': 'application/json''content-type': 'application/x-www-form-urlencoded'},method: 'POST',success: function(res) {console.log(res)if (res.data=='no') { //判断用户名是否被注册过,等于空说明没被查询到,就是没有注册过,
//我写的数用户名和手机号都可以登录,所以同一个手机号和用户名只能算一个账号,也要验证一下手机号是否被注册过wx.request({url: app.mydata.ip+'api/user/checkphone',data: {phone:that.data.mobile,},header: {// 'content-type': 'application/json''content-type': 'application/x-www-form-urlencoded'},method: 'POST',success: function(res) {if (res.data == 'no') { //判断手机号是否被注册过,等于空说明没被查询到,就是没有注册过,wx.request({url: app.mydata.ip+'api/user/register',data: {id:1,   username:that.data.username,password:that.data.pass2,phone:that.data.mobile,root:1,sex:"男",birthTime:app.time()},header: {'content-type': 'application/json'},method: 'GET',success: function(res) {if (res.data.code == 1) { //接口调取成功,也就是注册成功// 这里面你可以加一下注册成功之后的逻辑,是直接登录也好,或者是跳到登录页面页面wx.hideLoading();wx.showToast({title: '注册成功',icon: 'none'})setTimeout(function() {wx.showLoading({title: '正在跳转',})setTimeout(function() {wx.hideLoading();wx.navigateTo({url: '../login/login',})}, 300)}, 100)}}})} else {wx.showToast({title: '此手机号已被别人注册,换一个试试!',icon: 'none',duration: 2000})}}})} else {wx.showToast({title: '此用户名已被别人注册,换一个试试!',icon: 'none',duration: 2000})}}})}} else {//用户按了拒绝按钮wx.showModal({title: '警告',content: '您点击了拒绝授权,将无法进行账号注册,请授权之后再注册!!!',showCancel: false,confirmText: '返回授权',success: function(res) {}})}},okzhuche: function() {setTimeout(function() {wx.showLoading({title: '正在跳转',})setTimeout(function() {wx.hideLoading();app.globalData.register=true;}, 300)}, 100)wx.navigateTo({url: "../login/login"}) },/*** 生命周期函数--监听页面加载*/onLoad: function(options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function() {},/*** 生命周期函数--监听页面显示*/onShow: function() {},/*** 生命周期函数--监听页面隐藏*/onHide: function() {},/*** 生命周期函数--监听页面卸载*/onUnload: function() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function() {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function() {},/*** 用户点击右上角分享*/onShareAppMessage: function() {}})

4.6. 运行

在这里插入图片描述
1.打开改属性设置,原因是域名接口不是小程序授权接口
2.输入注册信息
在这里插入图片描述
3.确认注册
在这里插入图片描述
在这里插入图片描述
4.重新注册使用同账号或者同电话号码会被拦截
在这里插入图片描述

总结

学习如逆水行舟,不进则退。视频教程于周内于哔哩哔哩更新,同学需提前熟悉代码与操作。

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

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

相关文章

全网最细讲解如何实现导出Excel压缩包文件

写在前面的话 接下来我会使用传统的RESTful风格的方式结合MVC的开发模式给大家介绍一下如何去实现标题的效果。 基本思路讲解 先从数据库中查询出一组人员信息记录&#xff0c;保存在List list中。遍历这个列表&#xff0c;对于每一个人员信息&#xff0c;将其填充到一个Excel…

BIOMOD2模型、MaxEnt模型物种分布模拟,生物多样性生境模拟,论文写作

①基于R语言BIOMOD2模型的物种分布模拟实践技术应用 针对我国目前已有自然保护区普遍存在保护目标不明确、保护成效低下和保护空缺依然存在等问题&#xff0c;科学的鉴定生物多样性热点保护区域与保护空缺显得刻不容缓。 BIOMOD2提供运行多达10余种物种分布模拟模型&#xff0c…

工具篇 | Gradle入门与使用指南

介绍 1.1 什么是Gradle&#xff1f; Gradle是一个开源构建自动化工具&#xff0c;专为大型项目设计。它基于DSL&#xff08;领域特定语言&#xff09;编写&#xff0c;该语言是用Groovy编写的&#xff0c;使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序&#x…

基于海康Ehome/ISUP接入到LiveNVR实现海康摄像头、录像机视频统一汇聚,做到物联网无插件直播回放和控制

LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB28181 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关…

PREEvision Client 10.8.0

PREEvision Client 10.6.0 2692407267qq.com&#xff0c;更多内容请见http://user.qzone.qq.com/2692407267/

WebGL HUD(平视显示器)

目录 HUD&#xff08;平视显示器&#xff09; 如何实现HUD 示例程序&#xff08;HUD.html&#xff09; 示例程序&#xff08;HUD.js&#xff09; 代码详解 在网页文字上方显示三维物体 代码详解 HUD&#xff08;平视显示器&#xff09; 平视显示器&#xff08;head…

服务器迁移:无缝过渡指南

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

华为数通方向HCIP-DataCom H12-821题库(单选题:361-380)

第361题 如图所示是一台路由器的BGP输出信息。那么以下关于这段信息的描述,错误的是哪一项? <Huawei>display bgp error Error Type: Peer Error Peer Address:10.1.1.2 VRFName:Public Error Info: Router-ID conflictA、该路由器邻居地址是10.1.1.2 B、Error Type显…

AVR 单片机 调试环境 JTAG MKII

注意 驱动 的厂家: 如果驱动备改变为其他厂家的驱动 就与 AVR Studio7不兼容 保证驱动选择正确是 能够使用硬件调试的关键 如果驱动不对&#xff0c;使用 USB驱动修改工具 修改 比如 UsbDriverTool.exe

App Store上线规范及流程

上线一个应用到 App Store 需要遵循苹果的规范和流程&#xff0c;以确保应用的质量和安全性。以下是上线应用到 App Store 的一般规范和流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 开发和…

【新版】系统架构设计师 - 案例分析 - 数据库设计

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 案例分析 - 数据库设计数据库基础数据库设计概述E-R模型概念结构设计逻辑结构设计规范化&#xff08;范式&#xff09;反规范化技术数据库事务并发控制索引视图物化视图存储过程触发器数据库性能优…

linux用户和权限命令学习记录

文章目录 版权声明root用户&#xff08;超级管理员&#xff09;su和exit命令sudo命令为普通用户配置sudo认证 用户、用户组管理用户组管理getent命令 查看权限控制认知权限信息 修改权限控制chmod修改文件、文件夹的权限权限的数字序号chown修改所属用户、用户组 版权声明 本博…

虚幻4学习笔记(15)读档 和存档 的实现

虚幻4学习笔记 读档存档 B站UP谌嘉诚课程&#xff1a;https://www.bilibili.com/video/BV164411Y732 读档 添加UI蓝图 SaveGame_UMG 添加Scroll Box 修改Scrollbar Thickness滚动条厚度 15 15 勾选 is variable 添加text 读档界面 添加背景模糊 添加UI蓝图 SaveGame_Slot …

工业通讯Modbus简介(一)

写在前面&#xff1a; 昨日雨&#xff0c;在床上睡觉许久&#xff0c;放空身体精神。至傍晚&#xff0c;雨仍淅淅沥沥&#xff0c;拆半年前行李&#xff0c;取煮水锅&#xff0c;欲食火锅。与老王一起&#xff0c;美哉。 今日团建&#xff0c;我队共10个老铁&#xff0c;拔河获…

Qt地铁智慧换乘系统浅学( 三 )最少路径和最少换乘实现

本算法全都基于广度优先 概念最短路径实现所用容器算法思路 最少换乘实现所需容器算法思路 成果展示代码实现判断是最短路径还是最少换乘最短路径代码实现最少换乘代码实现根据所得List画出线路 ui界面的维护&#xff08;前提条件&#xff09;界面初始化combox控件建立槽函数 概…

ROS 2官方文档(基于humble版本)学习笔记(三)

ROS 2官方文档&#xff08;基于humble版本&#xff09;学习笔记&#xff08;三&#xff09; 理解参数&#xff08;parameter&#xff09;ros2 param listros2 param getros2 param setros2 param dumpros2 param load在节点启动时加载参数文件 理解动作&#xff08;action&…

【C语言精髓 之 指针】指针*、取地址、解引用*、引用

/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载需获得博主本人同意&#xff0c;且需标明转载源* language …

ElementUI之登陆+注册->饿了吗完成用户登录界面搭建,axios之get请求,axios之post请求,跨域,注册界面

饿了吗完成用户注册登录界面搭建axios之get请求axios之post请求跨域 1.饿了吗完成用户注册登录界面搭建 将端口号8080改为8081 导入依赖&#xff0c;在项目根目录使用命令npm install element-ui -S&#xff0c;添加Element-UI模块 -g&#xff1a;将依赖下载node_glodal全局依…

2023 “华为杯” 中国研究生数学建模竞赛(B题)深度剖析|数学建模完整代码+建模过程全解全析

华为杯数学建模B题 当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2021年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看研赛的B题呀~&#xff01; 问…

数据结构 | 队列

队列&#xff08;First In First Out&#xff09; 顺序队列 #include <iostream>class MyQueue {private:// store elementsvector<int> data; // a pointer to indicate the start positionint p_start; public:MyQueue() {p_start 0;}/** In…