Sistema Contenedor Ibiza v2.0 - Despliegue Docker
This commit is contained in:
100
public/assets/js/dragdrop.js
vendored
Normal file
100
public/assets/js/dragdrop.js
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* Funcionalidad Drag & Drop para reordenar rotaciones
|
||||
*/
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const list = document.getElementById('sortable-list');
|
||||
if (!list) return;
|
||||
|
||||
let draggedItem = null;
|
||||
|
||||
// Inicializar eventos para items
|
||||
function setupItems() {
|
||||
const items = list.querySelectorAll('.drag-item');
|
||||
items.forEach(item => {
|
||||
item.setAttribute('draggable', true);
|
||||
|
||||
item.addEventListener('dragstart', function(e) {
|
||||
draggedItem = item;
|
||||
setTimeout(() => item.classList.add('dragging'), 0);
|
||||
});
|
||||
|
||||
item.addEventListener('dragend', function() {
|
||||
setTimeout(() => {
|
||||
item.classList.remove('dragging');
|
||||
draggedItem = null;
|
||||
}, 0);
|
||||
saveOrder(); // Guardar automáticamente al soltar
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Eventos de la lista
|
||||
list.addEventListener('dragover', function(e) {
|
||||
e.preventDefault();
|
||||
const afterElement = getDragAfterElement(list, e.clientY);
|
||||
const currentItem = document.querySelector('.dragging');
|
||||
|
||||
if (afterElement == null) {
|
||||
list.appendChild(currentItem);
|
||||
} else {
|
||||
list.insertBefore(currentItem, afterElement);
|
||||
}
|
||||
});
|
||||
|
||||
// Helper para determinar posición
|
||||
function getDragAfterElement(container, y) {
|
||||
const draggableElements = [...container.querySelectorAll('.drag-item:not(.dragging)')];
|
||||
|
||||
return draggableElements.reduce((closest, child) => {
|
||||
const box = child.getBoundingClientRect();
|
||||
const offset = y - box.top - box.height / 2;
|
||||
|
||||
if (offset < 0 && offset > closest.offset) {
|
||||
return { offset: offset, element: child };
|
||||
} else {
|
||||
return closest;
|
||||
}
|
||||
}, { offset: Number.NEGATIVE_INFINITY }).element;
|
||||
}
|
||||
|
||||
// Guardar orden via AJAX
|
||||
function saveOrder() {
|
||||
const items = list.querySelectorAll('.drag-item');
|
||||
const order = Array.from(items).map(item => item.dataset.id);
|
||||
|
||||
const feedback = document.getElementById('save-feedback');
|
||||
if (feedback) feedback.textContent = 'Guardando...';
|
||||
|
||||
fetch('reorganizar.php?action=save_order', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
},
|
||||
body: JSON.stringify({ order: order })
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
if (feedback) {
|
||||
feedback.textContent = 'Orden guardado correctamente';
|
||||
feedback.className = 'text-success';
|
||||
setTimeout(() => feedback.textContent = '', 2000);
|
||||
}
|
||||
} else {
|
||||
if (feedback) {
|
||||
feedback.textContent = 'Error al guardar';
|
||||
feedback.className = 'text-danger';
|
||||
}
|
||||
alert('Hubo un error al guardar el orden');
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
if (feedback) feedback.textContent = 'Error de conexión';
|
||||
});
|
||||
}
|
||||
|
||||
setupItems();
|
||||
});
|
||||
Reference in New Issue
Block a user