You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
449 lines
12 KiB
449 lines
12 KiB
<template>
|
|
<div class="order_details">
|
|
<div class="cotent">
|
|
<div class="left_part">
|
|
<div class="order_info">
|
|
<h2>订单信息</h2>
|
|
<ul>
|
|
<li>
|
|
<p>
|
|
<span>商家名称:</span>
|
|
<span>{{ order.shopName }}</span>
|
|
</p>
|
|
<p>
|
|
<span>订单ID:</span>
|
|
<span>{{ order.orderId }}</span>
|
|
</p>
|
|
<p>
|
|
<span>支付单号:</span>
|
|
<span>{{ order.transactionId }}</span>
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
<span>订单状态:</span>
|
|
<span v-if="order.state === 1">待付款</span>
|
|
<span v-if="order.state === 2">待发货</span>
|
|
<span v-if="order.state === 3">待收货</span>
|
|
<span v-if="order.state === 4">已完成</span>
|
|
<span v-if="order.state === 5">已取消</span>
|
|
</p>
|
|
<p>
|
|
<span>售后状态:</span>
|
|
<span>{{ order.afterStateName }}</span>
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
<span>支付方式:</span>
|
|
<span v-if="order.paymentMode === 1">微信</span>
|
|
<span v-if="order.paymentMode === 2">支付宝</span>
|
|
</p>
|
|
<p>
|
|
<span>物流方案:</span>
|
|
<span>{{ order.logisticsName }}</span>
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
<span>创建时间:</span>
|
|
<span>{{ order.createTime }}</span>
|
|
</p>
|
|
<p>
|
|
<span>支付时间:</span>
|
|
<span>{{ order.paymentTime }}</span>
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>备注:{{ order.remark }}</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="goods_info">
|
|
<h2>商品信息</h2>
|
|
<div
|
|
v-for="(item, index) in order.products"
|
|
:key="index"
|
|
class="goods_list"
|
|
>
|
|
<div class="good_price">
|
|
<ul>
|
|
<li>
|
|
<p>商品总价: ¥{{ order.orderPrice }}</p>
|
|
<p>支付金额: ¥{{ order.price }}</p>
|
|
</li>
|
|
<li>
|
|
<p>物流费用: ¥{{ order.logisticsPrice }}</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="good_details">
|
|
<ul>
|
|
<li>
|
|
<img :src="item.image">
|
|
<div class="details">
|
|
<p>{{ item.productName }}</p>
|
|
<p class="skuDetails">
|
|
<span
|
|
v-for="(detailsItem, detailsindex) of item.skuDetails"
|
|
:key="detailsindex"
|
|
class="detail_span"
|
|
>
|
|
{{ detailsItem.skuName }}: {{ detailsItem.skuValue }}
|
|
</span>
|
|
</p>
|
|
<p>SKU: {{ item.skuId }}</p>
|
|
</div>
|
|
</li>
|
|
<li class="cen">
|
|
¥{{ `${item.productPrice} * ${item.number}` }}
|
|
</li>
|
|
<li>
|
|
{{ order.orderPrice }}
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 未发货时物流信息显示去发货按钮 -->
|
|
<div class="logistics_info" v-show="order.logisticsName && order.logisticsNum">
|
|
<h2>物流信息</h2>
|
|
<!-- <p
|
|
v-if="!order.logisticsNum"
|
|
class="send_good"
|
|
@click="send"
|
|
>
|
|
去发货
|
|
</p>-->
|
|
<el-button
|
|
v-if="!order.logisticsNum && order.state == 2"
|
|
type="primary"
|
|
class="send_good"
|
|
@click="send"
|
|
>去发货</el-button>
|
|
<div v-else class="logistics_content">
|
|
<p class="logistics_title">
|
|
<span>物流公司: {{ order.logisticsName }}</span>
|
|
<span>运单号: {{ order.logisticsNum }}</span>
|
|
</p>
|
|
<!-- <p
|
|
v-for="(item, index) in tracesList"
|
|
:key="index"
|
|
class="logistics_item"
|
|
>
|
|
<span>{{ item.acceptTime }}</span>
|
|
<span>{{ acceptStation }}</span>
|
|
</p> -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="right_part">
|
|
<div class="pay_order_info">
|
|
<h2>下单人信息</h2>
|
|
<p>下单账户: {{ order.customerName }}</p>
|
|
<p>订单总数: {{ order.total }}个</p>
|
|
<p>下单备注: {{ order.remark }}</p>
|
|
</div>
|
|
<div class="take_goods_info">
|
|
<h2>收货信息</h2>
|
|
<p>姓名: {{ order.receiveName }}</p>
|
|
<p>手机号: {{ order.receivePhone }}</p>
|
|
<p>地址: {{ order.receiveAdress }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 发货 -->
|
|
<el-dialog
|
|
:visible.sync="isVisible"
|
|
title="发货"
|
|
:close-on-click-modal="false"
|
|
:modal-append-to-body="false"
|
|
:modal="false"
|
|
>
|
|
<el-form
|
|
ref="sendGoodsForm"
|
|
:model="form"
|
|
:rules="rules"
|
|
label-width="80px"
|
|
>
|
|
<el-form-item label="快递公司" prop="express">
|
|
<el-select v-model="form.express" filterable>
|
|
<el-option
|
|
v-for="(item, index) in companyList"
|
|
:key="index"
|
|
:label="item.dictName"
|
|
:value="item.dictId"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="快递单号" prop="deliverFormid">
|
|
<el-input
|
|
v-model="form.deliverFormid"
|
|
maxlength="20"
|
|
oninput="value = value.replace(/[^\a-\z\A-\Z0-9]/g,'')"
|
|
/>
|
|
</el-form-item>
|
|
<!--
|
|
<el-form-item label="快递公司编号" prop="shipperCode" v-if="false">
|
|
<el-input v-model="form.shipperCode" />
|
|
</el-form-item>-->
|
|
</el-form>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button type="primary" @click="confirm">确 定</el-button>
|
|
<el-button @click="cancel">取 消</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { orderGetById, orderGetSelect, orderDilevery } from '@/api/order'
|
|
export default {
|
|
props: {
|
|
detailRow: {
|
|
type: Object,
|
|
default: () => ({})
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
order: {},
|
|
form: {
|
|
orderId: this.orderId,
|
|
express: '',
|
|
deliverFormid: ''
|
|
},
|
|
isVisible: false,
|
|
rules: {
|
|
logisticsName: [
|
|
{ required: false, message: '请输入快递公司名称', trigger: 'blur' }
|
|
],
|
|
deliverFormid: [
|
|
{ required: true, message: '请输入快递单号', trigger: 'blur' }
|
|
],
|
|
express: [
|
|
{ required: true, message: '请选择快递公司', trigger: 'blur' }
|
|
]
|
|
},
|
|
companyList: []
|
|
}
|
|
},
|
|
watch: {
|
|
detailRow: {
|
|
handler (nVal, oVal) {
|
|
if (nVal) {
|
|
this.form.orderId = nVal.orderId
|
|
this.getProductList()
|
|
}
|
|
}
|
|
},
|
|
deep: true
|
|
},
|
|
created() {
|
|
this.form.orderId = this.detailRow.orderId
|
|
this.getProductList()
|
|
},
|
|
methods: {
|
|
async getProductList() {
|
|
const res = await orderGetById({ orderId: this.detailRow.orderId })
|
|
this.order = res.data
|
|
},
|
|
close() {
|
|
this.$emit('cancel')
|
|
},
|
|
confirm() {
|
|
this.$refs.sendGoodsForm.validate((valid) => {
|
|
if (valid) {
|
|
this.form.orderId = this.detailRow.orderId
|
|
orderDilevery(this.form).then((res) => {
|
|
if (res.code === '') {
|
|
this.$message({
|
|
message: '发货成功',
|
|
type: 'success'
|
|
})
|
|
this.isVisible = false
|
|
this.close()
|
|
}
|
|
})
|
|
}
|
|
})
|
|
},
|
|
cancel() {
|
|
this.isVisible = false
|
|
},
|
|
async getCompanyList() {
|
|
const res = await orderGetSelect()
|
|
if (res.code === '') {
|
|
this.companyList = res.data
|
|
}
|
|
},
|
|
send() {
|
|
this.getCompanyList()
|
|
this.isVisible = true
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@import url("../../../styles/elDialog.scss");
|
|
ul {
|
|
list-style: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
.order_details {
|
|
h3 {
|
|
// margin-left: 20px;
|
|
margin: 20px 0 20px 20px;
|
|
font-weight: 700;
|
|
}
|
|
.close {
|
|
// float: right;
|
|
position: absolute;
|
|
right: 20px;
|
|
&:hover {
|
|
cursor: pointer;
|
|
}
|
|
}
|
|
|
|
.cotent {
|
|
margin: 20px;
|
|
overflow: hidden;
|
|
font-size: 14px;
|
|
.goods_info,
|
|
.order_info,
|
|
.logistics_info,
|
|
.pay_order_info,
|
|
.take_goods_info {
|
|
background: #fff;
|
|
margin-bottom: 10px;
|
|
padding: 10px 20px;
|
|
}
|
|
.pay_order_info,
|
|
.take_goods_info{
|
|
p{
|
|
line-height: 30px;
|
|
}
|
|
}
|
|
h2 {
|
|
margin: 0;
|
|
font-weight: 400;
|
|
height: 40px;
|
|
line-height: 40px;
|
|
font-size: 18px;
|
|
text-align: -10px;
|
|
}
|
|
.left_part {
|
|
float: left;
|
|
width: calc(70% - 10px);
|
|
margin-right: 10px;
|
|
.order_info {
|
|
box-sizing: border-box;
|
|
ul {
|
|
padding: 10px 30px;
|
|
li {
|
|
overflow: hidden;
|
|
p {
|
|
width: 50%;
|
|
float: left;
|
|
font-size: 14px;
|
|
line-height: 30px;
|
|
span {
|
|
&:nth-child(2) {
|
|
margin-left: 10px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.remarks {
|
|
margin-left: 30px !important;
|
|
}
|
|
}
|
|
.goods_info {
|
|
.goods_list {
|
|
padding: 15px;
|
|
.good_price {
|
|
ul {
|
|
li {
|
|
&:nth-child(1) {
|
|
p {
|
|
width: 50%;
|
|
float: left;
|
|
}
|
|
}
|
|
p {
|
|
line-height: 30px;
|
|
}
|
|
}
|
|
}
|
|
border-bottom: 1px gray solid;
|
|
}
|
|
.good_details {
|
|
ul {
|
|
display: flex;
|
|
margin-top:20px;
|
|
li {
|
|
flex: 3;
|
|
display: flex;
|
|
justify-content: space-around;
|
|
align-items: center;
|
|
.details {
|
|
margin: 0 30px;
|
|
width: 180px;
|
|
line-height: 20px;
|
|
.skuDetails {
|
|
margin-top: 8px;
|
|
margin-bottom: 8px;
|
|
margin-right: 10px;
|
|
line-height: 1;
|
|
color: #9e9e9e;
|
|
.detail_span {
|
|
margin-right: 8px;
|
|
}
|
|
}
|
|
}
|
|
img {
|
|
width: 50px;
|
|
height: 50px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.logistics_info {
|
|
.send_good {
|
|
display: block;
|
|
margin: 20px auto !important;
|
|
&:hover {
|
|
cursor: pointer;
|
|
}
|
|
}
|
|
.logistics_content {
|
|
padding: 0 10%;
|
|
.logistics_title {
|
|
span {
|
|
margin: 20px 0;
|
|
display: inline-block;
|
|
width: 45%;
|
|
}
|
|
}
|
|
.logistics_item {
|
|
span {
|
|
display: inline-block;
|
|
width: 30%;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.right_part {
|
|
float: left;
|
|
width: 30%;
|
|
}
|
|
}
|
|
}
|
|
</style>
|