181 lines
3.7 KiB
Vue
Raw Normal View History

2025-04-28 15:37:57 +08:00
<template>
<div style="padding: 15px;background-color: white;">
<div class="divPay">
<div class="divTitle">
<label>
<image class="divImg" :src='imgPath+"static/userui/home/money.png"' />
</label>
<label>待支付</label>
2025-05-09 16:36:41 +08:00
<label>{{data.totalAmount}}</label>
2025-04-28 15:37:57 +08:00
</div>
<div class="divFont">
2025-05-09 16:36:41 +08:00
{{data.createdAt}}
2025-04-28 15:37:57 +08:00
</div>
<div class="divTitle2">
费用明细
</div>
2025-05-09 16:36:41 +08:00
<div class="divRow divFont" v-for="(item,index) in data.details" :key="index">
<label>{{item.itemName}}</label>
<label>{{item.itemAmount}}</label>
2025-04-28 15:37:57 +08:00
</div>
2025-05-09 16:36:41 +08:00
<!-- <div class="divRow divFont">
2025-04-28 15:37:57 +08:00
<label>时长费</label>
<label>{{data.scf}}</label>
2025-05-09 16:36:41 +08:00
</div> -->
2025-04-28 15:37:57 +08:00
<div class="divHJ">
<label>合计</label>
2025-05-13 17:05:09 +08:00
<label>{{data.totalAmount}}</label>
2025-04-28 15:37:57 +08:00
</div>
</div>
<div>
2025-05-09 16:36:41 +08:00
<div class="divBtn" @click="handlePaymentClick">
2025-04-28 15:37:57 +08:00
<label>
<uni-icons custom-prefix="iconfont" type="icon-ebikeweixin" color="white" size="25" />
</label>
支付
</div>
<view class="cu-btn" @click="gotoRefundRequest">退款</view>
2025-04-28 15:37:57 +08:00
</div>
</div>
</template>
<script setup>
import {
2025-05-09 16:36:41 +08:00
ref,
onMounted
2025-04-28 15:37:57 +08:00
} from 'vue';
import config from '@/utils/config';
2025-05-09 16:36:41 +08:00
import * as api from '@/utils/api.js';
2025-04-28 15:37:57 +08:00
import {
showModelMessage
} from "@/utils/tools.js";
const imgPath = config.imgPath;
2025-05-09 16:36:41 +08:00
const props = defineProps(["orderId"]);
2025-04-28 15:37:57 +08:00
const data = ref({
hj: "2.5",
sj: "2025-04-03 14:15:13",
qbj: "2.0",
scf: "0.5"
})
2025-05-09 16:36:41 +08:00
onMounted(() => {
getInfoOrderData();
2025-04-28 15:37:57 +08:00
})
2025-05-09 16:36:41 +08:00
const getInfoOrderData = () => {
api.callOrdereApi("userOrders/orderDetailsInfo?orderId=" + props.orderId, {}, "get").then(res => {
if (res.code == 200) {
data.value = res.data;
}
})
}
const handlePaymentClick = () => {
console.log('支付按钮被点击');
const params = {
"orderId": props.orderId
}
api.callPaymentApi("wxPayment/prepay", params).then(res => {
if (res.code == 200) {
wx.requestPayment({
"timeStamp": res.data.timeStamp,
"nonceStr": res.data.nonceStr,
"package": res.data.package,
"signType": res.data.signType,
"paySign": res.data.paySign,
"success": function(res) {
//轮询看是否支付成功
checkPaymentStatus();
},
"fail": function(res) {
showModelMessage("支付失败")
},
"complete": function(res) {
showModelMessage("支付失败")
}
})
}else{
showModelMessage("支付失败")
2025-05-09 16:36:41 +08:00
}
})
}
function checkPaymentStatus() {
api.callPaymentApi("wxPayment/queryOrderByOutTradeNo?outTradeNo=" + props.orderId, {}, "get")
.then(res => {
if (res.code == 200) {
gotoHome();
} else {
console.log("支付未成功,继续轮询");
checkPaymentStatus(); // 继续轮询
}
})
.catch(error => {
console.log("请求失败,继续轮询", error);
checkPaymentStatus(); // 请求失败也继续轮询
});
}
const gotoHome = () => {
uni.navigateTo({
url: "/pages/user/home/home"
})
}
const gotoRefundRequest=()=>{
uni.navigateTo({
url: "/pages/user/views/PaymentFeedback?orderId="+props.orderId
})
}
2025-04-28 15:37:57 +08:00
</script>
<style scoped>
.divPay {
width: 260px;
}
.divTitle {
line-height: 30px;
font-size: 14px;
color: #000;
font-weight: bold;
}
.divTitle2 {
font-size: 16px;
line-height: 35px;
}
.divImg {
width: 15px;
height: 12px;
margin-right: 5px;
}
.divFont {
color: #000;
font-size: 12px;
opacity: 0.7;
}
.divRow {
line-height: 20px;
display: flex;
justify-content: space-between;
}
.divHJ {
text-align: right;
font-size: 14px;
color: red;
font-weight: bold;
}
.divBtn {
text-align: center;
background: #61D145;
color: white;
line-height: 40px;
border-radius: 5px;
margin-top: 20px;
}
</style>