初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,558 @@
<template>
<div class="box">
<div class="null-page" v-show="yes"></div>
<el-card class="box-card order-detail">
<div slot="header" class="clearfix">
<el-breadcrumb separator="/">
<el-breadcrumb-item :to="{ path: '/member/order_list' }">订单列表</el-breadcrumb-item>
<el-breadcrumb-item>订单详情</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div v-loading="loading">
<template v-if="orderDetail">
<div class="order-status">
<h4>
订单状态
<span class="ns-text-color">{{ orderDetail.order_status_name }}</span>
</h4>
<div v-if="orderDetail.order_status == 0" class="go-pay">
<p>
需付款
<span>{{ orderDetail.pay_money }}</span>
</p>
</div>
<div class="operation" v-if="orderDetail.action.length > 0">
<el-button type="primary" size="mini" plain v-if="orderDetail.is_evaluate == 1" @click="operation('memberOrderEvaluation')">
<template v-if="orderDetail.evaluate_status == 0">评价</template>
<template v-else-if="orderDetail.evaluate_status == 1">追评</template>
</el-button>
<el-button type="primary" size="mini" :plain="operationItem.action == 'orderPay' ? false : true" v-for="(operationItem, operationIndex) in orderDetail.action" :key="operationIndex" @click="operation(operationItem.action)">
{{ operationItem.title }}
</el-button>
</div>
<div class="operation" v-else-if="orderDetail.action.length == 0 && orderDetail.is_evaluate == 1">
<el-button type="primary" size="mini" plain v-if="orderDetail.is_evaluate == 1" @click="operation('memberOrderEvaluation')">
<template v-if="orderDetail.evaluate_status == 0">评价</template>
<template v-else-if="orderDetail.evaluate_status == 1">追评</template>
</el-button>
</div>
</div>
<div class="order-info">
<h4>订单信息</h4>
<ul>
<!-- <li>
<i class="iconfont iconmendian"></i>
店铺
<router-link :to="'/shop-' + orderDetail.site_id" target="_blank">{{ orderDetail.site_name }}</router-link>
</li> -->
<li>订单类型{{ orderDetail.order_type_name }}</li>
<li>订单编号{{ orderDetail.order_no }}</li>
<li>订单交易号{{ orderDetail.out_trade_no }}</li>
<li>配送方式{{ orderDetail.delivery_type_name }}</li>
<li v-if="orderDetail.order_status == -1">退款途径{{ orderDetail.refund_money_type == 1 ? '原路退款' : orderDetail.refund_money_type == 2 ? '线下退款' : '退款到余额' }}</li>
<li>创建时间{{ $util.timeStampTurnTime(orderDetail.create_time) }}</li>
<li v-if="orderDetail.close_time > 0">关闭时间{{ $util.timeStampTurnTime(orderDetail.close_time) }}</li>
<template v-if="orderDetail.pay_status > 0">
<li>支付方式{{ orderDetail.pay_type_name }}</li>
<li>支付时间{{ $util.timeStampTurnTime(orderDetail.pay_time) }}</li>
</template>
<li v-if="orderDetail.promotion_type_name != ''">店铺活动{{ orderDetail.promotion_type_name }}</li>
<li v-if="orderDetail.buyer_message != ''">买家留言{{ orderDetail.buyer_message }}</li>
</ul>
</div>
<div class="order-info" v-if="orderDetail.pay_type=='offlinepay'&&orderDetail.offline_pay_info">
<h4>线下支付</h4>
<ul>
<li v-if="orderDetail.offline_pay_info.status_info.const=='WAIT_AUDIT'">
支付状态审核中
</li>
<li v-if="orderDetail.offline_pay_info.status_info.const=='AUDIT_REFUSE'">
支付状态审核被拒
</li>
<li v-if="orderDetail.offline_pay_info.status_info.const=='AUDIT_REFUSE'">
审核备注{{orderDetail.offline_pay_info.audit_remark}}
</li>
</ul>
</div>
<div class="take-delivery-info">
<h4>收货信息</h4>
<ul>
<li>收货人{{ orderDetail.name }}</li>
<li>手机号码{{ orderDetail.mobile }}</li>
<li>收货地址{{ orderDetail.full_address }} {{ orderDetail.address }}</li>
</ul>
</div>
<!-- 发票信息 -->
<div class="take-delivery-info" v-if="orderDetail.is_invoice ==1">
<h4>发票信息</h4>
<ul>
<li>发票类型{{ orderDetail.invoice_type == 1 ? '纸质发票' : '电子发票' }}</li>
<li>发票抬头类型{{ orderDetail.invoice_title_type ==1 ? '个人' : '企业' }}</li>
<li>发票抬头{{ orderDetail.invoice_title }}</li>
<li>发票内容{{ orderDetail.invoice_content }}</li>
<li v-if="orderDetail.invoice_type == 1">发票邮寄地址地址{{ orderDetail.invoice_full_address }}</li>
<li v-else>发票接收邮箱{{ orderDetail.invoice_email }}</li>
</ul>
</div>
<nav>
<li :class="{ 'no-operation': !orderDetail.is_enable_refund }">商品信息</li>
<li>单价</li>
<li>数量</li>
<li>小计</li>
<li v-if="orderDetail.is_enable_refund">操作</li>
</nav>
<!-- 订单项·商品 -->
<div class="list">
<ul class="item" v-for="(goodsItem, goodsIndex) in orderDetail.order_goods" :key="goodsIndex">
<li :class="{ 'no-operation': !orderDetail.is_enable_refund }">
<div class="img-wrap" @click="$util.pushToTab('/sku/' + goodsItem.sku_id)">
<img :src="$img(goodsItem.sku_image, { size: 'mid' })" @error="imageError(goodsIndex)" />
</div>
<div class="info-wrap">
<h5 @click="$util.pushToTab('/sku/' + goodsItem.sku_id)">{{ goodsItem.sku_name }}</h5>
<!-- <span>规格规格值</span> -->
</div>
</li>
<li>
<span>{{ goodsItem.price }}</span>
</li>
<li>
<span>{{ goodsItem.num }}</span>
</li>
<li>
<span>{{ (goodsItem.price * goodsItem.num).toFixed(2) }}</span>
</li>
<li>
<el-button type="primary" plain size="mini" v-if="orderDetail.is_enable_refund == 1 && goodsItem.refund_status == 0 && orderDetail.order_scene == 'online' && goodsItem.promotion_type != 'blindbox'" @click="$router.push({ path: '/order/refund', query: { order_goods_id: goodsItem.order_goods_id, order_id: orderId } })">申请退款</el-button>
<el-button type="primary" plain size="mini" v-if="goodsItem.refund_status != 0" @click="$router.push({ path: '/order/refund_detail', query: { order_goods_id: goodsItem.order_goods_id } })">{{goodsItem.refund_status_name}}</el-button>
</li>
</ul>
</div>
<!-- 订单总计 -->
<ul class="total">
<li>
<label>商品金额</label>
<span>{{ orderDetail.goods_money }}</span>
</li>
<li>
<label>运费</label>
<span>{{ orderDetail.delivery_money }}</span>
</li>
<li v-if="orderDetail.member_card_money > 0">
<label>会员卡</label>
<span>{{ orderDetail.member_card_money }}</span>
</li>
<li v-if="orderDetail.invoice_money > 0">
<label>税费</label>
<span>{{ orderDetail.invoice_money }}</span>
</li>
<li v-if="orderDetail.invoice_delivery_money > 0">
<label>发票邮寄费</label>
<span>{{ orderDetail.invoice_delivery_money }}</span>
</li>
<li v-if="orderDetail.adjust_money != 0">
<label>订单调整</label>
<span>
<template v-if="orderDetail.adjust_money < 0">-</template>
<template v-else>+</template>
{{ orderDetail.adjust_money | abs }}
</span>
</li>
<li v-if="orderDetail.promotion_money > 0">
<label>优惠</label>
<span>{{ orderDetail.promotion_money }}</span>
</li>
<li v-if="orderDetail.coupon_money > 0">
<label>优惠券</label>
<span>{{ orderDetail.coupon_money }}</span>
</li>
<li v-if="orderDetail.point_money > 0">
<label>积分抵扣</label>
<span>{{ orderDetail.point_money }}</span>
</li>
<li v-if="orderDetail.balance_money > 0">
<label>使用余额</label>
<span>{{ orderDetail.balance_money }}</span>
</li>
<li class="pay-money">
<label>实付款</label>
<span>{{ orderDetail.pay_money }}</span>
</li>
</ul>
</template>
</div>
</el-card>
</div>
</template>
<script>
import {
apiOrderDetail
} from '@/api/order/order';
import orderMethod from '@/utils/orderMethod';
import {
mapGetters
} from 'vuex';
export default {
name: 'order_detail',
components: {},
mixins: [orderMethod],
data: () => {
return {
orderId: 0,
orderDetail: null,
loading: true,
yes: true
};
},
created() {
this.orderId = this.$route.query.order_id;
this.getOrderDetail();
},
mounted() {
let self = this;
setTimeout(function () {
self.yes = false
}, 300)
},
computed: {
...mapGetters(['defaultGoodsImage'])
},
layout: 'member',
methods: {
getOrderDetail() {
apiOrderDetail({
order_id: this.orderId
}).then(res => {
if (res.code >= 0) {
this.orderDetail = res.data;
this.loading = false;
} else {
this.$message({
message: '未获取到订单信息',
type: 'warning',
duration: 2000,
onClose: () => {
this.$router.push({
path: '/member/order_list'
});
}
});
}
}).catch(err => {
this.loading = false;
this.$message.error({
message: err.message,
duration: 2000,
onClose: () => {
this.$router.push({
path: '/member/order_list'
});
}
});
});
},
operation(action) {
switch (action) {
case 'orderPay': // 支付
this.orderPay(this.orderDetail);
break;
case 'orderClose': //关闭
this.orderClose(this.orderDetail.order_id, () => {
this.getOrderDetail();
});
break;
case 'memberTakeDelivery': //收货
this.orderDelivery(this.orderDetail.order_id, () => {
this.getOrderDetail();
});
break;
case 'trace': //查看物流
this.$router.push({
path: '/order/logistics',
query: {
order_id: this.orderDetail.order_id
}
});
break;
case 'memberOrderEvaluation': //评价
this.$util.pushToTab({
path: '/order/evaluate',
query: {
order_id: this.orderDetail.order_id
}
});
break;
case 'memberBatchRefund': //批量退款
this.$router.push({
path: '/order/batchrefund',
query: {
order_id: this.orderId
}
});
break;
case 'orderOfflinePay': //线下支付
this.$router.push({
path: '/pay',
query: {
code: this.orderDetail.offline_pay_info.out_trade_no
}
});
break;
case 'orderDelete':
this.orderDelete(this.orderDetail.order_id, () => {
this.$router.push({
path: '/member/order_list',
});
});
break;
}
},
imageError(index) {
this.orderDetail.order_goods[index].sku_image = this.defaultGoodsImage;
}
},
filters: {
abs(value) {
return Math.abs(parseFloat(value)).toFixed(2);
}
}
};
</script>
<style lang="scss" scoped>
.box {
width: 100%;
position: relative;
}
.null-page {
width: 100%;
height: 730px;
background-color: #FFFFFF;
position: absolute;
top: 0;
left: 0;
z-index: 9;
}
.order-detail {
.order-status {
background-color: #fff;
margin-bottom: 20px;
h4 {
margin: 10px 0 20px;
border-bottom: 1px solid #eeeeee;
padding-bottom: 10px;
}
.go-pay {
p {
display: inline-block;
vertical-align: middle;
span {
font-weight: bold;
color: $base-color;
font-size: 18px;
}
}
}
.operation {
margin-top: 10px;
}
}
.order-info {
background-color: #fff;
margin-bottom: 10px;
h4 {
margin: 10px 0 20px;
border-bottom: 1px solid #eeeeee;
padding-bottom: 10px;
}
ul {
display: flex;
flex-wrap: wrap;
li {
flex: 0 0 33.3333%;
margin-bottom: 10px;
&:last-child {
flex: initial;
}
}
}
}
.take-delivery-info {
background-color: #fff;
margin-bottom: 10px;
h4 {
margin: 10px 0 20px;
border-bottom: 1px solid #eeeeee;
padding-bottom: 10px;
}
ul {
display: flex;
flex-wrap: wrap;
li {
flex: 0 0 33.3333%;
margin-bottom: 10px;
&:last-child {
flex: initial;
}
}
}
}
nav {
overflow: hidden;
padding: 10px 0;
background: #fff;
border-bottom: 1px solid #eeeeee;
li {
float: left;
&:nth-child(1) {
width: 50%;
&.no-operation {
width: 60%;
}
}
&:nth-child(2) {
width: 15%;
}
&:nth-child(3) {
width: 10%;
}
&:nth-child(4) {
width: 15%;
}
&:nth-child(5) {
width: 10%;
}
}
}
.list {
border-bottom: 1px solid #eeeeee;
.item {
background-color: #fff;
padding: 10px 0;
overflow: hidden;
li {
float: left;
line-height: 60px;
&:nth-child(1) {
width: 50%;
line-height: inherit;
&.no-operation {
width: 60%;
}
.img-wrap {
width: 60px;
height: 60px;
float: left;
margin-right: 10px;
cursor: pointer;
}
.info-wrap {
margin-left: 70px;
h5 {
font-weight: normal;
font-size: $ns-font-size-base;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
margin-right: 10px;
display: inline-block;
cursor: pointer;
&:hover {
color: $base-color;
}
}
span {
font-size: $ns-font-size-sm;
color: #9a9a9a;
}
}
}
&:nth-child(2) {
width: 15%;
}
&:nth-child(3) {
width: 10%;
}
&:nth-child(4) {
width: 15%;
}
&:nth-child(5) {
width: 10%;
}
}
}
}
// 总计
.total {
padding: 20px;
background-color: #fff;
text-align: right;
li {
span {
width: 150px;
display: inline-block;
}
&.pay-money {
font-weight: bold;
span {
color: $base-color;
font-size: 16px;
vertical-align: middle;
}
}
}
}
}
</style>