<提示语部分不要在意(非重点部分)>
简单说下布局(采用的是 vue的element ui的ui框架 )进行布局操作的
子组件模板部分如下(code部分是很基础的)
<template>
<div class="forget">
<el-dialog title="修改新密码" :visible.sync="dialog.visible"
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-form :model="dialog.ruleForm" status-icon :rules="rules" :ref="dialog.ruleForms"
label-width="100px" class="demo-ruleForm">
<el-form-item label="手机号码" prop="phone" required>
<el-input type="text" v-model.number="dialog.ruleForm.phone" autocomplete="off"
:clearable="true"
></el-input>
</el-form-item>
<el-form-item label="手机验证码"prop="code" required>
<div class="send-code">
<el-input type="text" v-model="dialog.ruleForm.code" autocomplete="off"
maxlength="6"
show-word-limit
:clearable="true"
></el-input>
<el-link
:style="{color:dialog.ruleForm.phone.toString().length===11"
type="info" :underline="false"
:disabled="getDisabled"
@click="sendCode({
phone:dialog.ruleForm.phone,sendCode:dialog.ruleForm.sendCode
})"
>{{dialog.ruleForm.sendCode}}</el-link>
</div>
</el-form-item>
<el-form-item label="新密码" prop="newPwd" required>
<el-input :clearable="true" type="password" v-model="dialog.ruleForm.newPwd"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" @click="determine(dialog.ruleForms)"
:loading="dialog.ruleForm.loading"
>{{dialog.ruleForm.loadingText}}</el-button>
</div>
</el-dialog>
</div>
</template>
子组件逻辑部分如下(code部分是很基础的)
在@/utils/validate.js中的使用正则代码
// 验证手机号码
export const validatPhone = /^(^(([0\+]\d{2,3}-)"htmlcode">
<script>
import {validatPhone,validatePassword} from '@/utils/validate'
export default {
props:{
dialog:{
type:Object,
default: {}
},
},
name: "Forget",
data(){
// 使用正则进行验证手机号码
const validatePhone = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入手机号码'));
}
else {
if (!validatPhone.test(value)) {
callback(new Error('请输入手机号码'));
return
}
callback();
}
};
// 使用进行验证手机验证码
const validateCode = (rule, value, callback) => {
if (value === '') {
return callback(new Error('请输入验证码'));
} else {
//真正环境请修改成自己的逻辑即可
if (this.dialog.ruleForm.code !== '123456') {
callback(new Error('验证码失误,请重新输入'))
// this.dialog.ruleForm.code = ''
return
}
callback();
}
};
// 使用正则进行验证密码
const validatenewPwd = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入密码'));
return
} else if (!validatePassword.test(value)) {
return callback(new Error('新密码不合法'));
} else {
callback();
}
};
return {
rules:{ //验证表单元素中的规则
phone:[
{ validator: validatePhone, trigger: ['blur','change'] }
],
code:[
{ validator: validateCode, trigger: ['blur','change'] }
],
newPwd:[
{ validator: validatenewPwd, trigger: ['blur','change'] }
],
},
timer: null//操作定时器
}
},
computed:{
//getDisabled() 当手机号码的长度等于11位和点击验证码状态为false时,则可以进行倒计时操作
getDisabled(){
let phone= this.dialog.ruleForm.phone
const isChick = this.dialog.ruleForm.isChick
if(phone.toString().length === 11 && isChick ===false){
return false
}
else {
// this.dialog.ruleForm.disabled = true
return true
}
}
},
methods:{
// 发送验证码
sendCode(opt){
this.$emit('sendCode',opt)
},
// 点击取消按钮时触发
cancel(){
this.$emit('cancel')
},
// 点击确定按钮时触发
determine(resf){
this.$refs[resf].validate((valid) => {
if (valid) {
this.$emit('determine',resf)
} else {
console.log('error submit!!');
return false;
}
});
},
}
}
</script>
子组件逻辑部分如下(code部分是很基础的)
<style scoped lang="scss">
.forget{
/deep/ .el-dialog__wrapper{
.el-dialog{
max-width: 500px;
.el-dialog__header{
text-align: center;
}
}
.demo-ruleForm{
.el-form-item__content{
max-width:100%
}
}
.el-dialog__body{
.el-form-item{
text-align: center;
}
}
}
.send-code{
display: flex;flex: 1;justify-content: space-evenly;
/deep/ .el-input{
margin-right: 12px
}
/deep/ .el-link{
white-space: nowrap;
display: inline-block;
line-height: 1;
cursor: pointer;
background: #fff;
border: 1px solid #dcdfe6;
color: #606266;
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;
outline: none;
margin: 0;
transition: .1s;
font-weight: 500;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
padding: 12px 10px;
font-size: 14px;
border-radius: 4px;
}
}
.dialog-footer{
display: flex;
flex: 1;
justify-content: center;
/deep/ .el-button{
flex: 0 0 40%;
}
}
}
</style>
父组件中的模板部分
<template> <forget :dialog="dialog"@cancel="dialog.visible= false" @determine="determine" @sendCode="sendCode"></forget>
</template>
为什么需要使用set这个api方法呢
如下截图
可以学习下这个链接的使用set的例子
全局变量globals.js文件
[vue-set]的文档( cn.vuejs.org/v2/api/#Vue… )
说明(*****向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。)
export default {
//判断是否点击了
isChick(data,key='disabled',count=0){
data[key] =true
if(count<=0){
data[key] =false
}
},
//此处是重点 使用的vue官网给的api方法
[vue-set](https://cn.vuejs.org/v2/api/#Vue-set)
sendCode(self,name,k,v){
self.$set(name,k,v)
}
}
父组件中的逻辑部分
<script>
export default {
data() {
return {
// 显示子组件修改密码的对象变量
dialog: {
visible: false, //是否显示
ruleForms: 'ruleForms', //点击按钮后,需要操作的refs(也就是dom元素)
ruleForm: { //所需要进行在表单中操作的部分
phone: '',
newPwd: '',
code: '',
sendCode: '发送验证码',
disabled: false,
isChick:false,
loading: false,
loadingText: '确 定'
},
},
//倒计时60秒
timeCount:60
}
},
methods:{
//重点部分
sendCode60s(self,opt){
let count=self.timeCount;
const ruleForm = self[opt.dialog][opt.ruleForm]
self.timer = setInterval(()=>{
//这个按钮是
self.$globals.isChick(ruleForm,'disabled',count)
let code = count<10"color: #ff0000">总结
以上所述是小编给大家介绍的vue2之简易的pc端短信验证码的问题及处理方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“vue2之简易的pc端短信验证码的问题及处理方法”评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
2025年11月06日
2025年11月06日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]

