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.
 
 
 
 
 

330 lines
11 KiB

<template>
<div class="search">
<div style="display: flex;">
<div class="waiceng">
<div class="title">订单信息</div>
<div>订单编号{{orderData.numberCode}}</div>
<div>支付订单编号{{'ORDER'+orderData.id}}</div>
</div>
<div class="waiceng">
<div class="title">用户信息</div>
<div>收货人<span class="blue-color">{{orderData.receiverName}}</span></div>
<div>收货电话<span class="blue-color">{{orderData.receiverPhone}}</span></div>
<div>收货地址<span class="blue-color">{{orderData.receiverAddress}}</span></div>
<div>要求送达时间<span class="blue-color">{{orderData.deliveryInfo.mustFinishTime | formatDateTime}}</span></div>
</div>
<div class="waiceng">
<div class="title">店铺信息</div>
<div>店铺名称<span class="blue-color">{{orderData.shopName}}</span></div>
<div>店铺电话<span class="blue-color">{{orderData.shopPhone}}</span></div>
<div>配送方式 <span class="blue-color">{{orderData.deliveryType == 1?'配送':'不配送'}}</span></div>
</div>
<div class="waiceng">
<div class="title">其他信息</div>
<div>配送员<span class="blue-color">{{orderData.deliveryInfo.workerName}}</span></div>
<div>配送员电话<span class="blue-color">{{orderData.deliveryInfo.workerPhone}}</span></div>
<div>备注<span class="blue-color">{{orderData.deliveryInfo.remark}}</span></div>
</div>
</div>
<div style="display: flex;" v-if="orderData.status ==7 || orderData.status ==11">
<div class="waiceng" style="width: 70%;">
<div class="title" style="color:red">申请退款信息-用户全部退款</div>
<div class="box" v-for="(item,index) in orderData.goodsList" :key="index">
<div style="flex:1;">{{item.productName}}</div>
<div class="price"> X{{item.quantity}}</div>
<div class="price">¥{{item.price}}</div>
</div>
<div class="box">
<div style="flex:1;">餐盒费</div>
<div class="price">¥{{orderData.packageFee}}</div>
</div>
<div class="box">
<div style="flex:1;">配送费</div>
<div class="price">¥{{orderData.deliveryFee}}</div>
</div>
<div class="zong">
合计退款:<span style="color:red;">¥{{orderData.totalAmount}}</span></div>
</div>
<div style="background: #fff;padding: 10px;border-radius: 10px;width: 30%;margin: 10;">
<div class="title">售后原因说明</div>
<textarea name="" id="" cols="30" rows="10" style="width: 100%;border: 1px solid #eee;"></textarea>
<div style="display: flex;">
<div class='btn' @click="returnAmountAllow(orderData,1)">同意退款</div>
<div class='btn' @click="returnAmountAllow(orderData,0)">拒绝退款</div>
</div>
</div>
</div>
<div style="display: flex;">
<div class="waiceng" style="width: 69%;">
<div class="title">商品信息</div>
<div class="box" v-for="(item,index) in orderData.goodsList" :key="index">
<div style="flex:1;">{{item.productName}}</div>
<div class="price"> X{{item.quantity}}</div>
<div class="price">¥{{item.price}}</div>
</div>
<div class="box">
<div style="flex:1;">餐盒费</div>
<div class="price">¥{{orderData.packageFee}}</div>
</div>
<div class="box">
<div style="flex:1;">配送费</div>
<div class="price">¥{{orderData.deliveryFee}}</div>
</div>
<div class="zong">活动优惠<span style="color:red;">¥0</span> 下单返佣<span style="color:red;">¥0</span>
合计<span style="color:#11cd6e;">¥{{orderData.totalAmount}}</span></div>
<div v-if="orderData.chouyong" class="zong">平台服务费:<span class="blue-color">¥{{(orderData.chouyong).toFixed(2)}}</span> </div>
<div v-if="orderData.yujishouru" class="zong">商家预计收入:<span class="blue-color">¥{{(orderData.yujishouru).toFixed(2)}}</span> </div>
</div>
<div class="waiceng" style="width: 29%;background: #eee;padding: 0;">
<div style="background: #fff;padding: 10px;margin-bottom: 10px;border-radius: 10px;">
<div class="title">物流信息</div>
<div class="text">用户下单:{{orderData.createTime | formatDateTime}}</div>
<div class="text">商家出餐:{{orderData.shopMakeTime | formatDateTime}}</div>
<div class="text">配送员接单:{{orderData.deliveryInfo.acceptTime | formatDateTime}}</div>
<div class="text">已到店:{{orderData.deliveryInfo.arriveTime | formatDateTime}}</div>
<div class="text">配送员已取货:{{orderData.deliveryInfo.getTime | formatDateTime}}</div>
<div class="text">配送员已送达:{{orderData.deliveryInfo.finishTime | formatDateTime}}</div>
</div>
<div v-if="orderData.status !=7 && orderData.status != 11" style="background: #fff;padding: 10px;border-radius: 10px;">
<div class="title">运营订单备注</div>
<textarea name="" id="" cols="30" rows="10" style="width: 100%;border: 1px solid #eee;"></textarea>
<div class='btn' @click="returnOrder">退款</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {
returnOrder,
getOrderDetail,
returnOrNoOrder
} from "@/api/index";
import {
getByShopId
} from "@/api/app";
export default {
name: "logisticsAddress",
data() {
return {
orderData: {},
returnFormData:{}
};
},
filters: {
formatDateTime(isoString) {
if (!isoString) return ''
const date = new Date(isoString)
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}
},
methods: {
initRecharge(data) {
console.log('111112222', data);
if(data.status == 7 || data.status == 11){
this.orderData = data
this.orderData.goodsList = this.orderData.items
this.orderData.deliveryInfo = this.orderData.mallDeliveryOrder
this.orderData.deliveryType = this.orderData.deliveryInfo.deliveryType
this.orderData.deliveryFee = this.orderData.deliveryInfo.deliveryFee
this.orderData.packageFee = data.mallOrder.packageFee
this.orderData.numberCode = this.orderData.mallDeliveryOrder.numberCode
console.log('88888', this.orderData);
}else{
getByShopId({
"shopId": data.shopId
}).then((res) => {
if (res.success) {
this.orderDetail(data.id,res.result)
}
});
}
},
orderDetail(id,shopTakeaway) {
getOrderDetail(id).then((res) => {
this.loading = false;
if (res.success) {
this.orderData = res.result
//商家预计收入的计算
let price = this.orderData.goodsAmount+this.orderData.packageFee
if(this.orderData.orderType == 1){
this.orderData.chouyong = price/100 * shopTakeaway.commissionRateOne
this.orderData.yujishouru = price - this.orderData.chouyong
}else{
this.orderData.chouyong = price/100 * shopTakeaway.commissionRateMore
this.orderData.yujishouru = price - this.orderData.chouyong
}
}
});
},
returnAmountAllow(item,status){
let titleText = status == 1 ? '确定同意该申请吗?' : '确定拒绝该申请吗?';
//退款提示
if(item.groupOrderIds != null && item.groupOrderIds != ''){
titleText += '该订单为面对面配送单,所有参团订单将同步处理';
for(let i = 0; i < this.returnData.length;i++){
if(item.groupOrderIds.indexOf(this.returnData[i].mallOrder.id) != -1){
//需要展示具体订单信息这里有
this.groupOrderIdList.push(this.returnData[i]);
}
}
}else{
this.groupOrderIdList = []
}
this.$Modal.confirm({
title: "提示",
content: titleText,
loading: true,
onOk: () => {
this.$Modal.remove();
if(this.groupOrderIdList != [] && this.groupOrderIdList.length > 0){
for(let i = 0; i < this.groupOrderIdList.length;i++){
this.processReturn(this.groupOrderIdList[i], status);
}
}else{
this.processReturn(item, status);
}
},
});
},
processReturn(item,status){
let url = ''
//退款
if(item.status == 7){
//不同意
if(status == 0){
this.returnFormData.status = 2
}else{
this.returnFormData.status = 1
}
}else if(item.status == 11){
//售后
if(status == 0){
this.returnFormData.status = 5
}else{
this.returnFormData.status = 4
}
}
console.log('12121212',item)
this.returnFormData.id = item.id;
this.returnFormData.linkId = item.linkId;
this.returnFormData.orderId = item.orderId;
this.returnFormData.deliveryType = item.mallOrder.deliveryType;
this.returnFormData.orderType = item.mallOrder.orderType;
this.returnFormData.refundAmount = item.refundAmount;
this.returnFormData.refundType = item.refundType;
this.returnFormData.refundTypeStatus = item.refundTypeStatus;
let that = this;
returnOrNoOrder(this.returnFormData).then((res) => {
this.loading = false;
if (res.success) {
this.$Message.success("售后成功");
this.$emit('closePage')
}
});
},
getMinutesDiff(time1, time2) {
console.log('time1',time1)
console.log('time2',time2)
// 将参数转换为 Date 对象,参数为 1 时取当前时间
const date1 = time1 === 1 ? new Date() : new Date(time1);
const date2 = time2 === 1 ? new Date() : new Date(time2);
// 计算毫秒差,取绝对值,转换为分钟,向上取整
const diffMs = Math.abs(date2 - date1);
const diffMinutes = Math.ceil(diffMs / (1000 * 60));
return diffMinutes;
},
returnOrder(){
console.log('好的',this.orderData)
let returnFormData = {}
this.returnFormData.status = 4
this.returnFormData.id = this.orderData.id;
this.returnFormData.regionId = JSON.parse(this.getStore("user")).departmentId;
this.returnFormData.orderId = this.orderData.orderId;
this.returnFormData.deliveryType = this.orderData.deliveryType;
this.returnFormData.orderType = this.orderData.orderType;
this.returnFormData.refundAmount = this.orderData.refundAmount;
this.returnFormData.refundType = this.orderData.refundType;
this.returnFormData.refundTypeStatus = this.orderData.refundTypeStatus;
returnOrNoOrder(this.returnFormData).then((res) => {
this.loading = false;
if (res.success) {
this.$Message.success("取消订单成功");
}
});
}
}
};
</script>
<style lang="less">
.search {
background: #eee;
}
.title {
font-weight: 700;
font-size: 15px;
}
.waiceng {
background: #fff;
border-radius: 10px;
margin: 5px;
padding: 10px;
}
.btn {
width: 75px;
height: 30px;
background: #4487fe;
font-size: 14px;
color: #fff;
border-radius: 7px;
text-align: center;
line-height: 30px;
margin: 0 auto;
}
.zong {
text-align: right;
height: 40px;
line-height: 40px;
}
.box {
display: flex;
border-bottom: 1px solid #eee;
line-height: 30px;
height: 30px px;
}
.text {
font-weight: bold;
color: #777;
}
.price {
flex: 1;
text-align: right
}
.blue-color {
color: #056dae;
}
</style>