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.
 
 
 
 
 
 
yanzong_qianduan/pages/login/index.vue

259 lines
5.8 KiB

<template>
<view class="login">
<view class="refund-navbar">
<u-navbar title="" :border-bottom="false" :background="background"></u-navbar>
</view>
<view class="login-hd">
<view class="a">验证码登录</view>
<view class="b">若该手机号未注册我们将自动为您注册</view>
</view>
<view class="login-bd">
<view class="a">+86<input v-model="phoneNum" type="tel" placeholder="请输入手机号" /></view>
<view class="b">
<input v-model="semCode" placeholder="请输入验证码" />
<text @click="getCode" v-if="!showCountDown">获取验证码</text>
<text v-if="showCountDown">{{countdown}}</text>
</view>
<view class="c">
查看并同意<text @click="toTextPage(1)">《用户服务协议》</text>和<text @click="toTextPage(2)">《隐私政策》</text>
</view>
</view>
<view class="login-fd login-fd-on" @click="login">登录</view>
<view class="" v-if="isCheckout">
<mpWeiXinMobile :refereeId="refereeId"></mpWeiXinMobile>
</view>
<view class="" v-else>
<mpWeiXinMobile :refereeId="refereeId"></mpWeiXinMobile>
</view>
</view>
</template>
<script>
import * as UserApi from '@/api/user'
import * as CaptchaApi from '@/api/captcha';
import mpWeiXinMobile from './components/mp-weixin-mobile.vue'
import store from '@/store';
import {
isEmpty
} from '@/utils/util'
export default {
components: {
mpWeiXinMobile
},
data() {
return {
isCheckout: false,
showCountDown: false,
currentIndex: 0,
background: {
background: `url(${this.$picUrl}/static/news/login-bg.png) center top no-repeat`,
backgroundSize: '100% auto',
},
phoneNum: '',
semCode: '',
countdown: 60,
countDownFun: null,
code: '',
refereeId: ""
}
},
onLoad(o) {
this.refereeId = o.refereeId
},
methods: {
toTextPage(n) {
uni.navigateTo({
url: "/pages/news1/text?pageFlag=" + n
})
},
validatePhoneNumber(phone) {
// 定义手机号码的正则表达式
var regExp = /^1[3456789]\d{9}$/;
if (regExp.test(phone)) {
return true; // 符合手机号码格式要求
} else {
return false; // 不符合手机号码格式要求
}
},
getCode() {
// 获取验证码
const that = this
if (!that.validatePhoneNumber(that.phoneNum)) {
uni.showToast({
title: '请输入正确的手机号'
})
return
}
that.showCountDown = !that.showCountDown
that.countDownFun = setInterval(() => {
if (that.countdown >= 1) {
that.countdown = that.countdown - 1
} else {
that.showCountDown = false
that.countdown = 60
clearInterval(that.countDownFun)
}
}, 1000)
CaptchaApi.sendSmsCaptcha({
form: {
mobile: that.phoneNum
}
}).then(res => {
if (res.status == 200) {
uni.showToast({
title: res.message
})
} else {
uni.showToast({
title: res.message
})
}
})
},
login() {
// 登录
if (!this.validatePhoneNumber(this.phoneNum)) {
this.$toast('请输入正确的手机号')
return
}
if (this.semCode == '') {
this.$toast('请输入验证码')
return
}
const that = this;
store.dispatch('Login', {
smsCode: that.semCode,
mobile: that.phoneNum,
refereeId: this.refereeId,
isParty: false,
partyData: {},
refereeId: false
}).then(res => {
uni.setStorageSync('token', res.data.token)
that.$toast(res.message)
that.getUserInfo()
setTimeout(() => that.onNavigateBack(1), 2000)
})
},
getUserInfo() {
UserApi.info()
.then(result => {
uni.setStorageSync('userInfo', result.data.userInfo)
})
},
onNavigateBack(delta = 1) {
// 登录成功返回原页面
const pages = getCurrentPages()
if (pages.length > 1) {
uni.navigateBack({
delta: Number(delta || 1)
})
} else {
this.$navTo('pages/index/index')
}
}
}
}
</script>
<style lang="scss" scoped>
.login {
width: 100%;
background: #fffafb url(https://www.royaum.com.cn/static/news/login-bg.png) center top no-repeat;
background-size: 100% auto;
min-height: 100vh;
&-hd {
padding: 90rpx 75rpx 75rpx;
overflow: hidden;
.a {
line-height: 80rpx;
font-size: 40rpx;
font-weight: 500;
color: #000000;
}
.b {
font-size: 28rpx;
font-weight: 400;
color: #5A5A5A;
line-height: 50rpx;
}
}
&-bd {
padding: 0 75rpx;
overflow: hidden;
.a {
padding: 20rpx 0;
border-bottom: 1px solid #F2F2F2;
display: flex;
align-items: center;
font-size: 32rpx;
font-weight: 400;
color: #212121;
input {
flex: 1;
margin-left: 30rpx;
line-height: 50rpx;
border-left: 1px solid #C4C4C4;
padding-left: 30rpx;
font-size: 28rpx;
color: #212121;
}
}
.b {
padding: 30rpx 0;
border-bottom: 1px solid #F2F2F2;
display: flex;
align-items: center;
font-size: 28rpx;
font-weight: 400;
color: #F3202A;
input {
flex: 1;
margin-right: 30rpx;
line-height: 50rpx;
font-size: 28rpx;
color: #212121;
}
}
.c {
padding: 28rpx 0;
font-size: 28rpx;
font-weight: 400;
color: #A0A0A0;
text {
color: #FF343C;
}
}
}
&-fd {
width: 680rpx;
line-height: 88rpx;
background: #FFBDBA;
border-radius: 88rpx;
text-align: center;
margin: 0 auto;
margin-top: 120rpx;
font-size: 28rpx;
font-weight: 600;
color: #FFFFFF;
&-on {
background-color: #FF343C;
}
}
}
</style>