You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
4.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<!-- Main Start -->
<main class="main-wrap order-success-page mb-xxl">
<!-- Banner Section Start -->
<section class="banner-section">
<div class="banner-wrap">
<img src="@/assets/svg/order-success.svg" alt="order-success" />
</div>
<div class="content-wrap">
<h1 class="font-lg title-color">感謝您的購買</h1>
<p class="font-sm content-color">您的訂單已成功下達您的訂單編號為#{{ order_sn }}</p>
</div>
<div ref="formContainer" :style="{ display: showForm }"></div>
<div v-show="showTappay">
<form class="ui form">
<div class="field">
<label>信用卡</label>
<div id="tappay-iframe"></div>
</div>
</form>
<br />
<div class="ui button" id="submit" @click="onTapPay"></div>
</div>
</section>
<!-- Banner Section End -->
</main>
<!-- Main End -->
</template>
<script setup>
import { ref, onMounted } from "vue";
import { useRoute } from "vue-router";
import { payment } from "@/services/order";
const statusTable = {
0: "欄位已填好,並且沒有問題",
1: "欄位還沒有填寫",
2: "欄位有錯誤,此時在 CardView 裡面會用顯示 errorColor",
3: "使用者正在輸入中",
};
const defaultCardViewStyle = {
color: "rgb(0,0,0)",
fontSize: "15px",
lineHeight: "24px",
fontWeight: "300",
errorColor: "red",
placeholderColor: "",
};
const config = {
isUsedCcv: false,
// 此設定會顯示卡號輸入正確後,會顯示前六後四碼信用卡卡號
isMaskCreditCardNumber: true,
maskCreditCardNumberRange: {
beginIndex: 6,
endIndex: 11,
},
};
const route = useRoute();
const order_sn = route.query.order_sn;
const pay_code = route.query.pay_code;
const returnData = ref(null);
const formContainer = ref();
const showForm = ref("none");
const showTappay = ref(false);
onMounted(async () => {
if (order_sn && pay_code) {
switch (pay_code) {
case "tpcredit":
showTappay.value = true;
TPDirect.setupSDK(
128084,
"app_Mmp6jV9pguSBO8eRwHOOf0hxKljbeQeZEKsl9Ow8hEbOMK5FIkLb7bpvenaS",
"sandbox"
);
TPDirect.card.setup("#tappay-iframe", defaultCardViewStyle, config);
break;
case "linepay":
default:
if(pay_code === "cod") {
return
}
let res = await payment({ order_sn, pay_code });
if (res.code === 200) {
//將回傳的from寫入formContainer中並且自動submit
if (res.data.method === "post") {
formContainer.value.innerHTML = res.data.data;
if (showForm.value === "none") {
formContainer.value.querySelector("form").submit();
}
} else if (res.data.method === "redirect") {
window.location.href = res.data.data.paymentUrl.web;
}
}
break;
}
}
});
const onTapPay = () => {
TPDirect.card.getPrime(async (result) => {
if (result.status !== 0) {
alert("get prime error " + result.msg);
return;
}
console.log("get prime 成功prime: " + result.card.prime);
// returnData.value = result.card.prime
let res = await payment({ pay_id: 19, order_sn, prime: result.card.prime });
console.log("res", res);
});
};
TPDirect.card.onUpdate(function (update) {
console.log("update", update);
});
</script>
<style lang="less" scoped>
#tappay-iframe {
font-family: Lato, "Helvetica Neue", Arial, Helvetica, sans-serif;
margin: 0;
outline: 0;
line-height: 1.21428571em;
padding: 0.578571em 1em;
font-size: 1em;
background: #fff;
border: 1px solid rgba(34, 36, 38, 0.15);
color: rgba(0, 0, 0, 0.87);
border-radius: 0.28571429rem;
box-shadow: 0 0 0 0 transparent inset;
transition: color 0.1s ease, border-color 0.1s ease;
width: 100%;
}
</style>