172 lines
4.6 KiB
Vue
172 lines
4.6 KiB
Vue
<template>
|
||
|
||
<van-dialog v-model:show="show" title="标题" show-cancel-button>
|
||
<template #title>
|
||
<div class="my-header">
|
||
<div>充值网络USDT-TRC20</div>
|
||
<div style="font-size: 12px;color: #999;">请选择TRC20网络充值,否则可能造成资产丢失</div>
|
||
</div>
|
||
</template>
|
||
|
||
<div class="pay-code">
|
||
<div style="margin:10px 0;">支付金额:<span type="danger" style="font-size: 16px;font-weight: 600;"> ${{
|
||
current_order.pay_usdt_amount }}</span>
|
||
</div>
|
||
<div>
|
||
<img v-if="showImg" :src="data.payCode" class="pay-code-img"></img>
|
||
<span v-if="!showImg" type="warning">订单已过期</span>
|
||
</div>
|
||
|
||
<div v-if="showImg" style="margin: 10px 0;">
|
||
<span>订单有效期:</span><span type="primary" style="font-size: 16px;font-weight: 600;"> {{ get_time
|
||
}}</span>
|
||
<div>
|
||
<span type="danger">超过有效期订单自动取消,请尽快完成支付</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div v-if="showImg" @click="copy(data.payHash)">
|
||
<div style="color: #999;font-size: 12px;">钱包地址(点击复制): </div>
|
||
<span style="margin: 0 10px; color: aqua;">{{ data.payHash }} </span>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
<template #footer>
|
||
<div class="dialog-footer">
|
||
<van-button @click="closeFun" size="small" style="margin-right: 8px;">关闭</van-button>
|
||
<van-button type="primary" size="small" @click="confirmPay" v-if="showImg">
|
||
支付完成
|
||
</van-button>
|
||
</div>
|
||
</template>
|
||
</van-dialog>
|
||
</template>
|
||
<script setup>
|
||
import { reactive, ref, watch, } from 'vue'
|
||
import payCodeImg from '@/assets/pay-code.jpeg';
|
||
import useClipboard from 'vue-clipboard3'
|
||
|
||
import { getUsdtInfo } from '@/axios/request';
|
||
import { showSuccessToast, showFailToast } from 'vant';
|
||
const props = defineProps({
|
||
showDialog: {
|
||
type: Boolean,
|
||
default: false,
|
||
},
|
||
current_order: {
|
||
type: Object,
|
||
default: {},
|
||
},
|
||
});
|
||
console.log('props', props)
|
||
const show = ref(false);
|
||
const emit = defineEmits(["update:showDialog", "handleConfrimPay", 'closePay']);
|
||
const data = reactive({
|
||
payCode: payCodeImg,
|
||
payHash: '',
|
||
});;
|
||
const copy = async (msg) => {
|
||
const { toClipboard } = useClipboard()
|
||
try {
|
||
// 复制
|
||
console.log('复制', msg)
|
||
await toClipboard(msg)
|
||
showSuccessToast('复制成功');
|
||
// 复制成功
|
||
} catch (e) {
|
||
console.log(e)
|
||
// 复制失败
|
||
}
|
||
}
|
||
watch(() => props.showDialog, (val) => {
|
||
console.log('showDialog', props.showDialog)
|
||
show.value = props.showDialog;
|
||
if (props.showDialog) {
|
||
|
||
setTime()
|
||
getInfo()
|
||
}
|
||
});
|
||
|
||
const get_time = ref('')
|
||
const showImg = ref(false)
|
||
const updateCountdown = (creacteTime, targetTime) => {
|
||
const target = new Date(targetTime).getTime();
|
||
const now = new Date().getTime();
|
||
const diff = target - now;
|
||
if (diff <= 0) {
|
||
clearInterval(timer)
|
||
showImg.value = false
|
||
get_time.value = ''
|
||
}
|
||
|
||
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
|
||
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
|
||
|
||
get_time.value = ` ${minutes}分钟 ${seconds}秒`;
|
||
}
|
||
|
||
|
||
// 每秒更新一次
|
||
var timer = null
|
||
const setTime = () => {
|
||
clearInterval(timer)
|
||
let cureateTime = props.current_order.order_created_at
|
||
let targetTime = props.current_order.expired_at
|
||
if (new Date(cureateTime).getTime() < new Date(targetTime).getTime()) {
|
||
showImg.value = true
|
||
timer = setInterval(() => updateCountdown(cureateTime, targetTime), 1000);
|
||
} else {
|
||
showImg.value = false
|
||
clearInterval(timer)
|
||
}
|
||
}
|
||
const closeFun = () => {
|
||
data.hash = ''
|
||
emit("update:showDialog", false);
|
||
emit("closePay");
|
||
};
|
||
const confirmPay = () => {
|
||
|
||
emit("handleConfrimPay");
|
||
emit("update:showDialog", false);
|
||
|
||
};
|
||
|
||
const getInfo = () => {
|
||
getUsdtInfo().then((res) => {
|
||
data.payHash = res.USDT_ACCOUNT;
|
||
});
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
.pay-code {
|
||
text-align: center;
|
||
|
||
.pay-code-img {
|
||
width: 200px;
|
||
height: 200px;
|
||
margin: 20px 0;
|
||
}
|
||
|
||
.pay-hash {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
}
|
||
}
|
||
|
||
span {
|
||
color: #999;
|
||
font-size: 12px;
|
||
}
|
||
|
||
.dialog-footer {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
margin: 12px;
|
||
}
|
||
</style> |