Calcul de trajet auto après scrape + recalcul local intelligent
- trajet.py : fonction couts() pure (calcul des coûts sans appel réseau) - app.py : mémorisation distance/durée/péage + adresses dans le CSV ; auto-calcul best-effort après ajout (scrape simple et en lot) ; api_distance recalcule en local si adresses inchangées, complet sinon - index.html : affichage auto du trajet en cache à l'ouverture du prospect
This commit is contained in:
@@ -908,13 +908,18 @@ function construireDetail(corps, p) {
|
||||
trajetBtn.textContent = "🚗 Calculer le trajet";
|
||||
const resu = document.createElement("div");
|
||||
resu.className = "trajet-resu";
|
||||
trajetBtn.addEventListener("click", async () => {
|
||||
// `silencieux` : affichage auto à l'ouverture (données déjà en cache) — pas de spinner.
|
||||
async function calculerTrajet(silencieux) {
|
||||
trajetBtn.disabled = true;
|
||||
resu.innerHTML = '<span class="spinner sombre"></span> Calcul en cours…';
|
||||
if (!silencieux) resu.innerHTML = '<span class="spinner sombre"></span> Calcul en cours…';
|
||||
try {
|
||||
const rep = await fetch(`/api/distance/${p.index}`);
|
||||
const d = await rep.json();
|
||||
if (!rep.ok) { resu.innerHTML = `<span style="color:#b03a2e">${echap(d.message || "Échec du calcul.")}</span>`; return; }
|
||||
if (!rep.ok) {
|
||||
// En mode silencieux, on n'affiche pas d'erreur : on laisse simplement le bouton.
|
||||
if (!silencieux) resu.innerHTML = `<span style="color:#b03a2e">${echap(d.message || "Échec du calcul.")}</span>`;
|
||||
return;
|
||||
}
|
||||
const detailAller = d.peage_aller > 0
|
||||
? ` <span class="sous">(carburant ${d.carburant_aller} € + péage ${d.peage_aller} €)</span>` : "";
|
||||
const detailAR = d.peage_aller_retour > 0
|
||||
@@ -925,13 +930,17 @@ function construireDetail(corps, p) {
|
||||
`Aller : <strong>${d.cout_aller} €</strong>${detailAller}<br>` +
|
||||
`Aller-retour : <strong>${d.cout_aller_retour} €</strong>${detailAR} ` +
|
||||
`<span class="sous">(${d.distance_aller_retour_km} km)</span>`;
|
||||
trajetBtn.textContent = "🔄 Recalculer le trajet";
|
||||
} catch {
|
||||
resu.innerHTML = '<span style="color:#b03a2e">Le serveur ne répond pas.</span>';
|
||||
if (!silencieux) resu.innerHTML = '<span style="color:#b03a2e">Le serveur ne répond pas.</span>';
|
||||
} finally {
|
||||
trajetBtn.disabled = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
trajetBtn.addEventListener("click", () => calculerTrajet(false));
|
||||
secTrajet.append(trajetBtn, resu);
|
||||
// Trajet déjà calculé (après le scrape) : on l'affiche tout de suite (recalcul local instantané).
|
||||
if ((p["Trajet distance km"] || "").trim()) calculerTrajet(true);
|
||||
|
||||
corps.append(secInfos, secContact, secTrajet);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user