团队冲刺第二阶段1


今天我们团队明确了我们第二阶段的目标:完善人脸识别功能

商讨了如何利用api返回的参数做人脸识别的比对

交给我的任务是测试我们的项目并且继续美化我们的页面

 

今天对登录/注册界面进行了优化:

<template>
 
<view class="login">
 
<view class="login-main">
 
<view class="login-logo">
 
  
 
</view>
 
  
 
  
 
​
 
<view class="login-list flex border-all">
 
<view class="iconfont icon-shoujihao flex"></view>
 
<view class="login-input">
 
<input type="number" maxlength="11" placeholder="请输入手机号" class="is-input1 " v-model="phone" />
 
</view>
 
</view>
 
<view class="login-list flex border-all">
 
<view class="iconfont icon-yanzhengma flex"></view>
 
<view class="login-input">
 
<input type="number" maxlength="6" placeholder="请输入验证码" class="is-input1 " v-model="code" />
 
</view>
 
<view class="code-sx"></view>
 
<view class="codeimg" @click.stop="getCode()">{{getCodeText}}</view>
 
</view>
 
<button class="cu-btn login-btn" @tap="doLogin">登 录/注 册</button>
 
<view class="login-tip">点击登录表示同意
 
<navigator>软件许可及服务协议</navigator>
 
</view>
 
</view>
 
<view class="login-footer">
 
<view class="footer-tip flex">其他登录方式</view>
 
<view class="footer-other flex">
 
<view class="other-list">
 
<image src="../../static/ic-QQ@2x.png" mode="aspectFill" @tap="login_qq()"></image>
 
</view>
 
<view class="other-list">
 
<image src="../../static/ic-weixin@2x.png" mode="aspectFill" @tap="login_weixin()"></image>
 
</view>
 
</view>
 
</view>
 
</view>
 
</template>
 
  
 
  
 
<script>
 
export default {
 
data() {
 
return {
 
phone: "",
 
code: '',
 
key: '',
 
getCodeText: '获取验证码',
 
getCodeBtnColor: "#ffffff",
 
getCodeisWaiting: false,
 
}
 
},
 
onLoad() {
 
this.checkGuide();
 
},
 
methods: {
 
checkGuide() {
 
// 思路: 检测是否有启动缓存,如果没有,就是第一次启动,第一次启动就去 启动介绍页面
 
const launchFlag = uni.getStorageSync('launchFlag');
 
if (launchFlag) {
 
this.isLogin();
 
} else {
 
uni.redirectTo({
 
url: '/pages/guide/list'
 
});
 
}
 
},
 
  
 
isLogin() {
 
// 判断缓存中是否登录过,直接登录
 
try {
 
const value = uni.getStorageSync('access_token');
 
if (value) {
 
//有登录信息
 
console.log("已登录用户:", value);
 
uni.switchTab({
 
url: '/pages/index/index'
 
});
 
}
 
} catch (e) {
 
  
 
}
 
},
 
  
 
  
 
Timer() {},
 
getCode() {
 
let _this = this;
 
uni.hideKeyboard()
 
if (_this.getCodeisWaiting) {
 
return;
 
}
 
if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(_this.phone))) {
 
uni.showToast({
 
title: '请填写正确手机号码',
 
icon: "none"
 
});
 
return false;
 
}
 
_this.getCodeText = "发送中..."
 
_this.getCodeisWaiting = true;
 
_this.getCodeBtnColor = "rgba(255,255,255,0.5)"
 
  
 
uni.request({
 
url: _this.websiteUrl + '/sms/notification-sms/codes',
 
data: {
 
'phone': _this.phone
 
},
 
method: 'POST',
 
header: {
 
'Content-Type': 'application/x-www-form-urlencoded',
 
//自定义请求头信息
 
},
 
success: (res) => {
 
_this.key = res.data.data.key;
 
//TODO 开发模式
 
_this.code = res.data.data.code;
 
}
 
});
 
//示例用定时器模拟请求效果
 
setTimeout(() => {
 
//uni.showToast({title: '验证码已发送',icon:"none"});
 
_this.setTimer();
 
}, 1000)
 
},
 
