deming/pageE/mine/UpdatePhone.vue
2020-07-03 17:44:58 +08:00

225 lines
5.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="update-phone">
<view class="update-main">
<view class="old-phone">
<view class="phone-number">
<view class="title">原手机号</view>
<input type="text" v-model="oldMobile" placeholder="请输入手机号码" />
</view>
<view class="code">
<view class="title">验证码</view>
<input type="text" v-model="oldCode" placeholder="请输入验证码" />
<u-verification-code :seconds="seconds" @end="end" @start="start" ref="uOldCode" @change="oldCodeChange" unique-key="old" change-text="x秒"></u-verification-code>
<view class="get-code" @click="getCode(0)">{{ btnText[0] }}</view>
</view>
</view>
<view class="new-phone">
<view class="phone-number">
<view class="title">新手机号</view>
<input type="text" v-model="newMobile" placeholder="请输入手机号码" />
</view>
<view class="code">
<view class="title">验证码</view>
<input type="text" v-model="newCode" placeholder="请输入验证码" />
<u-verification-code :seconds="seconds" @end="end" @start="start" ref="uNewCode" @change="newCodeChange" unique-key="new" change-text="x秒"></u-verification-code>
<view class="get-code" @click="getCode(1)">{{ btnText[1] }}</view>
</view>
</view>
</view>
<view class="tips">注意修改手机号需要原手机号获取验证码无原手机验证码请联系客服</view>
<view class="btn" @click="changeMemberPhone">保存</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
oldMobile: '',
oldCode: '',
newMobile: '',
newCode: '',
btnText: ['获取验证码', '获取验证码'],
seconds: 60, // 获取验证码间隔时间
}
},
onNavigationBarButtonTap(e) {
if( e.index == 0 ) uni.navigateBack();
},
methods: {
// 验证发送验证码
verifySendCode(type) {
const [phone, tips] = type == 0
? [this.oldMobile, '请填写正确的原手机号']
: [this.newMobile, '请填写正确的新手机号'];
if (!this.$u.test.mobile(phone)) {
this.$u.toast(tips);
return false;
}
return true;
},
// 验证修改绑定手机号
verifyChangeMobile() {
if(!this.$u.test.mobile(oldMobile)) {
this.$u.toast('请填写正确的原手机号');
return false;
}
if(this.$u.test.isEmpty(oldCode)) {
this.$u.toast('验证码为空');
return false;
}
if(!this.$u.test.mobile(newMobile)) {
this.$u.toast('请填写正确的新手机号');
return false;
}
if(this.$u.test.isEmpty(newCode)) {
this.$u.toast('验证码为空');
return false;
}
return true;
},
oldCodeChange(text) {
this.$set(this.btnText, 0, text);
},
newCodeChange(text) {
this.$set(this.btnText, 1, text);
},
// @param Number type 0: 原手机号 1: 新手机号
async getSmsCode (type) {
if(!this.verifySendCode(type)) return false;
return await this.$u.api.sendSmsCode({
member_mobile: type == 0 ? this.oldMobile: this.newMobile,
smslog_type: 4 // 类型[1:注册,2:登录,3:找回密码,4:绑定手机]
})
},
getCode(type) {
const refs = type == 0 ? this.$refs.uOldCode : this.$refs.uNewCode;
if(refs.canGetCode) {
uni.showLoading({
title: '正在获取验证码'
})
this.getSmsCode(type).then(res => {
uni.hideLoading();
if(res.errCode == 0) {
// 这里此提示会被this.start()方法中的提示覆盖
this.$u.toast(res.message);
// 通知验证码组件内部开始倒计时
refs.start();
} else {
this.$refs.uToast.show({
type: 'error',
title: res.message,
duration: 3000,
})
}
}).catch(() => {
uni.hideLoading();
this.$u.toast('验证码发送错误');
})
} else {
this.$u.toast('倒计时结束后再发送');
}
},
changeMemberPhone() {
if(!this.verifyChangeMobile) return false;
this.$u.api.changeMemberPhone({
old_mobile: this.oldMobile,
old_code: this.oldCode,
new_mobile: this.newMobile,
new_code: this.newCode,
}).then(res => {
if(res.errCode == 0) {
uni.navigateBack();
} else {
this.$refs.uToast.show({
type: 'error',
title: res.message
})
}
})
},
end() {
// this.$u.toast('倒计时结束');
},
start() {
// this.$u.toast('倒计时开始');
},
},
};
</script>
<style lang="scss" scoped>
.update-phone {
min-height: calc(100vh - var(--window-top));
background-color: #ECECEC;
padding-top: 1rpx;
.update-main {
@mixin update-General() {
> view {
display: flex;
align-items: center;
padding: 35rpx 30rpx;
background-color: #ffffff;
.title {
width: 156rpx;
font-size: 28rpx;
color: rgba(51,51,51,1);
}
.input {
width: 340rpx;
font-size: 26rpx;
}
.get-code {
flex: 1;
font-size: 28rpx;
color: rgba(153,153,153,1);
position: relative;
padding: 0 25rpx;
margin-left: 20rpx;
text-align: center;
&::after {
position: absolute;
content: "";
width: 2rpx;
height: 43rpx;
background: rgba(242,242,242,1);
left: 0;
top: 50%;
transform: translate(0, -50%);
}
}
}
.code {
display: flex;
align-items: center;
.title {
font-size: 28rpx;
color: rgba(51,51,51,1);
}
}
}
.old-phone {
@include update-General()
}
.new-phone {
@include update-General()
}
}
.tips {
padding: 20rpx 30rpx;
font-size: 24rpx;
color: rgba(102,102,102,1);
line-height: 40rpx;
}
.btn {
margin: 120rpx auto 0;
width: 690rpx;
height: 98rpx;
background: rgba(255,120,15,1);
border-radius: 49rpx;
font-size: 36rpx;
color: rgba(255,255,255,1);
line-height: 98rpx;
text-align: center;
}
}
</style>