yfs/pages/other/order_info.vue
2025-04-12 23:22:24 +08:00

220 lines
5.1 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>
<page-container title="订单详情" :showBack="true">
<view class="order-info" v-if="orderInfo">
<view class="info-section">
<view class="section-title">订单信息</view>
<view class="info-item">
<text class="label">订单名称:</text>
<text class="value">{{orderInfo.goods_title}}</text>
</view>
<view class="info-item">
<text class="label">订单编号:</text>
<text class="value">{{orderInfo.order_num}}</text>
</view>
<view class="info-item">
<text class="label">购买数量:</text>
<text class="value">{{orderInfo.prize_num}}</text>
</view>
<view class="info-item">
<text class="label">单价:</text>
<text class="value">¥{{orderInfo.goods_price}}</text>
</view>
</view>
<view class="info-section">
<view class="section-title">支付信息</view>
<view class="info-item">
<text class="label">订单原价:</text>
<text class="value">¥{{orderInfo.order_total}}</text>
</view>
<view class="info-item">
<text class="label">实际支付:</text>
<text class="value price">¥{{orderInfo.order_zhe_total}}</text>
</view>
<view class="info-item">
<text class="label">微信支付:</text>
<text class="value">¥{{orderInfo.price}}</text>
</view>
<view class="info-item">
<text class="label">钻石支付:</text>
<text class="value">¥{{orderInfo.use_money}}</text>
</view>
<view class="info-item">
<text class="label">UU币支付</text>
<text class="value">¥{{orderInfo.use_integral}}</text>
</view>
<view class="info-item">
<text class="label">达达券支付:</text>
<text class="value">¥{{orderInfo.use_money2}}</text>
</view>
<view class="info-item">
<text class="label">优惠金额:</text>
<text class="value">¥{{orderInfo.use_coupon}}</text>
</view>
<view class="info-item">
<text class="label">支付时间:</text>
<text class="value">{{orderInfo.pay_time}}</text>
</view>
</view>
<view class="info-section" v-if="orderInfo.goods_list && orderInfo.goods_list.length > 0">
<view class="section-title">奖品列表</view>
<view class="prize-list">
<view class="prize-item" v-for="(item, index) in orderInfo.goods_list" :key="index">
<image class="prize-image" :src="item.goodslist_imgurl" mode="aspectFill"></image>
<view class="prize-info">
<view class="prize-title">{{item.goodslist_title}}</view>
<view class="prize-price">¥{{item.goodslist_price}}</view>
</view>
</view>
</view>
</view>
</view>
<view class="loading" v-else-if="loading">加载中...</view>
<view class="error" v-else>订单数据加载失败</view>
</page-container>
</template>
<script>
import PageContainer from '@/components/page-container/page-container.vue'
export default {
components: {
PageContainer
},
data() {
return {
orderNum: '',
orderInfo: null,
loading: true
}
},
onLoad(options) {
if (options.order_num) {
this.orderNum = options.order_num;
this.load();
} else {
this.$c.msg('订单参数缺失');
setTimeout(() => {
uni.navigateBack();
}, 1500);
}
},
methods: {
async load() {
this.loading = true;
try {
const { status, data, msg } = await this.$request.post('order_detail', {
order_num: this.orderNum
});
if (status !== 1) {
this.$c.msg(msg);
return;
}
this.orderInfo = data;
} catch (error) {
console.error('加载订单详情失败', error);
this.$c.msg('加载失败,请重试');
} finally {
this.loading = false;
}
},
}
}
</script>
<style lang="scss">
.order-info {
padding: 30rpx;
.info-section {
background-color: #fff;
border-radius: 12rpx;
padding: 30rpx;
margin-bottom: 30rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
.section-title {
font-size: 32rpx;
font-weight: bold;
margin-bottom: 24rpx;
border-bottom: 1px solid #eee;
padding-bottom: 16rpx;
}
.info-item {
display: flex;
margin-bottom: 16rpx;
font-size: 28rpx;
line-height: 1.5;
.label {
color: #666;
width: 180rpx;
flex-shrink: 0;
}
.value {
flex: 1;
&.price {
color: #f56c6c;
font-weight: bold;
}
}
}
.prize-list {
.prize-item {
display: flex;
margin-bottom: 20rpx;
padding-bottom: 20rpx;
border-bottom: 1px solid #f5f5f5;
&:last-child {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
}
.prize-image {
width: 120rpx;
height: 120rpx;
border-radius: 8rpx;
margin-right: 20rpx;
background-color: #f5f5f5;
}
.prize-info {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
.prize-title {
font-size: 28rpx;
}
.prize-price {
font-size: 28rpx;
color: #f56c6c;
}
}
}
}
}
}
.loading, .error {
text-align: center;
padding: 100rpx 0;
color: #999;
font-size: 28rpx;
}
</style>