|
|
|
@ -1,6 +1,6 @@ |
|
|
|
<template> |
|
|
|
<!-- 订单详情 --> |
|
|
|
<view class="page1"> |
|
|
|
<view class="page1" :style="popupPageStyle"> |
|
|
|
<view class="pintuan-page" v-if="pintuan"> |
|
|
|
<view class="title1"> |
|
|
|
<view class="title-sreach1"> |
|
|
|
@ -16,12 +16,12 @@ |
|
|
|
<view style="width: 100%;line-height: 70rpx;font-size: 28rpx;font-weight: 700;"> |
|
|
|
{{orderDetail.shopName}} |
|
|
|
</view> |
|
|
|
<view class="pintuan-goods-card"> |
|
|
|
<view class="pintuan-goods-card" v-for="(item1,index1) in orderDetail.goodsList" :key="index1" |
|
|
|
v-if="orderDetail.goodsList != null && orderDetail.goodsList.length > 0"> |
|
|
|
<view class="goods-img1"> |
|
|
|
<img src="/static/images/img/shangpintu.png" alt=""> |
|
|
|
<img :src="item1.productPicture" alt=""> |
|
|
|
</view> |
|
|
|
<view class="goods-content1" v-for="(item1,index1) in orderDetail.goodsList" :key="index1" |
|
|
|
v-if="orderDetail.goodsList != null && orderDetail.goodsList.length > 0"> |
|
|
|
<view class="goods-content1"> |
|
|
|
<view class="goods-name1"> |
|
|
|
{{item1.productName}} |
|
|
|
</view> |
|
|
|
@ -54,6 +54,9 @@ |
|
|
|
<view class="kaituan1-title11"> |
|
|
|
快呼唤小伙伴参加吧! |
|
|
|
</view> |
|
|
|
<view class="kaituan-refresh-btn" @tap="refreah(orderDetail)"> |
|
|
|
{{isRefreshing ? '刷新中' : '刷新'}} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="kaituan21"> |
|
|
|
<view class="kaituan221"> |
|
|
|
@ -160,7 +163,7 @@ |
|
|
|
申请售后 |
|
|
|
</view> |
|
|
|
<view class="status-btn" style="top: 70rpx;" @tap="refreah(orderDetail)"> |
|
|
|
刷新 |
|
|
|
{{isRefreshing ? '刷新中' : '刷新'}} |
|
|
|
</view> |
|
|
|
<!-- <view class="status-btn"> |
|
|
|
去评价 |
|
|
|
@ -228,7 +231,7 @@ |
|
|
|
<view style="width: 100%;line-height: 70rpx;font-size: 30rpx;font-weight: 700;"> |
|
|
|
退款/售后 |
|
|
|
</view> |
|
|
|
<view style="display: flex;margin-top:10px;padding: 20rpx;background: rgba(247, 248, 248, 0.6);border-radius: 20rpx;" |
|
|
|
<view class="refund-card" |
|
|
|
v-for="(item2,index2) in orderDetail.mallRefundRecord" :key="index2"> |
|
|
|
|
|
|
|
<view style="width: 100%;"> |
|
|
|
@ -248,70 +251,63 @@ |
|
|
|
¥{{item2.refundAmount}} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view v-for="(item3,index3) in item2.items" :key="index3" |
|
|
|
v-if="item2.items != null && item2.items.length > 0" |
|
|
|
style="display: flex;padding: 20rpx;background: rgba(247, 248, 248, 0.6);border-radius: 20rpx;"> |
|
|
|
<view class="goods-img"> |
|
|
|
<img :src="item3.productPicture" alt="" style="border-radius: 20rpx;"> |
|
|
|
<view class="refund-goods-card" v-for="(item3,index3) in item2.items" :key="index3" |
|
|
|
v-if="item2.items != null && item2.items.length > 0"> |
|
|
|
<view class="refund-goods-img"> |
|
|
|
<img :src="item3.productPicture" alt=""> |
|
|
|
</view> |
|
|
|
<view class="goods-content"> |
|
|
|
<view class="goods-name"> |
|
|
|
{{item3.productName}} |
|
|
|
</view> |
|
|
|
<view class="goods-content-center"> |
|
|
|
{{item3.specs | delNode}} |
|
|
|
</view> |
|
|
|
<view class="goods-content-bottom"> |
|
|
|
<view style="width: 50%;"> |
|
|
|
X{{item3.quantity}} |
|
|
|
</view> |
|
|
|
<view class="pintuan-left-price"> |
|
|
|
¥{{item3.price}} |
|
|
|
</view> |
|
|
|
<view class="refund-goods-content"> |
|
|
|
<view class="refund-goods-name">{{item3.productName}}</view> |
|
|
|
<view class="refund-goods-spec">{{item3.specs | delNode}}</view> |
|
|
|
<view class="refund-goods-bottom"> |
|
|
|
<text>X{{item3.quantity}}</text> |
|
|
|
<text>¥{{item3.price}}</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view style="height: 80rpx;line-height: 80rpx;display: flex;"> |
|
|
|
<view style="flex: 1;color: #777;font-weight: 700;"> |
|
|
|
<view class="refund-info-row"> |
|
|
|
<view class="refund-info-label"> |
|
|
|
原因 |
|
|
|
</view> |
|
|
|
<view style="color: #000;font-weight:700;"> |
|
|
|
<view class="refund-info-value"> |
|
|
|
{{item2.reason != null ? item2.reason : ''}} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view style="height: 80rpx;line-height: 80rpx;display: flex;"> |
|
|
|
<view style="flex: 1;color: #777;font-weight: 700;"> |
|
|
|
<view class="refund-info-row" v-if="item2.pictures != null && item2.pictures != ''"> |
|
|
|
<view class="refund-info-label"> |
|
|
|
图片 |
|
|
|
</view> |
|
|
|
<view style="color: #000;font-weight:700;"> |
|
|
|
<image v-if="item2.pictures != null" :src="item2.pictures"></image> |
|
|
|
<view class="refund-info-value"> |
|
|
|
<image class="refund-image" :src="item2.pictures" mode="aspectFill"></image> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view style="height: 80rpx;line-height: 80rpx;display: flex;"> |
|
|
|
<view style="flex: 1;color: #777;font-weight: 700;"> |
|
|
|
<view class="refund-info-row"> |
|
|
|
<view class="refund-info-label"> |
|
|
|
退款/售后类型 |
|
|
|
</view> |
|
|
|
<view style="color: #000;font-weight:700;"> |
|
|
|
<view class="refund-info-value"> |
|
|
|
{{item2.refundType == 1 ? '退商品 ' : item2.refundType == 2 ? '退配送费 ' : '全额退款 ' }} |
|
|
|
<text v-if="item2.refundTypeStatus != null"> |
|
|
|
| {{item2.refundTypeStatus == 1 ? '商家原因' : item2.refundTypeStatus == 2 ? '配送员原因' : item2.refundTypeStatus == 3 ? '商家/配送员都有原因' : '平台退款' }} |
|
|
|
</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view style="height: 80rpx;line-height: 80rpx;display: flex;"> |
|
|
|
<view style="flex: 1;color: #777;font-weight: 700;"> |
|
|
|
<view class="refund-info-row"> |
|
|
|
<view class="refund-info-label"> |
|
|
|
退款/售后状态 |
|
|
|
</view> |
|
|
|
<view style="color: #000;font-weight:700;"> |
|
|
|
<view class="refund-info-value"> |
|
|
|
{{item2.status == 0 ? '处理退款中' : item2.status == 1 ? '同意退款' : item2.status == 2 ? '拒绝退款' : item2.status == 3 ? '处理售后中' : item2.status == 4 ? '同意售后' : '拒绝售后' }} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view style="height: 80rpx;line-height: 80rpx;display: flex;" |
|
|
|
v-if="item2.successTime != null"> |
|
|
|
<view style="flex: 1;color: #777;font-weight: 700;"> |
|
|
|
<view class="auto-refund-tip" v-if="isRefundPending(item2)"> |
|
|
|
{{getAutoRefundTime(item2.createTime)}} 之前对方未处理系统会自动退款 |
|
|
|
</view> |
|
|
|
<view class="refund-info-row" v-if="item2.successTime != null"> |
|
|
|
<view class="refund-info-label"> |
|
|
|
处理退款/售后时间 |
|
|
|
</view> |
|
|
|
<view style="color: #000;font-weight:700;"> |
|
|
|
<view class="refund-info-value"> |
|
|
|
{{item2.successTime | formatTime}} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
@ -591,96 +587,98 @@ |
|
|
|
</view> |
|
|
|
</uni-popup> |
|
|
|
|
|
|
|
<uni-popup ref="returnPopup" background-color="#fff"> |
|
|
|
<view class="car-content" style="height: auto;padding: 20rpx 20rpx 0;" v-if="orderDetail.status != 10"> |
|
|
|
<uni-popup ref="returnPopup" background-color="#fff" @change="onCancelPopupChange"> |
|
|
|
<view class="car-content cancel-popup" v-if="orderDetail.status != 10"> |
|
|
|
<view class="car-close" @tap="$refs.returnPopup.close()"> |
|
|
|
<uni-icons type="close" size="30" color="#fff"></uni-icons> |
|
|
|
</view> |
|
|
|
<view class="car-title" style="padding: 0 20rpx;"> |
|
|
|
选择退款原因 |
|
|
|
</view> |
|
|
|
<view class="" style="padding: 0 20rpx;"> |
|
|
|
<view style="height:80rpx;" v-if="orderDetail.otherOrder != 1"> |
|
|
|
<scroll-view scroll-y class="cancel-scroll" @touchmove.stop> |
|
|
|
<view style="padding: 0 20rpx;"> |
|
|
|
<view class="cancel-type-item" v-if="orderDetail.otherOrder != 1"> |
|
|
|
<radio :checked="sellTime==2" name="sellTime" @click="checkSellTime(2)" /> |
|
|
|
全额退款(商家原因) |
|
|
|
</view> |
|
|
|
<view style="height:80rpx;" v-if="payData.deliveryType ==1"> |
|
|
|
<view class="cancel-type-item" v-if="payData.deliveryType ==1"> |
|
|
|
<radio :checked="sellTime==3" name="sellTime" @click="checkSellTime(3)" /> |
|
|
|
全额退款(配送员原因) |
|
|
|
</view> |
|
|
|
<view style="height:80rpx;" v-if="payData.deliveryType ==1 && orderDetail.otherOrder != 1"> |
|
|
|
<view class="cancel-type-item" v-if="payData.deliveryType ==1 && orderDetail.otherOrder != 1"> |
|
|
|
<radio :checked="sellTime==4" name="sellTime" @click="checkSellTime(4)" /> |
|
|
|
全额退款(商家+配送员原因) |
|
|
|
</view> |
|
|
|
<view style="height:80rpx;"> |
|
|
|
<!-- <view class="cancel-type-item"> |
|
|
|
<radio :checked="sellTime==5" name="sellTime" @click="checkSellTime(5)" /> |
|
|
|
其他 |
|
|
|
</view> --> |
|
|
|
</view> |
|
|
|
<view class="cancel-section"> |
|
|
|
<view class="cancel-section-title">具体原因(可多选)</view> |
|
|
|
<view class="cancel-option-list"> |
|
|
|
<view :class="selectedCancelReasonOptions.indexOf(item) !== -1 ? 'cancel-option checked' : 'cancel-option'" |
|
|
|
v-for="(item,index) in cancelReasonOptions" :key="index" @tap="toggleCancelReasonOption(item)"> |
|
|
|
{{item}} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="guize-list"> |
|
|
|
<view style="border-bottom: 10rpx solid #eee;border-top: 10rpx solid #eee;padding: 20rpx 0;"> |
|
|
|
<view style="flex: 1;color: #777;font-weight: 700;"> |
|
|
|
申请说明 |
|
|
|
<view class="cancel-section"> |
|
|
|
<view class="cancel-section-title">取消原因</view> |
|
|
|
<textarea class="cancel-textarea" placeholder="请选择或填写取消原因" v-model="returnData.reason"></textarea> |
|
|
|
</view> |
|
|
|
<view class="cancel-section"> |
|
|
|
<view class="cancel-section-title">上传图片</view> |
|
|
|
<view class="cancel-upload-row"> |
|
|
|
<view class="cancel-upload-img cancel-upload-btn" @tap="pictureAdd"> |
|
|
|
<uni-icons type="camera" size="28" color="#777"></uni-icons> |
|
|
|
</view> |
|
|
|
<view style=""> |
|
|
|
<textarea name="" id="" cols="30" rows="10" placeholder="请填写备注" v-model="returnData.reason" |
|
|
|
style="width: 100%;height: 100rpx;padding: 10rpx;margin-top: 20rpx;"></textarea> |
|
|
|
<view |
|
|
|
style="width: 120rpx;height: 120rpx;border: 1px solid #eee;text-align: center;line-height: 60px;"> |
|
|
|
<view class="upload-img" @tap="pictureAdd" style=""> |
|
|
|
<uni-icons type="camera" size="28" color="#777"></uni-icons> |
|
|
|
</view> |
|
|
|
<view v-if="returnData.pictures !=''" style=""> |
|
|
|
<img :src="returnData.pictures" alt="" class="upload-img"> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view v-if="returnData.pictures !=''" class="cancel-upload-preview"> |
|
|
|
<img :src="returnData.pictures" alt="" class="cancel-upload-img"> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view |
|
|
|
style="margin-top: 20rpx; color: #ff5722; font-size: 24rpx; background: #fff5f5; padding: 10rpx 20rpx; border-radius: 10rpx;"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
<text |
|
|
|
</view> |
|
|
|
<view class="guize-list"> |
|
|
|
<view class="cancel-warning-card"> |
|
|
|
<view class="cancel-warning-line"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
<text |
|
|
|
v-if="(((payData.orderType == 2 || payData.orderType == 3) && payData.status == 2) || ((payData.orderType == 2 || payData.orderType == 3) && payData.status == 3) || (payData.deliveryType == 1 && payData.status == 3) || payData.status == 4) && payData.otherOrder == null"> |
|
|
|
取消订单需要商家同意 |
|
|
|
</text> |
|
|
|
<text v-else>请选择退款原因</text> |
|
|
|
<view v-if="(payData.status == 3 && payData.deliveryType ==1) || payData.status == 4" |
|
|
|
style="line-height: 50rpx;margin-top: 16rpx;"> |
|
|
|
<view v-if="payData.shopMakeTime == null && payData.otherOrder == null" |
|
|
|
style="text-align: right;"> |
|
|
|
取消订单需要商家同意 |
|
|
|
</text> |
|
|
|
<text v-else>请选择退款原因</text> |
|
|
|
</view> |
|
|
|
<view class="cancel-time-tips" v-if="(payData.status == 3 && payData.deliveryType ==1) || payData.status == 4"> |
|
|
|
<view class="cancel-warning-line" v-if="payData.shopMakeTime == null && payData.otherOrder == null"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
<text style="display:inline-block;padding-left:5px;"> |
|
|
|
<text> |
|
|
|
商家还未出餐 |
|
|
|
</text> |
|
|
|
</view> |
|
|
|
<view v-if="payData.shopMakeTime == null && payData.otherOrder == null"> |
|
|
|
<view style="color: #ff5722;"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
|
|
|
|
<text style="display:inline-block;padding-left:5px;"> |
|
|
|
配送员到店时间:{{shopTime}} |
|
|
|
</text> |
|
|
|
</view> |
|
|
|
<view class="cancel-warning-line" v-if="payData.shopMakeTime == null && payData.otherOrder == null"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
<text> |
|
|
|
配送员到店时间:{{shopTime}} |
|
|
|
</text> |
|
|
|
</view> |
|
|
|
<view v-if="payData.shopMakeTime != null && payData.otherOrder == null"> |
|
|
|
<view style="color: #ff5722;"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
<text style="display:inline-block;padding-left:5px;"> |
|
|
|
本单商家备餐时长:{{shopTime}} |
|
|
|
</text> |
|
|
|
</view> |
|
|
|
<view class="cancel-warning-line" v-if="payData.shopMakeTime != null && payData.otherOrder == null"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
<text> |
|
|
|
本单商家备餐时长:{{shopTime}} |
|
|
|
</text> |
|
|
|
</view> |
|
|
|
<view v-if="payData.shopMakeTime != null && payData.otherOrder == null"> |
|
|
|
<view style="color: #ff5722;"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
<text style="display:inline-block;padding-left:5px;"> |
|
|
|
配送员配送时长:{{peisongTime}} |
|
|
|
</text> |
|
|
|
</view> |
|
|
|
<view class="cancel-warning-line" v-if="payData.shopMakeTime != null && payData.otherOrder == null"> |
|
|
|
<uni-icons type="info" size="14" color="#ff5722"></uni-icons> |
|
|
|
<text> |
|
|
|
配送员配送时长:{{peisongTime}} |
|
|
|
</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="btn" @tap="returnOrder()" style="margin-top: 20px;"> |
|
|
|
确认取消 |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</scroll-view> |
|
|
|
<view class="btn cancel-confirm-btn" @tap="returnOrder()"> |
|
|
|
确认取消 |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</uni-popup> |
|
|
|
@ -697,18 +695,18 @@ |
|
|
|
</view> |
|
|
|
</uni-popup> |
|
|
|
|
|
|
|
<uni-popup ref="addFeePopup" background-color="#fff" style="height: 1600rpx !important;"> |
|
|
|
<view class="guize-list"> |
|
|
|
<view style="height: 80rpx;line-height: 80rpx;font-size: 36rpx;font-weight: 700;text-align: center;"> |
|
|
|
增加配送佣金 |
|
|
|
<uni-popup ref="addFeePopup" type="center" background-color="transparent"> |
|
|
|
<view class="commission-popup"> |
|
|
|
<view class="commission-popup-title">增加配送佣金</view> |
|
|
|
<view class="commission-popup-desc">最低 0.1 元,最多输入 2 位小数</view> |
|
|
|
<view class="commission-popup-input"> |
|
|
|
<text>¥</text> |
|
|
|
<input type="digit" :value="additionalFee" placeholder="请输入金额" |
|
|
|
focus @input="onAdditionalFeeInput" /> |
|
|
|
</view> |
|
|
|
<view style="padding: 20rpx 40rpx;"> |
|
|
|
<view style="font-size: 28rpx;color: #777;margin-bottom: 20rpx;">请输入要增加的佣金金额(元)</view> |
|
|
|
<input type="digit" v-model="additionalFee" placeholder="请输入金额" |
|
|
|
style="border: 1px solid #ccc;border-radius: 16rpx;height: 80rpx;line-height: 80rpx;padding: 0 20rpx;font-size: 32rpx;text-align: center;" /> |
|
|
|
</view> |
|
|
|
<view class="btn" @tap="submitAddFee()"> |
|
|
|
去支付 |
|
|
|
<view class="commission-popup-actions"> |
|
|
|
<view class="commission-popup-cancel" @tap="$refs.addFeePopup.close()">取消</view> |
|
|
|
<view class="commission-popup-confirm" @tap="submitAddFee">去支付</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</uni-popup> |
|
|
|
@ -765,6 +763,13 @@ |
|
|
|
menuButtonInfo: {}, |
|
|
|
refundType: 3, |
|
|
|
refundTypeStatus: 1, |
|
|
|
returnData: { |
|
|
|
reason: '', |
|
|
|
pictures: '' |
|
|
|
}, |
|
|
|
cancelReasonOptions: ['配送超时', '收到的商品少了', '骑手送错地址', '收到的商品错了', '商家出餐超时', '餐品损坏或撒了', '商品质量问题'], |
|
|
|
selectedCancelReasonOptions: [], |
|
|
|
popupPageStyle: '', |
|
|
|
shopTime: '', |
|
|
|
hasRefund: false, |
|
|
|
peisongTime: '', |
|
|
|
@ -776,7 +781,8 @@ |
|
|
|
}, |
|
|
|
codeImg: 'https://jewel-shop.oss-cn-beijing.aliyuncs.com/3a4e68eb14d7417cbb4f15fa85907c64.jpg', |
|
|
|
additionalFee: '', |
|
|
|
addFeeTradeNo: '' |
|
|
|
addFeeTradeNo: '', |
|
|
|
isRefreshing: false |
|
|
|
} |
|
|
|
}, |
|
|
|
components: { |
|
|
|
@ -886,6 +892,22 @@ |
|
|
|
}, |
|
|
|
|
|
|
|
methods: { |
|
|
|
isRefundPending(item) { |
|
|
|
return item && (item.status == 0 || item.status == 3); |
|
|
|
}, |
|
|
|
getAutoRefundTime(value) { |
|
|
|
if (!value) return ''; |
|
|
|
const date = new Date(value); |
|
|
|
if (isNaN(date.getTime())) return ''; |
|
|
|
date.setHours(date.getHours() + 1); |
|
|
|
const year = date.getFullYear(); |
|
|
|
const month = String(date.getMonth() + 1).padStart(2, '0'); |
|
|
|
const day = String(date.getDate()).padStart(2, '0'); |
|
|
|
const hour = String(date.getHours()).padStart(2, '0'); |
|
|
|
const minute = String(date.getMinutes()).padStart(2, '0'); |
|
|
|
const second = String(date.getSeconds()).padStart(2, '0'); |
|
|
|
return `${year}-${month}-${day} ${hour}:${minute}:${second}`; |
|
|
|
}, |
|
|
|
openCode() { |
|
|
|
let that = this |
|
|
|
this.$refs.imgPopup.open() |
|
|
|
@ -983,6 +1005,18 @@ |
|
|
|
this.refundTypeStatus = 3 |
|
|
|
} |
|
|
|
}, |
|
|
|
onCancelPopupChange(e) { |
|
|
|
this.popupPageStyle = e.show ? 'height:100vh;overflow:hidden;' : ''; |
|
|
|
}, |
|
|
|
toggleCancelReasonOption(item) { |
|
|
|
let index = this.selectedCancelReasonOptions.indexOf(item); |
|
|
|
if (index === -1) { |
|
|
|
this.selectedCancelReasonOptions.push(item); |
|
|
|
} else { |
|
|
|
this.selectedCancelReasonOptions.splice(index, 1); |
|
|
|
} |
|
|
|
this.returnData.reason = this.selectedCancelReasonOptions.join('、'); |
|
|
|
}, |
|
|
|
makeCall(phone) { |
|
|
|
uni.makePhoneCall({ |
|
|
|
phoneNumber: phone |
|
|
|
@ -1103,16 +1137,19 @@ |
|
|
|
refundType: this.refundType, |
|
|
|
refundTypeStatus: this.refundTypeStatus, |
|
|
|
orderId: item.id, |
|
|
|
userId: uni.getStorageSync('id') |
|
|
|
userId: uni.getStorageSync('id'), |
|
|
|
reason: this.returnData.reason, |
|
|
|
pictures: this.returnData.pictures |
|
|
|
}, false, true).then((res) => { |
|
|
|
uni.hideLoading(); |
|
|
|
if (res.code == 200) { |
|
|
|
that.tui.toast("取消订单成功"); |
|
|
|
that.getOrderDetail(item.id) |
|
|
|
that.$forceUpdate(); |
|
|
|
} else { |
|
|
|
that.tui.toast(res.message); |
|
|
|
that.tui.toast(res.message,2000); |
|
|
|
} |
|
|
|
uni.hideLoading(); |
|
|
|
|
|
|
|
}).catch((res) => {}); |
|
|
|
}, |
|
|
|
returnOrderBuy() { |
|
|
|
@ -1178,7 +1215,7 @@ |
|
|
|
that.payData.packageFee |
|
|
|
}); |
|
|
|
} else { |
|
|
|
that.tui.toast(res.message); |
|
|
|
that.tui.toast(res.message,2000); |
|
|
|
return; |
|
|
|
} |
|
|
|
uni.hideLoading(); |
|
|
|
@ -1191,8 +1228,18 @@ |
|
|
|
}).catch((res) => {}); |
|
|
|
}, |
|
|
|
refreah(item) { |
|
|
|
if (this.isRefreshing) return; |
|
|
|
this.isRefreshing = true; |
|
|
|
uni.showLoading({ |
|
|
|
title: '刷新中...', |
|
|
|
mask: true |
|
|
|
}); |
|
|
|
this.getOrderDetail(item.id) |
|
|
|
this.$forceUpdate(); |
|
|
|
setTimeout(() => { |
|
|
|
uni.hideLoading(); |
|
|
|
this.isRefreshing = false; |
|
|
|
}, 1000); |
|
|
|
}, |
|
|
|
returnProducts(item) { |
|
|
|
uni.redirectTo({ |
|
|
|
@ -1245,7 +1292,9 @@ |
|
|
|
return |
|
|
|
} |
|
|
|
}).catch((res) => {}) |
|
|
|
uni.hideLoading(); |
|
|
|
if (!this.isRefreshing) { |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}, |
|
|
|
goAssignWorker() { |
|
|
|
let shopAreaId = this.orderDetail.getAreaId || ''; |
|
|
|
@ -1291,11 +1340,35 @@ |
|
|
|
}, |
|
|
|
openAddFeePopup() { |
|
|
|
this.additionalFee = ''; |
|
|
|
this.$refs.addFeePopup.open('bottom'); |
|
|
|
this.$refs.addFeePopup.open('center'); |
|
|
|
}, |
|
|
|
formatMoneyInput(value) { |
|
|
|
value = String(value || ''); |
|
|
|
value = value.replace(/[^\d.]/g, ''); |
|
|
|
const dotIndex = value.indexOf('.'); |
|
|
|
if (dotIndex !== -1) { |
|
|
|
value = value.slice(0, dotIndex + 1) + value.slice(dotIndex + 1).replace(/\./g, ''); |
|
|
|
const parts = value.split('.'); |
|
|
|
value = parts[0] + '.' + parts[1].slice(0, 2); |
|
|
|
} |
|
|
|
return value; |
|
|
|
}, |
|
|
|
formatAdditionalFee(value) { |
|
|
|
let fee = parseFloat(this.formatMoneyInput(value)); |
|
|
|
if (isNaN(fee) || fee < 0.1) { |
|
|
|
return ''; |
|
|
|
} |
|
|
|
return (Math.floor(fee * 100) / 100).toFixed(2).replace(/\.?0+$/, ''); |
|
|
|
}, |
|
|
|
onAdditionalFeeInput(e) { |
|
|
|
const value = this.formatMoneyInput(e.detail.value); |
|
|
|
this.additionalFee = value; |
|
|
|
return value; |
|
|
|
}, |
|
|
|
submitAddFee() { |
|
|
|
this.additionalFee = this.formatAdditionalFee(this.additionalFee); |
|
|
|
let fee = parseFloat(this.additionalFee); |
|
|
|
if (isNaN(fee) || fee <= 0) { |
|
|
|
if (isNaN(fee) || fee < 0.1) { |
|
|
|
this.tui.toast('请输入有效的金额'); |
|
|
|
return; |
|
|
|
} |
|
|
|
@ -1310,8 +1383,9 @@ |
|
|
|
}, |
|
|
|
addFeeWxPayment() { |
|
|
|
let that = this; |
|
|
|
this.additionalFee = this.formatAdditionalFee(this.additionalFee); |
|
|
|
let fee = parseFloat(this.additionalFee); |
|
|
|
if (!fee || fee <= 0) return; |
|
|
|
if (!fee || fee < 0.1) return; |
|
|
|
let amountInCents = Math.round(fee * 100); |
|
|
|
|
|
|
|
this.tui.request("/api/wechat/pay/unified-order", "POST", { |
|
|
|
@ -1379,7 +1453,12 @@ |
|
|
|
}); |
|
|
|
}, |
|
|
|
back() { |
|
|
|
uni.navigateBack() |
|
|
|
const pages = getCurrentPages() |
|
|
|
if (pages.length > 1) { |
|
|
|
uni.navigateBack({ delta: 1 }) |
|
|
|
} else { |
|
|
|
uni.switchTab({ url: '/pages/index/index' }) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -1453,6 +1532,120 @@ |
|
|
|
overflow: hidden; |
|
|
|
} |
|
|
|
|
|
|
|
.auto-refund-tip { |
|
|
|
margin: 8rpx 0 18rpx; |
|
|
|
padding: 18rpx 20rpx; |
|
|
|
border-radius: 18rpx; |
|
|
|
background: rgba(255, 244, 232, 0.9); |
|
|
|
border: 1rpx solid rgba(255, 180, 118, 0.48); |
|
|
|
color: #b4572d; |
|
|
|
font-size: 24rpx; |
|
|
|
font-weight: 700; |
|
|
|
line-height: 34rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-card { |
|
|
|
margin-top: 10px; |
|
|
|
padding: 20rpx; |
|
|
|
background: rgba(247, 248, 248, 0.6); |
|
|
|
border-radius: 20rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-goods-card { |
|
|
|
display: flex; |
|
|
|
padding: 18rpx; |
|
|
|
margin: 12rpx 0; |
|
|
|
background: rgba(255, 255, 255, 0.72); |
|
|
|
border-radius: 22rpx; |
|
|
|
border: 1rpx solid rgba(166, 255, 234, 0.28); |
|
|
|
box-sizing: border-box; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-goods-img { |
|
|
|
width: 132rpx; |
|
|
|
height: 132rpx; |
|
|
|
flex-shrink: 0; |
|
|
|
border-radius: 20rpx; |
|
|
|
overflow: hidden; |
|
|
|
background: #f4f7f6; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-goods-img img { |
|
|
|
width: 100%; |
|
|
|
height: 100%; |
|
|
|
border-radius: 20rpx; |
|
|
|
object-fit: cover; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-goods-content { |
|
|
|
flex: 1; |
|
|
|
min-width: 0; |
|
|
|
padding-left: 18rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-goods-name { |
|
|
|
color: #243f38; |
|
|
|
font-size: 28rpx; |
|
|
|
font-weight: 900; |
|
|
|
line-height: 38rpx; |
|
|
|
overflow: hidden; |
|
|
|
text-overflow: ellipsis; |
|
|
|
white-space: nowrap; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-goods-spec { |
|
|
|
margin-top: 8rpx; |
|
|
|
color: #7b8883; |
|
|
|
font-size: 22rpx; |
|
|
|
line-height: 32rpx; |
|
|
|
overflow: hidden; |
|
|
|
text-overflow: ellipsis; |
|
|
|
white-space: nowrap; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-goods-bottom { |
|
|
|
display: flex; |
|
|
|
justify-content: space-between; |
|
|
|
margin-top: 14rpx; |
|
|
|
color: #243f38; |
|
|
|
font-size: 24rpx; |
|
|
|
font-weight: 800; |
|
|
|
line-height: 34rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-info-row { |
|
|
|
display: flex; |
|
|
|
align-items: flex-start; |
|
|
|
padding: 18rpx 0; |
|
|
|
border-bottom: 1rpx solid rgba(0, 35, 28, 0.045); |
|
|
|
} |
|
|
|
|
|
|
|
.refund-info-label { |
|
|
|
width: 160rpx; |
|
|
|
flex-shrink: 0; |
|
|
|
color: #87938f; |
|
|
|
font-weight: 700; |
|
|
|
line-height: 38rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-info-value { |
|
|
|
flex: 1; |
|
|
|
min-width: 0; |
|
|
|
color: #243f38; |
|
|
|
font-weight: 700; |
|
|
|
line-height: 38rpx; |
|
|
|
word-break: break-all; |
|
|
|
text-align: right; |
|
|
|
} |
|
|
|
|
|
|
|
.refund-image { |
|
|
|
width: 180rpx; |
|
|
|
height: 180rpx; |
|
|
|
border-radius: 20rpx; |
|
|
|
display: block; |
|
|
|
margin-left: auto; |
|
|
|
} |
|
|
|
|
|
|
|
.content > .box1:first-child { |
|
|
|
background: |
|
|
|
radial-gradient(circle at 94% 4%, rgba(255, 221, 176, 0.2) 0, rgba(255, 221, 176, 0) 170rpx), |
|
|
|
@ -1683,6 +1876,143 @@ |
|
|
|
box-shadow: 0 -18rpx 44rpx rgba(0, 35, 28, 0.12); |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-popup { |
|
|
|
max-height: 86vh; |
|
|
|
padding: 20rpx 20rpx 0 !important; |
|
|
|
overflow: hidden; |
|
|
|
box-sizing: border-box; |
|
|
|
background: #fff; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-scroll { |
|
|
|
height: 62vh; |
|
|
|
overflow: hidden; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-type-item { |
|
|
|
min-height: 76rpx; |
|
|
|
line-height: 76rpx; |
|
|
|
color: #243f38; |
|
|
|
font-size: 28rpx; |
|
|
|
font-weight: 700; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-section { |
|
|
|
padding: 0 20rpx 24rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-section-title { |
|
|
|
margin: 10rpx 0 18rpx; |
|
|
|
color: #243f38; |
|
|
|
font-size: 28rpx; |
|
|
|
font-weight: 900; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-option-list { |
|
|
|
display: flex; |
|
|
|
flex-wrap: wrap; |
|
|
|
gap: 16rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-option { |
|
|
|
padding: 0 22rpx; |
|
|
|
height: 64rpx; |
|
|
|
line-height: 64rpx; |
|
|
|
border-radius: 999rpx; |
|
|
|
background: rgba(247, 248, 248, 0.78); |
|
|
|
border: 1rpx solid rgba(0, 35, 28, 0.06); |
|
|
|
color: #65736f; |
|
|
|
font-size: 24rpx; |
|
|
|
font-weight: 700; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-option.checked { |
|
|
|
background: linear-gradient(90deg, rgba(227, 255, 150, 1), rgba(166, 255, 234, 1)); |
|
|
|
color: #00231C; |
|
|
|
border-color: rgba(166, 255, 234, 0.78); |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-textarea { |
|
|
|
width: 100%; |
|
|
|
height: 180rpx; |
|
|
|
padding: 20rpx; |
|
|
|
box-sizing: border-box; |
|
|
|
border-radius: 24rpx; |
|
|
|
background: rgba(247, 248, 248, 0.8); |
|
|
|
color: #243f38; |
|
|
|
font-size: 26rpx; |
|
|
|
line-height: 38rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-upload-row { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
gap: 18rpx; |
|
|
|
flex-wrap: wrap; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-upload-img { |
|
|
|
width: 150rpx; |
|
|
|
height: 150rpx; |
|
|
|
border-radius: 20rpx; |
|
|
|
object-fit: cover; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-upload-btn { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
justify-content: center; |
|
|
|
background: rgba(247, 248, 248, 0.8); |
|
|
|
border: 1rpx dashed rgba(0, 35, 28, 0.18); |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-upload-preview { |
|
|
|
width: 150rpx; |
|
|
|
height: 150rpx; |
|
|
|
border-radius: 20rpx; |
|
|
|
overflow: hidden; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-warning-card { |
|
|
|
margin-top: 20rpx; |
|
|
|
padding: 18rpx 20rpx; |
|
|
|
border-radius: 18rpx; |
|
|
|
background: #fff5f5; |
|
|
|
color: #ff5722; |
|
|
|
font-size: 24rpx; |
|
|
|
line-height: 36rpx; |
|
|
|
box-sizing: border-box; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-time-tips { |
|
|
|
margin-top: 14rpx; |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
gap: 10rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-warning-line { |
|
|
|
display: flex; |
|
|
|
align-items: flex-start; |
|
|
|
width: 100%; |
|
|
|
min-height: 36rpx; |
|
|
|
line-height: 36rpx; |
|
|
|
text-align: left; |
|
|
|
word-break: break-all; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-warning-line text { |
|
|
|
flex: 1; |
|
|
|
min-width: 0; |
|
|
|
padding-left: 10rpx; |
|
|
|
white-space: normal; |
|
|
|
} |
|
|
|
|
|
|
|
.cancel-confirm-btn { |
|
|
|
width: 95%; |
|
|
|
margin: 18rpx auto 20rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.evaluate-content { |
|
|
|
background: linear-gradient(180deg, #ffffff 0%, #f7fffb 100%); |
|
|
|
} |
|
|
|
@ -1700,6 +2030,83 @@ |
|
|
|
background-size: 100%; |
|
|
|
} |
|
|
|
|
|
|
|
.commission-popup { |
|
|
|
width: 620rpx; |
|
|
|
padding: 44rpx 36rpx 34rpx; |
|
|
|
box-sizing: border-box; |
|
|
|
border-radius: 32rpx; |
|
|
|
background: #fff; |
|
|
|
box-shadow: 0 28rpx 70rpx rgba(0, 35, 28, 0.18); |
|
|
|
} |
|
|
|
|
|
|
|
.commission-popup-title { |
|
|
|
color: #243f38; |
|
|
|
font-size: 34rpx; |
|
|
|
font-weight: 900; |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
|
|
|
|
.commission-popup-desc { |
|
|
|
margin-top: 12rpx; |
|
|
|
color: #87938f; |
|
|
|
font-size: 24rpx; |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
|
|
|
|
.commission-popup-input { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
height: 88rpx; |
|
|
|
margin-top: 34rpx; |
|
|
|
padding: 0 26rpx; |
|
|
|
border-radius: 24rpx; |
|
|
|
background: #f6faf8; |
|
|
|
border: 1rpx solid #e5efeb; |
|
|
|
|
|
|
|
text { |
|
|
|
margin-right: 12rpx; |
|
|
|
color: #ff7043; |
|
|
|
font-size: 34rpx; |
|
|
|
font-weight: 900; |
|
|
|
} |
|
|
|
|
|
|
|
input { |
|
|
|
flex: 1; |
|
|
|
height: 88rpx; |
|
|
|
min-height: 88rpx; |
|
|
|
font-size: 34rpx; |
|
|
|
font-weight: 800; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.commission-popup-actions { |
|
|
|
display: flex; |
|
|
|
margin-top: 34rpx; |
|
|
|
gap: 18rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.commission-popup-cancel, |
|
|
|
.commission-popup-confirm { |
|
|
|
flex: 1; |
|
|
|
height: 76rpx; |
|
|
|
border-radius: 999rpx; |
|
|
|
font-size: 28rpx; |
|
|
|
font-weight: 800; |
|
|
|
line-height: 76rpx; |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
|
|
|
|
.commission-popup-cancel { |
|
|
|
background: #f3f6f4; |
|
|
|
color: #87938f; |
|
|
|
} |
|
|
|
|
|
|
|
.commission-popup-confirm { |
|
|
|
background: linear-gradient(135deg, #fff7d7 0%, #a6ffea 100%); |
|
|
|
color: #243f38; |
|
|
|
box-shadow: 0 12rpx 26rpx rgba(0, 191, 160, 0.12); |
|
|
|
} |
|
|
|
|
|
|
|
.evaluate-content { |
|
|
|
width: 600rpx; |
|
|
|
height: 800rpx; |
|
|
|
@ -1879,6 +2286,20 @@ |
|
|
|
box-sizing: border-box; |
|
|
|
} |
|
|
|
|
|
|
|
.kaituan-refresh-btn { |
|
|
|
height: 44rpx; |
|
|
|
line-height: 44rpx; |
|
|
|
padding: 0 22rpx; |
|
|
|
margin: 10rpx 0 0 16rpx; |
|
|
|
border-radius: 999rpx; |
|
|
|
background: rgba(255, 255, 255, 0.86); |
|
|
|
border: 1rpx solid rgba(166, 255, 234, 0.7); |
|
|
|
color: #0f806d; |
|
|
|
font-size: 22rpx; |
|
|
|
font-weight: 800; |
|
|
|
box-shadow: 0 8rpx 18rpx rgba(0, 35, 28, 0.06); |
|
|
|
} |
|
|
|
|
|
|
|
.kaituan21 { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
|