checkin.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <div>
  3. <h2>Check-in do Evento</h2>
  4. <p>Preencha seus dados para confirmar a presença.</p>
  5. <form @submit.prevent="handleCheckin">
  6. <input
  7. v-model="name"
  8. type="text"
  9. placeholder="Nome Completo"
  10. :disabled="isLoading"
  11. required
  12. >
  13. <input
  14. v-model="email"
  15. type="email"
  16. placeholder="Seu melhor e-mail"
  17. :disabled="isLoading"
  18. required
  19. >
  20. <input
  21. v-model="eventCode"
  22. type="text"
  23. placeholder="Código do Evento"
  24. :disabled="isLoading"
  25. required
  26. >
  27. <button
  28. type="submit"
  29. :disabled="isLoading"
  30. >
  31. {{ isLoading ? 'Confirmando...' : 'Confirmar Presença' }}
  32. </button>
  33. </form>
  34. <p v-if="statusMessage">{{ statusMessage }}</p>
  35. </div>
  36. </template>
  37. <script setup>
  38. import { ref } from 'vue';
  39. definePageMeta({
  40. layout: 'checkin',
  41. });
  42. const name = ref('');
  43. const email = ref('');
  44. const eventCode = ref('');
  45. const statusMessage = ref('');
  46. const isLoading = ref(false);
  47. async function handleCheckin() {
  48. if (!name.value || !email.value || !eventCode.value) {
  49. statusMessage.value = 'Por favor, preencha todos os campos.';
  50. return;
  51. }
  52. isLoading.value = true;
  53. statusMessage.value = '';
  54. try {
  55. const { data, error } = await useFetch('/api/perform-checkin', {
  56. method: 'POST',
  57. body: {
  58. name: name.value,
  59. email: email.value,
  60. eventCode: eventCode.value
  61. },
  62. });
  63. if (error.value) {
  64. throw error.value;
  65. }
  66. statusMessage.value = `Check-in realizado com sucesso, ${data.value.name}!`;
  67. name.value = '';
  68. email.value = '';
  69. eventCode.value = '';
  70. } catch (err) {
  71. statusMessage.value = 'Erro ao realizar o check-in. Verifique os dados e tente novamente.';
  72. console.error(err);
  73. } finally {
  74. isLoading.value = false;
  75. }
  76. }
  77. </script>