Explorar el Código

feat(attractions): 优化订单详情取消及退款逻辑

- 新增 isCancel 计算属性区分取消订单与申请退款
- 在取消订单弹窗中根据状态调用不同接口处理取消或退款
- 修改返回逻辑以支持多层页面正确后退并带动画
- 修改轮播组件指示器为固定关闭样式
- 订单详情取消原因为空时显示默认占位符 "--"
- 调整取消/退款按钮显示逻辑及文案绑定 isCancel
- 优化弹窗中退款数量区域展示,取消订单时显示可调节控件,退款申请时显示固定数量
- 修复配置文件注释状态,清理无用开发环境地址
- 更新 manifest.json 格式,去除多余括号
- 修正订单列表中 v-for 包裹容器结构,移除冗余样式类保持布局一致
zouzexu hace 1 día
padre
commit
78fd5a8e92

+ 2 - 2
src/config/index.ts

@@ -2,14 +2,14 @@ const mapEnvVersion = {
   /**
    * 开发版
    */
-  // develop: 'http://192.168.1.166:8080', // 张
+  develop: 'http://192.168.1.166:8080', // 张
   // develop: 'http://192.168.1.101:8080',
   // develop: 'http://192.168.0.157:8080',
   // develop: 'http://192.168.1.253:8080',
   // develop: 'http://192.168.0.19:8080', // 邓
   // develop: 'http://192.168.0.217:8080', // 黄
   // develop: 'http://192.168.0.11:8080', // 王
-  develop: 'http://192.168.1.89:8080', // 田
+  // develop: 'http://192.168.1.89:8080', // 田
   // develop: 'http://74949mkfh190.vicp.fun', // 付
   // develop: 'http://47.109.84.152:8081',
   // develop: 'https://5ed0f7cc.r9.vip.cpolar.cn',

+ 39 - 18
src/subPack-attractions/attractionsOrderDetail/attractionsOrderDetail.vue

@@ -73,23 +73,36 @@ function handleGoPay() {
   })
 }
 
-/** 取消订单 */
+const isCancel = computed(() => statusValue.value === 0)
+
+/** 取消订单 / 申请退款 */
 async function handleCancelOrder() {
   orderPopup.value = false
   useGlobalMessage().confirm({
     title: '提示',
-    msg: `确定要${statusValue.value === 0 ? '取消订单' : '退款'}吗?`,
+    msg: `确定要${isCancel.value ? '取消订单' : '退款'}吗?`,
     success: async () => {
-      const res: any = await Apis.attractions.cancelOrder({
-        data: {
-          orderNumber: orderInfo.value?.orderNumber || '',
-          cancelNum: refundNum.value,
-          cancelMemo: refundReason.value || undefined,
-        },
-      })
+      if (isCancel.value) {
+        await Apis.attractions.cancelOrder({
+          data: {
+            orderNumber: orderInfo.value?.orderNumber || '',
+            cancelNum: refundNum.value,
+            cancelMemo: refundReason.value || undefined,
+          },
+        })
+      }
+      else {
+        await Apis.xsb.applyRefund({
+          data: {
+            businessType: 2,
+            buyerDesc: refundReason.value || undefined,
+            orderNumber: orderInfo.value?.orderNumber || '',
+          },
+        })
+      }
       refundNum.value = 1
       refundReason.value = ''
-      useGlobalToast().show({ msg: res.data || '操作成功' })
+      useGlobalToast().show({ msg: '操作成功' })
       await getData(orderNumber.value)
     },
   })
@@ -110,8 +123,14 @@ onPageScroll((e) => {
 })
 
 function orderDetailBack() {
+  const vrIndex = 'subPack-attractions/commonTab/index'
+  const pages = getCurrentPages()
+  const targetPageIndex = pages.findIndex(page => page.route === vrIndex)
   if (ispay.value === 'true') {
-    router.replace({ name: 'attractions-tabbar' })
+    if (targetPageIndex !== -1) {
+      const delta = pages.length - targetPageIndex - 1
+      router.back({ delta, animationType: 'fade-out' })
+    }
   }
   else {
     router.back()
@@ -150,10 +169,9 @@ function orderDetailBack() {
             </text>
           </view>
           <swiper
-            class="mt-20rpx"
             :style="{ height: '340rpx' }"
             :current="swiperCurrent"
-            :indicator-dots="voucherPeoples.length > 1"
+            :indicator-dots="false"
             @change="onSwiperChange"
           >
             <swiper-item v-for="(people, idx) in voucherPeoples" :key="idx" class="flex flex-col items-center justify-center">
@@ -304,7 +322,7 @@ function orderDetailBack() {
             申请说明
           </view>
           <view class="text-28rpx font-bold">
-            {{ orderInfo.cancelReason }}
+            {{ orderInfo.cancelReason || '--' }}
           </view>
         </view>
         <view class="mt-28rpx flex items-center justify-between">
@@ -352,21 +370,21 @@ function orderDetailBack() {
           </Zcontact>
         </view>
       </view>
-      <wd-button v-if="(statusValue === 0 || statusValue != 60) && orderInfo?.scenicOrder?.isChangeask === 1" custom-class="w-546rpx" block size="large" @click="orderPopup = true">
-        {{ statusValue === 0 ? '取消订单' : '退款申请' }}
+      <wd-button v-if="(statusValue === 0 || statusValue != 60) && (orderInfo?.cancelState != 0 || orderInfo?.cancelState === 1) && orderInfo?.scenicOrder?.isChangeask === 1" custom-class="w-546rpx" block size="large" @click="orderPopup = true">
+        {{ isCancel ? '取消订单' : '退款申请' }}
       </wd-button>
     </view>
     <Zpopup v-model="orderPopup" :showfooter="false" :zindex="9999" bg="#fff">
       <view>
         <view class="mt-28rpx text-center text-32rpx font-bold">
-          {{ statusValue === 0 ? '取消订单' : '退款申请' }}
+          {{ isCancel ? '取消订单' : '退款申请' }}
         </view>
         <view class="px-24rpx">
           <view class="mt-30rpx flex items-center justify-between">
             <view class="text-28rpx">
               退款数量
             </view>
-            <view class="flex items-center gap-24rpx">
+            <view v-if="isCancel" class="flex items-center gap-24rpx">
               <view
                 class="h-36rpx w-36rpx rounded-50% bg-#F0F0F0 text-center text-28rpx text-#AAAAAA font-600 line-height-[36rpx]"
                 @click="handleRefundMinus"
@@ -383,6 +401,9 @@ function orderDetailBack() {
                 +
               </view>
             </view>
+            <view v-else class="text-24rpx font-400">
+              {{ orderInfo?.scenicOrder?.num ?? 0 }}
+            </view>
           </view>
           <view class="mt-26rpx">
             <view class="text-28rpx">

+ 1 - 1
src/subPack-attractions/commonTab/components/orderList.vue

@@ -60,7 +60,7 @@ const state = computed(() => {
           <view class="box-border w-full overflow-hidden px24rpx">
             <view class="h-20rpx" />
             <StatusTip v-if="!orderList.length" tip="暂无内容" />
-            <view v-for="order in orderList" :key="order.orderNumber" class="w-full overflow-hidden">
+            <view v-for="order in orderList" :key="order.orderNumber">
               <attractionsList :order="order" />
             </view>
             <wd-loadmore :state="state" :loading-props="{ color: '#9ED605', size: 20 }" @reload="reload" />