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.
 
 
 

220 lines
4.5 KiB

<template>
<uv-popup ref="popup" :safeAreaInsetBottom="false" :round="10">
<view class="cancel-popup">
<view class="popup-content">
<view class="popup-header">
<text class="popup-title">取消订单</text>
</view>
<view class="popup-body">
<text class="popup-text">请添加客服微信方便为您解决订单疑问或退订服务</text>
<view class="qrcode-container">
<image class="qrcode-image" :src="qrCodeUrl" mode="aspectFit" :show-menu-by-longpress="true"></image>
</view>
<text class="popup-text">取消订单原因选填</text>
<view class="reason-container">
<textarea class="reason-input" v-model="cancelReason" placeholder="请填写取消原因,方便我们提升服务"></textarea>
</view>
</view>
<view class="popup-footer">
<view class="popup-btn cancel-btn" @click="close">
<text>不取消</text>
</view>
<view class="popup-btn confirm-btn" @click="confirmCancel">
<text>确认取消</text>
</view>
</view>
</view>
</view>
</uv-popup>
</template>
<script>
import { orderCancel } from "@/api/order/order.js"
export default {
props: {
qrCodeUrl: {
type: String,
default: 'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/details/QR_Code.png'
}
},
data(){
return {
order : {},
cancelReason: '',
}
},
methods: {
// 打开弹窗
open(order){
this.order = order;
this.$refs.popup.open();
},
// 关闭弹窗
close() {
this.cancelReason = ''; // 清空取消原因
this.$refs.popup.close();
},
// 确认取消订单
confirmCancel() {
if (!this.order || !this.order.orderId) {
uni.showToast({
title: '订单信息不完整',
icon: 'none'
});
return;
}
// 显示加载中
uni.showLoading({
title: '处理中...'
});
// 调用取消订单API
orderCancel({
id : this.order.orderId,
idList : [this.order.orderId],
remark : this.cancelReason,
}).then(res => {
uni.hideLoading();
if (res && res.code === 200) {
// 成功
uni.showToast({
title: '订单已取消',
icon: 'success'
});
// 通知父组件订单已取消
this.$emit('cancel', this.order, this.cancelReason);
// 关闭弹窗
this.close();
} else {
// 失败
uni.showToast({
title: res?.msg || '取消失败,请联系客服',
icon: 'none'
});
}
}).catch(error => {
uni.hideLoading();
uni.showToast({
title: '取消失败,请稍后再试',
icon: 'none'
});
});
}
}
}
</script>
<style lang="scss" scoped>
.cancel-popup {
// position: fixed;
// top: 0;
// left: 0;
// right: 0;
// bottom: 0;
// z-index: 999;
display: flex;
justify-content: center;
align-items: center;
.popup-content {
position: relative;
width: 600rpx;
background-color: #FFFFFF;
border-radius: 12rpx;
overflow: hidden;
z-index: 1000;
}
.popup-header {
padding: 30rpx;
text-align: center;
background-color: #FFAA48;
}
.popup-title {
font-size: 32rpx;
font-weight: bold;
color: #fff;
}
.popup-body {
padding: 30rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.popup-text {
font-size: 28rpx;
color: #333333;
margin-bottom: 20rpx;
text-align: center;
}
.popup-subtext {
font-size: 24rpx;
color: #999999;
margin-bottom: 20rpx;
text-align: center;
}
.qrcode-container {
width: 300rpx;
height: 300rpx;
margin: 20rpx 0;
display: flex;
justify-content: center;
align-items: center;
}
.qrcode-image {
width: 100%;
height: 100%;
}
.popup-footer {
display: flex;
border-top: 1px solid #EEEEEE;
}
.popup-btn {
flex: 1;
padding: 30rpx 0;
text-align: center;
font-size: 28rpx;
}
.cancel-btn {
color: #666666;
border-right: 1px solid #EEEEEE;
}
.confirm-btn {
color: #FFAA48;
}
.reason-container {
width: 100%;
margin-bottom: 20rpx;
background-color: #F7F7F7;
border-radius: 8rpx;
}
.reason-input {
width: 100%;
height: 150rpx;
font-size: 28rpx;
color: #666;
line-height: 1.5;
padding: 20rpx;
}
}
</style>