This commit is contained in:
KONE SOREL 2026-04-09 14:50:01 +00:00
parent 18cd14e65a
commit d9c7669681

View File

@ -92894,24 +92894,20 @@ function actualiser_bareme_acte_lettre_cle() {
} }
/** /**
* Récupère et affiche le détail des actes liés à une lettre clé dans une modale * Version corrigée : On charge le contenu AVANT d'ouvrir pour éviter l'erreur Bootstrap
* @param {number} idActesbaremeinitiallettrecle
* @param {string} lettreCle
*/ */
async function detail_baremeacte_lettre_cle(idInitial, lettre) { async function detail_baremeacte_lettre_cle(idInitial, lettre) {
// 1. On ouvre la modale vide avec un loader une seule fois // 1. On charge le contenu (qui va injecter le HTML dans la div)
// On attend que le HTML soit injecté avant de demander à Bootstrap d'afficher la modale
await chargerContenuDetailActe(idInitial, lettre);
// 2. Une fois le contenu chargé, on ouvre la modale
// On utilise le sélecteur jQuery standard pour éviter "Illegal invocation"
$("#div_detail_bareme_actes").modal("show"); $("#div_detail_bareme_actes").modal("show");
// 2. On appelle la fonction de chargement de contenu
chargerContenuDetailActe(idInitial, lettre);
} }
/** /**
* Charge ou actualise uniquement le contenu interne de la modale de détail * Charge le contenu interne
* sans manipuler l'état d'ouverture de la modale Bootstrap.
* * @param {number|string} idInitial - ID du barème initial (idActesbaremeinitiallettrecle)
* @param {string} lettre - La lettre clé concernée (ex: 'K', 'B', 'V')
*/ */
async function chargerContenuDetailActe(idInitial, lettre) { async function chargerContenuDetailActe(idInitial, lettre) {
const racineWeb = document.getElementById("racineWeb").value; const racineWeb = document.getElementById("racineWeb").value;
@ -92919,37 +92915,25 @@ async function chargerContenuDetailActe(idInitial, lettre) {
const modalContainer = document.getElementById("div_detail_bareme_actes"); const modalContainer = document.getElementById("div_detail_bareme_actes");
const url = `${racineWeb}Ajaxbaremelettrecle/detailactes/`; const url = `${racineWeb}Ajaxbaremelettrecle/detailactes/`;
// 1. Préparation des paramètres pour l'appel Fetch
const formData = new FormData(); const formData = new FormData();
formData.append("idActesbaremeinitiallettrecle", idInitial); formData.append("idActesbaremeinitiallettrecle", idInitial);
formData.append("lettreCle", lettre); formData.append("lettreCle", lettre);
try { try {
// 2. Exécution de la requête asynchrone const response = await fetch(url, { method: "POST", body: formData });
const response = await fetch(url, { if (!response.ok) throw new Error(`Erreur réseau : ${response.status}`);
method: "POST",
body: formData
});
if (!response.ok) {
throw new Error(`Erreur réseau : ${response.status}`);
}
const html = await response.text(); const html = await response.text();
// 3. Injection du HTML dans le conteneur de la modale // Injection du HTML
// On remplace le contenu actuel (le tableau) par le nouveau contenu mis à jour
modalContainer.innerHTML = html; modalContainer.innerHTML = html;
// 4. Réinitialisation de DataTable // Réinitialisation de DataTable
// On utilise un court délai pour s'assurer que le navigateur a fini de rendre le HTML
setTimeout(() => { setTimeout(() => {
// Destruction de l'instance précédente si elle existe pour éviter les conflits
if ($.fn.DataTable.isDataTable('#table_detail_actes')) { if ($.fn.DataTable.isDataTable('#table_detail_actes')) {
$('#table_detail_actes').DataTable().destroy(); $('#table_detail_actes').DataTable().destroy();
} }
// Initialisation de la nouvelle instance DataTable
$('#table_detail_actes').DataTable({ $('#table_detail_actes').DataTable({
"language": { "language": {
"url": codeLangue === "en_US" "url": codeLangue === "en_US"
@ -92957,28 +92941,14 @@ async function chargerContenuDetailActe(idInitial, lettre) {
: "//cdn.datatables.net/plug-ins/1.13.6/i18n/fr-FR.json" : "//cdn.datatables.net/plug-ins/1.13.6/i18n/fr-FR.json"
}, },
"pageLength": 10, "pageLength": 10,
"lengthMenu": [5, 10, 25, 50],
"order": [[0, "asc"]], // Tri par libellé d'acte
"columnDefs": [
{ "orderable": false, "targets": 5 } // Désactive le tri sur la colonne 'Actions'
],
"dom": "<'row mb-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row mt-3 text-muted small'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
"responsive": true, "responsive": true,
"drawCallback": function() { "dom": "<'row mb-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>rtip"
// Optionnel : s'exécute à chaque fois que le tableau est redessiné (pagination, tri)
console.log("Tableau actualisé avec succès.");
}
}); });
}, 150); }, 50); // Délai réduit pour plus de réactivité
} catch (error) { } catch (error) {
console.error("Erreur lors du chargement du contenu :", error); console.error("Erreur chargement :", error);
alert_ebene("Erreur de chargement", "Loading error");
// En cas d'erreur, on affiche un message dans la modale sans la fermer
const errorMsg = codeLangue === "en_US" ? "Update failed." : "Échec de la mise à jour.";
alert_ebene(errorMsg, errorMsg);
} }
} }