123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <template>
- <section class="detail section">
- <div class="adaptive_flex basic_content">
- <div class="column">
- <div class="form__main-error" v-if="error.length">
- {{ this.error }}
- </div>
- <form @submit.prevent="registerUser" v-if="!load">
- <div class="error" v-if="$v.$dirty && !$v.user.email.email">
- Введите валидный e-mail
- </div>
- <div class="error" v-if="$v.$dirty && !$v.user.email.required">
- Введите e-mail
- </div>
- <BaseInput
- label="E-mail"
- v-model="user.email"
- :className="
- $v.$dirty && $v.user.email.$invalid ? 'warning-input' : ''
- "
- />
- <div class="error" v-if="$v.$dirty && !$v.user.password_a.required">
- Введите пароль
- </div>
- <div class="error" v-if="$v.$dirty && !$v.user.password_a.minLength">
- Минимальная длина пароля 8 символов
- </div>
- <BaseInput
- inputType="password"
- label="Придумайте новый пароль"
- v-model="user.password_a"
- :className="
- $v.$dirty && $v.user.password_a.$invalid ? 'warning-input' : ''
- "
- />
- <div class="error" v-if="$v.$dirty && !$v.user.password_b.required">
- Введите пароль
- </div>
- <div class="error" v-if="$v.$dirty && !$v.user.password_b.minLength">
- Минимальная длина пароля 8 символов
- </div>
- <BaseInput
- inputType="password"
- label="Повторите новый пароль"
- v-model="user.password_b"
- :className="
- $v.$dirty && $v.user.password_b.$invalid ? 'warning-input' : ''
- "
- />
- <button
- class="
- catalog-main__subscribe
- button button_grey-dark button_grey-dark-short
- "
- type="submit"
- >
- Подтвердить новый пароль
- </button>
- </form>
- <div v-if="load" class="confirm-message">
- На вашу почту отправлено письмо с данными по восстановлению доступа
- </div>
- </div>
- <div class="column"></div>
- </div>
- </section>
- </template>
- <script>
- import {
- required,
- sameAs,
- minLength,
- maxLength,
- email,
- } from "vuelidate/lib/validators";
- const touchMap = new WeakMap();
- export default {
- data() {
- return {
- user: this.createUser(),
- error: "",
- load: false,
- };
- },
- validations: {
- user: {
- email: {
- required,
- email,
- maxLength: maxLength(40),
- },
- password_a: {
- required,
- minLength: minLength(8),
- },
- password_b: {
- required,
- minLength: minLength(8),
- },
- },
- },
- methods: {
- createUser() {
- return {
- firstName: "",
- phone: "",
- email: "",
- password_a: "",
- password_b: "",
- };
- },
- async registerUser() {
- this.$v.$touch();
- if (this.$v.$invalid) return;
- await this.$axios
- .post("/user/credentials/restore_password", this.user)
- .then(() => (this.load = true))
- .catch((e) => console.log(e));
- },
- },
- created() {},
- };
- </script>
- <style lang="less">
- .column {
- width: 100%;
- }
- .warning-input {
- border: 1px solid rgb(245, 60, 60);
- }
- .error {
- color: rgb(245, 60, 60);
- font-size: 12px;
- max-width: 350px;
- }
- .warning-input {
- border: 1px solid rgb(245, 60, 60);
- }
- .form__main-error {
- background-color: rgba(59, 85, 115, 0.08);
- padding: 10px;
- height: 41px;
- max-width: 350px;
- border-radius: 11px;
- }
- .form__error {
- }
- </style>
|