HTML代码
<a-form-item field="verifyCode" label="验证码:">
<a-input v-model="formData.verifyCode" placeholder="短信验证码" class="login-form-button" allow-clear>
<template #append>
<span
:class="{ 'login-form-send': true, 'login-form-send-disabed': typeof theTime == 'number' }"
@click="sendVerificationCode"
>{{ theTime }}{{ theTime != '发送验证码' ? 's' : '' }}</span
>
</template>
</a-input>
</a-form-item>
ts部分
import { VueCookieNext } from 'vue-cookie-next';
const base = reactive<any>({
theTime: '发送验证码',
})
const init = () => {
const timeA: any = 'timeA';
if (VueCookieNext.isCookieAvailable(timeA)) {
const timeB = loctionTime();
base.theTime = Math.trunc(Number(VueCookieNext.getCookie(timeA)) - timeB);
setIntervalFunction();
}
}
const sendVerificationCode = () => {
if (typeof base.theTime == 'number') {
return;
}
base.phoneRef.validateField('mobilePhone', (valid: any) => {
if (valid == void 0) {
const param = {
mobilePhone: base.formData.mobilePhone,
type: 'REGISTER',
};
sendVerifyCode(param).then((res: any) => {
if (res.code == 200) {
base.theTime = 60;
const locTime = loctionTime();
const CodeData: any = locTime + 60;
VueCookieNext.setCookie('timeA', CodeData, { expire: '60s' });
setIntervalFunction();
Message.success(res.message || '发送成功,请去手机查看!');
} else {
Message.error(res.message || '发送失败');
}
});
}
});
};
const setIntervalFunction = () => {
const theBottom = setInterval(() => {
if (base.theTime > 0) {
base.theTime--;
} else if (base.theTime == 0) {
base.theTime = '发送验证码';
clearInterval(theBottom);
}
}, 1050);
};