参考自b站青戈
uniapp框架搭建、登录注册、http请求封装_哔哩哔哩_bilibili
一、首先我们先看一下大概的页面
登录页面
注册页面
二、大概功能介绍
开始没有用户名(账号)和密码,需要点击前往注册页面注册相关信息,在注册页面输入相关信息之后,点击注册按钮会向后端接口发起POST请求,这样我们就可以拿注册的信息去登录,登录成功后跳转到首页(也可以是其他页面),看需求
三、我们先搭建好HTML结构
登录页面
<template>
<view>
<view style="width: 90%; margin: 200rpx; auto"></view>
<view style="margin-bottom: 70rpx; font-size: 60rpx; color: royalblue; text-align: center;">登录</view>
<uni-forms ref="form" :model="form" :rules="rules">
<uni-forms-item name="username">
<!-- <uni-easyinput v-model="form.username" prefixIcon="person" placeholder="请输入登录用户名"></uni-easyinput> -->
<uni-easyinput v-model="form.username" focus placeholder="请输入登录用户名"></uni-easyinput>
</uni-section>
</uni-forms-item>
<uni-forms-item name="password">
<uni-easyinput type="password" v-model="form.password" prefixIcon="locked" placeholder="请输入登录密码"></uni-easyinput>
</uni-forms-item>
</uni-forms>
<view>
<button type="primary" @click="login">登录</button>
</view>
<navigator url="../register/register" style="margin: 40rpx 0; color: deepskyblue;">前往注册</navigator>
</view>
</template>
注册页面
<template>
<view>
<view style="width: 90%; margin: 200rpx; auto"></view>
<view style="margin-bottom: 70rpx; font-size: 60rpx; color: #F0AD4E; text-align: center;">注 册</view>
<uni-forms ref="form" :model="form" :rules="rules">
<uni-forms-item name="username">
<!-- <uni-easyinput v-model="form.username" prefixIcon="person" placeholder="请输入登录用户名"></uni-easyinput> -->
<uni-easyinput v-model="form.username" focus placeholder="请输入用户名"></uni-easyinput>
</uni-section>
</uni-forms-item>
<uni-forms-item name="password">
<uni-easyinput type="password" v-model="form.password" prefixIcon="locked" placeholder="请输入密码"></uni-easyinput>
</uni-forms-item>
<uni-forms-item name="confirm">
<uni-easyinput type="password" v-model="form.confirm" prefixIcon="locked" placeholder="请确认密码"></uni-easyinput>
</uni-forms-item>
</uni-forms>
<view>
<button type="primary" @click="register">注 册</button>
</view>
</view>
</template>
HTML框架采用uni-app官网的扩展组件
组件使用的入门教程 | uni-app官网 (dcloud.net.cn)
相关链接;
uni-forms表单:
uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/component/uniui/uni-forms.html
uni-easyinput增强输入框
uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/component/uniui/uni-easyinput.html
校验规则详情:
相关的可以查阅相关文档
主要用到uni-easyinput增强输入框,uni-forms表单俩个扩展组件(因为我们要用到其表单校验功能)
表单校验规则
登录页面的
data() {
return {
form: {username:'',password:''},
//校验规则
rules: {
username: {
rules: [{required: true,errorMessage:'请输入用户名'}],
//校验时机
validateTrigger:'submit'
},
password: {
rules: [{required: true,errorMessage:'请输入密码'}],
validateTrigger:'submit'
}
}
}
},
注册页面的
data() {
return {
form: {username:'',password:''},
rules: {
username: {
rules: [{required: true,errorMessage:'请输入用户名'}],
validateTrigger:'submit'
},
password: {
rules: [{required: true,errorMessage:'请输入密码'}],
validateTrigger:'submit'
},
confirm: {
rules: [{required: true,errorMessage:'请确认密码'}],
validateTrigger:'submit'
}
}
}
},
注意: uni-forms-item后面的属性的名字要对应上data里面的规则那里
<uni-forms-item name="username">
<!-- <uni-easyinput v-model="form.username" prefixIcon="person" placeholder="请输入登录用户名"></uni-easyinput> -->
<uni-easyinput v-model="form.username" focus placeholder="请输入登录用户名"></uni-easyinput>
</uni-section>
</uni-forms-item>
<uni-forms-item name="password">
<uni-easyinput type="password" v-model="form.password" prefixIcon="locked" placeholder="请输入登录密码"></uni-easyinput>
</uni-forms-item>
四、在请求接口返回数据之前,我们先封装好一个http请求
当然这个接口是你们自己服务器的地址,或者后端人员给你的,这里只是个演示
const BASE_URL = `http://192.168.455.23:8080`
export const request = (options) => {
return new Promise((resolve,reject) => {
uni.request({
url:BASE_URL + options.url,
method:options.method || 'GET',
header:{token:uni.getStorageSync('user')?uni.getStorageSync('user').token:''},
data:options.data || {},
success: (res) => {
const data = res.data
if(data.code === '401') {
uni.navigateTo({
url:'/pages/login/login.vue'
})
return
}else if(data.code!=='200') {
uni.showToast({
icon:'error',
title:'操作错误'
})
}
resolve(data)
},
fail: (error) => {
uni.showToast({
icon:'error',
title:'系统错误'
})
reject(error)
}
})
})
}
五、点击注册按钮发起POST请求(方法)
methods: {
register() {
this.$refs.form.validate().then(res=> {
if(this.form.password !== this.form.confirm) {
uni.showToast({
icon:"none",
title:'俩次密码输入不一致'
})
return
}
this.request({url:'/register',method:'POST',data:this.form}).then(res=> {
if(res.code === '200') {
// 跳转页面
uni.navigateTo({
url:'/pages/login/login'
})
uni.showToast({
title:'注册成功'
})
}
}).catch(err=> {
console.log('表单的错误:',err)
})
})
}
}
校验规则的效果,当你没有输入,他会提示你相关错误信息
当正常操作后(我们查看一下返回的信息)后台顺便把token给返回了
成功后我们就可以拿刚才注册的用户名和密码来登录了
登录成功后会跳转到首页
六、登录页面完整代码
<template>
<view>
<view style="width: 90%; margin: 200rpx; auto"></view>
<view style="margin-bottom: 70rpx; font-size: 60rpx; color: royalblue; text-align: center;">登录</view>
<uni-forms ref="form" :model="form" :rules="rules">
<uni-forms-item name="username">
<!-- <uni-easyinput v-model="form.username" prefixIcon="person" placeholder="请输入登录用户名"></uni-easyinput> -->
<uni-easyinput v-model="form.username" focus placeholder="请输入登录用户名"></uni-easyinput>
</uni-section>
</uni-forms-item>
<uni-forms-item name="password">
<uni-easyinput type="password" v-model="form.password" prefixIcon="locked" placeholder="请输入登录密码"></uni-easyinput>
</uni-forms-item>
</uni-forms>
<view>
<button type="primary" @click="login">登录</button>
</view>
<navigator url="../register/register" style="margin: 40rpx 0; color: deepskyblue;">前往注册</navigator>
</view>
</template>
<script>
export default {
data() {
return {
form: {username:'',password:''},
rules: {
username: {
rules: [{required: true,errorMessage:'请输入用户名'}],
validateTrigger:'submit'
},
password: {
rules: [{required: true,errorMessage:'请输入密码'}],
validateTrigger:'submit'
}
}
}
},
methods: {
login(){
this.$refs.form.validate().then(res=> {
this.request({url:'/login',method:'POST',data:this.form}).then(res=>{
if(res.code === '200') {
console.log(res.token)
// 跳转页面
uni.switchTab({
url:'/pages/index/index'
})
uni.showToast({
title:'登录成功'
})
// 存储用户的数据到storage
uni.setStorageSync('user',res.data)
}
})
}).catch(err=> {
console.log("error")
console.log('表单错误信息:',err)
})
}
}
}
</script>
<style>
</style>
七、注册页面完整代码
<template>
<view>
<view style="width: 90%; margin: 200rpx; auto"></view>
<view style="margin-bottom: 70rpx; font-size: 60rpx; color: #F0AD4E; text-align: center;">注 册</view>
<uni-forms ref="form" :model="form" :rules="rules">
<uni-forms-item name="username">
<!-- <uni-easyinput v-model="form.username" prefixIcon="person" placeholder="请输入登录用户名"></uni-easyinput> -->
<uni-easyinput v-model="form.username" focus placeholder="请输入用户名"></uni-easyinput>
</uni-section>
</uni-forms-item>
<uni-forms-item name="password">
<uni-easyinput type="password" v-model="form.password" prefixIcon="locked" placeholder="请输入密码"></uni-easyinput>
</uni-forms-item>
<uni-forms-item name="confirm">
<uni-easyinput type="password" v-model="form.confirm" prefixIcon="locked" placeholder="请确认密码"></uni-easyinput>
</uni-forms-item>
</uni-forms>
<view>
<button type="primary" @click="register">注 册</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
form: {username:'',password:''},
rules: {
username: {
rules: [{required: true,errorMessage:'请输入用户名'}],
validateTrigger:'submit'
},
password: {
rules: [{required: true,errorMessage:'请输入密码'}],
validateTrigger:'submit'
},
confirm: {
rules: [{required: true,errorMessage:'请确认密码'}],
validateTrigger:'submit'
}
}
}
},
methods: {
register() {
this.$refs.form.validate().then(res=> {
if(this.form.password !== this.form.confirm) {
uni.showToast({
icon:"none",
title:'俩次密码输入不一致'
})
return
}
this.request({url:'/register',method:'POST',data:this.form}).then(res=> {
if(res.code === '200') {
// 跳转页面
uni.navigateTo({
url:'/pages/login/login'
})
uni.showToast({
title:'注册成功'
})
}
}).catch(err=> {
console.log('表单的错误:',err)
})
})
}
}
}
</script>
<style>
</style>