zhwl-miniapp/pages/hotelOrder/refundProgress.vue
2025-06-26 12:38:35 +08:00

145 lines
5.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="waper">
<u-navbar :autoBack="true" :placeholder="true" bgColor="#FFFFFF">
<view slot='center' style="font-size: 36rpx; font-weight: bold;">
退款进度
</view>
</u-navbar>
<view class="sum">
<view class="row refund">
<view class="label">退款金额</view>
<view class="price"><text></text>{{ detail.refund }}</view>
</view>
<view class="row default" v-if="detail.penaltyFee">
<view class="label">违约金</view>
<view class="price">¥{{ detail.penaltyFee }}</view>
</view>
</view>
<view class="progress">
<view class="title">退款进度</view>
<view class="list">
<!-- 退款状态 待审1 已驳回100 退款中2 已退款200 不可退3 退款失败4 -->
<view class="progress_item">
<view :class="['left', detail.refundStatus == '1' ? 'borlef' : '']">
<view class="drop1" v-if="detail.refundStatus == '1'">
<view class="drop2"></view>
<u-icon name="checkmark" color="#fff" size="10rpx" />
</view>
<view class="drop" v-else></view>
</view>
<view class="right">
<view :class="['label', detail.refundStatus == '1' ? 'active' : '']">申请退款</view>
<view class="time">{{ detail.cancelTime }}</view>
</view>
</view>
<view class="progress_item">
<view :class="['left', (detail.refundStatus == '1' || detail.refundStatus == '100' || detail.refundStatus == '2') ? 'borlef' : '']">
<view class="drop2" v-if="detail.refundStatus == '1'"></view>
<view class="drop" v-if="detail.refundStatus == '200' || detail.refundStatus == '4'"></view>
<view class="drop1" v-if="detail.refundStatus == '100' || detail.refundStatus == '2'">
<view class="drop2"></view>
<u-icon name="checkmark" color="#fff" size="10rpx" />
</view>
</view>
<view class="right">
<view :class="['label', (detail.refundStatus == '100' || detail.refundStatus == '2') ? 'active' : '']">
<text v-if="detail.refundStatus == '100'">审核驳回 {{ detail.refundInfo.rejectionDesc }}</text>
<text v-else-if="detail.refundStatus == '2' || detail.refundStatus == '200' || detail.refundStatus == '4'">审核通过</text>
<text v-else>待审核</text>
</view>
<view class="time">{{ detail.refundInfo.auditTime || '--' }}</view>
</view>
</view>
<view class="progress_item" v-if="detail.refundStatus !== '100'">
<view class="left">
<view class="drop1" v-if="detail.refundStatus == '200' || detail.refundStatus == '4'">
<view class="drop2"></view>
<u-icon name="checkmark" color="#fff" size="10rpx" />
</view>
<view class="drop2" v-else></view>
</view>
<view class="right">
<view :class="['label', (detail.refundStatus == '200' || detail.refundStatus == '4') ? 'active' : '']">
<text v-if="detail.refundStatus == '200'">退款成功,资金原路返回</text>
<text v-else-if="detail.refundStatus == '4'">退款失败</text>
<text v-else>待退款</text>
</view>
<view class="time">{{ detail.refundTime || '--' }}</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data () {
return {
id: '',
detail: null,
}
},
onLoad (options) {
this.id = options.id;
this.getDetail();
},
methods: {
async getDetail() {
let res=await this.$http.hotelOrderDetail(this.id);
this.detail = res.data;
}
}
}
</script>
<style lang="scss">
.waper { min-height: 100vh; background-color: #F6F6F6; }
.sum {
margin: 24rpx 24rpx 0; background: #FFFFFF; border-radius: 10rpx; padding: 32rpx 24rpx; box-sizing: border-box;
.row { display: flex; align-items: center; justify-content: space-between; }
.refund {
.label { font-size: 28rpx; color: rgba(0,0,0,0.85); }
.price {
font-weight: bold; font-size: 42rpx; color: #EE595A;
text { font-weight: 400; font-size: 24rpx; }
}
}
.default {
margin-top: 20rpx;
.label { font-size: 28rpx; color: rgba(0,0,0,0.45); }
.price { font-size: 28rpx; color: rgba(0,0,0,0.85); }
}
}
.progress {
margin: 22rpx 24rpx 0; background: #FFFFFF; border-radius: 10rpx; padding: 32rpx 24rpx; box-sizing: border-box;
.title { font-weight: 500; font-size: 32rpx; color: rgba(0,0,0,0.85); }
.list {
margin-top: 24rpx;
.progress_item {
display: flex; align-items: stretch;
&:last-child {
.left { border: none; }
}
.left {
border-left: 1rpx solid #03AE80; position: relative; top: 39rpx;
.drop { position: absolute; width: 12rpx; height: 12rpx; border-radius: 50%; top: 0rpx; left: 50%; transform: translateX(-50%); background-color: #03AE80; }
.drop2 { position: absolute; width: 12rpx; height: 12rpx; border-radius: 50%; top: 0rpx; left: 50%; transform: translateX(-50%); background-color: #8c8c8c; }
.drop1 {
position: absolute; width: 20rpx; height: 20rpx; border-radius: 50%; top: 0rpx; left: 50%; transform: translateX(-50%); background-color: #E5F6F2;
.drop2 { position: absolute; width: 14rpx; height: 14rpx; border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #03AE80; }
::v-deep .u-icon{ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
}
}
.borlef { border-left: 1rpx solid rgba(0,0,0,0.45); }
.right {
flex: 1; margin-left: 32rpx; padding-bottom: 24rpx;
.label { font-size: 28rpx; color: rgba(0,0,0,0.85); }
.active { color: #03AE80; }
.time { font-size: 24rpx; color: rgba(0,0,0,0.45); }
}
}
}
}
</style>