Vla_DOS

client_form

May 8th, 2025
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function openChangeEmailModal(oldEmail, newEmail) {
  2.     const isOldEmailEmpty = !oldEmail || oldEmail.trim() === '' || oldEmail === 'null';
  3.  
  4.     let emailChangeText = '';
  5.  
  6.     if (isOldEmailEmpty) {
  7.         emailChangeText = `
  8.             <p>У клиента не было указанного email. Будет добавлен новый email <b>${newEmail}</b> и курс будет перенесён на него, если выбрать опцию <b>Перенести курсы</b>.</p>
  9.         `;
  10.     } else {
  11.         emailChangeText = `
  12.             <p>Вы собираетесь изменить email с <b>${oldEmail}</b> на <b>${newEmail}</b>.</p>
  13.         `;
  14.     }
  15.  
  16.     const modalHtml = `
  17.         <div class="modal-dialog">
  18.             <div class="modal-content animated fadeIn">
  19.                 <div class="modal-header">
  20.                     <button type="button" class="close" data-dismiss="modal">
  21.                         <span aria-hidden="true">×</span>
  22.                         <span class="sr-only">Закрыть</span>
  23.                     </button>
  24.                     <h5 class="modal-title">Подтверждение смены email</h5>
  25.                 </div>
  26.                 <div class="modal-body">
  27.                     <div class="row">
  28.                         <div class="form-group">
  29.                             ${emailChangeText}
  30.                             <ul style="text-align: left; margin-top: 10px;">
  31.                                 <li><b>Перенести курсы</b> — все текущие курсы клиента будут перенесены на новую почту в CRM и <a href="https://znayoo.com/">Znayoo</a>, а старая почта будет отключена.</li>
  32.                                 <li><b>Создать нового пользователя</b> — будет создан отдельный аккаунт с новой почтой, и курс будет добавлен только туда (например, если клиент купил курс другу).</li>
  33.                             </ul>
  34.                         </div>
  35.                         <div class="form-group">
  36.                            <label class="col-sm-4 control-label">Выберите действие:</label>
  37.                            <div class="col-sm-8">
  38.                                <div class="form-group">
  39.                                    <select id="changeEmailAction" class="form-control">
  40.                                         <option value="">Выберите действие...</option>
  41.                                         <option value="transfer">Перенести курсы</option>
  42.                                         <option value="create_new">Создать нового пользователя</option>
  43.                                     </select>
  44.                                </div>
  45.                            </div>
  46.                        </div>
  47.                        <div class="form-group">
  48.                            <button id="confirmChangeEmailBtn" class="card-info-btn primary btn-block submitFalse">Подтвердить</button>
  49.                        </div>
  50.                     </div>                                      
  51.                 </div>
  52.             </div>
  53.         </div>
  54.     `;
  55.  
  56.     $('#changeEmailModal').html(modalHtml).modal('show');
  57.  
  58.     $('#confirmChangeEmailBtn').off('click').on('click', function () {
  59.  
  60.         const form = $('#client_form');
  61.         const selectedAction = $('#changeEmailAction').val();
  62.         if (!selectedAction) {
  63.             alert('Пожалуйста, выберите действие перед подтверждением.');
  64.             return;
  65.         }
  66.  
  67.         form.append('<input type="hidden" name="confirm_transfer" value="1">');
  68.         form.append('<input type="hidden" name="confirm_transfer_type" value="' + selectedAction + '">');
  69.         $('#changeEmailModal').modal('hide');
  70.  
  71.     });
  72. }
  73.  
  74. function submitClientForm(form) {
  75.     $.ajax({
  76.         url: form.attr('action'),
  77.         type: 'POST',
  78.         data: form.serialize(),
  79.         dataType: 'json',
  80.         success: function (response) {
  81.             isSubmittingClientForm = false;
  82.  
  83.             if (typeof response === 'object' && response.status === 'error') {
  84.                 alert(response.message || 'Произошла ошибка при сохранении.');
  85.                 resetSaveButton();
  86.                 return;
  87.             }
  88.  
  89.             if (typeof response === 'object' && response.status === 'success') {
  90.                 Swal.fire({
  91.                     icon: 'success',
  92.                     title: 'Сохранено',
  93.                     text: response.message || 'Данные успешно сохранены.',
  94.                     timer: 2000,
  95.                     showConfirmButton: false
  96.                 }).then(() => {
  97.                     location.reload();
  98.                 });
  99.                 return;
  100.             }
  101.  
  102.             location.reload();
  103.         },
  104.         error: function (xhr) {
  105.             isSubmittingClientForm = false;
  106.  
  107.             if (xhr.status === 302 || xhr.status === 0) {
  108.                 location.reload();
  109.                 return;
  110.             }
  111.  
  112.             alert('Произошла ошибка соединения или сервер не отвечает.');
  113.             resetSaveButton();
  114.         }
  115.     });
  116. }
  117.  
  118.  
  119.  
  120. function bindClientFormSubmit() {
  121.     $('#client_form').off('submit').on('submit', function (e) {
  122.         e.preventDefault();
  123.  
  124.         const form = $(this);
  125.         const youtubeSelect = $('#youtube_email_contact_list');
  126.         const originalEmail = youtubeSelect.data('original') + '';
  127.         const currentEmail = youtubeSelect.val() + '';
  128.  
  129.         const confirmTransferInput = form.find('input[name="confirm_transfer"]');
  130.  
  131.         if (originalEmail === currentEmail || confirmTransferInput.length) {
  132.             submitClientForm(form);
  133.             return;
  134.         }
  135.  
  136.         $.ajax({
  137.             url: form.attr('action'),
  138.             type: 'POST',
  139.             data: form.serialize(),
  140.             dataType: 'json',
  141.             success: function (data) {
  142.                 if (data.status === 'confirm') {
  143.                     openChangeEmailModal(data.oldEmail, data.newEmail);
  144.                 } else if (data.status === 'error') {
  145.                     alert(data.message || 'Произошла ошибка.');
  146.                 } else {
  147.                     location.reload();
  148.                 }
  149.             },
  150.             error: function () {
  151.                 alert('Произошла ошибка соединения или сервер не отвечает.');
  152.                 resetSaveButton();
  153.             }
  154.         });
  155.     });
  156. }
  157.  
  158. function resetSaveButton() {
  159.     const saveButton = $('#client_form button[type="submit"]');
  160.     if (saveButton.length) {
  161.         saveButton.removeAttr('disabled');
  162.         saveButton.html('Сохранить');
  163.         saveButton.button('reset');
  164.     }
  165. }
  166.  
  167. $('#changeEmailModal').on('hidden.bs.modal', function () {
  168.     resetSaveButton();
  169. });
  170.  
  171. $(function() {
  172.     bindClientFormSubmit();
  173.     $(document).on('pjax:end', bindClientFormSubmit);
  174. });
  175.  
Add Comment
Please, Sign In to add comment