|
@@ -53,18 +53,35 @@
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
|
- <!-- 退款状态提示 -->
|
|
|
|
|
- <view v-if="order.refundStatus === 'PENDING'" class="refund-notice pending">
|
|
|
|
|
- <view class="notice-dot"></view>
|
|
|
|
|
- <text class="notice-text">退款申请已提交,正在审核中</text>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view v-else-if="order.refundAmount > 0 && order.refundAmount < (order.paidAmount || order.totalAmount || 0)" class="refund-notice partial">
|
|
|
|
|
- <view class="notice-dot"></view>
|
|
|
|
|
- <text class="notice-text">已退款 <text class="notice-amount">¥{{ order.refundAmount.toFixed(2) }}</text>,可继续申请退款</text>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view v-else-if="order.refundAmount > 0 && order.refundAmount >= (order.paidAmount || order.totalAmount || 0)" class="refund-notice full">
|
|
|
|
|
- <view class="notice-dot"></view>
|
|
|
|
|
- <text class="notice-text">已全额退款</text>
|
|
|
|
|
|
|
+ <!-- 退款历史记录 -->
|
|
|
|
|
+ <view v-if="order.refunds && order.refunds.length > 0" class="refund-history">
|
|
|
|
|
+ <view class="history-title">退款记录</view>
|
|
|
|
|
+ <view v-for="(record, index) in order.refunds" :key="index" class="history-item">
|
|
|
|
|
+ <view class="history-timeline">
|
|
|
|
|
+ <view :class="['timeline-dot', record.status === 'REFUNDED' ? 'success' : record.status === 'REJECTED' ? 'rejected' : 'pending']"></view>
|
|
|
|
|
+ <view v-if="index < order.refunds.length - 1" class="timeline-line"></view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="history-content">
|
|
|
|
|
+ <view class="history-header">
|
|
|
|
|
+ <text :class="['history-status', record.status === 'REFUNDED' ? 'success' : record.status === 'REJECTED' ? 'rejected' : 'pending']">
|
|
|
|
|
+ {{ record.status === 'REFUNDED' ? '已退款' : record.status === 'REJECTED' ? '已拒绝' : '审核中' }}
|
|
|
|
|
+ </text>
|
|
|
|
|
+ <text class="history-amount">¥{{ (record.refundAmount || 0).toFixed(2) }}</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="history-meta">
|
|
|
|
|
+ <text class="history-time">{{ record.createTime }}</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <text v-if="record.reason" class="history-reason">原因:{{ record.reason }}</text>
|
|
|
|
|
+ <text v-if="record.remark && record.status === 'REJECTED'" class="history-reject-reason">拒绝原因:{{ record.remark }}</text>
|
|
|
|
|
+ <!-- 退款商品 -->
|
|
|
|
|
+ <view v-if="record.items && record.items.length > 0" class="history-items">
|
|
|
|
|
+ <view v-for="(item, i) in record.items" :key="i" class="history-item-row">
|
|
|
|
|
+ <text class="item-name">{{ item.productName }}</text>
|
|
|
|
|
+ <text class="item-meta">×{{ item.quantity }} ¥{{ (item.refundAmount || 0).toFixed(2) }}</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
|
<view class="card-footer-actions">
|
|
<view class="card-footer-actions">
|
|
@@ -531,6 +548,139 @@ const viewVideo = (url: string) => {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/* 退款历史记录 */
|
|
|
|
|
+.refund-history {
|
|
|
|
|
+ padding: 0 $spacing-lg;
|
|
|
|
|
+ margin-bottom: $spacing-md;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-title {
|
|
|
|
|
+ font-size: 28rpx;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: $color-text-primary;
|
|
|
|
|
+ margin-bottom: $spacing-md;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-item {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ gap: $spacing-md;
|
|
|
|
|
+
|
|
|
|
|
+ &:last-child .timeline-line {
|
|
|
|
|
+ display: none;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-timeline {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ width: 40rpx;
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.timeline-dot {
|
|
|
|
|
+ width: 16rpx;
|
|
|
|
|
+ height: 16rpx;
|
|
|
|
|
+ border-radius: 50%;
|
|
|
|
|
+ margin-top: 6rpx;
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+
|
|
|
|
|
+ &.success { background-color: $color-success; }
|
|
|
|
|
+ &.rejected { background-color: $color-error; }
|
|
|
|
|
+ &.pending { background-color: $color-warning; }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.timeline-line {
|
|
|
|
|
+ width: 2rpx;
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ min-height: 30rpx;
|
|
|
|
|
+ background-color: $color-border;
|
|
|
|
|
+ margin: 8rpx 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-content {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ padding-bottom: $spacing-md;
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-header {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ margin-bottom: 6rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-status {
|
|
|
|
|
+ font-size: 26rpx;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+
|
|
|
|
|
+ &.success { color: $color-success; }
|
|
|
|
|
+ &.rejected { color: $color-error; }
|
|
|
|
|
+ &.pending { color: $color-warning; }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-amount {
|
|
|
|
|
+ font-size: 28rpx;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ color: $color-text-primary;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-meta {
|
|
|
|
|
+ margin-bottom: 4rpx;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-time {
|
|
|
|
|
+ font-size: 22rpx;
|
|
|
|
|
+ color: $color-text-tertiary;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-reason {
|
|
|
|
|
+ display: block;
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ color: $color-text-secondary;
|
|
|
|
|
+ margin-top: 6rpx;
|
|
|
|
|
+ line-height: 1.5;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-reject-reason {
|
|
|
|
|
+ display: block;
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ color: $color-error;
|
|
|
|
|
+ margin-top: 6rpx;
|
|
|
|
|
+ line-height: 1.5;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-items {
|
|
|
|
|
+ margin-top: 12rpx;
|
|
|
|
|
+ padding: 16rpx;
|
|
|
|
|
+ background-color: $color-bg-secondary;
|
|
|
|
|
+ border-radius: $radius-sm;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.history-item-row {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ padding: 6rpx 0;
|
|
|
|
|
+
|
|
|
|
|
+ .item-name {
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ color: $color-text-primary;
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ text-overflow: ellipsis;
|
|
|
|
|
+ white-space: nowrap;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .item-meta {
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ color: $color-text-secondary;
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+ margin-left: 16rpx;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/* 订单信息卡片 */
|
|
/* 订单信息卡片 */
|
|
|
.info-card {
|
|
.info-card {
|
|
|
padding: 0;
|
|
padding: 0;
|