Cart.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <template>
  2. <div class="cart">
  3. <h2>Your Cart</h2>
  4. <p v-show="!products.length"><i>Please add some products to cart.</i></p>
  5. <ul>
  6. <li v-for="p in products">
  7. {{ p.title }} - {{ p.price | currency }} x {{ p.quantity }}
  8. </li>
  9. </ul>
  10. <p>Total: {{ total | currency }}</p>
  11. <p><button :disabled="!products.length" @click="checkout(products)">Checkout</button></p>
  12. <p v-show="checkoutStatus">Checkout {{ checkoutStatus }}.</p>
  13. </div>
  14. </template>
  15. <script>
  16. import vuex from '../vuex'
  17. const { checkout } = vuex.actions
  18. export default {
  19. computed: {
  20. products () {
  21. return vuex.state.cart.added.map(({ id, quantity }) => {
  22. const product = vuex.state.products.find(p => p.id === id)
  23. return {
  24. title: product.title,
  25. price: product.price,
  26. quantity
  27. }
  28. })
  29. },
  30. checkoutStatus () {
  31. return vuex.state.cart.lastCheckout
  32. },
  33. total () {
  34. return this.products.reduce((total, p) => {
  35. return total + p.price * p.quantity
  36. }, 0)
  37. }
  38. },
  39. methods: {
  40. checkout
  41. }
  42. }
  43. </script>