[toc]
# 7.1 登录注册页面开发
## 7.1.1 实现登录注册页面
```
<template>
<view>
<view class="flex flex-column align-center justify-center" style="height:350rpx;">
<text style="font-size:50rpx; ">YOU-LOGIN</text>
</view>
<view class="px-3">
<input type="text" v-model="form.username" class="bg-light px-3 mb-3 font" placeholder="请输入用户名" style="height:100rpx;" />
<input type="password" v-model="form.password" class="bg-light px-3 mb-3 font" placeholder="请输入密码" style="height:100rpx;" />
<input v-if="type !== 'login'" type="password" v-model="form.repassword" class="bg-light px-3 mb-3 font" placeholder="请输入确认密码" style="height:100rpx;" />
</view>
<view class="p-3 flex justify-center align-center">
<view hover-class="bg-main-hover" class=" bg-main rounded p-3 flex align-center justify-center flex-1">
<text class="text-white font-md">{{type === "login" ? "登 录" : "注 册"}}</text>
</view>
</view>
<view class="flex justify-center align-center">
<text class="text-light-muted font p-2" @click="changeType">
{{type === "login" ? "注册账号" : "去登录"}}
</text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
type : "login",
form : {
username : "",
password : "",
repassword : ""
}
};
},
methods : {
changeType(){
this.type = this.type == "login" ? "reg" : "login"
}
}
}
</script>
<style lang="scss">
</style>
```
## 7.1.2 实现request.js文件的封装
- config.js
```
export default {
/*
注意:以下接口改成你自己部署的后端
*/
baseUrl:"http://liveapi2.dishait.cn",
socketUrl:"http://liveapi2.dishait.cn",
imageUrl:"http://liveapi2.dishait.cn",
// 拉流前缀
livePlayBaseUrl:"http://liveapi2.dishait.cn:23481",
// 推流前缀
livePushBaseUrl:"rtmp://liveapi2.dishait.cn:23480",
}
```
- request.js
```
// import $store from '@/store/index.js';
import $C from './config.js';
export default {
// 全局配置
common:{
baseUrl:$C.baseUrl +"/api",
header:{
'Content-Type':'application/json;charset=UTF-8',
},
data:{},
method:'GET',
dataType:'json',
token:false
},
// 请求 返回promise
request(options = {}){
// 组织参数
options.url = this.common.baseUrl + options.url
options.header = options.header || this.common.header
options.data = options.data || this.common.data
options.method = options.method || this.common.method
options.dataType = options.dataType || this.common.dataType
options.token = options.token === true ? true : this.common.token
// 请求
return new Promise((res,rej)=>{
// 请求之前验证...
// token验证
if (options.token) {
let token = uni.getStorageSync('token')
// 二次验证
if (!token && options.noJump !== true) {
uni.showToast({ title: '请先登录', icon: 'none' });
// token不存在时跳转
uni.navigateTo({
url: '/pages/login/login',
});
return rej("请先登录")
}
// 往header头中添加token
options.header.token = token
}
// 请求中...
uni.request({
...options,
success: (result) => {
// 返回原始数据
if(options.native){
return res(result)
}
// 服务端失败
if(result.statusCode !== 200){
if (options.toast !== false) {
uni.showToast({
title: result.data.data || '服务端失败',
icon: 'none'
});
}
// token不合法,直接退出登录
if(result.data.data === 'Token 令牌不合法!'){
// 退出登录操作
// $store.dispatch('logout')
}
return rej(result.data)
}
// 其他验证...
// 成功
let data = result.data.data
res(data)
},
fail: (error) => {
uni.showToast({ title: error.errMsg || '请求失败', icon: 'none' });
return rej(error)
}
});
})
},
// get请求
get(url,options = {}){
options.url = url
options.data = {}
options.method = 'GET'
return this.request(options)
},
// post请求
post(url,data = {},options = {}){
options.url = url
options.data = data
options.method = 'POST'
return this.request(options)
},
// delete请求
del(url,data = {},options = {}){
options.url = url
options.data = data
options.method = 'DELETE'
return this.request(options)
},
// 上传文件
upload(url,data,onProgress = false){
return new Promise((result,reject)=>{
// 上传
let token = uni.getStorageSync('token')
if (!token) {
uni.showToast({ title: '请先登录', icon: 'none' });
// token不存在时跳转
return uni.reLaunch({
url: '/pages/login/login',
});
}
const uploadTask = uni.uploadFile({
url:this.common.baseUrl + url,
filePath:data.filePath,
name:data.name || "files",
header:{ token },
formData:data.formData || {},
success: (res) => {
if(res.statusCode !== 200){
result(false)
return uni.showToast({
title: '上传失败',
icon: 'none'
});
}
let message = JSON.parse(res.data)
result(message.data);
},
fail: (err) => {
console.log(err);
reject(err)
}
})
uploadTask.onProgressUpdate((res) => {
if(typeof onProgress === 'function'){
onProgress(res.progress)
}
});
})
}
}
```
## 7.1.3 在项目集成vuex
1. 创建store文件夹
2. 在store文件夹内创建index.js文件
3. 实例化vuex以及核心方法
- 第一章 项目介绍和准备
- 1.1 课程介绍
- 1.2 环境搭建和项目创建
- 1.3 引入全局样式
- 1.4 引入图标库
- 1.5 底部导航和凸起按钮配置
- 第二章 首页开发
- 2.1 首页开发(一)
- 2.2 首页开发(二)
- 第三章 直播间(用户端)开发
- 3.1 基础布局开发(一)
- 3.2 基础布局开发(二)
- 3.3 个人信息和观看情况
- 3.4 接收礼物组件(一) - 布局
- 3.5 接收礼物组件(二) - 自动滚动
- 3.6 接收礼物组件(三) - 自动消失
- 3.7 底部操作条
- 3.8 弹幕组件开发(一) - 输入框弹出层
- 3.9 弹幕组件开发(二) - 置于底部功能
- 3.10 弹幕组件开发(三) - 发送弹幕
- 3.11 送礼物弹框组件(一) - 布局
- 3.12 送礼物弹框组件(二) - 功能
- 第四章 充值金币页开发
- 4.1 充值金币页开发(一)
- 4.2 充值金币页开发(二)
- 第五章 直播间(主播端)开发
- 5.1 创建直播页 - 推流组件
- 5.2 创建直播页 - 布局(一)
- 5.3 创建直播页 - 布局(二)
- 5.4 创建直播页 - 镜头反转
- 5.5 创建直播页 - 切换画质
- 5.6 创建直播页 - 美颜和美白
- 5.7 关于退出创建直播页黑边问题
- 5.8 主播直播间(一)
- 5.9 主播直播间(二)
- 第六章 个人中心页面开发
- 6.1 个人中心页
- 第七章 egg.js基础
- 第八章 后台管理系统开发
- 8.1 创建项目和基础配置
- 第九章 交互和部署上线
- 9.1 登录注册交互实现
- 9.2 个人中心交互实现
- 9.3 退出登录以及初始化用户信息
- 9.5 权限验证
- 9.6 首页交互 - 上拉加载与下拉刷新
- 9.7 创建订单和微信支付(一)
- 9.8 创建订单和微信支付(二)
- 9.9 微信支付调试和充值页交互
- 9.10 直播间交互
- 9.11 socket.io安装与通讯(一)
- 9.12 socket.io安装和通讯(二)
- 9.13 加入直播间(一)
- 9.14 加入直播间(二)
- 9.15 加入直播间(三)
- 9.16 离开直播间
- 9.17 直播间实时在线用户列表
- 9.18 直播间实时弹幕功能
- 9.19 直播间送礼物功能
- 9.20 创建直播功能交互(一)
- 9.21 创建直播功能交互(二)
- 9.22 优化前端部分问题(一)
- 9.23 优化前端部分问题(二)
- 第七章 登录注册页面开发