Adloun

Vue : construire une application web (école d'ingénieur) · Chapitre 12 · Application directe du cours

Le stock dans le panier

Projet : la Librairie en application Vue · niveau 2

Énoncé

Le serveur refuse une commande qui dépasse le stock ; mieux vaut prévenir l'utilisateur avant. Modifier le contenu du panier pour que le champ de quantité d'un livre soit limité par son stock (tiré du store du catalogue), qu'une quantité trop grande soit ramenée au stock, et qu'un message l'explique. Attention : sur /panier ouvert directement, le catalogue n'a peut-être pas encore été chargé.

Corrigé


<script setup>
import { ref } from "vue";
import { useCatalogueStore } from "@/stores/catalogue.js";
import { usePanierStore } from "@/stores/panier.js";
import { prixEnEuros } from "@/utils/format.js";

const panier = usePanierStore();
const catalogue = useCatalogueStore();
catalogue.charger(); // sur /panier ouvert directement, le catalogue n'est pas encore là

// Le stock vient du catalogue ; tant qu'il n'est pas chargé, la limite reste 20.
const stockDe = (isbn) => catalogue.livres.find((l) => l.isbn === isbn)?.stock ?? 20;
const avertissement = ref("");

function changer(ligne, evenement) {
  const voulu = Number(evenement.target.value);
  const stock = stockDe(ligne.isbn);
  panier.changerQuantite(ligne.isbn, Math.min(voulu, stock));
  avertissement.value = voulu > stock
    ? `Il ne reste que ${stock} exemplaire(s) de « ${ligne.titre} ».`
    : "";
  evenement.target.value = Math.min(voulu, stock); // le champ affiche la quantité retenue
}
</script>

Dans le gabarit, le champ porte :max="stockDe(ligne.isbn)" et son événement change appelle changer avec la ligne et l'événement ; le message s'affiche dans un paragraphe aria-live="polite". Le test charge un catalogue où le livre a 3 exemplaires, puis saisit 5 :


max du champ : 3
quantité retenue : 3 | champ : 3
message : Il ne reste que 3 exemplaire(s) de « Introduction à l’algorithmique ».

L'appel catalogue.charger() ne coûte rien si le catalogue est déjà là (le store ne recharge pas). Tant qu'il n'est pas arrivé, la limite reste celle du store, 20 : le serveur garde de toute façon le dernier mot.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →