248 lines
5.5 KiB
Vue
Raw Normal View History

2025-04-28 15:37:57 +08:00
<template>
2025-07-10 10:13:42 +08:00
<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">
2025-04-28 15:37:57 +08:00
<label>时长费</label>
<label>{{data.scf}}</label>
2025-05-09 16:36:41 +08:00
</div> -->
2025-07-10 10:13:42 +08:00
<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>
2025-04-28 15:37:57 +08:00
</template>
<script setup>
2025-07-10 10:13:42 +08:00
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(() => {
console.log("2222");
getInfoOrderData();
});
const getInfoOrderData = () => {
console.log(props.orderId, "props.orderId");
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 = () => {
uni.showLoading({
title: "正在支付...",
});
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) {
uni.hideLoading();
//轮询看是否支付成功
checkPaymentStatus();
},
fail: function (res) {
uni.hideLoading();
console.log("fail", res);
},
complete: function (res) {
console.log("complete", res);
},
});
} else {
uni.hideLoading();
showModelMessage("支付失败");
}
});
};
function checkPaymentStatus() {
api
.callPaymentApi("wxPayment/queryOrderStatus/" + 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,
});
};
2025-04-28 15:37:57 +08:00
</script>
<style scoped>
2025-07-10 10:13:42 +08:00
.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>