CartCheckout
project-nentang/src/pages/CartCheckout.vue
<template> <section> <div class="container"> <div class="row"> <div class="col"> <h1 class="text-center">Giỏ hàng</h1> </div> </div> <div class="row"> <div class="col"> <table class="table table-borderd table-striped"> <thead> <th>STT</th> <th>Hình đại diện</th> <th>Tên sản phẩm</th> <th>Giá</th> <th>Số lượng</th> <th>Thành tiền</th> <th>#</th> </thead> <tbody> <tr v-for="(product, index) in getProductsInCart" v-bind:key="product.id" > <td>{{ index + 1 }}</td> <td> <img :src="product.image" alt="" class="product-item-in-cart-img" /> </td> <td>{{ product.name }}</td> <td class="text-right">{{ product.price }}</td> <td class="text-right">{{ product.totalBuyed }}</td> <td class="text-right"> {{ product.price * product.totalBuyed }} </td> <td> <button class="btn btn-danger" @click="remove(product.id)"> <font-awesome-icon :icon="['fas', 'trash']" /> Xóa </button> </td> </tr> </tbody> <tfoot> <tr> <td colspan="5" class="text-right">Tổng tiền:</td> <td class="text-right font-weight-bold"> {{ getTotalAmount }} </td> </tr> </tfoot> </table> </div> </div> </div> </section> </template> <script> // Import helper mapGetters của Vuex để có thể sử dụng getters `getAllProducts` đã khai báo bên KHO chứa (store) // Import helper mapActions của Vuex để có thể sử dụng actions `removeProduct` đã khai báo bên KHO chứa (store) import { mapGetters, mapActions } from 'vuex' export default { computed: { ...mapGetters(['getProductsInCart']), // Hàm dùng để tính Tổng tiền getTotalAmount () { // Duyệt qua tất cả sản phẩm có trong giỏ hàng // Thành tiền += Giá * Số lượng đã mua let totalAmount = 0 this.getProductsInCart.forEach(product => { totalAmount += product.price * product.totalBuyed }) return totalAmount } }, methods: { ...mapActions(['removeProduct']), // Hàm xóa Sản phẩm khỏi Giỏ hàng remove (id) { this.removeProduct(id) } } } </script> <style scoped> .product-item-in-cart-img { width: 150px; height: 150px; object-fit: contain; } </style>
/kiem-tra-gio-hang
project-netashop/src/router/index.js
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) /* Chúng ta sử dụng thuộc tính `meta` trong routes để khai báo: - Ứng với path / -> sẽ sử dụng layout `default` - Ứng với path /gioi-thieu -> sẽ sử dụng layout `no-sidebar` - Ứng với path /lien-he -> sẽ sử dụng layout `no-sidebar` - Ứng với path /kiem-tra-gio-hang -> sẽ sử dụng layout `no-sidebar` - Ứng với path không tìm thấy 404 -> sẽ sử dụng layout `no-sidebar` */ const routes = [ { path: '/', name: 'home', meta: { layout: 'default' }, // component: require('@/pages/Home.vue').default component: () => import('@/pages/Home.vue') }, { path: '/gioi-thieu', name: 'about', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/About.vue') }, { path: '/lien-he', name: 'contact', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/Contact.vue') }, { path: '/kiem-tra-gio-hang', name: 'cartCheckout', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/CartCheckout.vue') }, { path: '*', name: '404', meta: { layout: 'no-sidebar' }, component: () => import('@/pages/404.vue') } ] // Để đường dẫn Path đẹp hơn và thân thiện với người dùng và SEO // Chúng ta sử dụng History mode thay vì HashTag mode (dấu #) const router = new Router({ mode: 'history', routes: routes }) export default router
Cùng nhau học tập, khám phá các kiến thức nền tảng về Lập trình web, mobile, database nhé.
Nền tảng kiến thức - Hành trang tới tương lai hân hạnh phục vụ Quý khách!
Khám phá, trải nghiệm ngay
Vui lòng đăng nhập để gởi bình luận!
Đăng nhậpChưa có bình luận nào!