File: //home/marketing.cfbon.ru/public_html/public/adminLTE/dist/js/products.js
document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('tbody td:nth-child(4)').forEach(cell => {
cell.addEventListener('click', function (e) {
if (e.target.tagName === 'BUTTON' || e.target.tagName === 'TEXTAREA') return;
if (this.querySelector('form')) return;
this.dataset.originalText = this.textContent.trim();
const form = document.createElement('form');
form.innerHTML = `
<textarea rows="4" class="form-control">${this.textContent.trim()}</textarea>
<div>
<button type="submit" class="btn btn-sm btn-outline-danger save-value mt-2">Сохранить</button>
<button type="button" class="btn btn-sm btn-outline-secondary cancel-edit mt-2">Отмена</button>
</div>
`;
this.innerHTML = '';
this.appendChild(form);
form.querySelector('textarea').focus();
});
})
document.addEventListener('click', function(e) {
if (e.target.classList.contains('cancel-edit')) {
const form = e.target.closest('form');
const td = form.closest('td');
td.textContent = form.querySelector('textarea').value;
td.textContent = td.dataset.originalText || '';
}
});
document.addEventListener('click', function(e) {
if (e.target && e.target.matches('button.save-value')) {
e.preventDefault();
const button = e.target;
const form = button.closest('form');
if (!form) return;
const textarea = form.querySelector('textarea');
const td = form.closest('td');
const productId = td.closest('tr').dataset.id;
button.disabled = true;
button.textContent = 'Сохранение...';
fetch(`/site-main-page/menu/product/${productId}/change-description`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': window.Laravel.csrfToken,
},
body: JSON.stringify({description: textarea.value})
})
.then(response => {
if (!response.ok) throw response;
return response.json();
})
.then(data => {
td.textContent = data.description || '';
delete td.dataset.originalText;
form.remove();
showToast(data.message, true);
})
.catch(async (error) => {
let message = "Неизвестная ошибка";
try {
if (error instanceof Response) {
const data = await error.json();
message = data.message || data.error || "Ошибка сервера";
} else if (error.message) {
message = error.message;
}
} catch (e) {
message = "Ошибка обработки ответа";
}
showToast(message, false);
})
.finally(() => {
button.disabled = false;
button.textContent = 'Сохранить';
});
}
});
function showToast(message, isSuccess) {
Toastify({
text: message,
duration: 3000,
gravity: "top",
position: "right",
backgroundColor: isSuccess ? "#4CAF50" : "#f44336",
}).showToast();
}
});