软测宝小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
keysass_app/pages/personal/phonelogin.vue

181 lines
4.8 KiB

12 months ago
<template>
<view>
<view class="bureau">
<view style="margin-bottom: 43px;">
<img src="/static/index/logo.png" alt="">
8 months ago
<p style="margin: 10px 0;">小关软测宝</p>
12 months ago
<p style="font-size:.8rem;font-weight: 400;letter-spacing: 0.7rem;">专业软件测试云平台</p>
</view>
<view class="inlog">
<u-field v-model="loginobj.phone" label-width='0' placeholder-style="font-size:15px" :clearable='isclear' placeholder='请输入手机号'>
<p slot="right" style="font-size:15px;color:#000000" @click="getCode">+86</p>
</u-field>
<u-field v-model="loginobj.code" :clearable='isclear' label-width='0' placeholder-style="font-size:15px" placeholder='请输入验证码'>
<!-- <u-button size="mini" plain slot="right" type="primary" @click="getCode">{{codeText}}</u-button> -->
<p slot="right" @click="getCode">{{codeText}}</p>
</u-field>
<u-verification-code ref="uCode" @change="codeChange"></u-verification-code>
</view>
<button v-if='loginobj.code.length==6' class="button-g" @click="login">登录</button>
<button v-else class="button-g" style="background-color:rgba(25, 123, 239, .5);" >登录</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
loginobj:{
phone:'',
code:'',
uuid:'',
},
cleart:false,
codeText: '获取验证码',
uproute:''
}
},
onLoad() {
let pages = getCurrentPages()
let prevPage = pages[pages.length - 2];
if(prevPage){
this.uproute=prevPage.route
}
},
methods: {
isMobile(s) {
return /^1[0-9]{10}$/.test(s)
},
codeChange(text) {
this.codeText = text;
},
// 获取验证码
getCode() {
if(this.$refs.uCode.canGetCode) {
let phone = this.loginobj.phone;
if (!phone || !this.isMobile(phone)) {
uni.showToast({ title: '手机格式不对', icon: 'none', duration: 1000 });
return;
}
// 获取登录验证码的接口
this.http.quickGet('/captchaUserLogin?phoneNumber=' + phone).then((res)=> {
console.log('获取登录验证码',res);
if(res.data.code==200){
this.loginobj.uuid=res.data.uuid;
uni.showToast({title: '发送成功', icon: 'none', duration:1000 });
setTimeout(() => {
uni.hideLoading();
// 通知验证码组件内部开始倒计时
this.$refs.uCode.start();
}, 1000);
}else{
uni.showToast({title:res.data.msg, icon: 'none', duration:1000 });
}
}).catch((err) => {
console.log('err',err);
});
}else {
this.$u.toast('倒计时结束后再发送');
}
},
login(){
console.log('123123');
const _this = this
uni.login({
success(logininfo) {
console.log(logininfo);
let data={
mobile:_this.loginobj.phone,
code:_this.loginobj.code,
uuid:_this.loginobj.uuid,
openidCode: logininfo.code
}
_this.http.quickPost('/phoneLogin',data).then(res=>{
if(res.data.code==200){
uni.setStorageSync('accessToken', res.data.token)
_this.http.quickGet('/getInfo',true).then(res=>{
if(res.data.code==200){
console.log('手机验证登录成功',res.data)
uni.setStorageSync('register', res.data.isRegister)
uni.setStorageSync('testerStatus', res.data.user.testerStatus)
uni.setStorageSync('wxUserInfo', res.data.user)
uni.setStorageSync('email', res.data.user.email)
uni.setStorageSync('avatar', res.data.user.avatar)
uni.setStorageSync('nickName', res.data.user.nickName)
uni.setStorageSync('sex', res.data.user.sex)
uni.showToast({ title: '登录成功', icon: 'success', duration: 1000 });
if(_this.uproute=='pages/personal/personal' || _this.uproute=='pages/personal/login'){
uni.switchTab({
url:'/pages/personal/personal'
})
}else{
setTimeout(()=>{
uni.navigateBack({
delta:2
})
},1000)
}
}
})
}
})
},
fail(error) {
console.log('失败了', error);
}
})
},
}
}
</script>
<style>
.bureau{
text-align: center;
margin: 13vh auto;
}
.bureau img{
width:70px;
height:58px;
margin-right: 5px;
}
.bureau p{
font-size:1.3rem;
font-weight: bold;
color:#0A8AD3;
}
.inlog{
width:90vw;
margin: 0 auto;
}
.inlog .u-field{
height:45px;
border-bottom: 1px solid rgb(187 187 187 / 0.5);
margin-bottom:10px;
}
.inlog p{
color:#2979ff;
font-size: 15px;
font-weight:normal
}
.button-g{
width:90vw;
height:80rpx;
background-color:#197BEF;
border-radius:25px;
text-align: center;
line-height:80rpx;
color: #FFFFFF;
font-size:36rpx;
margin-top:15px;
}
</style>