113 lines
2.6 KiB
JavaScript
113 lines
2.6 KiB
JavaScript
// Guarda referencia al form original (si existe)
|
|
|
|
let formConfirmacion = null;
|
|
|
|
// Acción dinámica a ejecutar (opt del backend)
|
|
|
|
let action = null;
|
|
|
|
// Objeto donde se copian todos los data-* del botón
|
|
|
|
let dataset = {};
|
|
|
|
// Recorre todos los botones que disparan el modal
|
|
|
|
document.querySelectorAll(".btnConfirmar").forEach(boton => {
|
|
|
|
boton.addEventListener("click", function () {
|
|
|
|
// Inserta el mensaje en el modal
|
|
|
|
document.getElementById("modalMensaje").textContent = this.dataset.mensaje;
|
|
|
|
// Inserta el título en el modal
|
|
|
|
document.getElementById("modalTitulo").textContent = this.dataset.titulo;
|
|
|
|
// Busca si el botón pertenece a un form existente
|
|
|
|
formConfirmacion = this.closest("form");
|
|
|
|
// Obtiene la acción dinámica (si existe)
|
|
|
|
action = this.dataset.action || null;
|
|
|
|
// Copia TODOS los data-* del botón a un objeto JS
|
|
|
|
dataset = { ...this.dataset };
|
|
|
|
});
|
|
});
|
|
|
|
// Evento del botón "Confirmar" dentro del modal
|
|
|
|
document.getElementById("modalBtnConfirmar").addEventListener("click", function (e) {
|
|
|
|
// Evita el submit automático del botón
|
|
|
|
e.preventDefault();
|
|
|
|
// CASO 1: FORM EXISTENTE
|
|
|
|
// Si hay un form padre y no hay acción dinámica
|
|
|
|
if (formConfirmacion && !action) {
|
|
|
|
// Envía directamente ese form
|
|
|
|
formConfirmacion.submit();
|
|
return;
|
|
}
|
|
|
|
// CASO 2: FORM DINÁMICO
|
|
|
|
if (action) {
|
|
|
|
// Form global del modal
|
|
|
|
const form = document.getElementById("formConfirmacionGlobal");
|
|
|
|
// Contenedor donde se insertan inputs ocultos
|
|
|
|
const container = document.getElementById("modalDynamicInputs");
|
|
|
|
// Define la URL de envío con el parámetro opt
|
|
|
|
form.action = `index.php?opt=${action}`;
|
|
|
|
// Limpia inputs anteriores para evitar duplicados
|
|
|
|
container.innerHTML = '';
|
|
|
|
// Recorre todas las claves del dataset
|
|
|
|
Object.keys(dataset).forEach(key => {
|
|
|
|
// Ignora atributos que no deben enviarse
|
|
|
|
if ([
|
|
'action',
|
|
'mensaje',
|
|
'titulo',
|
|
'bsToggle',
|
|
'bsTarget'
|
|
].includes(key)) return;
|
|
|
|
// Crea un input hidden por cada data-*
|
|
|
|
const input = document.createElement('input');
|
|
|
|
input.type = 'hidden'; // oculto
|
|
input.name = key; // nombre (ej: mano_obra, etc)
|
|
input.value = dataset[key]; // valor correspondiente
|
|
|
|
// Lo agrega al form
|
|
|
|
container.appendChild(input);
|
|
});
|
|
|
|
// Envía el form dinámico
|
|
|
|
form.submit();
|
|
}
|
|
}); |