No Description

SignupPage.vue 3.7KB

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