useSendSms.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { reactive, ref } from 'vue'
  2. import { sendSms } from '@/app/api/system'
  3. export function useSendSms() {
  4. const canGetCode = ref(true),
  5. text = ref(t('getSmsCode')),
  6. seconds = ref(90);
  7. let timer: number | undefined = undefined;
  8. const send = async (param: requestMobileParam) => {
  9. if (!canGetCode.value) return
  10. canGetCode.value = false
  11. let result: string | boolean = false
  12. await sendSms(param).then((res: responseResult) => {
  13. if (res.code == 1) {
  14. start()
  15. result = res.data.key
  16. } else {
  17. reset()
  18. result = false
  19. }
  20. }).catch(() => {
  21. result = false
  22. reset()
  23. })
  24. return result
  25. }
  26. /**
  27. * 开始
  28. */
  29. const start = () => {
  30. timer = setInterval(() => {
  31. if (seconds.value > 0) {
  32. seconds.value -= 1
  33. text.value = `${seconds.value}${t('smsCodeChangeText')}`
  34. } else {
  35. reset()
  36. }
  37. }, 1000)
  38. }
  39. /**
  40. * 重置
  41. */
  42. const reset = () => {
  43. clearInterval(timer)
  44. seconds.value = 90
  45. canGetCode.value = true
  46. text.value = t('getSmsCode')
  47. }
  48. return {
  49. send,
  50. text,
  51. canGetCode
  52. }
  53. }