|
|
- <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>
|