Files
2023-11-15 19:59:37 +08:00

477 lines
13 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>
<layout class="orderInfo">
<uv-navbar
:fixed="false"
title="售后订单详情"
left-arrow
@leftClick="goBack"
/>
<view v-if="orderInfoData">
<view class="orderInfo-header background-warp" :class="orderInfoData.state === 0 && 'mb-100'">
<view class="background">
<image
class="image"
src="@/static/images/refund-order-bg.png"
mode="widthFix"
/>
</view>
<view class="background-content page-space">
<view class="order-status-info">
<view class="order-status" :class="'order-status-'+ orderInfoData.state">
<view>
<!-- {{ orderInfoStatusMsg }}-->
{{refundOrderStatus[orderInfoData.state]}}
</view>
</view>
<view class="order-date">
还剩1天20小时自动确认
</view>
</view>
<!-- <view class="address noBorder">-->
<!-- <view class="address-icon">-->
<!-- <image-->
<!-- class="image"-->
<!-- src="@/static/images/icon-location.png"-->
<!-- />-->
<!-- </view>-->
<!-- <view class="address-main">-->
<!-- <view class="address-header">-->
<!-- <view class="address-name">{{ orderInfoData.realName }}</view>-->
<!-- <view class="address-phone">{{ orderInfoData.userPhone }}</view>-->
<!-- </view>-->
<!-- <view class="address-content">-->
<!-- <view class="address-desc">{{ orderInfoData.userAddress }}</view>-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
</view>
</view>
<view class="page-space">
<view class="mb-20 card" v-if="orderInfoData.realName">
<view class="card-head">
<view class="card-title">
商家收货信息
</view>
</view>
<view class="card-content">
<view class="infos">
<view class="info-cell">
<view class="info-cell-label">
收货人
</view>
<view class="info-cell-value">
<view class="address-name">{{ orderInfoData.realName }}</view>
<view class="address-phone">{{ orderInfoData.userPhone }}</view>
</view>
</view>
<view class="info-cell">
<view class="info-cell-label">
<text class="wem1"></text>
</view>
<view class="info-cell-value">
{{ orderInfoData.userAddress }}
</view>
</view>
</view>
</view>
</view>
<view class="mb-20 card" v-if="orderInfoData.deliverySn">
<view class="card-head">
<view class="card-title">
物流信息
</view>
</view>
<view class="card-content">
<view class="infos">
<view class="info-cell">
<view class="info-cell-label">
物流单号
</view>
<view class="info-cell-value">
{{ orderInfoData.deliverySn }}
</view>
</view>
<view class="info-cell">
<view class="info-cell-label">
物流公司
</view>
<view class="info-cell-value">
{{ orderInfoData.deliveryName }}
</view>
</view>
</view>
</view>
</view>
<view class="order-goods page-card mb-20">
<goods
list
interval
desc="3"
showAction
model
:purchase="item.cartNum"
:data="item.productInfo"
:price="item.truePrice"
v-for="(item, index) in orderInfoData.cartInfo"
>
</goods>
<view class="order-infos infos mb-20 infos-right border-top">
<view class="info-cell">
<view class="info-cell-label">商品总价</view>
<view class="info-cell-value">¥{{ orderInfoData.totalPrice }}</view>
</view>
<view class="info-cell ">
<view class="info-cell-label">优惠</view>
<view class="info-cell-value">¥{{ orderInfoData.couponPrice }}</view>
</view>
<view class="info-cell ">
<view class="info-cell-label">运费</view>
<view class="info-cell-value">¥{{ orderInfoData.totalPostage }}</view>
</view>
<view class="info-cell ">
<view class="info-cell-label">总计</view>
<view class="info-cell-value">¥{{ orderInfoData.payPrice.toFixed(2) }}</view>
</view>
</view>
</view>
<view class="mb-20 card">
<view class="card-head">
<view class="card-title">
售后信息
</view>
</view>
<view class="card-content">
<view class="infos">
<view class="info-cell">
<view class="info-cell-label">
退款金额
</view>
<view class="info-cell-value">
¥{{ orderInfoData.refundAmount }}
</view>
</view>
<view class="info-cell">
<view class="info-cell-label">
服务类型
</view>
<view class="info-cell-value">
{{ orderInfoData.serviceType===0?'仅退款':'退货退款' }}
</view>
</view>
<view
class="info-cell"
>
<view class="info-cell-label">
订单编号
</view>
<view class="info-cell-value">
{{ orderInfoData.orderId }}
</view>
</view>
<view
class="info-cell"
>
<view class="info-cell-label">
退款原因
</view>
<view class="info-cell-value">
{{ orderInfoData.reasons }}
</view>
</view>
<view
class="info-cell"
>
<view class="info-cell-label">
详细说明
</view>
<view class="info-cell-value">
<view>{{ orderInfoData.explains }}</view>
<view>
<view></view>
</view>
</view>
</view>
</view>
</view>
</view>
<view
class="mb-20 card"
v-if="orderInfoData.status > 1"
>
<view class="card-head">
<view class="card-title">
物流信息
</view>
</view>
<view
class="card-content "
v-if="expressData"
>
<view class="paddingH-10">
<uv-steps
current="0"
direction="column"
activeColor="#EE6D46"
inactiveColor="#E5E5E5"
>
<uv-steps-item
v-for="(item, index) in expressData"
:key="index"
:title="item.acceptStation"
:desc="item.acceptTime"
></uv-steps-item>
</uv-steps>
</view>
</view>
</view>
</view>
<view class="bottom-bar-bg"></view>
<view
class="order-actions bottom-bar"
>
<!-- 已发货 待收货 -->
<view class="order-actions-left">
</view>
<view class="order-actions-btns">
<view
class="order-actions-default"
@tap="handleDelete"
v-if="[3,4].includes(orderInfoData.state)"
>
删除记录
</view>
<view
class="order-actions-default"
@tap="handleRevoke"
v-if="[0,1].includes(orderInfoData.state)"
>
撤销申请
</view>
<view
class="order-actions-default"
@tap="toRefund"
v-if="orderInfoData.state === 5"
>
再次申请
</view>
<view
class="order-actions-default"
@tap="toAddLogistics"
v-if="orderInfoData.state === 1"
>
填写物流
</view>
</view>
</view>
</view>
</layout>
</template>
<script setup>
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store'
import {
orderCancel,
checkForAfterSalesInfo,
orderTake,
orderDelete,
orderExpress,
afterSalesOrderDelete, afterSalesOrderRevoke
} from '@/api/order'
import { orderReStatus } from '@/config'
import { useRouter } from "@/hooks/useRouter";
import {useGlobalProperties} from "@/hooks";
const {$timeFormat} = useGlobalProperties()
const {getParams,push,goBack} = useRouter()
const orderInfoData = ref(null)
const orderInfoStatusMsg = ref('')
const expressData = ref(null)
const orderId = ref(0)
const refundOrderStatus = ref({
0: '请耐心等待平台审核',
1: '平台已同意退货申请,请尽早退货',
2: '请耐心等待平台确认收货',
3: '退款成功',
4: '用户已取消',
5: '商家已拒绝',
})
const handleOrderInfo = async (option) => {
const res = await checkForAfterSalesInfo(option)
orderInfoData.value = res
}
// 删除记录
const handleDelete = async () => {
uni.showModal({
title: '提示',
content: '确认删除记录',
success: async (res) => {
if (res.confirm) {
await afterSalesOrderDelete({
id: orderId.value,
orderCode: orderInfoData.value.orderId
})
uni.showToast({
title: '已删除',
duration: 2000
});
setTimeout(()=>{
toRefundList()
},2000)
} else if (res.cancel) {
}
}
});
}
// 撤销申请
const handleRevoke = async () => {
uni.showModal({
title: '提示',
content: '确认撤销申请吗',
success: async (res) => {
if (res.confirm) {
await afterSalesOrderRevoke({
id: orderId.value,
key: orderInfoData.value.orderId
})
uni.showToast({
title: '已撤销',
duration: 2000
});
setTimeout(()=>{
toRefundList()
},2000)
} else if (res.cancel) {
}
}
});
}
// 跳转列表
const toRefundList = () => {
push({url: '/pages/refundList/refundList'})
}
// 填写物流
const toAddLogistics = () => {
push({url: '/pages/addLogistics/addLogistics'}, {
data: {
id: orderInfoData.value.id,
orderCode: orderInfoData.value.orderCode
}
})
}
// 再次申请
const toRefund = () => {
push({url: '/pages/refund/refund'}, {
data: {
refundType: orderInfoData.value.serviceType,
goods: orderInfoData.value.cartInfo.map(v=>{
return v.productAttrUnique
}).toString(),
id: orderInfoData.value.id
}
})
}
onLoad((options) => {
const params = getParams(options)
orderId.value = params.id
handleOrderInfo({
key: params.id
})
})
</script>
<style lang="scss">
.orderList {
padding: 20rpx 0;
}
.page-space{
position: relative;
z-index: 2;
}
.order-header {}
.order-status-info {
padding: 50rpx 0;
.order-status {
display: flex;
align-items: center;
height: 42rpx;
font-size: 30rpx;
color: #FFFFFF;
margin-bottom: 20rpx;
padding-left: 50rpx;
background-size: 40rpx 40rpx;
background-position: left center;
background-repeat: no-repeat;
&.order-status-0,&.order-status-1,&.order-status-2,&.order-status-5{
background-image: url("../../static/images/icon-order-info-5.png");
}
&.order-status-3,&.order-status-4{
background-image: url("../../static/images/icon-order-info-4.png");
}
.image {
width: 40rpx;
height: 40rpx;
margin-right: 10rpx;
}
}
.order-date {
height: 33rpx;
font-size: 24rpx;
color: #FFFFFF;
}
}
.order-infos {
margin: 0 40rpx;
padding: 40rpx 0 20rpx;
&:after {
content: '';
}
}
.infos{
.info-cell-label{
.wem1{
width: 1em;
display: inline-block;
}
}
.info-cell-value{
display: flex;
}
}
</style>