1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import { ref } from 'vue';
- import { lls } from '@/utils/storage';
- export default function useSms(name = 'sms') {
- const defaultCodeWaitingTime = 60;
- const codeWaitingTime = ref(60);
- const isFetchingCode = ref(false);
- const codeContent = ref('获取验证码');
- const nameWaitTime = ref('');
- let tSetT: NodeJS.Timer | null = null;
- function setWaitingTime(wt: string) {
- nameWaitTime.value = wt;
- const codetime = lls.get(wt);
- if (codetime) {
- const num = Math.floor((codetime.expire - new Date().getTime()) / 1000);
- if (num > 0) {
- codeWaitingTime.value = num;
- isFetchingCode.value = true;
- changeContent();
- }
- }
- }
- setWaitingTime(name);
- function changeContent() {
- if (!isFetchingCode.value) return;
- codeContent.value = `倒计时${codeWaitingTime.value}s`;
- const circleTime = (time: number) => {
- tSetT = setInterval(() => {
- if (time > 1) {
- time--;
- const expire = new Date().getTime() + time * 1000;
- lls.set(
- nameWaitTime.value,
- {
- time,
- expire,
- },
- expire
- );
- codeContent.value = `倒计时${time}s`;
- } else {
- clearSetContent();
- }
- }, 1e3);
- };
- circleTime(codeWaitingTime.value);
- }
- function clearSetContent() {
- codeWaitingTime.value = defaultCodeWaitingTime;
- lls.remove(nameWaitTime.value);
- codeContent.value = '获取验证码';
- isFetchingCode.value = false;
- if (tSetT) clearInterval(tSetT);
- }
- return {
- isFetchingCode,
- codeContent,
- changeContent,
- };
- }
|