LoginPage.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <q-page class="column justify-center items-center login-page">
  3. <div
  4. flat
  5. class="column justify-center items-center flex-grow full-width z-top bg-background"
  6. style="
  7. max-width: 659px;
  8. max-height: 738px;
  9. width: 100%;
  10. height: 100%;
  11. border-radius: 15px;
  12. "
  13. >
  14. <div class="column flex-center full-width">
  15. <q-img
  16. :src="Logo"
  17. style="max-width: 611px; max-height: 171px; height: 100%; width: 100%"
  18. />
  19. <div class="text-h4 q-mt-xl text-primary" style="font-weight: 400">
  20. Faça seu Login
  21. </div>
  22. <div
  23. class="items-center full-width q-px-lg q-mt-xl"
  24. style="display: flex; gap: 12px"
  25. >
  26. <div class="bg-primary" style="height: 1px; flex: 1"></div>
  27. <q-icon name="mdi-chevron-down" size="lg" color="warning" />
  28. <div class="bg-primary" style="height: 1px; flex: 1"></div>
  29. </div>
  30. </div>
  31. <q-form
  32. ref="formRef"
  33. class="full-width q-px-lg column q-gutter-y-md q-mt-xs"
  34. autocorrect="off"
  35. autocapitalize="off"
  36. autocomplete="off"
  37. spellcheck="false"
  38. @submit="onSubmit"
  39. >
  40. <DefaultInput
  41. v-model="form.email"
  42. v-model:error="validationErrors.email"
  43. type="email"
  44. lazy-rules
  45. :label="$t('common.terms.email')"
  46. :rules="[inputRules.required, inputRules.email]"
  47. />
  48. <DefaultPasswordInput
  49. v-model="form.password"
  50. v-model:error="validationErrors.password"
  51. :rules="[inputRules.required, inputRules.min(6)]"
  52. :label="$t('common.terms.password')"
  53. />
  54. <span
  55. class="q-ma-xs text-body2 text-primary"
  56. style="letter-spacing: 0.25px"
  57. >Esqueceu sua senha?</span
  58. >
  59. <div>
  60. <q-btn
  61. class="full-width q-mt-md"
  62. color="primary-2"
  63. label="Entrar"
  64. size="md"
  65. padding="sm"
  66. type="submit"
  67. :loading
  68. >
  69. <template #loading>
  70. <q-spinner />
  71. </template>
  72. </q-btn>
  73. </div>
  74. </q-form>
  75. </div>
  76. </q-page>
  77. </template>
  78. <script setup>
  79. import { ref, onBeforeMount, useTemplateRef } from "vue";
  80. import { useQuasar } from "quasar";
  81. import { useAuth } from "src/composables/useAuth";
  82. import { useRouter } from "vue-router";
  83. import { useInputRules } from "src/composables/useInputRules";
  84. import { useSubmitHandler } from "src/composables/useSubmitHandler";
  85. import Logo from "src/assets/images/logo.svg";
  86. import DefaultInput from "src/components/defaults/DefaultInput.vue";
  87. import DefaultPasswordInput from "src/components/defaults/DefaultPasswordInput.vue";
  88. const router = useRouter();
  89. const $q = useQuasar();
  90. const { inputRules } = useInputRules();
  91. const { login } = useAuth();
  92. const formRef = useTemplateRef("formRef");
  93. const {
  94. loading,
  95. validationErrors,
  96. execute: submitForm,
  97. } = useSubmitHandler({
  98. onSuccess: () => router.push({ name: "HomePage" }),
  99. formRef: formRef,
  100. });
  101. const form = ref({
  102. email: null,
  103. password: process.env.PASSWORD ?? null,
  104. });
  105. const checkbox = ref(false);
  106. const onSubmit = async () => {
  107. await submitForm(() => login(form.value.email, form.value.password));
  108. const email_storage = $q.cookies.get("email");
  109. if (email_storage && !checkbox.value) {
  110. $q.cookies.remove("email");
  111. }
  112. if (checkbox.value) {
  113. $q.cookies.set("email", form.value.email, {
  114. path: "/",
  115. sameSite: "Lax",
  116. });
  117. }
  118. };
  119. onBeforeMount(() => {
  120. const email_storage = $q.cookies.get("email");
  121. if (email_storage) {
  122. checkbox.value = true;
  123. form.value.email = email_storage;
  124. }
  125. });
  126. </script>
  127. <style lang="scss" scoped>
  128. .login-page {
  129. background-image: url("background.png");
  130. background-size: cover;
  131. background-repeat: no-repeat;
  132. background-position: center;
  133. }
  134. </style>