setTimer() {
 
let holdTime = 59,
 
_this = this;
 
_this.getCodeText = "重新获取(60)"
 
_this.Timer = setInterval(() => {
 
if (holdTime <= 0) {
 
_this.getCodeisWaiting = false;
 
_this.getCodeBtnColor = "#ffffff";
 
_this.getCodeText = "获取验证码"
 
clearInterval(_this.Timer);
 
return;
 
}
 
_this.getCodeText = "重新获取(" + holdTime + ")"
 
holdTime--;
 
}, 1000)
 
},
 
doLogin() {
 
let _this = this;
 
uni.hideKeyboard()
 
//模板示例部分验证规则
 
// if(!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phone))){
 
// uni.showToast({title: '请填写正确手机号码',icon:"none"});
 
// return false;
 
// }
 
  
 
uni.request({
 
url: _this.websiteUrl + '/token/sys/login-sms',
 
data: {
 
'key': _this.key,
 
'code': _this.code,
 
'phone': _this.phone
 
},
 
method: 'POST',
 
header: {
 
'Content-Type': 'application/x-www-form-urlencoded',
 
},
 
success: (res) => {
 
if (res.data.code == 200) {
 
_this.login(true, res.data.data, function() {
 
_this.getRongyToken();
 
});
 
} else {
 
uni.showToast({
 
title: '验证码不正确',
 
icon: "none"
 
});
 
return false;
 
}
 
}
 
});
 
},
 
//QQ登录
 
login_qq() {
 
let _this = this;
 
uni.login({
 
provider: 'qq',
 
success: function(loginRes) {
 
// 获取用户信息
 
uni.getUserInfo({
 
provider: 'qq',
 
success: function(infoRes) {
 
_this.other_login(loginRes, infoRes, 'qq')
 
}
 
});
 
}
 
});
 
},
 
//微信登录
 
login_weixin() {
 
let _this = this;
 
uni.login({
 
provider: 'weixin',
 
success: function(loginRes) {
 
// 获取用户信息
 
uni.getUserInfo({
 
provider: 'weixin',
 
success: function(infoRes) {
 
_this.other_login(loginRes, infoRes, 'wx');
 
}
 
});
 
}
 
});
 
},
 
//授权登录
 
other_login(loginRes, infoRes, type) {
 
let _this = this;
 
let url;
 
let pram = {};
 
// _this.loginRes=JSON.stringify(loginRes).toString();
 
// _this.infoRes=JSON.stringify(infoRes).toString();
 
switch (type) {
 
case 'qq':
 
url = '/token/sys/login-qq';
 
pram = {
 
'openid': loginRes.authResult.openid,
 
'nickname': infoRes.userInfo.nickname,
 
'gender': infoRes.userInfo.gender,
 
'province': infoRes.userInfo.province,
 
'city': infoRes.userInfo.city,
 
'figureurl': infoRes.userInfo.figureurl_qq
 
}
 
break;
 
case 'wx':
 
url = '/token/sys/login-wechat';
 
pram = {
 
'openid': loginRes.authResult.openid,
 
'nickname': infoRes.userInfo.nickName,
 
'sex': infoRes.userInfo.gender,
 
'province': infoRes.userInfo.province,
 
'city': infoRes.userInfo.city,
 
'country': infoRes.userInfo.country,
 
'headimgurl': infoRes.userInfo.avatarUrl,
 
'unionid': loginRes.authResult.unionid
 
}
 
break;
 
default:
 
}
 
uni.request({
 
url: _this.websiteUrl + url,
 
data: pram,
 
method: 'POST',
 
header: {
 
'Content-Type': 'application/x-www-form-urlencoded',
 
},
 
success: (res) => {
 
if (res.data.code == 200) {
 
//_this.testData=JSON.stringify(res.data.data).toString();;
 
_this.login(true, res.data.data, function() {
 
_this.getRongyToken();
 
});
 
  
 
}
 
}
 
});
 
  
 
},
 
