管理端售后,添加跳转链接

master
mabo 2021-07-22 18:05:55 +08:00
parent 2f8946f372
commit 80d070bb67
8 changed files with 361 additions and 465 deletions

View File

@ -5,7 +5,7 @@
<div>
<div class="coupon-title">
<router-link to="/">
<img src="../assets/images/logo1.png" width="120" alt="">
<img src="../assets/images/logo.png" width="120" alt="">
</router-link>
<p>领券中心</p>
<Input search style="width:400px" @on-search='search' enter-button="" placeholder="搜索优惠券" />

View File

@ -52,10 +52,6 @@ export const afterSaleStatusList = [
name: '买家退货,待卖家收货',
status: 'BUYER_RETURN'
},
{
name: '商家换货/补发',
status: 'SELLER_RE_DELIVERY'
},
{
name: '卖家确认收货',
status: 'SELLER_CONFIRM'

View File

@ -8,8 +8,11 @@
<div class="goodsImg hover-pointer" v-if="params.type === 'GOODS'">
<img :src="item.image" />
</div>
<div class="goodsTitle hover-pointer">
{{params.type === 'GOODS'? item.goodsName : item.storeName}}
<div class="goodsTitle hover-color" v-if="params.type === 'GOODS'" @click="buynow(item.skuId, item.goodsId)">
{{item.goodsName}}
</div>
<div v-else class="goodsTitle hover-pointer">
{{item.storeName}}
</div>
<div class="goodsPrice">
<span v-if="params.type === 'GOODS'">{{item.price | unitPrice('')}}</span>

View File

@ -117,16 +117,10 @@ export const getAfterSaleOrderPage = (params) => {
export const getAfterSaleOrderDetail = (sn) => {
return getRequest(`/afterSale/get/${sn}`)
}
//售后单查询物流
export const getSellerDeliveryTraces = (sn, params) => {
return getRequest(`/afterSale/getSellerDeliveryTraces/${sn}`, params)
export const getAfterSaleTraces = (sn) => {
return getRequest(`/afterSale/getDeliveryTraces/${sn}`)
}
//售后单查询物流
export const getAfterSaleTraces = (sn, params) => {
return getRequest(`/afterSale/getDeliveryTraces/${sn}`, params)
}
// 获取商家选中的物流公司
export const getLogisticsChecked = () => {
return getRequest(`/logistics/getChecked`)
@ -157,6 +151,11 @@ export const refundLog = (params) => {
return getRequest(`/refundLog`, params)
}
//售后单商家收货信息
export const storeAddress = (sn) => {
return getRequest(`/afterSale/getStoreAfterSaleAddress/${sn}`)
}

View File

@ -17,11 +17,14 @@ export default {
* @description api请求基础路径
*/
api_dev: {
common: "https://common-api.pickmall.cn",
buyer: "https://buyer-api.pickmall.cn",
seller: "https://store-api.pickmall.cn",
manager: "https://admin-api.pickmall.cn"
// common: "https://common-api.pickmall.cn",
// buyer: "https://buyer-api.pickmall.cn",
// seller: "https://store-api.pickmall.cn",
// manager: "https://admin-api.pickmall.cn"
common: 'http://192.168.0.101:8890',
buyer: 'http://192.168.0.101:8888',
seller: 'http://192.168.0.101:8889',
manager: 'http://192.168.0.101:8887'
},
api_prod: {
common: "https://common-api.pickmall.cn",

View File

@ -149,12 +149,8 @@ export default {
this.previewGoodsPicture = url;
this.goodsPictureVisible = true;
}
,
}
,
}
;
</script>
<style lang="scss" soped>

View File

@ -1,7 +1,5 @@
<template>
<div class="search">
<Row>
<Col>
<Card>
<div class="main-content">
<div class="div-flow-left">
@ -9,17 +7,7 @@
<h3>退货申请</h3>
<dl>
<dt>退货状态</dt>
<dd v-if="afterSaleInfo.serviceStatus =='APPLY'">退</dd>
<dd v-if="afterSaleInfo.serviceStatus =='PASS'"></dd>
<dd v-if="afterSaleInfo.serviceStatus =='REFUSE'"></dd>
<dd v-if="afterSaleInfo.serviceStatus =='BUYER_RETURN'">退</dd>
<dd v-if="afterSaleInfo.serviceStatus =='SELLER_RE_DELIVERY'"></dd>
<dd v-if="afterSaleInfo.serviceStatus =='SELLER_CONFIRM'"></dd>
<dd v-if="afterSaleInfo.serviceStatus =='SELLER_TERMINATION'"></dd>
<dd v-if="afterSaleInfo.serviceStatus =='BUYER_CONFIRM'"></dd>
<dd v-if="afterSaleInfo.serviceStatus =='BUYER_CANCEL'"></dd>
<dd v-if="afterSaleInfo.serviceStatus =='WAIT_REFUND'">退</dd>
<dd v-if="afterSaleInfo.serviceStatus =='COMPLETE'"></dd>
<dd>{{afterSaleInfo.serviceName}}</dd>
</dl>
<dl>
<dt>退货退款编号</dt>
@ -35,7 +23,7 @@
</dl>
<dl v-if="afterSaleInfo.actualRefundPrice">
<dt>实际退款金额</dt>
<dd>{{afterSaleInfo.actualRefundPrice}}</dd>
<dd>{{afterSaleInfo.actualRefundPrice | unitPrice}}</dd>
</dl>
<dl v-if="afterSaleInfo.refundPoint">
<dt>退还积分</dt>
@ -55,7 +43,7 @@
暂无凭证
</dd>
<dd v-else>
<div class="div-img" v-for="(item, index) in afterSaleImage">
<div class="div-img" v-for="(item, index) in afterSaleImage" :key="index">
<img class="complain-img" :src=item>
</div>
</dd>
@ -121,10 +109,9 @@
<div class="div-content">
{{afterSaleInfo.storeName}}
</div>
</dd>
</dl>
<dl>
<!-- <dl>
<dt>审核结果</dt>
<dd>
<div class="div-content">
@ -137,11 +124,11 @@
</div>
</dd>
</dl>
</dl> -->
<dl>
<dt>备注信息</dt>
<dd>
{{afterSaleInfo.auditRemark}}
{{afterSaleInfo.auditRemark || '暂无备注信息'}}
</dd>
</dl>
</div>
@ -157,8 +144,16 @@
<img :src="afterSaleInfo.goodsImage" height="60px">
</dt>
<dd>
<a>{{afterSaleInfo.goodsName}}</a><br>
<span>{{afterSaleInfo.num}}(数量)</span><br>
<div class="div-zoom">
<a @click="linkTo(afterSaleInfo.goodsId,afterSaleInfo.skuId)">{{afterSaleInfo.goodsName}}</a>
<Poptip trigger="hover" title="扫码在手机中查看" transfer>
<div slot="content">
<vue-qr :text="wapLinkTo(afterSaleInfo.goodsId,afterSaleInfo.skuId)" :margin="0" colorDark="#000" colorLight="#fff" :size="150"></vue-qr>
</div>
<img src="../../../assets/qrcode.svg" style="vertical-align:middle" class="hover-pointer ml_10" width="20" height="20" alt="">
</Poptip>
</div>
<div style="color:#999;font-size:10px">数量x{{afterSaleInfo.num}}</div>
</dd>
</dl>
@ -194,7 +189,6 @@
</dl>
</div>
<!--"-->
<div class="div-form-default" v-if="afterSaleInfo.afterSaleAllowOperationVO && afterSaleInfo.afterSaleAllowOperationVO.refund">
<h3>平台退款</h3>
<dl>
@ -229,41 +223,24 @@
</Button>
</dd>
</dl>
</div>
<div class="div-form-default" v-if="afterSaleInfo.serviceStatus =='BUYER_RETURN'">
<div class="div-form-default" v-if="afterSaleInfo.showDelivery && afterSaleInfo.serviceType ==='RETURN_GOODS'">
<h3>物流信息</h3>
<dl>
<dt>
收货商家
</dt>
<dd>
{{afterSaleInfo.storeName}}
</dd>
<dt>收货商家</dt>
<dd>{{afterSaleInfo.storeName}}</dd>
</dl>
<dl>
<dt>
收货商家手机
</dt>
<dd>
{{afterSaleInfo.sconsigneeMobile}}
</dd>
<dt>收货商家手机</dt>
<dd>{{storeMsg.salesConsigneeMobile}}</dd>
</dl>
<dl>
<dt>
收货地址
</dt>
<dd>
{{afterSaleInfo.sconsigneeAddressPath}} {{afterSaleInfo.sconsigneeDetail}}
</dd>
<dt>收货地址</dt>
<dd>{{storeMsg.salesConsigneeAddressPath}} {{storeMsg.salesConsigneeDetail}}</dd>
</dl>
<dl>
<dt>
物流公司
</dt>
<dd>
{{afterSaleInfo.mlogisticsName}}
</dd>
<dt>物流公司</dt>
<dd>{{afterSaleInfo.mlogisticsName}}</dd>
</dl>
<dl>
<dt>
@ -276,75 +253,7 @@
<dl>
<dt>操作</dt>
<dd>
<Button type="primary" :loading="submitLoading" @click="sellerConfirmSubmit" style="margin-left: 5px">
确认收货
</Button>
<Button type="primary" :loading="submitLoading" @click="logisticsSeller()" style="margin-left: 5px">
查询物流
</Button>
</dd>
</dl>
</div>
<div class="div-form-default" v-if="afterSaleInfo.serviceStatus =='PASS' && afterSaleInfo.serviceType == 'EXCHANGE_GOODS'">
<h3>换货</h3>
<dl>
<dt>
换货
</dt>
<dd>
<Button type="primary" :loading="submitLoading" @click="exchangeGoods" style="margin-left: 5px">
换货
</Button>
</dd>
</dl>
</div>
<div class="div-form-default" v-if="afterSaleInfo.serviceStatus =='SELLER_RE_DELIVERY'">
<h3>物流信息</h3>
<dl>
<dt>
收货人
</dt>
<dd>
{{afterSaleInfo.mconsigneeName}}
</dd>
</dl>
<dl>
<dt>
收货人手机
</dt>
<dd>
{{afterSaleInfo.mconsigneeMobile}}
</dd>
</dl>
<dl>
<dt>
收货地址
</dt>
<dd>
{{afterSaleInfo.mconsigneeAddressPath}} {{afterSaleInfo.mconsigneeDetail}}
</dd>
</dl>
<dl>
<dt>
物流公司
</dt>
<dd>
{{afterSaleInfo.mlogisticsName}}
</dd>
</dl>
<dl>
<dt>
物流单号
</dt>
<dd>
{{afterSaleInfo.mlogisticsNo}}
</dd>
</dl>
<dl>
<dt>操作</dt>
<dd>
<Button type="primary" :loading="submitLoading" @click="logisticsBuyer()" style="margin-left: 5px">
<Button type="info" :loading="submitLoading" @click="logisticsSeller()" style="margin-left: 5px">
查询物流
</Button>
</dd>
@ -354,36 +263,7 @@
</div>
</div>
</Card>
</Col>
</Row>
<!-- 订单发货 -->
<Modal v-model="modalVisible" width="500px">
<p slot="header">
<span>订单发货</span>
</p>
<div>
<Form ref="form" :model="form" :label-width="90" :rules="formValidate" style="position:relative">
<FormItem label="物流公司" prop="logisticsId">
<Select v-model="form.logisticsId" placeholder="请选择" style="width:250px">
<Option v-for="(item, i) in checkedLogistics" :key="i" :value="item.id">{{item.name}}
</Option>
</Select>
</FormItem>
<FormItem label="物流单号" prop="logisticsNo">
<Input v-model="form.logisticsNo" style="width:250px" />
</FormItem>
</Form>
</div>
<div slot="footer" style="text-align: right">
<Button size="large" @click="orderDeliverCancel"></Button>
<Button type="success" size="large" @click="orderDeliverySubmit"></Button>
</div>
</Modal>
<!-- 查询物流 -->
<Modal v-model="logisticsModal" width="40">
<p slot="header">
@ -399,26 +279,30 @@
<dl>
<dt>物流公司</dt>
<dd>
<div class="text-box">{{logisticsInfo.shipper}}</div>
<div class="text-box">{{afterSaleInfo.mlogisticsName}}</div>
</dd>
</dl>
<dl>
<dt>快递单号</dt>
<dd>
<div nctype="ordersSn" class="text-box">{{logisticsInfo.logisticCode}}</div>
<div class="text-box">{{afterSaleInfo.mlogisticsNo}}</div>
</dd>
</dl>
<div class="div-express-log">
<ul class="express-log">
<li v-for="(item,index) in logisticsInfo.traces">
<template v-if="Object.keys(logisticsInfo).length">
<li v-for="(item,index) in logisticsInfo.traces" :key="index">
<span class="time">{{item.AcceptTime}}</span>
<span class="detail">{{item.AcceptStation}}</span>
</li>
</template>
<template v-else>
<li style="text-align:center;">暂无物流信息</li>
</template>
</ul>
</div>
</div>
<div slot="footer" style="text-align: right">
<Button @click="logisticsClose"></Button>
</div>
@ -428,17 +312,14 @@
<script>
import * as API_Order from "@/api/order";
import uploadPicThumb from "@/views/my-components/lili/upload-pic-thumb";
export default {
name: "orderComplaint",
components: {
uploadPicThumb,
},
name: "orderDetail",
data() {
return {
sn: "", //
logisticsModal: false, //
logisticsInfo: {}, //
form: {
logisticsNo: "",
@ -458,6 +339,7 @@ export default {
appealImages: [], //
submitLoading: false, //
checkedLogistics: [], //
storeMsg: {}, //
//
params: {
serviceStatus: "PASS",
@ -467,18 +349,59 @@ export default {
refundPriceForm: {
remark: "",
},
afterSaleStatusList: [ //
{
name: '申请中',
status: 'APPLY'
},
{
name: '通过',
status: 'PASS'
},
{
name: '拒绝',
status: 'REFUSE'
},
{
name: '买家退货,待卖家收货',
status: 'BUYER_RETURN'
},
{
name: '卖家确认收货',
status: 'SELLER_CONFIRM'
},
{
name: '卖家终止售后',
status: 'SELLER_TERMINATION'
},
{
name: '买家取消售后',
status: 'BUYER_CANCEL'
},
{
name: '完成售后',
status: 'COMPLETE'
},
{
name: '等待平台退款',
status: 'WAIT_REFUND'
}
]
};
},
watch: {
$route(to, from) {},
},
methods: {
//
getDetail() {
this.loading = true;
API_Order.getAfterSaleOrderDetail(this.sn).then((res) => {
this.loading = false;
if (res.success) {
this.afterSaleInfo = res.result;
this.afterSaleInfo.showDelivery = this.showDelivery(this.afterSaleInfo.serviceStatus)
this.afterSaleInfo.serviceName = this.filterOrderStatus(this.afterSaleInfo.serviceStatus)
this.afterSaleImage = (res.result.afterSaleImage || "").split(",");
//退
if (this.afterSaleInfo.mconsigneeAddressPath)
@ -490,38 +413,23 @@ export default {
"actualRefundPrice",
this.afterSaleInfo.applyRefundPrice
);
//
if (this.afterSaleInfo.showDelivery) {
API_Order.storeAddress(this.sn).then(resu => {
if(resu.success) {
const obj = resu.result
obj.salesConsigneeAddressPath = obj.salesConsigneeAddressPath.replaceAll(',', '')
this.storeMsg = obj;
}
});
},
//
exchangeGoods() {
API_Order.getLogisticsChecked().then((res) => {
if (res.success) {
this.checkedLogistics = res.result;
this.modalVisible = true;
})
}
}
});
},
orderDeliverCancel() {
this.modalVisible = false;
},
//
sellerConfirmSubmit() {
this.$Modal.confirm({
title: "确认收货",
content: "请确认已经收到退货货物?",
loading: true,
onOk: () => {
API_Order.afterSaleSellerConfirm(this.sn, this.params).then((res) => {
this.$Modal.remove();
if (res.success) {
this.$Message.success("收货成功");
this.getDetail();
}
});
},
});
},
//退
refundPriceSubmit() {
if (this.refundPriceForm.remark == "") {
@ -545,15 +453,6 @@ export default {
},
//
logisticsSeller() {
this.logisticsModal = true;
API_Order.getSellerDeliveryTraces(this.sn).then((res) => {
if (res.success && res.result != null) {
this.logisticsInfo = res.result;
}
});
},
//
logisticsBuyer() {
this.logisticsModal = true;
API_Order.getAfterSaleTraces(this.sn).then((res) => {
if (res.success && res.result != null) {
@ -565,21 +464,6 @@ export default {
logisticsClose() {
this.logisticsModal = false;
},
//
orderDeliverySubmit() {
this.$refs.form.validate((valid) => {
if (valid) {
API_Order.afterSaleSellerDelivery(this.sn, this.form).then((res) => {
if (res.success) {
this.$Message.success("订单发货成功");
this.modalVisible = false;
this.getDataDetail();
}
});
}
});
},
//
handleSubmit() {
if (this.params.remark == "") {
@ -599,6 +483,21 @@ export default {
}
});
},
filterOrderStatus (status) { //
const ob = this.afterSaleStatusList.filter(e => { return e.status === status });
return ob[0].name
},
//
showDelivery (status) {
let flag = false;
this.afterSaleStatusList.forEach((e,index) => {
// 退
if(e.status === status && index>=3 && index !==6) {
flag = true
}
})
return flag
}
},
mounted() {

View File

@ -117,9 +117,6 @@
</span>
</p>
</div>
<div class="ant-col-md-6">
<p class="item">
<span class="label">法人姓名</span>
@ -185,7 +182,7 @@
</div>
</Card>
<Card>
<Card class="mt_10">
<Tabs type="order" @on-click="storeInfoChange">
<TabPane label="TA的订单" name="order" style="min-height: 200px">
<Row>
@ -254,6 +251,7 @@
:columns="orderColumns"
:data="orderData"
ref="table"
class="mt_10"
sortable="custom"
@on-sort-change="orderChangeSort"
>
@ -355,6 +353,7 @@
:columns="refundGoodsOrderColumns"
:data="refundGoodsOrderData"
ref="table"
class="mt_10"
sortable="custom"
@on-sort-change="refundGoodsOrderChangeSort"
>
@ -478,6 +477,7 @@
:columns="refundGoodsOrderColumns"
:data="refundOrderData"
ref="table"
class="mt_10"
sortable="custom"
@on-sort-change="refundOrderChangeSort"
>