shop-applet/pages/users/refund/detail.vue

481 lines
13 KiB
Vue
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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>
<view class="refund-detail" :style="viewColor">
<view class="head">
<block v-if="type == -1">
<view class="txt">退款失败</view>
<view class="time">申请时间:{{detail.status_time}}</view>
</block>
<block v-if="type == 0">
<view class="txt">审核中</view>
<view class="time">申请时间:{{detail.status_time}}</view>
</block>
<block v-if="type == 1">
<view class="txt">请退货并填写物流信息</view>
<view class="time">申请时间:{{detail.status_time}}</view>
</block>
<block v-if="type == 2">
<view class="txt">请等待商家收货并退款</view>
<view class="time">还剩:
<countDown :is-day="true" :tip-text="' '" :day-text="'天'" :hour-text="':'" :minute-text="':'" :second-text="' '"
:datatime="datatime"></countDown>
</view>
</block>
<block v-if="type == 3">
<view class="txt">退款成功,金额 ¥{{detail.refund_price}}</view>
<view class="time">申请时间:{{detail.status_time}}</view>
</block>
<block v-if="type == -2">
<view class="txt">已取消退货申请</view>
<view class="time">申请时间:{{detail.status_time}}</view>
</block>
</view>
<!-- 拒绝 -->
<view class="box" v-if="type == -1">
<view class="txt">拒绝退款原因</view>
<view class="des">{{detail.fail_message}}</view>
</view>
<!-- 待退货 -->
<view class="info-box" v-if="type == 1">
<view class="title">商家已同意您的退货申请,请尽早退货</view>
<view class="store-info">
<view class="text">收货人姓名:<text class="info">{{detail.mer_delivery_user}}</text></view>
<view class="text">收货人联系方式:<text class="info">{{detail.phone}}</text></view>
<view class="text">收货人地址:<text class="des">{{detail.mer_delivery_address}}</text></view>
<view class="red-txt">
<text class="iconfont icon-zhuyi-copy"></text>请按以上收货信息将商品退回
</view>
</view>
</view>
<!-- 待收货 -->
<view class="info-box" v-if="type == 2">
<view class="title">商家收货并验货无误,将操作退款给您</view>
<view class="store-info">
<view class="text">收货人姓名:<text class="info">{{detail.mer_delivery_user}}</text></view>
<view class="text">收货人联系方式:<text class="info">{{detail.phone}}</text></view>
<view class="text">收货人地址:<text class="des">{{detail.mer_delivery_address}}</text></view>
</view>
</view>
<view class="info-box">
<view class="title">退款信息</view>
<view class="product-box">
<view class="product-item" v-for="(item,index) in detail.refundProduct" :key="index">
<image class="img-box" :src="item.product.cart_info.productAttr.image" mode="" v-if="item.product.cart_info.productAttr.image"></image>
<image class="img-box" :src="item.product.cart_info.product.image" mode="" v-else></image>
<view class="msg">
<view class="name line1"><text v-if="item.product.cart_info.product_type === 2" class="event_name event_bg">预售</text>{{item.product.cart_info.product.store_name}}</view>
<view class="des">{{item.product.cart_info.productAttr.sku}}</view>
<view class="price">¥{{item.product.product_type == 3 ? item.product.cart_info.productAssistAttr.assist_price : item.product.product_type == 4 ? item.product.cart_info.activeSku.active_price : item.product.cart_info.productAttr.price}}</view>
<view class="num">x {{item.refund_num}}</view>
</view>
</view>
</view>
</view>
<view class="content">
<view class="item">
<view class="label">订单编号:</view>
<view class="txt flex">
<text>{{detail.refund_order_sn}}</text>
<!-- #ifdef H5 -->
<text class='copy copy-data' :data-clipboard-text="detail.refund_order_sn">复制</text>
<!-- #endif -->
<!-- #ifdef MP -->
<text class='copy' @tap='copy'>复制</text>
<!-- #endif -->
</view>
</view>
<view class="item">
<view class="label">退款金额:</view>
<view class="txt flex">
<text>¥ {{detail.refund_price}}</text>
</view>
</view>
<view class="item">
<view class="label">申请件数:</view>
<view class="txt flex">
<text>{{detail.refund_num}}</text>
</view>
</view>
<view class="item">
<view class="label">申请时间:</view>
<view class="txt flex">
<text>{{detail.create_time}}</text>
</view>
</view>
<view class="item">
<view class="label">备注说明:</view>
<view class="txt flex">
<text>{{detail.mark ? detail.mark : ""}}</text>
</view>
</view>
<view class="item" style="display: block;">
<view class="label">退款凭证:</view>
<view class="upload-img">
<view class="img-item" v-for="(item,index) in detail.pics" :key="index">
<image :src="item" mode="" @click="loookImg(item,index)"></image>
</view>
</view>
</view>
<view class="btn-wrapper">
<block v-if="type==-1">
<view class="btn gray" @click="goService">联系商家</view>
<view class="btn" @click="applyAgain(detail)">再次申请</view>
</block>
<block v-else-if="type==1">
<view class="btn gray" @click="cancelSales">取消售后</view>
<view class="btn gray" @click="goService">联系商家</view>
<view class="btn" @click="goPage">退回商品</view>
</block>
<block v-else-if="type==2">
<view class="btn gray" @click="goService">联系商家</view>
<view class="btn" @click="go">查看物流</view>
</block>
<block v-else-if="type==0">
<view class="btn gray" @click="cancelSales">取消售后</view>
<view class="btn" @click="goService">联系商家</view>
</block>
<block v-else>
<view class="btn" @click="goService">联系商家</view>
</block>
</view>
</view>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import { refundDetail, refundCancelApi } from '@/api/order.js'
import ClipboardJS from "@/plugin/clipboard/clipboard.js";
import countDown from '@/components/countDown'
import { mapGetters } from "vuex";
export default{
components: {
countDown,
},
computed:{
...mapGetters(['viewColor']),
},
data(){
return{
type:0,
refund_order_id:0,
detail:'',
datatime: 0
}
},
onLoad(options) {
uni.setNavigationBarTitle({
  title:'退款详情'
})
this.refund_order_id = options.id
this.getDetail()
},
onReady: function() {
// #ifdef H5
this.$nextTick(function() {
const clipboard = new ClipboardJS(".copy-data");
clipboard.on("success", () => {
this.$util.Tips({
title: '复制成功'
});
});
});
// #endif
},
methods:{
//查看大图
loookImg(item,index){
uni.previewImage({
urls: this.detail.pics,
current: this.detail.pics[index]
});
},
getDetail(){
refundDetail(this.refund_order_id).then(res=>{
// status 0审核中 1待发货 2待收货 3已退款 -1已拒绝
this.type = res.data.status
this.detail = res.data
this.datatime = res.data.auto_refund_time;
})
},
goPage(){
uni.navigateTo({
url:'/pages/users/refund/goods/index?id='+this.detail.refund_order_id
})
},
applyAgain(item){
uni.navigateTo({
url:`/pages/order_details/index?order_id=${item.refundProduct[0].product.order_id}`
})
},
go(){
uni.navigateTo({
url:`/pages/users/refund/logistics?orderId=${this.detail.refund_order_id}`
})
},
/**
*
* 剪切订单号
*/
// #ifndef H5
copy: function() {
let that = this;
uni.setClipboardData({
data: this.detail.refund_order_sn
});
},
// #endif
// 客服
goService(){
uni.navigateTo({
url:`/pages/chat/customer_list/chat?mer_id=${this.detail.mer_id}&uid=${this.detail.uid}&refund_order_id=${this.detail.refund_order_id}`
})
},
// 取消售后
cancelSales(){
let that = this;
uni.showModal({
content: '确定要取消售后?',
success: function(res) {
if(res.confirm) {
refundCancelApi(that.detail.refund_order_id).then(res => {
if (res.status === 200) {
that.$util.Tips({
title: res.message
});
that.getDetail();
}
})
} else if(res.cancel) {
// console.log('用户点击取消');
}
}
});
},
}
}
</script>
<style lang="scss">
.refund-detail{
.head{
display: flex;
flex-direction: column;
justify-content: center;
height: 150rpx;
padding: 0 30rpx;
color: #fff;
background-color: #666666;
font-size: 30rpx;
.txt{
font-weight: bold;
}
.time{
margin-top: 10rpx;
font-size: 24rpx;
opacity: .8;
.time{
display: inline-block;
width: 600rpx;
/deep/ .red{
color: #fff;
}
}
}
}
.info-box{
margin-top: 12rpx;
background-color: #fff;
.title{
padding: 0 32rpx;
line-height: 86rpx;
border-bottom: 1px solid #F0F0F0;
color: #282828;
}
.product-box{
.product-item{
display: flex;
padding: 25rpx 30rpx;
.img-box{
width:130rpx;
height:130rpx;
border-radius:16rpx;
}
.msg{
position: relative;
display: flex;
flex-direction: column;
justify-content: space-between;
width: 440rpx;
margin-left: 26rpx;
.name{
font-size: 28rpx;
color: #282828;
}
.des{
font-size: 20rpx;
color: #868686;
}
.price{
font-size: 26rpx;
color: var(--view-priceColor);
}
.num{
position: absolute;
right: -80rpx;
top: 4rpx;
color: #868686;
font-size: 26rpx;
}
}
}
.event_name{
display: inline-block;
margin-right: 9rpx;
color: #fff;
font-size: 20rpx;
padding: 0 8rpx;
line-height: 30rpx;
text-align: center;
border-radius: 6rpx;
}
}
.event_bg{
background: #FF7F00;
}
.store-info{
padding: 30rpx;
.des{
margin-top: 10rpx;
font-size: 26rpx;
color: #868686;
}
.red-txt{
display: flex;
align-items: center;
margin-top: 10rpx;
color: $theme-color;
font-size: 24rpx;
.iconfont{
font-size: 30rpx;
margin-right: 5rpx;
margin-top: 6rpx;
}
}
}
}
.content{
margin-top: 12rpx;
padding: 30rpx 30rpx 0;
background-color: #FFFFFF;
.item{
display: flex;
justify-content: space-between;
margin-bottom: 30rpx;
.txt{
justify-content: flex-end;
align-items: center;
width: 450rpx;
color: #868686;
text-align: right;
.copy{
display: flex;
align-items: center;
justify-content: center;
width:80rpx;
height:34rpx;
margin-left: 20rpx;
border:1px solid #666666;
border-radius:17rpx;
font-size: 20rpx;
color: #333;
}
}
&:last-child{
margin-bottom: 0;
}
.upload-img{
display: flex;
flex-wrap: wrap;
margin-top: 20rpx;
.img-item{
position: relative;
width: 156rpx;
height: 156rpx;
margin-right: 23rpx;
margin-top: 20rpx;
&:nth-child(4n){
margin-right: 0;
}
image{
width: 156rpx;
height: 156rpx;
border-radius: 8rpx;
}
}
}
}
.btn-wrapper{
position: relative;
display: flex;
justify-content: flex-end;
align-items: center;
height: 100rpx;
button{
font-size: 28rpx;
}
.btn{
width:176rpx;
height:60rpx;
display: flex;
align-items: center;
justify-content: center;
margin-left: 20rpx;
background: var(--view-theme);
border-radius:30rpx;
color: #fff;
}
.gray{
background: transparent;
border: 1px solid #eee;
color: #AAAAAA;
}
&:after{
content:' ';
position: absolute;
top: 0;
left: 50%;
width: 690rpx;
height:1px;
margin-left: -345rpx;
background-color: #f0f0f0;
}
}
}
.box{
margin-top: 12rpx;
padding:25rpx 30rpx;
background-color: #fff;
font-size: 30rpx;
color: #282828;
.des{
margin-top: 5rpx;
font-size: 26rpx;
color: #868686;
}
}
}
/deep/.styleAll{
color: #fff;
}
</style>