iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Modern Web

30天肝出購物網站系列 第 18

Day18:18 - 結帳服務(2) - 前端 - 結帳、訂單新增、結帳成功畫面

  • 分享至 

  • xImage
  •  

Hei,我是Charlie!

在Day17當中,我們完成了後端的結帳功能,在今天我們將完成前端的結帳功能跟結帳成功頁面。

================================◉‿◉=================================

首先建立createOrder.vue,然後在購物車的結帳按鈕中導向他:

<b-button variant="info" @click="createOrder">結帳</b-button>

createOrder(){
  window.location.href = "/#/createorder"
  window.location.reload()
},

然後在createOrder.vue當中建立template,template當中會包含可以數量增減的部分:

<div id="carts" style="margin-top: 15px;">
	<b-row v-for="item in carts" :key="item.id">
		<b-col cols="2">
			<img :src="'http://localhost:8000' + item.product.img" style="width:150px;height: 150px;" alt="">
		</b-col>
		<b-col cols="3">
			<h4>{{ item.product.name }}</h4>
		</b-col>
		<b-col cols="3">
			<b-form-spinbutton id="product_id_spin" v-model="item.amount" min="1" max="100" @change="fixAmount(item.id)"></b-form-spinbutton>
		</b-col>
		<b-col cols="2">
			<h4>${{ item.product.price * item.amount }}</h4>
		</b-col>
		<b-col cols="2">
			<b-button variant="danger" @click="deleteCart(item.id)">刪除</b-button>
		</b-col>
	</b-row>
	<hr>
	<b-row>
		<b-col cols="8"></b-col>
		<b-col cols="2">
			<h5>共計 {{ itemCount }} 件</h5>
		</b-col>
		<b-col cols="2">
			<h5>總計: {{ total }}</h5>
		</b-col>
	</b-row>
	<hr>
	<b-row>
		<b-col cols="10"></b-col>
		<b-col cols="2"><b-button variant="info">確認結帳</b-button></b-col>
	</b-row>
</div>

其中total跟itemCount是使用computed的方式,讓變數可以監聽item的變化:

computed: {
  total: function(){
    var sum = 0
    this.carts.forEach((item) => {
      sum += item.amount * item.product.price
    })
    return sum
  },
  itemCount: function(){
    var sum = 0
    this.carts.forEach((item) => {
      sum += item.amount
    })
    return sum
  }
},

其他的話在購物車的程式碼都有,可參考 Day13

所以成果會像這樣:

成果

再來是結帳的部分,先在apis裡面新增order.js,新增打結帳後端的程式碼:

import axios from 'axios'
import {host,port} from '@/apis/constant.js'

export function createOrderData(username,token){
  return axios.post(`http://${host()}:${port()}/userorder`,{
    "username":username
  },{
    headers:{
      "AUTHORIZATION":token
    }
  })
}

接著在createOrder.vue當中的結帳button綁定:

<b-col cols="2"><b-button variant="info" @click="checkout">確認結帳</b-button></b-col>

接著新增checkout方法:

checkout(){
var username = window.localStorage.getItem("username")
var token = window.localStorage.getItem("token")
createOrderData(username,token).then((response) => {
  if(response.data.code == STATUS_OK){
    this.$fire({type:"success",text:"結帳成功"}).then(() => {
      window.location.href = "/#/index"
      window.location.reload()
    })
  }else{
    this.$fire({type:"error",text:response.data.data})
  }
})
},

測試:
https://ithelp.ithome.com.tw/upload/images/20211002/20141666Ba0eLT8T3V.png

https://ithelp.ithome.com.tw/upload/images/20211002/201416667weXjp6Sep.png

因為目前還沒有金流的部分,所以按下去就會結帳成功,而之後我們將串接paypal付款,就可以有金流付款的動作。

================================◉‿◉=================================

Day18結束了!今天我們完成了結帳前端的部分,而明天我們將先介紹PayPal的部分,See ya next day!


上一篇
Day17:17 - 結帳服務(1) - 後端 - 結帳、訂單新增API
下一篇
Day19:19 - 結帳服務(3) - PayPal Python Checkout SDK(1)
系列文
30天肝出購物網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言