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
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.