RecoverForm.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <section class="detail section">
  3. <div class="adaptive_flex basic_content">
  4. <div class="column">
  5. <div class="form__main-error" v-if="error.length">
  6. {{ this.error }}
  7. </div>
  8. <form @submit.prevent="registerUser" v-if="!load">
  9. <div class="error" v-if="$v.$dirty && !$v.user.email.email">
  10. Введите валидный e-mail
  11. </div>
  12. <div class="error" v-if="$v.$dirty && !$v.user.email.required">
  13. Введите e-mail
  14. </div>
  15. <BaseInput
  16. label="E-mail"
  17. v-model="user.email"
  18. :className="
  19. $v.$dirty && $v.user.email.$invalid ? 'warning-input' : ''
  20. "
  21. />
  22. <div class="error" v-if="$v.$dirty && !$v.user.password_a.required">
  23. Введите пароль
  24. </div>
  25. <div class="error" v-if="$v.$dirty && !$v.user.password_a.minLength">
  26. Минимальная длина пароля 8 символов
  27. </div>
  28. <BaseInput
  29. inputType="password"
  30. label="Придумайте новый пароль"
  31. v-model="user.password_a"
  32. :className="
  33. $v.$dirty && $v.user.password_a.$invalid ? 'warning-input' : ''
  34. "
  35. />
  36. <div class="error" v-if="$v.$dirty && !$v.user.password_b.required">
  37. Введите пароль
  38. </div>
  39. <div class="error" v-if="$v.$dirty && !$v.user.password_b.minLength">
  40. Минимальная длина пароля 8 символов
  41. </div>
  42. <BaseInput
  43. inputType="password"
  44. label="Повторите новый пароль"
  45. v-model="user.password_b"
  46. :className="
  47. $v.$dirty && $v.user.password_b.$invalid ? 'warning-input' : ''
  48. "
  49. />
  50. <button
  51. class="
  52. catalog-main__subscribe
  53. button button_grey-dark button_grey-dark-short
  54. "
  55. type="submit"
  56. >
  57. Подтвердить новый пароль
  58. </button>
  59. </form>
  60. <div v-if="load" class="confirm-message">
  61. На вашу почту отправлено письмо с данными по восстановлению доступа
  62. </div>
  63. </div>
  64. <div class="column"></div>
  65. </div>
  66. </section>
  67. </template>
  68. <script>
  69. import {
  70. required,
  71. sameAs,
  72. minLength,
  73. maxLength,
  74. email,
  75. } from "vuelidate/lib/validators";
  76. const touchMap = new WeakMap();
  77. export default {
  78. data() {
  79. return {
  80. user: this.createUser(),
  81. error: "",
  82. load: false,
  83. };
  84. },
  85. validations: {
  86. user: {
  87. email: {
  88. required,
  89. email,
  90. maxLength: maxLength(40),
  91. },
  92. password_a: {
  93. required,
  94. minLength: minLength(8),
  95. },
  96. password_b: {
  97. required,
  98. minLength: minLength(8),
  99. },
  100. },
  101. },
  102. methods: {
  103. createUser() {
  104. return {
  105. firstName: "",
  106. phone: "",
  107. email: "",
  108. password_a: "",
  109. password_b: "",
  110. };
  111. },
  112. async registerUser() {
  113. this.$v.$touch();
  114. if (this.$v.$invalid) return;
  115. await this.$axios
  116. .post("/user/credentials/restore_password", this.user)
  117. .then(() => (this.load = true))
  118. .catch((e) => console.log(e));
  119. },
  120. },
  121. created() {},
  122. };
  123. </script>
  124. <style lang="less">
  125. .column {
  126. width: 100%;
  127. }
  128. .warning-input {
  129. border: 1px solid rgb(245, 60, 60);
  130. }
  131. .error {
  132. color: rgb(245, 60, 60);
  133. font-size: 12px;
  134. max-width: 350px;
  135. }
  136. .warning-input {
  137. border: 1px solid rgb(245, 60, 60);
  138. }
  139. .form__main-error {
  140. background-color: rgba(59, 85, 115, 0.08);
  141. padding: 10px;
  142. height: 41px;
  143. max-width: 350px;
  144. border-radius: 11px;
  145. }
  146. .form__error {
  147. }
  148. </style>