ваше сообщение коммита

This commit is contained in:
2025-05-22 16:24:39 +03:00
parent a91658eb31
commit 9aa842d238
41 changed files with 1621 additions and 507 deletions

View File

@@ -142,7 +142,7 @@ const props = defineProps({
isLoadingTokens: Boolean
});
const emit = defineEmits(['update:modelValue', 'wallet-auth', 'disconnect-wallet', 'telegram-auth', 'email-auth']);
const emit = defineEmits(['update:modelValue', 'wallet-auth', 'disconnect-wallet', 'telegram-auth', 'email-auth', 'cancel-email-auth']);
const { deleteIdentity } = useAuth();

View File

@@ -7,22 +7,22 @@
<div class="form-step">{{ showVerification ? 'Шаг 2 из 2' : 'Шаг 1 из 2' }}</div>
</div>
</div>
<div v-if="!showVerification" class="email-form">
<div v-if="!showVerification" class="email-form">
<label for="email-input" class="form-label">Email</label>
<input id="email-input" v-model="email" type="email" placeholder="Введите email" class="email-input" :disabled="isLoading" autocomplete="email" />
<div class="form-hint">На этот адрес придёт код подтверждения</div>
<button type="submit" :disabled="isLoading || !isValidEmail" class="email-btn main-btn">
{{ isLoading ? 'Отправка...' : 'Получить код' }}
</button>
</div>
<div v-else class="verification-form">
{{ isLoading ? 'Отправка...' : 'Получить код' }}
</button>
</div>
<div v-else class="verification-form">
<p class="verification-info success-msg">Код отправлен на <b>{{ email }}</b></p>
<label for="code-input" class="form-label">Код</label>
<input id="code-input" v-model="code" type="text" placeholder="Введите код из письма" class="code-input" :disabled="isLoading" autocomplete="one-time-code" />
<div class="form-hint">Проверьте почту и введите код из письма</div>
<button type="submit" :disabled="isLoading || !code" class="verify-btn main-btn">
{{ isLoading ? 'Проверка...' : 'Подтвердить' }}
</button>
{{ isLoading ? 'Проверка...' : 'Подтвердить' }}
</button>
<button type="button" class="reset-btn link-btn" @click="resetForm" :disabled="isLoading">Изменить email</button>
</div>
<div v-if="error" class="error-msg">{{ error }}</div>
@@ -30,74 +30,74 @@
<slot name="actions">
<button type="button" class="cancel-btn" @click="$emit('close')" :disabled="isLoading">Отмена</button>
</slot>
</div>
</div>
</form>
</div>
</template>
<script setup>
import { ref, computed } from 'vue';
import axios from '@/api/axios';
import { useAuth } from '@/composables/useAuth';
import { ref, computed } from 'vue';
import axios from '@/api/axios';
import { useAuth } from '@/composables/useAuth';
const emit = defineEmits(['close', 'success']);
const { linkIdentity } = useAuth();
const { linkIdentity } = useAuth();
const email = ref('');
const code = ref('');
const error = ref('');
const isLoading = ref(false);
const showVerification = ref(false);
const email = ref('');
const code = ref('');
const error = ref('');
const isLoading = ref(false);
const showVerification = ref(false);
const isValidEmail = computed(() => {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.value);
});
const isValidEmail = computed(() => {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.value);
});
const requestCode = async () => {
try {
isLoading.value = true;
error.value = '';
const requestCode = async () => {
try {
isLoading.value = true;
error.value = '';
const response = await axios.post('/api/auth/email/request', {
email: email.value,
});
if (response.data.success) {
showVerification.value = true;
} else {
error.value = response.data.error || 'Ошибка отправки кода';
email: email.value,
});
if (response.data.success) {
showVerification.value = true;
} else {
error.value = response.data.error || 'Ошибка отправки кода';
}
} catch (err) {
error.value = err.response?.data?.error || 'Ошибка отправки кода';
} finally {
isLoading.value = false;
}
} catch (err) {
error.value = err.response?.data?.error || 'Ошибка отправки кода';
} finally {
isLoading.value = false;
}
};
};
const verifyCode = async () => {
try {
isLoading.value = true;
error.value = '';
const verifyCode = async () => {
try {
isLoading.value = true;
error.value = '';
const response = await axios.post('/api/auth/email/verify-code', {
email: email.value,
code: code.value,
});
if (response.data.success) {
email: email.value,
code: code.value,
});
if (response.data.success) {
emit('success');
} else {
error.value = response.data.error || 'Неверный код';
} else {
error.value = response.data.error || 'Неверный код';
}
} catch (err) {
error.value = err.response?.data?.error || 'Ошибка проверки кода';
} finally {
isLoading.value = false;
}
} catch (err) {
error.value = err.response?.data?.error || 'Ошибка проверки кода';
} finally {
isLoading.value = false;
}
};
};
const resetForm = () => {
email.value = '';
code.value = '';
error.value = '';
showVerification.value = false;
};
const resetForm = () => {
email.value = '';
code.value = '';
error.value = '';
showVerification.value = false;
};
</script>
<style scoped>