Files
ave-cms/adminx/modules/Registrations/assets/registrations.js
T
2026-07-27 12:58:44 +03:00

97 lines
3.7 KiB
JavaScript

/*
|--------------------------------------------------------------------------------------
| AVE.cms — модуль «Регистрационные удостоверения» (adminx)
|--------------------------------------------------------------------------------------
| Adminx.Registrations: сабмит формы, «бессрочно», удаление — единый Ajax/Toast/Confirm.
*/
(function () {
'use strict';
if (typeof window.Adminx === 'undefined') { return; }
var Adminx = window.Adminx;
Adminx.Registrations = {
init: function () {
this.bindPerpetual();
this.bindForm();
this.bindDelete();
},
bindPerpetual: function () {
var toggle = document.querySelector('[data-reg-perpetual]');
var valid = document.querySelector('[data-reg-valid]');
if (!toggle || !valid) { return; }
var sync = function () { valid.disabled = toggle.checked; if (toggle.checked) { valid.value = ''; } };
toggle.addEventListener('change', sync);
sync();
},
bindForm: function () {
var form = document.querySelector('[data-reg-form]');
if (!form) { return; }
form.addEventListener('submit', function (event) {
event.preventDefault();
var submit = form.querySelector('[type="submit"]');
if (submit) { submit.disabled = true; }
Adminx.Ajax.post(form.getAttribute('data-action'), new FormData(form)).then(function (res) {
var body = res.data || {};
if (res.ok && body.success) {
Adminx.Toast.show(body.message || 'Сохранено', 'success');
var redirect = form.getAttribute('data-redirect') || (body.data && body.data.redirect);
if (redirect) {
window.setTimeout(function () { window.location.href = redirect; }, 350);
}
return;
}
Adminx.Toast.show(body.message || 'Не удалось сохранить', 'error');
}).catch(function () {
Adminx.Toast.show('Сервер недоступен. Повторите попытку.', 'error');
}).then(function () {
if (submit) { submit.disabled = false; }
});
});
},
bindDelete: function () {
document.addEventListener('click', function (event) {
var trigger = event.target.closest('[data-reg-delete]');
if (!trigger) { return; }
event.preventDefault();
var id = trigger.getAttribute('data-reg-delete');
Adminx.Confirm.open({
kind: 'error',
title: 'Удалить удостоверение?',
message: 'Запись будет удалена из реестра без возможности восстановления.',
confirmLabel: 'Удалить',
confirmClass: 'btn-danger',
onConfirm: function () {
Adminx.Ajax.post(Adminx.base() + '/registrations/' + id + '/delete', new FormData()).then(function (res) {
var body = res.data || {};
if (res.ok && body.success) {
var row = document.querySelector('tr[data-id="' + id + '"]');
if (row) { row.remove(); }
Adminx.Toast.show(body.message || 'Удалено', 'success');
return;
}
Adminx.Toast.show(body.message || 'Не удалось удалить', 'error');
}).catch(function () {
Adminx.Toast.show('Сервер недоступен. Повторите попытку.', 'error');
});
}
});
});
}
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () { Adminx.Registrations.init(); });
} else {
Adminx.Registrations.init();
}
})();