async getRongyToken() {
 
let _this = this,
 
url = '/app/api/v1.0/rongy/getRongyToken',
 
param = {},
 
method = 'GET';
 
_this.sendRequest(url, param, method, (res) => {
 
let data = {
 
'appKey': 'xxxxxxx',
 
'token': res.token,
 
'targetIds': res.rongyUserId,
 
'targetName': res.userName,
 
'targetAvatar': res.portrait
 
}
 
uni.setStorage({
 
key: 'ryData',
 
data: data
 
});
 
});
 
},
 
}
 
}
 
</script>
 
  
 
  
 
  
 
<style lang="scss">
 
page {
 
background-color: #FFFFFF;
 
  
 
}
 
.flex{
 
display: flex;
 
}
 
.login {
 
position: absolute;
 
top: 0;
 
left: 0;
 
right: 0;
 
bottom: 0;
 
width: 100%;
 
height: 100%;
 
display: flex;
 
flex-direction: column;
 
}
 
  
 
.login-main {
 
flex: 1;
 
padding: 0 70upx;
 
  
 
.login-logo {
 
width: 248upx;
 
height: 242upx;
 
padding-bottom: 50upx;
 
margin: 200upx auto 0 auto;
 
  
 
image {
 
width: 100%;
 
height: 100%;
 
}
 
}
 
  
 
.logo-tip {
 
text-align: center;
 
padding-top: 25upx;
 
font-size: 32upx;
 
font-weight: 200;
 
color: rgba(51, 51, 51, 1);
 
padding-bottom: 50upx;
 
}
 
  
 
.login-list {
 
margin-top: 35upx;
 
height: 100upx;
 
align-items: center;
 
padding: 0 30upx;
 
  
 
&.border-all {
 
&:after {
 
border: 1px solid #D0D0D0;
 
border-radius: 100upx;
 
}
 
}
 
  
 
.iconfont {
 
width: 65upx;
 
font-size: 44upx;
 
align-items: center;
 
  
 
&:after {
 
margin-left: 20upx;
 
content: '';
 
width: 2upx;
 
height: 35upx;
 
background: #D0D0D0;
 
display: block;
 
}
 
}
 
  
 
.login-input {
 
flex: 1;
 
  
 
input {
 
font-size: 28upx;
 
color: #333333;
 
padding-left: 20upx;
 
}
 
}
 
  
 
.code-sx {
 
content: '';
 
width: 2upx;
 
height: 25upx;
 
background: #D0D0D0;
 
margin-right: 25upx;
 
}
 
  
 
.codeimg {
 
font-size: 24upx;
 
color: #999999;
 
}
 
}
 
  
 
.login-btn {
 
margin-top: 70upx;
 
height: 96upx;
 
width: 100%;
 
background: linear-gradient(-90deg, rgba(80, 85, 168, 1), rgba(104, 110, 210, 1));
 
border-radius: 47upx;
 
font-size: 34upx;
 
color: #ffffff;
 
}
 
  
 
.login-tip {
 
padding-top: 26upx;
 
font-size: 22upx;
 
color: #666666;
 
text-align: center;
 
  
 
navigator {
 
margin-left: 10upx;
 
display: inline-block;
 
color: #5055A8;
 
}
 
}
 
}
 
  
 
.login-footer {
 
padding: 0 70upx;
 
  
 
.footer-tip {
 
align-items: center;
 
font-size: 24upx;
 
color: #999999;
 
text-align: center;
 
  
 
&:before {
 
flex: 1;
 
content: '';
 
height: 2upx;
 
background: #D0D0D0;
 
margin-right: 30upx;
 
}
 
  
 
&:after {
 
margin-left: 30upx;
 
flex: 1;
 
content: '';
 
height: 2upx;
 
background: #D0D0D0;
 
}
 
  
 
}
 
  
 
.footer-other {
 
padding: 40upx 0 100upx 0;
 
justify-content: center;
 
  
 
.other-list {
 
width: 80upx;
 
height: 80upx;
 
margin: 0 75upx;
 
  
 
image {
 
width: 100%;
 
height: 100%;
 
}
 
}
 
}
 
}
 
</style>

  

posted on 2022-05-24 23:22  GHOST-CR  阅读(9)  评论(0)    收藏  举报