java-mall-app/pagesub/login/sms.vue
2025-04-24 15:47:08 +08:00

364 lines
9.0 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://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/static/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>