java-mall-app/pagesub/login/sms.vue
2024-11-01 16:35:40 +08:00

359 lines
9.8 KiB
Vue

<template>
<view class="register">
<view class="content">
<!-- 头部logo -->
<view class="header">
<image :src="logo"></image>
</view>
<!-- 主体 -->
<view class="main">
<wInput
v-model="user_mobile"
type="text"
isShowIntl
@intl="intlChange"
:placeholder="__('请输入手机号码')"
></wInput>
<wInput
v-model="mobile_code"
type="number"
maxlength="4"
:placeholder="__('请输入验证码')"
isShowCode
:codeText="__('获取验证码')"
ref="runCode"
@setCode="getSmsCode()"
></wInput>
</view>
<wButton
:text="__('登 录')"
:rotate="isRotate"
@click.native="startReg()" style="margin-top: 30rpx;"
></wButton>
</view>
</view>
</template>
<script>
import wInput from '../../components/watch-login/watch-input.vue' //input
import wButton from '../../components/watch-login/watch-button.vue' //button
import imgcode from '@/components/verify-code/imgcode.vue';
import {
mapState,
mapMutations
} from 'vuex'
export default {
data: function() {
return {
logo: "",
user_intl: "",
user_mobile: "",
user_avatar: "https://static.lancerdt.com/demodata/assets/data/avatar.png",
user_password: "",
mobile_code: "",
btntext: "发送",
isUserMobile: true,
isUserEmail: true,
isNickname: true,
isPassword: true,
isSend: true,
sendTime: 120,
isCode: true,
isImgCode: false,
client_info: '{}',
countdown: 6,
cTimer: null,
isRotate: false //是否加载旋转
}
},
computed: mapState(['Config', 'StateCode', 'notice', 'plantformInfo', 'shopInfo', 'userInfo', 'hasLogin']),
components: {
wInput,
wButton,
imgcode
},
onLoad: function(options) {
uni.setNavigationBarTitle({
title:this.__('手机验证码登录')
});
this.setData({
options: options
})
this.btntext = this.__('发送')
setTimeout(()=>{
this.getPlantformInfo((plantformInfo)=> {
this.logo = plantformInfo.logo;
});
}, 200);
this.show();
// #ifdef APP-PLUS
plus.push.getClientInfoAsync(function(info) {
console.log(info);
if (info.clientid) {
that.client_info = JSON.stringify(info);
}
}, function(e) {
console.log(JSON.stringify(e));
})
// #endif
},
methods: {
...mapMutations(['login', 'logout', 'getPlantformInfo', 'forceUserInfo', 'getUserInfo']),
intlChange:function(data){
this.user_intl = data;
},
/* start 图形验证码 */
refresh:function(){
//this.$refs.imgcode.refresh();
},
show:function(){
var _self=this;
setTimeout(function(){
_self.refresh();
},500);
},
onInputImgCode:function(e){
if (e.detail.value.toLocaleLowerCase() == uni.getStorageSync('imgcode').toLocaleLowerCase())
{
this.setData({isImgCode: true})
}
else
{
this.setData({isImgCode: false})
}
},
/* end 图形验证码 */
inputuser_email: function (e) {
let that = this;
this.setData({user_email: e.detail.value}), that.$.isNull(e.detail.value) ? this.setData({isUserEmail: false}) : /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/.test(e.detail.value) ? this.setData({isUserEmail: true}) : this.setData({isUserEmail: false})
},
startReg: function (e) {
let that = this;
//注册
if(this.isRotate){
//判断是否加载中,避免重复点击请求
return false;
}
if (!that.$.tel(this.user_mobile, this.user_intl))
{
this.setData({isUserMobile: false});
uni.showToast({
icon: 'none',
position: 'bottom',
title: that.__('手机号不正确')
});
return false;
}
if (this.mobile_code.length != 4) {
uni.showToast({
icon: 'none',
position: 'bottom',
title: that.__('验证码不正确')
});
return false;
}
this.update();
},
update: function () {
var that = this;
var params = {
user_mobile: this.user_intl + this.user_mobile,
rand_key: this.user_intl + this.user_mobile,
verify_code: this.mobile_code,
client_info:that.client_info
};
that.$.request({
url: this.Config.URL.doSmsLogin,
data: params,
success: function (data, status, msg, code) {
if (status == 200)
{
var id = that.$.setStorageSync('uid', data.user_id);
var key = that.$.setStorageSync('ukey', data.key);
// #ifdef H5
$cookies.set('uid', data.user_id);
$cookies.set('ukey', data.key);
// #endif
that.$.showToast({
title: that.__("登录成功!"), success: function () {
that.login(data);
if (data.im && that.plantformInfo.config.chat_global)
{
that.$Socket.connectserver(data.im);
}
setTimeout(() => {
var prePage = getCurrentPages()[getCurrentPages().length - 2];
try
{
if (prePage.refreshData)
{
prePage.refreshData(prePage.options);
}
else if (prePage.onLoad)
{
prePage.onLoad(prePage.options);
}
}
catch (e)
{
}
that.$.navigateBack(2)
}, 200)
}
})
}
else
{
that.$.confirm(msg);
}
}
});
},
inputphone: function (e) {
let that = this;
this.setData({user_mobile: e.detail.value});
that.$.isNull(e.detail.value) ? this.setData({isUserMobile: false}) : /^1[0123456789]\d{9}$/.test(e.detail.value) ? this.setData({isUserMobile: true}) : this.setData({isUserMobile: false})
},
inputcode: function (e) {
let that = this;
this.setData({mobile_code: e.detail.value}), that.$.isNull(e.detail.value) ? this.setData({isCode: false}) : this.setData({isCode: true})
},
getSmsCode: function () {
let that = this;
if (!that.$.tel(this.user_mobile, this.user_intl))
{
this.setData({isUserMobile: false});
uni.showToast({
icon: 'none',
position: 'bottom',
title: that.__('手机号不正确')
});
return false;
}
//获取验证码
this.$refs.runCode.$emit('runCode'); //触发倒计时(一般用于请求成功验证码后调用)
/*
if (!this.isImgCode)
{
uni.showToast({
icon: 'none',
title: '请输入正确的图形验证码',
});
return;
}
*/
setTimeout(function(){
that.$refs.runCode.$emit('runCode',0); //假装模拟下需要 终止倒计时
},60000)
if (this.isSend)
{
this.setData({isSend: false});
var t = this.sendTime;
var params = {
mobile: this.user_intl + this.user_mobile
};
that.$.request({
url: this.Config.URL.account.get_mobile_checkcode,
data: params,
success: function (data, status, msg, code) {
if (status == 200)
{
var r = setInterval(function () {
t > 0 ? that.setData({btntext: t-- + "s"}) : (that.setData({
isSend: true,
sendTime: 120,
btntext: that.__("重新发送")
}), clearInterval(r))
}, 1e3);
}
else
{
that.setData({isSend: true});
that.$.alert(msg)
that.$refs.runCode.$emit('runCode',0); //假装模拟下需要 终止倒计时
}
}
});
}
},
startTimer: function() {
var that = this;
if (that.cTimer == null) {
that.countdown--;
that.cTimer = setInterval(function() {
that.countdown--;
if (that.countdown == 0) {
that.clearTimer();
}
}, 1000);
}
},
clearTimer: function() {
var that = this;
clearInterval(that.cTimer);
that.cTimer = null;
that.countdown = 6;
}
}
};
</script>
<style lang="scss">
@import '../../styles/reg.scss';
</style>