RuralDatabase/apps/web/components/common/captcha/verify-button.vue

58 lines
1.1 KiB
Vue
Raw Normal View History

2024-06-30 21:39:37 +08:00
<script setup lang="ts">
defineProps<{
loading?: boolean
}>()
const open = ref(false)
const emit = defineEmits<{
(e: 'verify', value: (res: boolean) => void): void
(e: 'success', value: (res: boolean) => void): void
}>()
const { counter, reset, pause, resume } = useInterval(1000, { controls: true, immediate: false })
const count = computed(() => {
const res = 60 - counter.value
if (res === 0) {
pause()
reset()
return ''
}
if (res === 60) {
return ''
}
return `${res}`
})
const verify = () => {
emit('verify', (res) => {
if (res) {
success()
}
})
}
const success = () => {
open.value = false
emit('success', (res) => {
if (res) {
resume()
}
})
}
</script>
<template>
<!-- <UPopover v-model:open="open" class="h-full" :popper="{ placement: 'top-end' }"> -->
<Button variant="secondary" :disabled="counter > 0" :loading="loading" @click.prevent="verify">
发送验证码{{ count }}
</Button>
<!-- <template #panel>
<Captcha width="300px" height="240px" :max-dot="5" @success="success" />
</template>
</UPopover> -->
</template>