[text] ezf

Viewer

  1. <script setup>
  2.  
  3. import { ref, computed } from "vue";
  4.  
  5. import { useRoute, useRouter, RouterLink } from "vue-router";
  6.  
  7. import { useAuthStore } from "../store/auth";
  8.  
  9.  
  10.  
  11. const { isAuthenticated, isAdmin, userData, token } = useAuthStore();
  12.  
  13.  
  14.  
  15. const route = useRoute();
  16.  
  17. const router = useRouter();
  18.  
  19.  
  20. const productId = ref(route.params.productId);
  21.  
  22.  
  23. /**
  24.  
  25.  * @param {number|string|Date|VarDate} date
  26.  
  27.  */
  28.  
  29. function formatDate(date) {
  30.  
  31.   const options = {year: "numeric", month: "long", day: "numeric"};
  32.  
  33.   return new Date(date).toLocaleDateString("fr-FR", options);
  34.  
  35. }
  36.  
  37. </script>
  38.  
  39.  
  40. <template>
  41.  
  42.   <div class="row">
  43.  
  44.     <div class="text-center mt-4" data-test-loading>
  45.  
  46.       <div class="spinner-border" role="status">
  47.  
  48.         <span class="visually-hidden">Chargement...</span>
  49.  
  50.       </div>
  51.  
  52.     </div>
  53.  
  54.  
  55.     <div class="alert alert-danger mt-4" role="alert" data-test-error>
  56.  
  57.       Une erreur est survenue lors du chargement des
  58.       <produits class=""></produits>
  59.  
  60.     </div>
  61.  
  62.     <div class="row" data-test-product>
  63.  
  64.       <!-- Colonne de gauche : image et compte à rebours -->
  65.  
  66.       <div class="col-lg-4">
  67.  
  68.         <img
  69.  
  70.             src="https://picsum.photos/id/250/512/512"
  71.  
  72.             alt=""
  73.  
  74.             class="img-fluid rounded mb-3"
  75.  
  76.             data-test-product-picture
  77.  
  78.         />
  79.  
  80.         <div class="card">
  81.  
  82.           <div class="card-header">
  83.  
  84.             <h5 class="card-title">Compte à rebours</h5>
  85.  
  86.           </div>
  87.  
  88.           <div class="card-body">
  89.  
  90.             <h6 class="card-subtitle mb-2 text-muted" data-test-countdown>
  91.  
  92.               Temps restant : {{ countdown }}
  93.  
  94.             </h6>
  95.  
  96.           </div>
  97.  
  98.         </div>
  99.  
  100.       </div>
  101.  
  102.  
  103.       <!-- Colonne de droite : informations du produit et formulaire d'enchère -->
  104.  
  105.       <div class="col-lg-8">
  106.  
  107.         <div class="row">
  108.  
  109.           <div class="col-lg-6">
  110.  
  111.             <h1 class="mb-3" data-test-product-name>
  112.  
  113.               Appareil photo argentique
  114.  
  115.             </h1>
  116.  
  117.           </div>
  118.  
  119.           <div class="col-lg-6 text-end">
  120.  
  121.             <RouterLink
  122.  
  123.                 :to="{ name: 'ProductEdition', params: { productId: 'TODO' } }"
  124.  
  125.                 class="btn btn-primary"
  126.  
  127.                 data-test-edit-product
  128.  
  129.             >
  130.  
  131.               Editer
  132.  
  133.             </RouterLink>
  134.  
  135.              
  136.  
  137.             <button class="btn btn-danger" data-test-delete-product>
  138.  
  139.               Supprimer
  140.  
  141.             </button>
  142.  
  143.           </div>
  144.  
  145.         </div>
  146.  
  147.  
  148.         <h2 class="mb-3">Description</h2>
  149.  
  150.         <p data-test-product-description>
  151.  
  152.           Appareil photo argentique classique, parfait pour les amateurs de
  153.  
  154.           photographie
  155.  
  156.         </p>
  157.  
  158.  
  159.         <h2 class="mb-3">Informations sur l'enchère</h2>
  160.  
  161.         <ul>
  162.  
  163.           <li data-test-product-price>Prix de départ : 17 €</li>
  164.  
  165.           <li data-test-product-end-date>Date de fin : 20 juin 2026</li>
  166.  
  167.           <li>
  168.  
  169.             Vendeur :
  170.  
  171.             <router-link
  172.  
  173.                 :to="{ name: 'User', params: { userId: 'TODO' } }"
  174.  
  175.                 data-test-product-seller
  176.  
  177.             >
  178.  
  179.               alice
  180.  
  181.             </router-link>
  182.  
  183.           </li>
  184.  
  185.         </ul>
  186.  
  187.  
  188.         <h2 class="mb-3">Offres sur le produit</h2>
  189.  
  190.         <table class="table table-striped" data-test-bids>
  191.  
  192.           <thead>
  193.  
  194.           <tr>
  195.  
  196.             <th scope="col">Enchérisseur</th>
  197.  
  198.             <th scope="col">Offre</th>
  199.  
  200.             <th scope="col">Date</th>
  201.  
  202.             <th scope="col"></th>
  203.  
  204.           </tr>
  205.  
  206.           </thead>
  207.  
  208.           <tbody>
  209.  
  210.           <tr v-for="i in 10" :key="i" data-test-bid>
  211.  
  212.             <td>
  213.  
  214.               <router-link
  215.  
  216.                   :to="{ name: 'User', params: { userId: 'TODO' } }"
  217.  
  218.                   data-test-bid-bidder
  219.  
  220.               >
  221.  
  222.                 charly
  223.  
  224.               </router-link>
  225.  
  226.             </td>
  227.  
  228.             <td data-test-bid-price>43 €</td>
  229.  
  230.             <td data-test-bid-date>22 mars 2026</td>
  231.  
  232.             <td>
  233.  
  234.               <button class="btn btn-danger btn-sm" data-test-delete-bid>
  235.  
  236.                 Supprimer
  237.  
  238.               </button>
  239.  
  240.             </td>
  241.  
  242.           </tr>
  243.  
  244.           </tbody>
  245.  
  246.         </table>
  247.  
  248.         <p data-test-no-bids>Aucune offre pour le moment</p>
  249.  
  250.  
  251.         <form data-test-bid-form>
  252.  
  253.           <div class="form-group">
  254.  
  255.             <label for="bidAmount">Votre offre :</label>
  256.  
  257.             <input
  258.  
  259.                 type="number"
  260.  
  261.                 class="form-control"
  262.  
  263.                 id="bidAmount"
  264.  
  265.                 data-test-bid-form-price
  266.  
  267.             />
  268.  
  269.             <small class="form-text text-muted">
  270.  
  271.               Le montant doit être supérieur à 10 €.
  272.  
  273.             </small>
  274.  
  275.           </div>
  276.  
  277.           <button
  278.  
  279.               type="submit"
  280.  
  281.               class="btn btn-primary"
  282.  
  283.               disabled
  284.  
  285.               data-test-submit-bid
  286.  
  287.           >
  288.  
  289.             Enchérir
  290.  
  291.           </button>
  292.  
  293.         </form>
  294.  
  295.       </div>
  296.  
  297.     </div>
  298.  
  299.   </div>
  300.  
  301. </template>
  302.  

Editor

You can edit this paste and save as new:


File Description
  • ezf
  • Paste Code
  • 29 Mar-2024
  • 5.08 Kb
You can Share it: