zhwl-miniapp/pages/my/refundList.vue

130 lines
6.5 KiB
Vue
Raw Normal View History

2025-06-26 12:38:35 +08:00
<template>
<view class="waper">
<u-navbar :autoBack="true" :placeholder="true" bgColor="#fff">
<view slot='center' class="navbar_title">退款详情</view>
</u-navbar>
<view class="waper_box">
<view class="list" v-for="(i, index) in list" :key="index" @click="toDetail(i.id)">
<view class="title">
<view>{{i.refundStatusName}}</view>
<view>退款编号{{i.refundCode}}</view>
</view>
<view class="content">
<view class="money">
<view class="left">退款金额¥{{i.actualPrice}}{{i.refundQuantity}}</view>
<view class="right" @click.stop="tabShow(index)">
<view>{{i.show ? '收起' : '展开'}}</view>
<view class="icon">
<u-icon :name="i.show ? 'arrow-up' : 'arrow-down'" color="#999" size="26rpx"></u-icon>
</view>
</view>
</view>
<view class="fee" v-show="i.show">手续费¥{{i.totalFee}}</view>
<view class="step" v-show="i.show">
<view class="step_list step_active">
<view class="text">申请退款</view>
<view class="time">{{i.createTime}}</view>
<view class="active">
<image src="https://common/refund_active.png" mode=""></image>
</view>
</view>
<view :class="'step_list' + (i.refundStatus > 1 ? ' step_active' : '')">
<view class="text">退款待审核</view>
<view class="active" v-if="i.refundStatus > 1">
<image src="https://common/refund_active.png" mode=""></image>
</view>
<view class="icon" v-else></view>
</view>
<view :class="'step_list' + (i.refundStatus > 1 ? ' step_active' : '') + (i.updateTime ? '' : ' add_time')">
<view class="text over_text" v-if="i.refundStatus == '100'">审核驳回</view>
<view class="text over_text" v-if="i.refundStatus == '200'">退款成功资金原路返回</view>
<view class="text over_text" v-if="i.refundStatus == '2'">退款中预计在1-3个工作日完成</view>
<view class="text over_text" v-if="i.refundStatus == '4'">退款失败请联系管理员</view>
<view class="time" v-if="i.updateTime">{{i.updateTime}}</view>
<view class="active" v-if="i.refundStatus > 1">
<image src="https://common/refund_active.png" mode=""></image>
</view>
<view class="icon" v-else></view>
<view class="msg" v-if="i.refundStatus == '100' && i.refundDescribe[1]">拒绝原因{{i.refundDescribe}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data () {
return {
list: []
}
},
async onLoad (options) {
let info = await this.$http.getRefundListByOrderId(options.orderId);
for (var i = 0; i < info.data.length; i ++) {
info.data[i].show = true;
}
this.list = info.data;
},
methods: {
tabShow (index) {
this.list[index].show = !this.list[index].show;
},
toDetail (id) {
uni.navigateTo({ url: '/pages/my/refundDetail?id=' + id })
}
}
}
</script>
<style lang="scss">
page{ background: #F6F6F6; }
.waper_box{
width: 100%; box-sizing: border-box; padding: 32rpx;
.list{
width: 100%; background: #fff; border-radius: 10rpx; box-sizing: border-box; padding: 32rpx 24rpx; margin-bottom: 24rpx;
&:last-child{ margin-bottom: 0; }
.title{
padding-bottom: 24rpx; border-bottom: 2rpx solid rgba(0, 0, 0, 0.1);
view{
&:nth-child(1){ line-height: 46rpx; color: #333; font-size: 32rpx; font-weight: bold; }
&:nth-child(2){ margin-top: 8rpx; line-height: 40rpx; font-size: 28rpx; color: #999; font-weight: 500; }
}
}
.content{
width: 100%; margin-top: 24rpx;
.money{
width: 100%; height: 40rpx; display: flex; justify-content: space-between; align-items: center;
.left{ color: #666; font-size: 28rpx; font-weight: 500; }
.right{
color: #999; display: flex; align-items: center; font-size: 28rpx;
.icon{ margin-left: 12rpx; }
}
}
.fee{ margin-top: 24rpx; line-height: 40rpx; color: #666; font-size: 28rpx; font-weight: 500; }
.step{
width: 100%; margin-top: 32rpx;
.step_list{
width: 100%; padding-left: 44rpx; position: relative; margin-bottom: 32rpx;
.text{ line-height: 40rpx; color: #333; font-size: 28rpx; font-weight: 500; }
.time{ margin-top: 4rpx; line-height: 34rpx; color: #999; font-size: 24rpx; }
&::after{ content: ""; width: 2rpx; height: 100%; background: #E8E8E8; position: absolute; left: 10rpx; top: calc(50% + 7rpx); z-index: 5; }
&.step_active::after{ background: #03AE80; }
&.step_active .over_text{ color: #03AE80; }
&:nth-child(2)::after{ width: 0; }
.icon{ width: 10rpx; height: 10rpx; background: #999; border-radius: 10rpx; position: absolute; left: 6rpx; top: 50%; transform: translateY(-50%); z-index: 6; }
.active{ width: 20rpx; height: 20rpx; position: absolute; left: 0; top: 50%; transform: translateY(-50%); }
.msg{ margin-top: 12rpx; color: #333; font-size: 26rpx; line-height: 36rpx; }
&:last-child{
margin-bottom: 0;
&::after{ top: auto; bottom: calc(50% + 7rpx); }
}
&.add_time::after{ height: calc(100% + 30rpx); }
}
}
}
}
}
</style>