micro_mall_back/src/views/business/OrderManage/OrderRefunds/orderRefundsDetail.vue
2023-10-25 00:42:06 +08:00

509 lines
15 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>
<!-- 订单信息 -->
<el-card class="box-card">
<template v-if="detail.orderRefundStatus == 1">
<!-- 售后单操作 -->
<div class="order-operation">
<div class="card-title">售后单操作</div>
<div class="btn-box" v-if="detail.merchantAuditStatus == 1">
<!-- 审核售后订单 -->
<div style="width: 100%;">
<el-alert title="当前买家已发起售后申请,请及时审核处理。" type="warning" show-icon :closable=false />
<div>
<el-button type="primary" @click="handleAuditOrderRefund(detail)">商家审核</el-button>
</div>
</div>
</div>
<div class="btn-box" v-if="detail.isCustomerSend == 2">
<!-- 确认收货 -->
<div style="width: 100%;">
<el-alert title="当前买家已发货,请确认包裹后点击收货,确认收货后将退款给买家。" type="warning" show-icon :closable=false />
<div>
<el-button type="primary" @click="handleConfirmsReceipt(detail)">确认收货</el-button>
</div>
</div>
</div>
</div>
<el-divider />
</template>
<div class="order-info">
<div class="card-title">售后单信息</div>
<el-row class="order-info-box">
<el-col :span="8">订单号: {{ detail.orderNumber }}</el-col>
<el-col :span="8">买家信息: {{ detail.customerPhone }}</el-col>
<el-col :span="8">退款金额:¥{{ detail.refundMoney }}</el-col>
</el-row>
<el-row class="order-info-box">
<el-col :span="8">售后类型: <dict-tag :options="refund_type" :value="detail.refundType" /></el-col>
<el-col :span="8">售后单状态: <dict-tag :options="order_refund_status"
:value="detail.orderRefundStatus" /></el-col>
<el-col :span="8">申请时间: {{ detail.createTime }}</el-col>
</el-row>
</div>
<el-divider />
<div class="order-info">
<div class="card-title">处理进度</div>
<el-row class="order-info-box">
<el-col :span="8">审核状态(商家) <dict-tag :options="merchant_audit_status"
:value="detail.merchantAuditStatus" /></el-col>
<el-col :span="8">发货状态(买家) <dict-tag :options="is_customer_send" :value="detail.isCustomerSend" /></el-col>
<el-col :span="8">收货状态(商家) <dict-tag :options="is_merchant_receive"
:value="detail.isMerchantReceive" /></el-col>
</el-row>
<el-row class="order-info-box">
<el-col :span="8" v-if="detail.merchantRefuseDesc">商家拒绝说明:{{ detail.merchantRefuseDesc }}</el-col>
</el-row>
</div>
</el-card>
<el-card class="box-card">
<div class="order-info">
<div class="card-title">买家申请原因</div>
<el-row class="order-info-box">
<el-col :span="12" style="margin-bottom: 25px;">退货原因:<dict-tag :options="refund_reason"
:value="detail.refundReason" /></el-col>
<el-col :span="12" style="margin-bottom: 25px;">退款说明:{{ detail.customerRefundDesc }}</el-col>
<el-col :span="24">退款凭证:
<el-image preview-teleported :hide-on-click-modal="true" lazy class="table-td-thumb" fit="contain"
:src="detail.customerRefundImg?.split(',')[0]"
:preview-src-list="detail.customerRefundImg?.split(',')">
<div><el-icon :size="15">
<document />
</el-icon></div>
</el-image>
</el-col>
</el-row>
</div>
</el-card>
<!-- 商品信息 -->
<el-card class="box-card">
<div class="card-title">订单商品</div>
<el-table v-loading="loading" :data="detail.goodsInfoList" ref="tableRef" highlight-current-row>
<el-table-column prop="goodsInfo" label="商品信息" width="700">
<template #default="scope">
<div class="goods-info-box">
<el-image preview-teleported :hide-on-click-modal="true" lazy class="table-td-thumb" fit="contain"
:src="scope.row.goodsPicture?.split(',')[0]"
:preview-src-list="scope.row.goodsPicture?.split(',')">
<div><el-icon :size="15">
<document />
</el-icon></div>
</el-image>
<div style="margin-left: 20px;">
<div class="goods-info-text ">
{{ scope.row.goodsName }}
</div>
<div>
<el-tag type="info" v-if="scope.row.goodsSpecName">{{ scope.row.goodsSpecName }}</el-tag>
</div>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="goodsCoding" label="编码" align="center">
<template #default="scope">
<div v-if="scope.row.goodsCoding">{{ scope.row.goodsCoding }}</div>
<div v-else> - - </div>
</template>
</el-table-column>
<el-table-column prop="goodsWeight" label="重量(Kg)" align="center" />
<el-table-column prop="goodsPrice" label="单价" align="center">
<template #default="scope">
<div>¥ {{ scope.row.goodsPrice }}</div>
</template>
</el-table-column>
<el-table-column prop="goodsTotalNum" label="购买数量" align="center">
<template #default="scope">
<div>× {{ scope.row.goodsTotalNum }}</div>
</template>
</el-table-column>
<el-table-column prop="goodsTotalPrice" label="商品总价" align="center">
<template #default="scope">
<div>¥ {{ scope.row.goodsTotalPrice }}</div>
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 收货信息 / 发货信息 -->
<el-card class="box-card" v-if="detail.shopRefundAddressGuid">
<div class="card-title">商家收货信息</div>
<el-row class="order-info-box">
<el-col :span="8">收货人姓名: {{ detail.orderReceive?.consigneeName }}</el-col>
<el-col :span="8">联系电话: {{ detail.orderReceive?.phone }}</el-col>
<el-col :span="8">收货地区: {{ detail.orderReceive?.region }}</el-col>
</el-row>
<el-row class="order-info-box">
<el-col :span="8">详细地址: {{ detail.orderReceive?.detail }}</el-col>
<el-col :span="8">收货状态: <dict-tag :options="is_merchant_receive" :value="detail.isMerchantReceive" /></el-col>
<el-col :span="8">收货时间: {{ detail.merchantReceiveTime }}</el-col>
</el-row>
<div v-if="detail.isCustomerSend == 2">
<el-divider />
<div class="card-title">买家发货信息</div>
<el-row class="order-info-box">
<el-col :span="8">物流公司: {{ detail.logisticsCompany }}</el-col>
<el-col :span="8">物流单号: {{ detail.expressNo }}</el-col>
<el-col :span="8">发货状态: <dict-tag :options="is_customer_send" :value="detail.isCustomerSend" /></el-col>
</el-row>
<el-row class="order-info-box">
<el-col :span="8">发货时间: {{ detail.customerSendTime }}</el-col>
<el-col :span="8">备注 {{ detail.customerWaybillRemark }}</el-col>
</el-row>
</div>
</el-card>
<!-- 审核售后订单 -->
<AuditOrderRefundDialog v-model="AuditOrderRefundDialogVisible" :data="AuditOrderRefundDialogRow"
:done="() => getDetail()">
</AuditOrderRefundDialog>
</template>
<script setup>
import modal from '@/plugins/modal.js'
import { ElMessageBox } from 'element-plus'
import { getOrderRefundDetails, confirmsReceipt } from '@/api/business/OrderManage/OrderRefunds/orderRefund.js'
import AuditOrderRefundDialog from "./components/AuditOrderRefundDialog.vue";
const route = useRoute()
const { proxy } = getCurrentInstance()
const parm = reactive({
orderRefundId: route.query.orderRefundId
})
const AuditOrderRefundDialogVisible = ref(false);
const AuditOrderRefundDialogRow = ref({});
const loading = ref(true)
const detail = ref({})
// 获取详情
function getDetail() {
loading.value = true
getOrderRefundDetails(parm).then((res) => {
if (res.code == 200) {
loading.value = false;
detail.value = res.data;
}
console.log(detail.value, '详情');
});
}
getDetail()
// 审核修改订单
function handleAuditOrderRefund(row) {
AuditOrderRefundDialogVisible.value = true
AuditOrderRefundDialogRow.value = row
}
/** 确认收货按钮操作 */
function handleConfirmsReceipt(row) {
const Ids = row.orderRefundGuid
ElMessageBox.confirm("是否确认确认收货?", "系统提示", {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: "warning",
})
.then(function () {
return confirmsReceipt({ orderRefundGuid: Ids })
})
.then(() => {
getDetail()
modal.msgSuccess("确认收货成功")
})
.catch(() => { })
}
// 字典获取
const refund_type = ref([]);
async function getrefund_type() {
await proxy.getDicts('refund_type').then((res) => {
refund_type.value = res.data
})
}
getrefund_type()
// 字典获取
const refund_reason = ref([]);
async function getrefund_reason() {
await proxy.getDicts('refund_reason').then((res) => {
refund_reason.value = res.data
})
}
getrefund_reason()
// 字典获取
const goods_receive_status = ref([]);
async function getgoods_receive_status() {
await proxy.getDicts('goods_receive_status').then((res) => {
goods_receive_status.value = res.data
})
}
getgoods_receive_status()
// 字典获取
const merchant_audit_status = ref([]);
async function getmerchant_audit_status() {
await proxy.getDicts('merchant_audit_status').then((res) => {
merchant_audit_status.value = res.data
})
}
getmerchant_audit_status()
// 字典获取
const is_customer_send = ref([]);
async function getis_customer_send() {
await proxy.getDicts('is_customer_send').then((res) => {
is_customer_send.value = res.data
})
}
getis_customer_send()
// 字典获取
const order_refund_status = ref([]);
async function getorder_refund_status() {
await proxy.getDicts('order_refund_status').then((res) => {
order_refund_status.value = res.data
})
}
getorder_refund_status()
// 字典获取
const is_merchant_receive = ref([]);
async function getis_merchant_receive() {
await proxy.getDicts('is_merchant_receive').then((res) => {
is_merchant_receive.value = res.data
})
}
getis_merchant_receive()
</script>
<style lang="scss" scoped>
.box-card {
position: relative;
margin-bottom: 30px;
}
.card-title {
// font-size: 18px;
margin-bottom: 30px;
font-weight: bold;
}
.btn-box {
display: flex;
}
// 分割线
.o-divider {
margin-bottom: 32px;
}
// 步骤条
.order-progress {
height: 26px;
line-height: 26px;
background: #f8f8f8;
border-radius: 13px;
font-size: 14px;
text-align: center;
position: relative;
li {
list-style: none;
}
&:before,
&:after {
content: '';
position: absolute;
z-index: 2;
left: 0;
top: 0;
bottom: 0;
border-radius: 13px;
background: #1890ff;
}
&:after {
background: #91d5ff;
z-index: 1;
}
&.progress-1 {
&:before {
width: 0;
}
&:after {
width: 20%;
}
}
&.progress-2 {
&:before {
width: 20%;
}
&:after {
width: 40%;
}
}
&.progress-3 {
&:before {
width: 40%;
}
&:after {
width: 60%;
}
}
&.progress-4 {
&:before {
width: 60%;
}
&:after {
width: 80%;
}
}
&.progress-5 {
&:before {
width: 100%;
}
&:after {
width: 100%;
}
li {
&:nth-child(5) {
color: #fff;
}
}
}
li {
width: 20%;
float: left;
border-radius: 13px;
position: relative;
z-index: 3;
}
.tip {
font-size: 12px;
padding-top: 10px;
color: #8c8c8c;
}
&.progress-1 li:nth-child(1),
&.progress-2 li:nth-child(1),
&.progress-3 li:nth-child(1),
&.progress-4 li:nth-child(1),
&.progress-5 li:nth-child(1) {
color: #fff;
}
&.progress-2 li:nth-child(2),
&.progress-3 li:nth-child(2),
&.progress-4 li:nth-child(2),
&.progress-5 li:nth-child(2) {
color: #fff;
}
&.progress-3 li:nth-child(3),
&.progress-4 li:nth-child(3),
&.progress-5 li:nth-child(3) {
color: #fff;
}
&.progress-4 li:nth-child(4),
&.progress-5 li:nth-child(4) {
color: #fff;
}
}
// 信息盒子
.order-info {
margin-bottom: 10px;
}
.order-info-box {
font-size: 15px;
margin-top: 25px;
}
.order-info-box div {}
// 订单商品
.order-summary-box {
display: flex;
align-items: flex-end;
flex-direction: column;
margin: 20px 0;
div {
font-size: 15px;
margin-bottom: 5px;
}
}
.goods-info-box {
display: flex;
margin: 10px 0;
}
.goods-info-text {
width: 350px;
margin-bottom: 10px;
}
.m2 {
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
}
.el-alert {
display: flex;
// margin: 20px 0 0;
margin-bottom: 15px;
}
</style>