Geen omschrijving

SignupPage.vue 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <ion-page>
  3. <ion-header>
  4. <ion-toolbar>
  5. <ion-buttons slot="start">
  6. <ion-back-button></ion-back-button>
  7. </ion-buttons>
  8. <ion-title>
  9. Signup
  10. </ion-title>
  11. </ion-toolbar>
  12. </ion-header>
  13. <ion-content class='ion-padding'>
  14. <ion-list>
  15. <ion-item>
  16. <ion-input label="Username" ref="username" label-placement="floating" fill="outline" placeholder="Example, john"
  17. error-text="Help me"
  18. ></ion-input>
  19. </ion-item>
  20. <ion-item>
  21. <ion-input label="Email" label-placement="floating" ref='email' fill="outline" type="email" placeholder="Example, hello@gmail.com"></ion-input>
  22. </ion-item>
  23. <ion-item>
  24. <ion-input label="Password" label-placement='floating' fill='outline' ref="password" type="password" placeholder="Password"></ion-input>
  25. </ion-item>
  26. <ion-item>
  27. <ion-input label="Password Confirmation" label-placement='floating' fill='outline' ref="password2" type="password" placeholder="Password Confirmation"></ion-input>
  28. </ion-item>
  29. </ion-list>
  30. <div>
  31. <ion-button @click="signup" class=' ion-margin-top'>Signup</ion-button>
  32. </div>
  33. <br>
  34. <ion-input
  35. ref="input"
  36. type="email"
  37. fill="solid"
  38. label="Email"
  39. label-placement="floating"
  40. helper-text="Enter a valid email"
  41. error-text="Invalid email"
  42. @ionInput="validate"
  43. @ionBlur="markTouched"
  44. ></ion-input>
  45. </ion-content>
  46. </ion-page>
  47. </template>
  48. <script setup lang="ts">
  49. import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, onIonViewWillEnter, IonList, IonSearchbar, IonLabel,
  50. IonItem, IonBackButton, IonProgressBar, IonButtons, IonInfiniteScroll,
  51. IonInfiniteScrollContent, InfiniteScrollCustomEvent, IonInput } from '@ionic/vue';
  52. import { defineComponent, onMounted } from 'vue';
  53. import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth';
  54. import { searchMat, callUrl,restSignup } from '@/composable/settings';
  55. import { ref } from 'vue';
  56. import SearchItem from '@/components/SearchItem.vue';
  57. const results = ref();
  58. const is_empty = ref(false);
  59. const processing = ref(false)
  60. let next_url = null
  61. const username = ref(null)
  62. const password = ref(null)
  63. const password2 = ref(null)
  64. const email = ref(null)
  65. const input = ref(null)
  66. const signup = async () => {
  67. username.value.$el.errorText = "No way"
  68. username.value.$el.classList.remove('ion-valid')
  69. username.value.$el.classList.remove('ion-invalid')
  70. username.value.$el.classList.add('ion-invalid')
  71. username.value.$el.classList.add('ion-touched');
  72. try {
  73. console.log("username = ", username.value.$el.value)
  74. const data = await restSignup(username.value.$el.value, email.value.$el.value, password.value.$el.value, password2.value.$el.value)
  75. console.log(data)
  76. }catch( err ) {
  77. console.log("-- error --")
  78. console.log(err)
  79. username.value.$el.classList.add('ion-invalid')
  80. }
  81. }
  82. const validateEmail = (email) => {
  83. return email.match(
  84. /^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
  85. );
  86. }
  87. const validate = (ev) => {
  88. const value = ev.target.value;
  89. input.value.$el.classList.remove('ion-valid');
  90. input.value.$el.classList.remove('ion-invalid');
  91. if (value === '') return;
  92. validateEmail(value)
  93. ? input.value.$el.classList.add('ion-valid')
  94. : input.value.$el.classList.add('ion-invalid');
  95. }
  96. const markTouched = () => {
  97. input.value.$el.classList.add('ion-touched');
  98. }
  99. const markTouched2 = () => {
  100. username.value.$el.classList.add('ion-touched');
  101. }
  102. </script>