smsCaptchaInput.vue 980 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <script setup>
  2. import { computed } from 'vue'
  3. import CountdownTimer from '@/module-model/countDown'
  4. const props = defineProps({
  5. expands: {
  6. default: () => ({})
  7. },
  8. actions: {
  9. default: () => ({})
  10. }
  11. })
  12. defineEmits(['input'])
  13. /**
  14. * 倒计时逻辑
  15. */
  16. const countDown = new CountdownTimer().getInstance()
  17. const canDoSetSms = computed(() => {
  18. return !countDown.isCounting.value && props.expands.preCheckState.value
  19. })
  20. async function doGetSms() {
  21. if (!canDoSetSms.value) {
  22. return
  23. }
  24. let canNext = true
  25. if (typeof props.actions.preSubmit === 'function') {
  26. const result = await props.actions.preSubmit()
  27. canNext = result
  28. }
  29. if (canNext) {
  30. countDown.start()
  31. }
  32. }
  33. </script>
  34. <template>
  35. <div class="login-auth--form-after" :class="{ disable: !canDoSetSms }">
  36. <span v-if="!countDown.isCounting.value" @click="doGetSms">获取验证码</span>
  37. <span v-else>重新获取({{ countDown.countdown.value }}s)</span>
  38. </div>
  39. </template>