384 lines
14 KiB
JavaScript
384 lines
14 KiB
JavaScript
$(document).ready(function() {
|
||
// Функции для отображения сообщений
|
||
function showMessage(type, text) {
|
||
const messageId = type + 'Message';
|
||
const $message = $('#' + messageId);
|
||
$message.text(text).fadeIn(300);
|
||
setTimeout(() => {
|
||
$message.fadeOut(300);
|
||
}, 5000);
|
||
}
|
||
|
||
// Проверка, является ли email администратора
|
||
function isAdminEmail(email) {
|
||
const adminEmails = ['admin@aeterna.ru', 'administrator@aeterna.ru', 'aeterna@mail.ru'];
|
||
return adminEmails.includes(email.toLowerCase());
|
||
}
|
||
|
||
// Валидация ФИО (без цифр)
|
||
function validateFIO(fio) {
|
||
const words = fio.trim().split(/\s+/);
|
||
// Проверяем, что минимум 2 слова и нет цифр
|
||
const hasNoDigits = !/\d/.test(fio);
|
||
return words.length >= 2 && words.every(word => word.length >= 2) && hasNoDigits;
|
||
}
|
||
|
||
// Валидация города
|
||
function validateCity(city) {
|
||
return city.trim().length >= 2 && /^[а-яА-ЯёЁ\s-]+$/.test(city);
|
||
}
|
||
|
||
// Валидация email
|
||
function validateEmail(email) {
|
||
const localPart = email.split('@')[0];
|
||
|
||
// Проверка на кириллические символы перед @
|
||
if (/[а-яА-ЯёЁ]/.test(localPart)) {
|
||
showError('email', 'В тексте перед знаком "@" не должно быть кириллических символов');
|
||
return false;
|
||
}
|
||
|
||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||
if (!emailRegex.test(email)) {
|
||
showError('email', 'Введите корректный email адрес');
|
||
return false;
|
||
}
|
||
|
||
hideError('email');
|
||
return true;
|
||
}
|
||
|
||
// Валидация телефона
|
||
function validatePhone(phone) {
|
||
const phoneRegex = /^(\+7|8)[\s-]?\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}$/;
|
||
return phoneRegex.test(phone.replace(/\s/g, ''));
|
||
}
|
||
|
||
// Валидация пароля
|
||
function validatePassword(password) {
|
||
return password.length >= 6;
|
||
}
|
||
|
||
// Показать/скрыть ошибку
|
||
function showError(fieldId, message) {
|
||
$('#' + fieldId).addClass('error');
|
||
$('#' + fieldId + '-error').text(message).show();
|
||
}
|
||
|
||
function hideError(fieldId) {
|
||
$('#' + fieldId).removeClass('error');
|
||
$('#' + fieldId + '-error').hide();
|
||
}
|
||
|
||
// Валидация формы
|
||
function validateForm() {
|
||
let isValid = true;
|
||
|
||
// Валидация ФИО
|
||
const fio = $('#fio').val();
|
||
if (!validateFIO(fio)) {
|
||
if (/\d/.test(fio)) {
|
||
showError('fio', 'ФИО не должно содержать цифры');
|
||
} else {
|
||
showError('fio', 'ФИО должно содержать минимум 2 слова (каждое от 2 символов)');
|
||
}
|
||
isValid = false;
|
||
} else {
|
||
hideError('fio');
|
||
}
|
||
|
||
// Валидация города
|
||
const city = $('#city').val();
|
||
if (!validateCity(city)) {
|
||
showError('city', 'Укажите корректное название города (только русские буквы)');
|
||
isValid = false;
|
||
} else {
|
||
hideError('city');
|
||
}
|
||
|
||
// Валидация email
|
||
const email = $('#email').val();
|
||
if (!validateEmail(email)) {
|
||
showError('email', 'Введите корректный email адрес');
|
||
isValid = false;
|
||
} else {
|
||
hideError('email');
|
||
}
|
||
|
||
// Валидация телефона
|
||
const phone = $('#phone').val();
|
||
if (!validatePhone(phone)) {
|
||
showError('phone', 'Введите номер в формате: +7(912)999-12-23');
|
||
isValid = false;
|
||
} else {
|
||
hideError('phone');
|
||
}
|
||
|
||
// Валидация пароля
|
||
const password = $('#password').val();
|
||
if (!validatePassword(password)) {
|
||
showError('password', 'Пароль должен содержать минимум 6 символов');
|
||
isValid = false;
|
||
} else {
|
||
hideError('password');
|
||
}
|
||
|
||
// Проверка совпадения паролей
|
||
const confirmPassword = $('#confirm-password').val();
|
||
if (password !== confirmPassword) {
|
||
showError('confirm-password', 'Пароли не совпадают');
|
||
isValid = false;
|
||
} else {
|
||
hideError('confirm-password');
|
||
}
|
||
|
||
// Проверка согласия с условиями
|
||
if (!$('#privacy').is(':checked')) {
|
||
$('#privacy-error').show();
|
||
isValid = false;
|
||
} else {
|
||
$('#privacy-error').hide();
|
||
}
|
||
|
||
return isValid;
|
||
}
|
||
|
||
// Реальная валидация при вводе
|
||
$('input').on('blur', function() {
|
||
const fieldId = $(this).attr('id');
|
||
const value = $(this).val();
|
||
|
||
switch(fieldId) {
|
||
case 'fio':
|
||
if (!validateFIO(value)) {
|
||
if (/\d/.test(value)) {
|
||
showError(fieldId, 'ФИО не должно содержать цифры');
|
||
} else {
|
||
showError(fieldId, 'ФИО должно содержать минимум 2 слова');
|
||
}
|
||
} else {
|
||
hideError(fieldId);
|
||
}
|
||
break;
|
||
case 'city':
|
||
if (!validateCity(value)) {
|
||
showError(fieldId, 'Укажите корректное название города');
|
||
} else {
|
||
hideError(fieldId);
|
||
}
|
||
break;
|
||
case 'email':
|
||
if (!validateEmail(value)) {
|
||
showError(fieldId, 'Введите корректный email адрес');
|
||
} else {
|
||
hideError(fieldId);
|
||
}
|
||
break;
|
||
case 'phone':
|
||
if (!validatePhone(value)) {
|
||
showError(fieldId, 'Введите номер в формате: +7(912)999-12-23');
|
||
} else {
|
||
hideError(fieldId);
|
||
}
|
||
break;
|
||
case 'password':
|
||
if (!validatePassword(value)) {
|
||
showError(fieldId, 'Пароль должен содержать минимум 6 символов');
|
||
} else {
|
||
hideError(fieldId);
|
||
}
|
||
break;
|
||
case 'confirm-password':
|
||
const password = $('#password').val();
|
||
if (value !== password) {
|
||
showError(fieldId, 'Пароли не совпадают');
|
||
} else {
|
||
hideError(fieldId);
|
||
}
|
||
break;
|
||
}
|
||
});
|
||
|
||
// Обработка отправки формы
|
||
$('#registrationForm').on('submit', function(e) {
|
||
e.preventDefault();
|
||
|
||
if (validateForm()) {
|
||
const email = $('#email').val();
|
||
const isAdmin = isAdminEmail(email);
|
||
|
||
// Сохраняем данные пользователя в localStorage
|
||
const userData = {
|
||
email: email,
|
||
fio: $('#fio').val(),
|
||
phone: $('#phone').val(),
|
||
isAdmin: isAdmin,
|
||
registered: new Date().toISOString()
|
||
};
|
||
|
||
localStorage.setItem('userData', JSON.stringify(userData));
|
||
localStorage.setItem('isLoggedIn', 'true');
|
||
localStorage.setItem('isAdmin', isAdmin.toString());
|
||
|
||
// Эмуляция успешной регистрации
|
||
showMessage('success', 'Регистрация прошла успешно! ' +
|
||
(isAdmin ? 'Вы зарегистрированы как администратор.' : 'Добро пожаловать в AETERNA!'));
|
||
|
||
setTimeout(() => {
|
||
// Перенаправление на главную страницу
|
||
window.location.href = 'cite_mebel.php';
|
||
}, 2000);
|
||
} else {
|
||
showMessage('error', 'Пожалуйста, исправьте ошибки в форме');
|
||
}
|
||
});
|
||
|
||
// Плавная прокрутка к якорям
|
||
$('a[href^="#"]').on('click', function(event) {
|
||
var target = $(this.getAttribute('href'));
|
||
if (target.length) {
|
||
event.preventDefault();
|
||
$('html, body').stop().animate({
|
||
scrollTop: target.offset().top
|
||
}, 1000);
|
||
}
|
||
});
|
||
|
||
// Переключение между регистрацией и входом
|
||
$('.login-btn').on('click', function() {
|
||
showMessage('warning', 'Переход к форме входа...');
|
||
setTimeout(() => {
|
||
window.location.href = 'вход.php';
|
||
}, 1000);
|
||
});
|
||
|
||
// Обработка ссылки "Сменить пароль"
|
||
$('.password-link').on('click', function(e) {
|
||
e.preventDefault();
|
||
showMessage('warning', 'Функция смены пароля будет доступна после регистрации');
|
||
});
|
||
|
||
// Маска для телефона
|
||
$('#phone').on('input', function() {
|
||
let value = $(this).val().replace(/\D/g, '');
|
||
if (value.startsWith('7') || value.startsWith('8')) {
|
||
value = value.substring(1);
|
||
}
|
||
if (value.length > 0) {
|
||
value = '+7(' + value;
|
||
if (value.length > 6) value = value.substring(0, 6) + ')' + value.substring(6);
|
||
if (value.length > 10) value = value.substring(0, 10) + '-' + value.substring(10);
|
||
if (value.length > 13) value = value.substring(0, 13) + '-' + value.substring(13);
|
||
if (value.length > 16) value = value.substring(0, 16);
|
||
}
|
||
$(this).val(value);
|
||
});
|
||
|
||
// Запрет ввода цифр в поле ФИО
|
||
$('#fio').on('input', function() {
|
||
let value = $(this).val();
|
||
// Удаляем цифры из значения
|
||
value = value.replace(/\d/g, '');
|
||
$(this).val(value);
|
||
});
|
||
});
|
||
|
||
// Для входа (файл вход.html)
|
||
$(document).ready(function() {
|
||
// Проверяем, если пользователь уже вошел
|
||
if (localStorage.getItem('isLoggedIn') === 'true') {
|
||
const userData = JSON.parse(localStorage.getItem('userData') || '{}');
|
||
if (userData.email) {
|
||
$('#login-email').val(userData.email);
|
||
}
|
||
}
|
||
|
||
// Функция проверки пароля администратора
|
||
function checkAdminPassword(email, password) {
|
||
// Административные аккаунты
|
||
const adminAccounts = {
|
||
'admin@aeterna.ru': 'admin123',
|
||
'administrator@aeterna.ru': 'admin123',
|
||
'aeterna@mail.ru': 'admin123'
|
||
};
|
||
|
||
return adminAccounts[email.toLowerCase()] === password;
|
||
}
|
||
|
||
// Валидация формы входа
|
||
$('#loginForm').on('submit', function(e) {
|
||
e.preventDefault();
|
||
|
||
let isValid = true;
|
||
const email = $('#login-email').val();
|
||
const password = $('#login-password').val();
|
||
|
||
// Валидация email
|
||
if (!isValidEmail(email)) {
|
||
$('#email-error').show();
|
||
isValid = false;
|
||
} else {
|
||
$('#email-error').hide();
|
||
}
|
||
|
||
// Валидация пароля
|
||
if (password.length < 6) {
|
||
$('#password-error').show();
|
||
isValid = false;
|
||
} else {
|
||
$('#password-error').hide();
|
||
}
|
||
|
||
if (isValid) {
|
||
// Здесь обычно отправка данных на сервер
|
||
showMessage('success', 'Вы успешно вошли в систему!');
|
||
|
||
// Перенаправление на главную страницу через 1.5 секунды
|
||
setTimeout(function() {
|
||
window.location.href = 'cite_mebel.php';
|
||
}, 1500);
|
||
}
|
||
});
|
||
|
||
// Функция показа сообщений
|
||
function showMessage(type, text) {
|
||
const messageId = type + 'Message';
|
||
const $message = $('#' + messageId);
|
||
|
||
$message.text(text).show();
|
||
|
||
setTimeout(function() {
|
||
$message.fadeOut();
|
||
}, 3000);
|
||
}
|
||
|
||
// Скрываем сообщения об ошибках при фокусе на полях
|
||
$('input').on('focus', function() {
|
||
$(this).next('.error-message').hide();
|
||
});
|
||
|
||
// Обработка чекбокса "Запомнить меня"
|
||
$('#remember').on('change', function() {
|
||
if ($(this).is(':checked')) {
|
||
const email = $('#login-email').val();
|
||
if (email) {
|
||
localStorage.setItem('rememberedEmail', email);
|
||
}
|
||
} else {
|
||
localStorage.removeItem('rememberedEmail');
|
||
}
|
||
});
|
||
|
||
// Автозаполнение email, если пользователь выбрал "Запомнить меня"
|
||
const rememberedEmail = localStorage.getItem('rememberedEmail');
|
||
if (rememberedEmail) {
|
||
$('#login-email').val(rememberedEmail);
|
||
$('#remember').prop('checked', true);
|
||
}
|
||
|
||
// Обработка ссылки "Забыли пароль?"
|
||
$('.forgot-password').on('click', function(e) {
|
||
e.preventDefault();
|
||
showMessage('info', 'Для восстановления пароля обратитесь к администратору');
|
||
});
|
||
}); |