From 23fe5db9fdae302dc148dcaa71fc04cf5fc2c86b Mon Sep 17 00:00:00 2001 From: KONE SOREL Date: Sat, 7 Mar 2026 16:39:35 +0000 Subject: [PATCH] fg --- Js/fonctions.js | 86 ++++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 51 deletions(-) diff --git a/Js/fonctions.js b/Js/fonctions.js index d53c5aec..949e2d55 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -47510,79 +47510,63 @@ function chargerFichiersTable() { } function afficheDonneesTableChoisie(fichier) { - // ÉTAPE 1 : Nettoyage préventif des menus orphelins (Bootstrap-Select container:body) - // On détruit les instances existantes avant de vider le DOM pour éviter les menus qui "collent" - if ($.fn.selectpicker) { - $('.selectpicker').selectpicker('destroy'); - $('.bootstrap-select').remove(); - } - if (!fichier || fichier === '') return; const racineWeb = $("#racineWeb").val(); const codeLangue = $("#codeLangue").val(); const $divLister = $('#div_lister_table'); - let donnees = {}; + + // 1. NETTOYAGE RADICAL DU DOM (Anti-doublon) + // On détruit tout ce qui est lié aux plugins avant de vider le div + if ($.fn.DataTable.isDataTable('#tableLister')) { + $('#tableLister').DataTable().destroy(); + } + $('.selectpicker').selectpicker('destroy'); + $('.bootstrap-select').remove(); // Supprime les résidus graphiques + $divLister.empty(); // Vide proprement le conteneur - // ÉTAPE 2 : Gestion des paramètres spécifiques selon le fichier + // 2. RÉCUPÉRATION DES PARAMÈTRES + let donnees = {}; if (fichier === "Ajaxtblisterjoursferiers") { - // On récupère les filtres de l'interface - const codePays = $('#codePays').val() || "CI"; - const annee = $('#annee').val() || new Date().getFullYear(); - donnees = { codePays: codePays, annee: annee }; + // On cible les IDs précisément + donnees.codePays = $('#codePays').val(); + donnees.annee = $('#annee').val(); } - // ÉTAPE 3 : Affichage du loader (Standard Neutral Pro) + // 3. LOADER $divLister.html(`
-
-

- ${(codeLangue === "en_US") ? "Synchronizing data..." : "Synchronisation des données..."} -

+
+

${(codeLangue === "en_US") ? "Loading..." : "Chargement..."}

`); - // ÉTAPE 4 : Appel AJAX + // 4. APPEL AJAX $.ajax({ url: racineWeb + fichier + "/", type: 'post', data: donnees, success: function(data) { - // 1. Injection du HTML - $divLister.html(data); + // Injection des nouvelles données (le PHP doit filtrer via les $_POST reçus) + $divLister.html(data); - // 2. Traitement spécifique Jours Fériés - if (fichier === "Ajaxtblisterjoursferiers") { - - // --- SÉCURITÉ ANTI-DOUBLON --- - // On vérifie si l'élément est déjà un selectpicker, si oui on le détruit proprement - if ($('#codePays').data('selectpicker')) { - $('#codePays').selectpicker('destroy'); - } - // On supprime physiquement le conteneur généré par Bootstrap-Select s'il existe - $('#codePays').siblings('.bootstrap-select').remove(); - - // Maintenant on peut le ré-initialiser proprement - actualiserSelectPicker('#codePays', false); + // 5. RÉ-INITIALISATION DES COMPOSANTS + + // Pour le SelectPicker (Filtre Pays) + if ($('#codePays').length > 0) { + // On ré-initialise proprement + actualiserSelectPicker('#codePays', false); + // On remet la valeur et on rafraîchit l'affichage + $('#codePays').val(donnees.codePays).selectpicker('refresh'); + } - // On applique la valeur ET on rafraîchit - $('#codePays').val(donnees.codePays).selectpicker('refresh'); - $('#annee').val(donnees.annee); - } - - // 3. DataTable - const nomTableRaw = $("#listetables option:selected").text() || 'Export'; - const nomTableClean = nomTableRaw.trim().replace(/[^a-z0-9]/gi, '_'); - initDataTableReference('#tableLister', 'Referentiel_' + nomTableClean); - }, + // Pour la DataTable + const nomTable = $("#listetables option:selected").text() || 'Export'; + initDataTableReference('#tableLister', 'Export_' + nomTable.replace(/\s+/g, '_')); + }, error: function(xhr) { - toastr.error((codeLangue === "en_US") ? "Data loading error" : "Erreur de chargement des données"); - $divLister.html(` -
- - Error: ${xhr.status} - ${xhr.statusText} -
- `); + toastr.error("Erreur AJAX"); + $divLister.html(`
${xhr.statusText}
`); } }); }