6 changed files with 245 additions and 3 deletions
@ -0,0 +1,203 @@ |
|||||
|
<template> |
||||
|
<view class="phone_code"> |
||||
|
<text class="phone_code_label">验证码已发送至</text> |
||||
|
<view class="phone_code_count"> |
||||
|
<text class="phone_code_count_new">{{ newPhone }}</text> |
||||
|
<view v-if="isReget" class="phone_code_count_reget"> |
||||
|
<button plain="true" type="warn" size="mini" @click="getCode">重新获取</button> |
||||
|
</view> |
||||
|
<text v-else class="phone_code_count_down">获取验证码<text>{{count}}</text>s</text> |
||||
|
</view> |
||||
|
<view class="phone_code_single"> |
||||
|
<input class="phone_code_single_cinput" adjust-position="false" auto-blur="true" @blur="codeNumBlurFun" |
||||
|
@input="codeNumInputFun" :focus="focus" v-model="code" type="number" maxlength="6" /> |
||||
|
<view class="phone_code_single_codeinput"> |
||||
|
<view v-for="(item,index) in 6" :key="index" @click="codefocusFun(index)" |
||||
|
:style="(index == code.length? 'background-color:#FEF2F2;':'color: #313131;background-color:#eee')"> |
||||
|
{{code[index]}} |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<button :disabled="isCode" class="btn" type="warn" @click="submitFun()">确定</button> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
newPhone: "167****8898", // 当前显示电话 |
||||
|
isReget: false, // 判断是否显示 ‘重新获取’按钮 |
||||
|
timer: null, // 定时器 |
||||
|
count: 60, // 时间 |
||||
|
code:"", // 验证码 |
||||
|
focus:true, // 焦点 |
||||
|
isCode:true // ‘确定’按钮是否禁用 |
||||
|
} |
||||
|
}, |
||||
|
onLoad(options) { |
||||
|
console.log(options) |
||||
|
this.getTimer() // 开启定时器 |
||||
|
this.getCode() // 获取验证码 |
||||
|
}, |
||||
|
watch: { |
||||
|
count(val) { |
||||
|
if (val == 0) { |
||||
|
this.isReget = true |
||||
|
clearInterval(this.timer) |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
methods: { |
||||
|
/** |
||||
|
* AUTHOR: 单乘风 |
||||
|
* DESC: 定时器 |
||||
|
* */ |
||||
|
getTimer() { |
||||
|
this.timer = setInterval(() => { |
||||
|
if (this.count == 0) { |
||||
|
clearInterval(this.timer) |
||||
|
uni.navigateBack({ |
||||
|
delta: 1 |
||||
|
}) |
||||
|
return |
||||
|
} |
||||
|
this.count-- |
||||
|
}, 1000) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* AUTHOR: 单乘风 |
||||
|
* DESC: 获取验证码 |
||||
|
* */ |
||||
|
getCode() { |
||||
|
console.log("获取验证码", this.newPhone) |
||||
|
if (this.count == 0) { |
||||
|
this.count = 60 |
||||
|
this.isReget = false |
||||
|
this.getTimer() |
||||
|
} |
||||
|
}, |
||||
|
/** |
||||
|
* AUTHOR: 单乘风 |
||||
|
* DESC: 输入框输入事件 |
||||
|
* */ |
||||
|
codeNumInputFun(e) { |
||||
|
let val = e.detail.value |
||||
|
this.code = val |
||||
|
if (val.length == 6) this.isCode = false |
||||
|
else this.isCode = true |
||||
|
}, |
||||
|
/** |
||||
|
* AUTHOR: 单乘风 |
||||
|
* DESC: 输入框失去焦点事件 |
||||
|
* */ |
||||
|
codeNumBlurFun(e) { |
||||
|
let val = e.detail.value |
||||
|
this.focus = false |
||||
|
if (val.length == 6) this.isCode = false |
||||
|
else this.isCode = true |
||||
|
}, |
||||
|
/** |
||||
|
* AUTHOR: 单乘风 |
||||
|
* DESC: 输入框点击事件 |
||||
|
* @param {Number} index 当前点击框索引 |
||||
|
* */ |
||||
|
codefocusFun(index) { |
||||
|
this.focus = true |
||||
|
}, |
||||
|
/** |
||||
|
* AUTHOR: 单乘风 |
||||
|
* DESC: 按钮点击事件 |
||||
|
* */ |
||||
|
submitFun() { |
||||
|
console.log("确认更换手机号") |
||||
|
}, |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.phone { |
||||
|
background-color: #FFF; |
||||
|
width: 100vw; |
||||
|
height: 100vh; |
||||
|
|
||||
|
&_code { |
||||
|
padding: 30rpx; |
||||
|
|
||||
|
&_label { |
||||
|
font-size: 30rpx; |
||||
|
color: #999; |
||||
|
} |
||||
|
|
||||
|
&_count { |
||||
|
margin-top: 30rpx; |
||||
|
display: flex; |
||||
|
flex-direction: row; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
height: 100rpx; |
||||
|
|
||||
|
&_new { |
||||
|
color: #FEF2F2; |
||||
|
font-size: 38rpx; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
&_down { |
||||
|
border: 1rpx solid #eee; |
||||
|
border-radius: 10rpx; |
||||
|
color: #999; |
||||
|
height: 60rpx; |
||||
|
line-height: 60rpx; |
||||
|
padding: 0 20rpx; |
||||
|
|
||||
|
text { |
||||
|
margin-left: 10rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&_single { |
||||
|
margin-top: 30rpx; |
||||
|
|
||||
|
&_cinput { |
||||
|
position: fixed; |
||||
|
left: -100rpx; |
||||
|
width: 50rpx; |
||||
|
height: 50rpx; |
||||
|
} |
||||
|
|
||||
|
&_codeinput { |
||||
|
margin: auto; |
||||
|
width: 650rpx; |
||||
|
height: 100rpx; |
||||
|
display: flex; |
||||
|
} |
||||
|
|
||||
|
&_codeinput>view { |
||||
|
margin-top: 5rpx; |
||||
|
margin-left: 15rpx; |
||||
|
width: 86rpx; |
||||
|
height: 86rpx; |
||||
|
line-height: 86rpx; |
||||
|
font-size: 60rpx; |
||||
|
font-weight: bold; |
||||
|
color: #313131; |
||||
|
text-align: center; |
||||
|
border-radius: 10rpx; |
||||
|
} |
||||
|
|
||||
|
&_codeinput>view:nth-child(1) { |
||||
|
margin-left: 0rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
.btn{ |
||||
|
background-color: #FEF2F2; |
||||
|
} |
||||
|
</style> |
||||
Loading…
Reference in new issue