vue实现发送验证码60秒

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <van-cell-group class="home-congratulation-from">
        <van-field ref="phone" type="tel" onkeyup="this.value=this.value.replace(/[^d.]/g,'');"
            keyboardType="UIKeyboardTypeDecimalPad;" v-model="phone" maxlength="11" placeholder="请输入手机号" />
        <div>
            <van-field type="tel" onkeyup="this.value=this.value.replace(/[^d.]/g,'');"
                keyboardType="UIKeyboardTypeDecimalPad;" v-model="verifycode" maxlength="6" center clearable
                placeholder="请输入验证码" />
            <van-button :color="(types==1?`#09BB07`:`#2480FF`)" class="home-congratulation-from-button"
                @click="sendVerifycode()" type="primary" round :disabled="!disabledCodeBtn">{{codeText}}</van-button>
        </div>
        <div>
            <van-button :color="(types==1?`#09BB07`:`#2480FF`)" slot="button" type="primary" round block
                @click="login()" native-type="submit">立即领取</van-button>
        </div>
    </van-cell-group>

    <script>
        export default {
            data() {
                return {
                    phone: "",
                    verifycode: "",
                    codeText: "获取验证码",
                    disabledCodeBtn: true,
                }
            },
            methods: {
                // 向后台要验证码方法
                sendVerifycode() {
                    if (this.verifyPhone()) {
                        Toast(this.verifyPhone());
                    } else {
                        let data = {
                            phone: this.phone
                        };
                        axios
                            .post(store.state.baseURL + "xxxxxxx", data, {
                                headers: {
                                    "content-type": "application/x-www-form-urlencoded"
                                }
                            })
                            .then(res => {
                                console.log(res);
                                if (res.data.error == 0) {
                                    alert(res.data.error_reason);
                                    this.countDown(60);
                                } else if (res.data.error != 0) {
                                    alert(res.data.error_reason);
                                }
                            })
                            .catch(error => {
                                console.log(error);
                            });
                    }
                },
                // 表单校验方法
                verifyPhone() {
                    if (!this.phone) {
                        return "请输入手机号";
                    } else if (this.phone.length !== 11) {
                        return "请输入11位手机号";
                    } else {
                        return false;
                    }
                },
                // 倒计时方法
                countDown(time) {
                    if (time === 0) {
                        this.disabledCodeBtn = true;
                        this.codeText = "获取验证码";
                        return;
                    } else {
                        this.disabledCodeBtn = false;
                        this.codeText = "重新发送(" + time + ")";
                        time--;
                    }
                    setTimeout(() => {
                        this.countDown(time);
                    }, 1000);
                },
                async login() {
                    if (this.verifyPhone()) {
                        Toast(this.verifyPhone());
                    } else if (this.verifycode == "") {
                        Toast("请输入验证码");
                    } else {
                        let list = {
                            phone: this.phone,
                            code: this.verifycode
                        };
                        let resq = await request("xx验证验证码接口路径xx", list);
                        if (resq.error == 0) {
                            let data = {
                                id: this.money.id,
                                phone: this.phone,
                                money: this.money.money,
                                total_money: this.total_amount,
                                uniqueid: this.user_id,
                                type: this.types
                            };
                            let res = await request(
                                "xx接口路径xx",
                                data
                            );
                            if (res.error == 0) {
                                Toast(res.error_reason);
                                this.$router.push({
                                    path: "要跳转的页面"
                                });
                            } else {
                                Toast(res.error_reason);
                            }
                        } else {
                            Toast(resq.error_reason);
                        }

                    }
                }
            }
        }
    </script>
</body>

</html>
原文地址:https://www.cnblogs.com/1609359841qq/p/13272014.html