219 lines
4.7 KiB
Vue
219 lines
4.7 KiB
Vue
<template>
|
||
<div style="padding: 15px;background-color: white;">
|
||
<div class="divPay">
|
||
<view class="flex justify-between">
|
||
<view class="width-65">
|
||
<div class="divTitle">
|
||
<label>
|
||
<image class="divImg" :src='imgPath+"static/userui/home/money.png"' />
|
||
</label>
|
||
<label>{{status==3 ? '已支付:' :'待支付:'}}</label>
|
||
<label>{{data.totalAmount}}元</label>
|
||
</div>
|
||
<div class="divFont">
|
||
{{data.createdAt}}
|
||
</div>
|
||
</view>
|
||
<view class="width-35 flex justify-end"> <!--已支付 v-if="status==3"-->
|
||
<view v-if="status==3" @click="handleFeeAppealClick">
|
||
<view class="text-center">
|
||
<uni-icons type="help" size="20"></uni-icons>
|
||
</view>
|
||
<view class="text-center wzfysh">
|
||
费用申述
|
||
</view>
|
||
</view>
|
||
<view @click="handleFaultReportClick" style="margin-left: 10px;">
|
||
<view class="text-center">
|
||
<uni-icons custom-prefix="iconfont" color="rgb(102,102,102)" type="icon-ebikeweixiuoff" size="20"></uni-icons>
|
||
</view>
|
||
<view class="text-center wzfysh">
|
||
故障上报
|
||
</view>
|
||
</view>
|
||
|
||
</view>
|
||
|
||
</view>
|
||
|
||
<div class="divTitle2">
|
||
费用明细
|
||
</div>
|
||
<div class="divRow divFont" v-for="(item,index) in data.details" :key="index">
|
||
<label>{{item.itemName}}</label>
|
||
<label>{{item.itemAmount}}元</label>
|
||
</div>
|
||
<!-- <div class="divRow divFont">
|
||
<label>时长费</label>
|
||
<label>{{data.scf}}元</label>
|
||
</div> -->
|
||
<div class="divHJ">
|
||
<label>合计:</label>
|
||
<label>¥{{data.totalAmount}}元</label>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div v-if="status==2" class="divBtn" @click="handlePaymentClick">
|
||
<label>
|
||
<uni-icons custom-prefix="iconfont" type="icon-ebikeweixin" color="white" size="25" />
|
||
</label>
|
||
支付
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</template>
|
||
|
||
<script setup>
|
||
import {
|
||
ref,
|
||
onMounted
|
||
} from 'vue';
|
||
import config from '@/utils/config';
|
||
import * as api from '@/utils/api.js';
|
||
import {
|
||
showModelMessage
|
||
} from "@/utils/tools.js";
|
||
const imgPath = config.imgPath;
|
||
const props = defineProps(["orderId"]);
|
||
const status = ref("")
|
||
const data = ref({
|
||
hj: "2.5",
|
||
sj: "2025-04-03 14:15:13",
|
||
qbj: "2.0",
|
||
scf: "0.5"
|
||
})
|
||
|
||
onMounted(() => {
|
||
getInfoOrderData();
|
||
})
|
||
const getInfoOrderData = () => {
|
||
api.callOrdereApi("userOrders/orderDetailsInfo?orderId=" + props.orderId, {}, "get").then(res => {
|
||
if (res.code == 200) {
|
||
data.value = res.data;
|
||
status.value = res.data.status;
|
||
}
|
||
|
||
})
|
||
}
|
||
const handlePaymentClick = () => {
|
||
api.callPaymentApi("wxPayment/prepay?orderId=" + props.orderId, {}, "get").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) {
|
||
console.log("fail", res)
|
||
},
|
||
"complete": function(res) {
|
||
console.log("complete", res)
|
||
}
|
||
})
|
||
} else {
|
||
showModelMessage("支付失败")
|
||
}
|
||
})
|
||
}
|
||
|
||
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 handleFeeAppealClick=()=>{//费用 申述
|
||
uni.navigateTo({
|
||
url: "/pages/user/views/PaymentFeedback?orderId="+props.orderId
|
||
})
|
||
}
|
||
const handleFaultReportClick=()=>{// 故障上报
|
||
uni.navigateTo({
|
||
url: "/pages/user/login/TroubleReportUser?bikeCode="+data.value.bikeCode+"&orderCode="+props.orderId
|
||
})
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.divPay {
|
||
width: auto;
|
||
}
|
||
|
||
.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;
|
||
}
|
||
|
||
.width-65 {
|
||
width: 65%;
|
||
}
|
||
|
||
.width-35 {
|
||
width: 35%;
|
||
}
|
||
.wzfysh{
|
||
font-size: 10px;
|
||
}
|
||
</style> |