diff --git a/js/indices.js b/js/indices.js index 1c6c5db..f12da04 100644 --- a/js/indices.js +++ b/js/indices.js @@ -1,16 +1,29 @@ +// ========================================================= // Tableaux globaux +// ========================================================= + let configIndices = []; // Données issues de la table "indice" let coursActionsData = []; // Données issues de la table "cours_actions" +// ========================================================= +// CHARGEMENT DES DONNÉES +// ========================================================= + function chargerDonnees() { // Chargement en parallèle des deux API Promise.all([ fetch("./php/api_lecture_tableindice.php").then((res) => res.json()), fetch("./php/api_indices.php").then((res) => res.json()), ]) + .then(([configResult, coursResult]) => { + // ----------------------------------------------------- + // Configuration des indices + // ----------------------------------------------------- + if (configResult.status === "success") { configIndices = configResult.data; + console.log( "Configuration indices chargée :", configIndices.length, @@ -20,8 +33,13 @@ function chargerDonnees() { console.error("Erreur API config indices :", configResult.message); } + // ----------------------------------------------------- + // Cours des actions + // ----------------------------------------------------- + if (coursResult.status === "success") { coursActionsData = coursResult.data; + console.log( "Cours actions chargés :", coursActionsData.length, @@ -31,184 +49,516 @@ function chargerDonnees() { console.error("Erreur API cours_actions :", coursResult.message); } + // ----------------------------------------------------- // Mise à jour des vues + // ----------------------------------------------------- + afficherSyntheseCartes(); + alimenterBandeauxTicker(); + // ----------------------------------------------------- // Statut de rafraîchissement + // ----------------------------------------------------- + const statut = document.getElementById("statut"); + if (statut) { statut.innerText = `Dernière mise à jour : ${new Date().toLocaleTimeString()}`; } }) - .catch((error) => - console.error("Erreur réseau lors du chargement des API :", error), - ); + + .catch((error) => { + console.error("Erreur réseau lors du chargement des API :", error); + }); } +// ========================================================= +// AFFICHAGE DES CARTES +// ========================================================= + function afficherSyntheseCartes() { const container = document.getElementById("cards-container"); + if (!container) return; container.innerHTML = ""; - // CARTES : On se base STRICTEMENT sur le champ afficher == 1 + // ------------------------------------------------------- + // On se base STRICTEMENT sur afficher == 1 + // ------------------------------------------------------- + const actionsAffichees = configIndices.filter( (item) => String(item.afficher) === "1" || item.afficher == 1, ); if (actionsAffichees.length > 0) { actionsAffichees.forEach((conf) => { + // --------------------------------------------------- // Croisement avec les cours en direct + // --------------------------------------------------- + const d = coursActionsData.find( (item) => item.symbole === conf.symbole || item.isin === conf.isin, ) || {}; const ecartValeur = parseFloat(d.variation || 0); + const isPositive = ecartValeur >= 0; + const badgeColor = isPositive ? "text-emerald-400" : "text-rose-400"; + const sign = isPositive ? "+" : ""; + // --------------------------------------------------- + // Volume + // --------------------------------------------------- + const volumeFormate = d.volume ? parseInt(d.volume).toLocaleString("fr-FR") : "--"; + // --------------------------------------------------- + // Carte + // --------------------------------------------------- + container.innerHTML += ` -