Files

535 lines
20 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
function show_error(message){
$('#error_alert').slideDown(500);
$('#success_alert').hide();
$('#error_alert').delay(5000).slideUp();
$('#alert_error_text').empty();
if (message)
$('#alert_error_text').append(message)
}
function show_success(message){
$('#success_alert').slideDown(500);
$('#success_alert').delay(5000).slideUp();
$('#alert_success_text').empty();
if (message)
$('#alert_success_text').append(message);
}
function validate_length(val, dest_len){
if(val.length < dest_len){
return false;
}
return true;
}
$(document).ready(function(){
$("#postal_code").change(function(){
$('#passport_issued_by').empty();
$('#passport_issued_by').append('<option disabled="" selected="">Кем выдан паспорт</option>')
for(i in UFMS_list[$(this).val()])
{
item = UFMS_list[$(this).val()][i];
$('#passport_issued_by').append('<option>'+item+'</option>');
}
// $('#passport_issued_by').select2("change");
});
$("#select-all").on("click", function() {
$("input[name='god_zapros']").prop("checked", true);
});
const validateEmail = (email) => {
return email.match(
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
);
};
const validate = () => {
const email = $('#email').val();
if(validateEmail(email)){
$('#email').parent().removeClass('errors-field').addClass('success-field');
} else{
$('#email').parent().removeClass('success-field').addClass('errors-field');
}
return false;
}
$('#email').on('input', validate);
$('#email').on('input', function() {
let input = $(this).val();
// Разрешаем только буквы, цифры, точки, дефисы и подчеркивания
input = input.replace(/[^a-zA-Z0-9._@-]/g, '');
// Обновляем поле ввода
$(this).val(input);
});
$('body').append('<div id="error_alert" class="alert alert-danger" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Ошибка<br><small id="alert_error_text"></small></div>');
$('body').append('<div id="success_alert" class="alert alert-success" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Успех<br><small id="alert_success_text"></small></div>');
$('#fio').on('input', function () {
let input = $(this).val();
// Убираем все лишние символы, кроме букв и пробелов
input = input.replace(/[^a-zA-Zа-яА-ЯёЁ ]/g, '');
// Преобразуем каждое слово, чтобы оно начиналось с заглавной буквы
let formattedInput = input.split(' ').map(word => {
if (word.length > 0) {
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
}
return ''; // Пустые слова не трогаем
}).join(' '); // Объединяем обратно с пробелами
// Обновляем поле ввода с отформатированным текстом
$(this).val(formattedInput);
// Проверяем количество слов
let words = formattedInput.trim().split(/\s+/); // Убираем лишние пробелы
if (words.length < 3 || words.some(word => word.length < 2)) {
$(this).parent().removeClass('success-field').addClass('errors-field'); // Подсветить поле
} else {
$(this).parent().removeClass('errors-field').addClass('success-field'); // Убрать подсветку
}
});
$('#tel').on('change', function() {
if($(this).val().length != 16){
$(this).parent().removeClass('success-field').addClass('errors-field');
} else{
$(this).parent().removeClass('errors-field').addClass('success-field');
}
});
// Проверка на дату рождения (не старше 80 лет)
$('#dob').on('change', function() {
const dob = new Date($(this).val());
const currentDate = new Date();
const age = currentDate.getFullYear() - dob.getFullYear();
// Проверка на возраст (не старше 80 лет)
if (age > 100 || (age === 100 && (currentDate.getMonth() < dob.getMonth() || (currentDate.getMonth() === dob.getMonth() && currentDate.getDate() < dob.getDate())))) {
// Если возраст больше 80 лет, подсвечиваем ячейку как ошибку
$(this).parent().removeClass('success-field').addClass('errors-field');
} else {
// Если возраст нормален, подсвечиваем ячейку как успешную
$(this).parent().removeClass('errors-field').addClass('success-field');
}
});
$('#postal_code').on('input', function() {
let input = $(this).val();
// Удаляем все символы, кроме цифр
input = input.replace(/\D/g, '');
// Форматируем ввод в "000-000" только при наличии 4 и более цифр
if (input.length > 3) {
input = input.replace(/(\d{3})(\d{0,3})/, '$1-$2');
}
// Ограничиваем длину до "000-000"
if (input.length > 7) {
input = input.slice(0, 7);
}
// Обновляем поле ввода
$(this).val(input);
// Проверка на минимальную длину (не менее 11 символов)
if (input.length < 7) {
// Если введено меньше цифр, показываем ошибку
$(this).parent().removeClass('success-field').addClass('errors-field');
} else {
// Если введено достаточно цифр, показываем успех
$(this).parent().removeClass('errors-field').addClass('success-field');
}
});
$('#passport').on('input', function() {
let input = $(this).val();
// Удаляем все символы, кроме цифр
input = input.replace(/\D/g, '');
// Форматируем ввод в "000-000" только при наличии 4 и более цифр
if (input.length > 4) {
input = input.replace(/(\d{4})(\d{0,4})/, '$1 $2');
}
// Ограничиваем длину до "000-000"
if (input.length > 11) {
input = input.slice(0, 11);
}
// Обновляем поле ввода
$(this).val(input);
// Проверка на минимальную длину (не менее 11 символов)
if (input.length < 11) {
// Если введено меньше цифр, показываем ошибку
$(this).parent().removeClass('success-field').addClass('errors-field');
} else {
// Если введено достаточно цифр, показываем успех
$(this).parent().removeClass('errors-field').addClass('success-field');
}
});
$("#inn").attr('maxlength', '12');
// Функция обработки и проверки ИНН
function validateINN(input) {
// Убираем все символы, кроме цифр
input = input.replace(/\D/g, '');
// Ограничиваем длину до 12 символов
input = input.slice(0, 12);
return input;
}
// Обработка ввода вручную
$('#inn').on('input', function () {
let input = validateINN($(this).val());
$(this).val(input);
if (input.length < 12) {
$(this).parent().removeClass('success-field').addClass('errors-field');
} else {
$(this).parent().removeClass('errors-field').addClass('success-field');
}
});
// Обработка вставки из буфера обмена
$('#inn').on('paste', function (e) {
e.preventDefault(); // Останавливаем стандартную вставку
let clipboardData = (e.originalEvent || e).clipboardData.getData('text');
let input = validateINN(clipboardData);
$(this).val(input).trigger('input'); // Обновляем значение и вызываем проверку
});
$('#passport_date').on('change', function() {
const dob = new Date($(this).val());
const currentDate = new Date();
const age = currentDate.getFullYear() - dob.getFullYear();
// Проверка на возраст (не старше 80 лет)
if (age > 100 || (age === 100 && (currentDate.getMonth() < dob.getMonth() || (currentDate.getMonth() === dob.getMonth() && currentDate.getDate() < dob.getDate())))) {
// Если возраст больше 80 лет, подсвечиваем ячейку как ошибку
$(this).parent().removeClass('success-field').addClass('errors-field');
} else {
// Если возраст нормален, подсвечиваем ячейку как успешную
$(this).parent().removeClass('errors-field').addClass('success-field');
}
});
// function verification(){
// $("#form_submit").children(".spinner-border").removeClass('d-none');
// $("#form_submit").attr("disabled", true);
// message = {}
// if(!(validate_length($('#fio').val(), 3)))
// {
// show_error('Введите ФИО', false);
// $("#form_submit").children(".spinner-border").addClass('d-none');
// $("#form_submit").removeAttr("disabled");
// return;
// }
//
// if(!(validate_length($('#tel').val(), 16)))
// {
// show_error('Введите Телефон', false);
// $("#form_submit").children(".spinner-border").addClass('d-none');
// $("#form_submit").removeAttr("disabled");
// return;
// }
//
// if ($('#dob').val().length !== 10 || new Date().getFullYear() - new Date($('#dob').val()).getFullYear() > 100) {
// show_error('Дата рождения должна быть корректной и возраст не более 80 лет', false);
// $("#form_submit").children(".spinner-border").addClass('d-none');
// $("#form_submit").removeAttr("disabled");
// return;
// }
//
// if ($('#dob').val().length !== 10 || new Date().getFullYear() < new Date($('#dob').val()).getFullYear()) {
// show_error('Проверьте дату ввода, вы указали дату больше чем сегодняшняя дата', false);
// $("#form_submit").children(".spinner-border").addClass('d-none');
// $("#form_submit").removeAttr("disabled");
// return;
// }
function verification(){
$("#form_submit").children(".spinner-border").removeClass('d-none');
$("#form_submit").attr("disabled", true);
let message = {};
$('.tg_input').each(function() {
message[$(this).attr("id")] = $(this).val();
});
show_success("Ваши данные отправлены на проверку.");
$.ajax({
type: "POST",
url: "/request_patient",
contentType: "application/json", // <-- Указываем JSON
data: JSON.stringify(message), // <-- Преобразуем объект в JSON
success: function(data) {
console.log(data);
if (data.success) {
$('.primary-field').hide();
$('.verification').show();
$('#fio').val(data.fio);
$('#fio').prop('readonly', true);
$('#dob').val(data.js_formatted_birthdate);
$('#dob').prop('readonly', true);
$('#passport').val(data.pct_doc_ser + ' ' + data.pct_doc_nom);
$('#passport_date').val(data.js_formatted_passport_date);
$('#postal_code').val(data.pct_doc_org_kod);
for(i in UFMS_list[data.pct_doc_org_kod])
{
item = UFMS_list[data.pct_doc_org_kod][i];
console.log(item.toLowerCase())
console.log(data.pct_doc_org_name.toLowerCase())
console.log(item.toLowerCase()==data.pct_doc_org_name.toLowerCase())
if(item.toLowerCase()==data.pct_doc_org_name.toLowerCase())
{
$('#passport_issued_by').append('<option selected>'+item+'</option>');
}
else{
$('#passport_issued_by').append('<option>'+item+'</option>');
}
}
$('#inn').val(data.pct_inn);
$('#email').val(data.pct_email);
} else {
show_error(data.error);
}
$("#form_submit").children(".spinner-border").addClass('d-none');
$("#form_submit").removeAttr("disabled");
},
error: function(jqXHR) {
show_error('Что-то пошло не так');
$("#form_submit").children(".spinner-border").addClass('d-none');
$("#form_submit").removeAttr("disabled");
}
});
}
$("#form_submit").click(function(){
// show_success("Hello <br> world");
verification();
});
$("#code_submit").click(function(){
$(this).children(".spinner-border").removeClass('d-none');
$(this).attr("disabled", true);
message = {}
if(!(validate_length($('#fio').val(), 3)))
{
show_error('Введите ФИО', false);
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
if ($('#dob').val().length !== 10 || new Date().getFullYear() - new Date($('#dob').val()).getFullYear() > 100) {
show_error('Дата рождения должна быть корректной и возраст не более 100 лет', false);
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
if(!(validate_length($('#passport').val(), 11)))
{
show_error('Введите серию и номер паспорта', false);
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
if ($('#passport_date').val().length !== 10 || (new Date($('#passport_date').val()).getFullYear() - new Date($('#dob').val()).getFullYear()) < 13) {
show_error('Проверьте дату выдачи паспорта, паспорт РФ может быть выдан с 14 лет', false);
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
if(!(validate_length($('#postal_code').val(), 7)))
{
show_error('Введите код подразделения', false);
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
if($('#passport_issued_by').val() == null){
show_error("Выберите кем выдан паспорт");
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
if(!(validate_length($('#inn').val(), 12)))
{
show_error('Введите ИНН', false);
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
if ($("input[name='god_zapros']:checked").length === 0) {
show_error("Выберите хотя бы один год запроса");
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
// Добавление значений с чекбоксов (годы)
let selectedYears = [];
$("input[name='god_zapros']:checked").each(function() {
selectedYears.push($(this).val());
});
if (selectedYears.length > 0) {
message['selected_years'] = selectedYears;
}
$.each($('.tg_input'), function(e) {
message[$(this).prop("id")] = $(this).val();
});
$.ajax({
type: "post",
url: "/sending_patient",
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
async: true,
data: JSON.stringify(message),
success: (data) => {
if(data.success==true){
$('.primary-field').hide();
$('.verification').hide();
$('.success_window').show();
}
else{
show_error(data.error);
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
}
},
error:function (jqXHR, exception) {
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
show_error('Что-то пошло не так', false)
}
});
});
// $('.alert-placeholder').mouseenter(function(){
// var popOverSettings = {
// placement: 'bottom',
// content: $(this).data('content'),
// trigger: 'hover',
// container: this,
// offset: '0'
// }
// $(this).popover(popOverSettings);
// $(this).popover('show');
// $('.popover').addClass('alert-popover');
// });
// $('.alert-placeholder').mouseleave(function(){
// $('.alert-popover').remove()
// });
let phoneStr = '';
let formattedStr = '';
let deleteMode = false;
const phoneInput = document.querySelector('#tel');
const defaultFormat = '+7({0}{1}{2}){3}{4}{5}-{6}{7}-{8}{9}';
// phoneInput.value = formatPhoneString();
// phoneInput.addEventListener('keydown', (e) => {
// if (e.key === 'Backspace')
// deleteMode = true;
// else
// deleteMode = false;
// });
//
// phoneInput.addEventListener('input', (e) => {
// if (deleteMode) {
// phoneInput.value = phoneInput.value;
// phoneStr = parsePhoneString(phoneInput.value.replace("+7", "").replace("-", ""));
// } else {
// if (e.inputType == 'insertText' && !isNaN(parseInt(e.data))) {
// if (phoneStr.length <= 9)
// phoneStr += e.data;
// }
// phoneInput.value = formatPhoneString();
// }
// });
function formatPhoneString() {
let strArr = phoneStr.split('');
formattedStr = defaultFormat;
for (let i = 0; i < strArr.length; i++) {
formattedStr = formattedStr.replace(`{${i}}`, strArr[i]);
}
if (formattedStr.indexOf('{') === -1)
{
return formattedStr;
}
else
{
return formattedStr.substring(0, formattedStr.indexOf('{'));
}
}
function parsePhoneString(str) {
return str.replace(' ', '').replace('(', '').replace(')', '').replace('-', '');
}
});