Parcourir la source

feat(user-store): 添加通用支付和订单管理功能

- 新增handleCommonPayMent方法用于统一处理支付逻辑
- 新增getOrderPayMent方法用于统一下单流程
- 新增getWxCommonPayment方法用于统一微信支付接口
- 新增paySuccess和payError方法用于支付结果页面跳转
- 新增clearCart方法用于清空购物车
- 新增订单操作方法:handleCommonOrderReceive、handleCommonDeleteOrder、
  handleCommonCancelOrder等
- 新增订单状态文本处理方法:handleXSBCommonOrderStatusText、
  handleFilmCommonOrderStatusText
- 导入dayjs库用于时间处理

refactor(film-module): 重构电影模块订单相关代码

- 将订单状态处理逻辑从utils文件迁移到user store中
- 使用统一的订单组件film-orderList替代原有列表渲染
- 移除多余的导入语句和未使用的函数
- 优化订单详情页的状态显示逻辑

refactor(charge-component): 调整充电订单组件结构

- 修改charge-orderList组件props,从传入数组改为单个订单对象
- 更新组件模板以适配新的props结构

feat(async-components): 添加异步组件声明支持

- 在async-component.d.ts中添加film-orderList和xsb-orderList的异步组件声明
- 支持?async后缀的组件导入方式

refactor(auto-imports): 更新自动导入配置

- 调整OrderStatus的导入路径从./subPack-xsb/utils/order-data到./utils/index
- 添加clearCart函数到全局自动导入中
- 更新相关类型的导入选项
zhangtao il y a 1 mois
Parent
commit
40b817373e

+ 8 - 0
async-component.d.ts

@@ -22,3 +22,11 @@ declare module '@/subPack-smqjh/components/charge-orderList/charge-orderList.vue
   const component: typeof import('@/subPack-smqjh/components/charge-orderList/charge-orderList.vue')
   export = component
 }
+declare module '@/subPack-smqjh/components/film-orderList/film-orderList.vue?async' {
+  const component: typeof import('@/subPack-smqjh/components/film-orderList/film-orderList.vue')
+  export = component
+}
+declare module '@/subPack-smqjh/components/xsb-orderList/xsb-orderList.vue?async' {
+  const component: typeof import('@/subPack-smqjh/components/xsb-orderList/xsb-orderList.vue')
+  export = component
+}

+ 6 - 1
src/auto-imports.d.ts

@@ -9,7 +9,7 @@ declare global {
   const Apis: typeof import('./api/index')['Apis']
   const CommonUtil: typeof import('wot-design-uni')['CommonUtil']
   const EffectScope: typeof import('vue')['EffectScope']
-  const OrderStatus: typeof import('./subPack-xsb/utils/order-data')['OrderStatus']
+  const OrderStatus: typeof import('./utils/index')['OrderStatus']
   const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
   const alovaInstance: typeof import('./api/index')['alovaInstance']
   const api: typeof import('./api/index')['default']
@@ -17,6 +17,7 @@ declare global {
   const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
   const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
   const calculateCenterPointSpherical: typeof import('./utils/index')['calculateCenterPointSpherical']
+  const clearCart: typeof import('./store/user')['clearCart']
   const computed: typeof import('vue')['computed']
   const computedAsync: typeof import('@vueuse/core')['computedAsync']
   const computedEager: typeof import('@vueuse/core')['computedEager']
@@ -377,6 +378,9 @@ declare global {
   // @ts-ignore
   export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue'
   import('vue')
+  // @ts-ignore
+  export type { OrderStatus } from './utils/index'
+  import('./utils/index')
 }
 // for vue template auto import
 import { UnwrapRef } from 'vue'
@@ -387,6 +391,7 @@ declare module 'vue' {
     readonly Apis: UnwrapRef<typeof import('./api/index')['Apis']>
     readonly CommonUtil: UnwrapRef<typeof import('wot-design-uni')['CommonUtil']>
     readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
+    readonly OrderStatus: UnwrapRef<typeof import('./utils/index')['OrderStatus']>
     readonly acceptHMRUpdate: UnwrapRef<typeof import('pinia')['acceptHMRUpdate']>
     readonly alovaInstance: UnwrapRef<typeof import('./api/index')['alovaInstance']>
     readonly api: UnwrapRef<typeof import('./api/index')['default']>

+ 287 - 0
src/store/user.ts

@@ -1,6 +1,8 @@
 import { defineStore } from 'pinia'
+import { dayjs } from 'wot-design-uni'
 import { StaticUrl } from '@/config'
 import router from '@/router'
+import type { wxpay } from '@/api/globals'
 
 interface userStroe {
   token: string
@@ -131,6 +133,291 @@ export const useUserStore = defineStore('user', {
         }
       })
     },
+    /**
+     * 通用支付逻辑
+     * @param orderNumber
+     * @returns
+     */
+    handleCommonPayMent(orderNumber: string): Promise<wxpay> {
+      return new Promise((resolve, reject) => {
+        if (!orderNumber) {
+          useGlobalToast().show({ msg: '订单号为空!请联系管理员' })
+          reject(new Error('订单号为空!请联系管理员'))
+          return
+        }
+        uni.showLoading({ mask: true })
+        Apis.common.hybridPayment({ data: { orderNumber } }).then((res) => {
+          resolve(res.data)
+          uni.hideLoading()
+        }).catch((err) => {
+          uni.hideLoading()
+          reject(err)
+        })
+      })
+    }, /**
+        *
+        * @param businessType
+        * @param dvyType  配送类型 1:快递 2:自提 3:及时配送
+        * @param remarks
+        * @param shopId
+        * @param orderItemList
+        * @returns 下单获取待支付订单号
+        */
+    getOrderPayMent(freightFee: number, businessType: string, dvyType: number, shopId: number, orderItemList: {
+      prodCount?: number
+      skuId?: number
+    }[], remarks?: string): Promise<string> {
+      uni.showLoading({ mask: true })
+      return new Promise((resolve, reject) => {
+        if (!this.selectedAddress) {
+          reject(new Error('请选择收货地址'))
+          return
+        }
+        Apis.common.addOrder({
+          data: {
+            channelId: Number(this.userInfo.channelId),
+            businessType,
+            addressId: this.selectedAddress.id,
+            dvyType,
+            freightAmount: freightFee,
+            shopId,
+            orderItemList,
+            remarks,
+          },
+        }).then((res) => {
+          resolve(res.data)
+          uni.hideLoading()
+        }).catch((err) => {
+          uni.hideLoading()
+          reject(err)
+        })
+      })
+    },
+    /**
+     *
+     * @param orderInfo
+     * @returns 统一拉起微信支付
+     * @param type 0是下单,1是列表下单
+     */
+
+    getWxCommonPayment(orderPay: wxpay, type: number) {
+      uni.showLoading({ mask: true })
+      return new Promise((resolve, reject) => {
+        const orderInfo = {
+          appid: orderPay.appId,
+          timeStamp: orderPay.timeStamp,
+          nonceStr: orderPay.nonceStr,
+          package: orderPay.package,
+          signType: orderPay.signType,
+          paySign: orderPay.paySign,
+        }
+        uni.requestPayment({
+          provider: 'wxpay',
+          orderInfo,
+          ...orderInfo,
+          success: (res) => {
+            if (!type) {
+              this.paySuccess()
+            }
+            resolve(res)
+          },
+          fail: (e) => {
+            console.log(e, '失败')
+            if (!type) {
+              this.payError()
+            }
+            reject(e)
+          },
+          complete() {
+            uni.hideLoading()
+          },
+        })
+      })
+    },
+    /**
+     *
+     * 支付成功统一跳转
+     */
+    paySuccess() {
+      return new Promise((resolve) => {
+        const { paySuccessPath, payBackIndexPath } = storeToRefs(useSysStore())
+        paySuccessPath.value = 'xsb-order'
+        payBackIndexPath.value = 'subPack-xsb/commonTab/index'
+        router.replace({ name: 'common-paySuccess' })
+        setTimeout(() => {
+          resolve(1)
+        }, 2000)
+      })
+    },
+    /**
+     *
+     * 支付失败统一跳转
+     */
+    payError() {
+      return new Promise((resolve) => {
+        const { paySuccessPath, payBackIndexPath } = storeToRefs(useSysStore())
+        paySuccessPath.value = 'xsb-order'
+        payBackIndexPath.value = 'subPack-xsb/commonTab/index'
+        router.replace({ name: 'common-payError' })
+        setTimeout(() => {
+          resolve(1)
+        }, 2000)
+      })
+    }, /**
+        * 支付成功清空购买的商品的购物车
+        */
+
+    clearCart(skuList: Api.CartSkuVo[]) {
+      uni.showLoading({ mask: true })
+      return new Promise((resolve) => {
+        const skuids = skuList.map(item => item.id).join(',')
+        if (skuids.length) {
+          Apis.common.deleteShoppingCart({
+            pathParams: {
+              ids: skuids,
+            },
+          }).then(async (res) => {
+            resolve(res)
+            await useSmqjhCartStore().getCartList('XSB')
+            uni.hideLoading()
+          }).finally(() => resolve(1))
+        }
+        else {
+          resolve(1)
+          uni.hideLoading()
+        }
+      })
+    },
+    /**
+     * 统一确认收货
+     * @param order
+     * @returns
+     */
+    handleCommonOrderReceive(order: Api.xsbOrderList) {
+      return new Promise((resolve, reject) => {
+        useGlobalMessage().confirm({
+          title: '确认收货',
+          msg: '确定要确认收货吗?',
+          success: async () => {
+            uni.showLoading({ mask: true })
+            await Apis.xsb.confirmReceipt({
+              data: {
+                orderNumber: String(order.orderNumber),
+              },
+            })
+            resolve(1)
+          },
+          fail: err => reject(err),
+        })
+      })
+    },
+    /**
+     * 统一删除订单
+     * @param order
+     * @returns
+     */
+    handleCommonDeleteOrder(order: Api.xsbOrderList) {
+      return new Promise((resolve, reject) => {
+        useGlobalMessage().confirm({
+          title: '删除订单',
+          msg: '确定要删除该订单吗?',
+          success: async () => {
+            uni.showLoading({ mask: true })
+            Apis.xsb.deleteOrder({
+              pathParams: {
+                ids: String(order.orderId),
+              },
+            }).then(res => resolve(res)).catch(err => reject(err)).finally(() => uni.hideLoading())
+          },
+          fail: async (err) => {
+            reject(err)
+          },
+        })
+      })
+    },
+    /**
+     * 统一取消订单
+     * @param order
+     * @returns
+     */
+    handleCommonCancelOrder(order: Api.xsbOrderList) {
+      return new Promise((resolve, reject) => {
+        useGlobalMessage().confirm({
+          title: '取消订单',
+          msg: '确定要取消订单吗?',
+          success: async () => {
+            uni.showLoading({ mask: true })
+            Apis.xsb.cancelOrder({
+              data: {
+                orderNo: String(order.orderNumber),
+              },
+            }).then(res => resolve(res)).catch(err => reject(err)).finally(() => uni.hideLoading())
+          },
+          fail: async (err) => {
+            reject(err)
+          },
+        })
+      })
+    },
+    handleXSBCommonOrderStatusText(order: Api.xsbOrderList): any {
+      if (order.hbOrderStatus === OrderStatus.PaddingPay) {
+        const endTime = dayjs(order.createTime).add(16, 'minutes')
+        const remaining = dayjs(endTime).valueOf() - dayjs().valueOf()
+        return Math.max(0, remaining) // 确保不会返回负数
+      }
 
+      if (order.hbOrderStatus === OrderStatus.OrderAccepted) {
+        return '订单已接单'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderWaitDelivery) {
+        return '订单待配送'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderDelivering) {
+        return '订单配送中'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderCancelAudit) {
+        return '订单取消审核'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderCancel) {
+        return '订单取消'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderArrived) {
+        return '订单已送达'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderCompleted) {
+        return '订单完成'
+      }
+      return '未知订单状态'
+    },
+    handleFilmCommonOrderStatusText(order: Api.xsbOrderList): any {
+      if (order.hbOrderStatus === OrderStatus.PaddingPay) {
+        const endTime = dayjs(order.createTime).add(16, 'minutes')
+        const remaining = dayjs(endTime).valueOf() - dayjs().valueOf()
+        return Math.max(0, remaining) // 确保不会返回负数
+      }
+
+      if (order.hbOrderStatus === OrderStatus.OrderAccepted) {
+        return '待出票'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderWaitDelivery) {
+        return '订单待配送'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderDelivering) {
+        return '出票中'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderCancelAudit) {
+        return '订单取消审核'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderCancel) {
+        return '订单取消'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderArrived) {
+        return '订单完成'
+      }
+      if (order.hbOrderStatus === OrderStatus.OrderCompleted) {
+        return '订单完成'
+      }
+      return '未知订单状态'
+    },
   },
 })

+ 2 - 3
src/subPack-film/order-detail/index.vue

@@ -1,6 +1,5 @@
 <script setup lang="ts">
 import { filterDay, timeFormat } from '../utils'
-import { OrderStatus, handleCommonOrderStatusText } from '../utils/order-data'
 import { StaticUrl } from '@/config'
 
 definePage({
@@ -72,10 +71,10 @@ onLoad((options) => {
 </script>
 
 <template>
-  <view class="film-order-detail">
+  <view v-if="orderInfo" class="film-order-detail">
     <view class="status">
       <!-- 支付成功,待出票  -->
-      {{ orderInfo.hbOrderStatus == 0 ? "待支付" : handleCommonOrderStatusText(orderInfo) }}
+      {{ orderInfo.hbOrderStatus == 0 ? "待支付" : useUserStore().handleFilmCommonOrderStatusText(orderInfo) }}
     </view>
     <view class="status-desc">
       如需改签、退款,请直接联系商家

+ 5 - 110
src/subPack-film/order/index.vue

@@ -1,11 +1,7 @@
 <script setup lang="ts">
 import Tabbar from '../components/tabbar.vue'
-import { OrderStatus, handleCommonCancelOrder, handleCommonOrderStatusText } from '../utils/order-data'
-import { getWxCommonPayment, handleCommonPayMent } from '../utils/confirm-order'
-// import { StaticUrl } from '@/config'
-import { timeFormat } from '../utils'
 import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
-import router from '@/router'
+import filmOrderList from '@/subPack-smqjh/components/film-orderList/film-orderList.vue?async'
 
 definePage({
   name: 'film-order',
@@ -14,6 +10,7 @@ definePage({
     navigationBarTitleText: '我的订单',
     backgroundColorBottom: '#fff',
   },
+
 })
 
 const orderStatus = ref('all')
@@ -51,34 +48,6 @@ function handleItem(value: string) {
   reload()
 }
 
-async function handlePay(orderNumber: string) {
-  const res = await handleCommonPayMent(orderNumber)
-  if (res.payType !== 1) {
-    await getWxCommonPayment(res)
-  }
-  else {
-    reload()
-  }
-}
-async function handleCancel(order: Api.xsbOrderList) {
-  await handleCommonCancelOrder(order)
-  reload()
-}
-function handleCopy(data: string) {
-  uni.setClipboardData({
-    data,
-    showToast: true,
-  })
-}
-function handleOrder(orderNo: string) {
-  router.push({
-    name: 'film-order-detail',
-    params: {
-      orderNo,
-    },
-  })
-}
-
 onReachBottom(() => {
   if (!isLastPage.value) {
     page.value++
@@ -102,83 +71,9 @@ onLoad(() => {
     </view>
 
     <!-- 列表 -->
-    <view class="order-list">
-      <view
-        v-for="(item, index) in orderList" :key="index" class="order-item block"
-        @click.self="handleOrder(item.orderNumber as string)"
-      >
-        <view class="top-box">
-          <view class="title">
-            {{ item.movieName }}
-          </view>
-          <view class="status">
-            <template v-if="item.hbOrderStatus === OrderStatus.PaddingPay">
-              <view class="flex items-center">
-                待支付( 还剩 <wd-count-down :time="handleCommonOrderStatusText(item)" @finish="refresh" /> )
-              </view>
-            </template>
-            <text v-else>
-              {{ handleCommonOrderStatusText(item) }}
-            </text>
-          </view>
-        </view>
-        <!-- <view class="status-box">
-          <view class="reason-box">
-            <image class="icon" :src="`${StaticUrl}/film-error.png`" mode="scaleToFill" />
-            <view class="reason">
-              订单取消原因
-            </view>
-          </view>
-          <view class="info">
-            退款金额 ¥240 预计1-3个工作日到账
-          </view>
-        </view> -->
-
-        <view class="info-box">
-          <image class="img" :src="item.orderImage" mode="scaleToFill" />
-          <view class="info">
-            <view class="info-item">
-              影院:{{ item.cinemaName }}
-            </view>
-            <view class="info-item">
-              场次:{{ timeFormat(item.session) }}
-            </view>
-            <view class="info-item">
-              数量:{{ item.orderMovieItems?.length }}张
-            </view>
-            <view class="info-item">
-              总价:¥{{ item.orderMoney }}
-            </view>
-          </view>
-        </view>
-        <view class="btn-box">
-          <template v-if="item.hbOrderStatus === OrderStatus.PaddingPay">
-            <!-- 待支付 -->
-            <view
-              class="btn cancel"
-              custom-style="width: 128rpx;height: 38rpx;font-size: 24rpx;color: #AAAAAA;box-sizing: border-box;"
-              @click.stop="handleCancel(item)"
-            >
-              取消订单
-            </view>
-            <view
-              class="btn"
-              custom-style="width: 128rpx;height: 38rpx;font-size: 24rpx;color: #222222;box-sizing: border-box"
-              @click.stop="handlePay(item.orderNumber as string)"
-            >
-              付款
-            </view>
-          </template>
-          <wd-button
-            v-if="item.orderMovieItems[0].ticketCode"
-            custom-style="width: 188rpx;height: 44rpx;font-size: 28rpx;box-sizing: border-box"
-            @click.stop="handleCopy(item.orderMovieItems[0].ticketCode as string)"
-          >
-            复制取票码
-          </wd-button>
-        </view>
-      </view>
-    </view>
+    <template v-for="(item, index) in orderList" :key="index">
+      <filmOrderList :order="item" @refresh="refresh" />
+    </template>
 
     <wd-loadmore :state="state" :loading-props="{ color: '#9ED605', size: 20 }" @reload="reload" />
   </view>

+ 5 - 5
src/subPack-film/select-time/index.vue

@@ -151,20 +151,20 @@ onLoad((options) => {
     <view class="info-box">
       <view class="title-box">
         <view class="title">
-          {{ movieInfo.name }}
+          {{ movieInfo?.name }}
         </view>
         <view class="score">
-          评分{{ movieInfo.score }}
+          评分{{ movieInfo?.score }}
         </view>
       </view>
       <view class="info">
         <view class="time">
-          {{ movieInfo.duration }}分钟 |
+          {{ movieInfo?.duration }}分钟 |
         </view>
         <view class="type">
-          {{ movieInfo.category }}
+          {{ movieInfo?.category }}
         </view>
-        <view v-if="movieInfo.director" class="director">
+        <view v-if="movieInfo?.director" class="director">
           | {{ movieInfo.director }}
         </view>
       </view>

+ 2 - 4
src/subPack-film/submit-order/index.vue

@@ -1,5 +1,4 @@
 <script setup lang="ts">
-import { handleCommonPayMent, paySuccess } from '../utils/confirm-order'
 import { getArrayFieldMax, isWithin45Minutes, timeFormat } from '../utils/index'
 import router from '@/router'
 import { StaticUrl } from '@/config'
@@ -107,11 +106,10 @@ async function pay() {
     }
   })
   const { data: orderNumber } = await Apis.film.addFilmOrder({ data: query.value })
-  const res = await handleCommonPayMent(orderNumber)
+  const res = await useUserStore().handleCommonPayMent(orderNumber)
   loading.value = false
   if (res.payType !== 1) {
     // await getWxCommonPayment(res)
-    // await paySuccess()
     uni.showToast({
       title: '当前只支持积分支付',
       icon: 'none',
@@ -119,7 +117,7 @@ async function pay() {
     })
   }
   else {
-    await paySuccess()
+    await useUserStore().paySuccess()
   }
 }
 

+ 0 - 153
src/subPack-film/utils/confirm-order.ts

@@ -1,153 +0,0 @@
-import type { wxpay } from '@/api/globals'
-import router from '@/router'
-
-export function handleCommonPayMent(orderNumber: string): Promise<wxpay> {
-  return new Promise((resolve, reject) => {
-    if (!orderNumber) {
-      useGlobalToast().show({ msg: '订单号为空!请联系管理员' })
-      reject(new Error('订单号为空!请联系管理员'))
-      return
-    }
-    uni.showLoading({ mask: true })
-    Apis.common.hybridPayment({ data: { orderNumber } }).then((res) => {
-      resolve(res.data)
-      uni.hideLoading()
-    }).catch((err) => {
-      uni.hideLoading()
-      reject(err)
-    })
-  })
-}
-const { selectedAddress, userInfo } = storeToRefs(useUserStore())
-
-/**
- *
- * @param businessType
- * @param dvyType  配送类型 1:快递 2:自提 3:及时配送
- * @param remarks
- * @param shopId
- * @param orderItemList
- * @returns 下单获取待支付订单号
- */
-export function getOrderPayMent(freightFee: number, businessType: string, dvyType: number, shopId: number, orderItemList: {
-  prodCount?: number
-  skuId?: number
-}[], remarks?: string): Promise<string> {
-  uni.showLoading({ mask: true })
-  return new Promise((resolve, reject) => {
-    if (!selectedAddress.value) {
-      reject(new Error('请选择收货地址'))
-      return
-    }
-    Apis.common.addOrder({
-      data: {
-        channelId: Number(unref(userInfo).channelId),
-        businessType,
-        addressId: selectedAddress.value.id,
-        dvyType,
-        freightAmount: freightFee,
-        shopId,
-        orderItemList,
-        remarks,
-      },
-    }).then((res) => {
-      resolve(res.data)
-      uni.hideLoading()
-    }).catch((err) => {
-      uni.hideLoading()
-      reject(err)
-    })
-  })
-}
-/**
- *
- * @param orderInfo
- * @returns 统一拉起微信支付
- */
-
-export function getWxCommonPayment(orderPay: wxpay) {
-  uni.showLoading({ mask: true })
-  return new Promise((resolve, reject) => {
-    const orderInfo = {
-      appid: orderPay.appId,
-      timeStamp: orderPay.timeStamp,
-      nonceStr: orderPay.nonceStr,
-      package: orderPay.package,
-      signType: orderPay.signType,
-      paySign: orderPay.paySign,
-    }
-    uni.requestPayment({
-      provider: 'wxpay',
-      orderInfo,
-      ...orderInfo,
-      success(res) {
-        resolve(res)
-      },
-      fail(e) {
-        console.log(e, '失败')
-
-        reject(e)
-      },
-      complete() {
-        uni.hideLoading()
-      },
-    })
-  })
-}
-
-/**
- * 电影
- * 支付成功统一跳转
- */
-export function paySuccess() {
-  return new Promise((resolve) => {
-    const { paySuccessPath, payBackIndexPath } = storeToRefs(useSysStore())
-    paySuccessPath.value = 'film-order'
-    payBackIndexPath.value = 'subPack-flim/index/index'
-    router.replace({ name: 'common-paySuccess' })
-    setTimeout(() => {
-      resolve(1)
-    }, 2000)
-  })
-}
-/**
- * 电影
- * 支付成功统一跳转
- */
-export function payError() {
-  return new Promise((resolve) => {
-    const { paySuccessPath, payBackIndexPath } = storeToRefs(useSysStore())
-    paySuccessPath.value = 'xsb-order'
-    payBackIndexPath.value = 'subPack-xsb/commonTab/index'
-    router.replace({ name: 'common-payError' })
-    setTimeout(() => {
-      resolve(1)
-    }, 2000)
-  })
-}
-
-/**
- * 支付成功清空购买的商品的购物车
- */
-
-export async function clearCart(skuList: Api.CartSkuVo[]) {
-  uni.showLoading({ mask: true })
-  return new Promise((resolve) => {
-    const skuids = skuList.map(item => item.id).join(',')
-    if (skuids.length) {
-      Apis.common.deleteShoppingCart({
-        pathParams: {
-          ids: skuids,
-        },
-      }).then(async (res) => {
-        resolve(res)
-        await useSmqjhCartStore().getCartList('XSB')
-        uni.hideLoading()
-      }).finally(() => resolve(1))
-    }
-    else {
-      resolve(1)
-      uni.hideLoading()
-    }
-  })
-}

+ 0 - 156
src/subPack-film/utils/order-data.ts

@@ -1,156 +0,0 @@
-import { dayjs } from 'wot-design-uni'
-
-export const navTabTypeList = [
-  { name: '全部', value: 0 },
-  { name: '配送(外卖)', value: 3 },
-  { name: '快递', value: 1 },
-]
-
-export const orderStatusList = [
-  { name: '全部', value: 'all' },
-  { name: '待支付', value: 'paddingPay' },
-  { name: '进行中', value: 'ing' },
-  { name: '已完成', value: 'completed' },
-  { name: '已取消', value: 'cancel' },
-]
-export enum OrderStatus {
-  /**
-   * 待支付
-   */
-  PaddingPay = 0,
-  /**
-   * 订单已接单
-   */
-  OrderAccepted = 20,
-  /**
-   * 订单待配送
-   */
-  OrderWaitDelivery = 30,
-  /**
-   * 订单配送中
-   */
-  OrderDelivering = 40,
-  /**
-   * 订单取消审核
-   */
-  OrderCancelAudit = 50,
-  /**
-   * 订单取消
-   */
-  OrderCancel = 60,
-  /**
-   * 订单已送达
-   */
-  OrderArrived = 70,
-  /**
-   * 订单完成
-   */
-  OrderCompleted = 80,
-}
-
-/**
- * 订单状态文字统一处理
- * @param order
- *
- */
-export function handleCommonOrderStatusText(order: Api.xsbOrderList): any {
-  if (order.hbOrderStatus === OrderStatus.PaddingPay) {
-    const endTime = dayjs(order.createTime).add(16, 'minutes')
-    const remaining = dayjs(endTime).valueOf() - dayjs().valueOf()
-    return Math.max(0, remaining) // 确保不会返回负数
-  }
-
-  if (order.hbOrderStatus === OrderStatus.OrderAccepted) {
-    return '待出票'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderWaitDelivery) {
-    return '订单待配送'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderDelivering) {
-    return '出票中'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderCancelAudit) {
-    return '订单取消审核'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderCancel) {
-    return '订单取消'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderArrived) {
-    return '订单完成'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderCompleted) {
-    return '订单完成'
-  }
-  return '未知订单状态'
-}
-
-/**
- *  统一取消订单逻辑处理
- * @param order
- */
-export function handleCommonCancelOrder(order: Api.xsbOrderList) {
-  console.log(order, '取消顶顶顶')
-
-  return new Promise((resolve, reject) => {
-    useGlobalMessage().confirm({
-      title: '取消订单',
-      msg: '确定要取消订单吗?',
-      success: async () => {
-        uni.showLoading({ mask: true })
-        Apis.xsb.cancelOrder({
-          data: {
-            orderNo: String(order.orderNumber),
-          },
-        }).then(res => resolve(res)).catch(err => reject(err)).finally(() => uni.hideLoading())
-      },
-      fail: async (err) => {
-        reject(err)
-      },
-    })
-  })
-}
-
-/**
- * 统一删除订单
- */
-export function handleCommonDeleteOrder(order: Api.xsbOrderList) {
-  return new Promise((resolve, reject) => {
-    useGlobalMessage().confirm({
-      title: '删除订单',
-      msg: '确定要删除该订单吗?',
-      success: async () => {
-        uni.showLoading({ mask: true })
-        Apis.xsb.deleteOrder({
-          pathParams: {
-            ids: String(order.orderId),
-          },
-        }).then(res => resolve(res)).catch(err => reject(err)).finally(() => uni.hideLoading())
-      },
-      fail: async (err) => {
-        reject(err)
-      },
-    })
-  })
-}
-
-/**
- * 统一确认收货
- */
-export function handleCommonOrderReceive(order: Api.xsbOrderList) {
-  return new Promise((resolve, reject) => {
-    useGlobalMessage().confirm({
-      title: '确认收货',
-      msg: '确定要确认收货吗?',
-      success: async () => {
-        uni.showLoading({ mask: true })
-        await Apis.xsb.confirmReceipt({
-          data: {
-            orderNumber: String(order.orderNumber),
-          },
-        })
-        resolve(1)
-      },
-      fail: err => reject(err),
-    })
-  })
-}

+ 30 - 32
src/subPack-smqjh/components/charge-orderList/charge-orderList.vue

@@ -4,7 +4,7 @@ import router from '@/router'
 import { StaticUrl } from '@/config'
 
 defineProps<{
-  orderList: Api.xsbOrderList[]
+  order: Api.xsbOrderList
 }>()
 
 function handleItemClick(item: Api.xsbOrderList) {
@@ -30,43 +30,41 @@ function handleItemClick(item: Api.xsbOrderList) {
 </script>
 
 <template>
-  <view class="">
-    <view v-for="item in orderList" :key="item.orderNumber" class="mt-20rpx mt20rpx rounded-16rpx bg-#FFF p-24rpx" @click="handleItemClick(item)">
-      <view class="flex items-center justify-between">
-        <view>
-          <view class="text-28rpx font-bold">
-            {{ item.chargeOrder?.powerStationName }}
-          </view>
-          <view class="mt-20rpx text-24rpx text-#AAA">
-            订单时间:{{ item.createTime || '未知' }}
-          </view>
-          <view class="mt-20rpx text-24rpx text-#AAA">
-            终端编号:{{ item.chargeOrder?.connectorId || '未知' }}
-          </view>
+  <view class="mt-20rpx mt20rpx rounded-16rpx bg-#FFF p-24rpx" @click="handleItemClick(order)">
+    <view class="flex items-center justify-between">
+      <view>
+        <view class="text-28rpx font-bold">
+          {{ order.chargeOrder?.powerStationName }}
         </view>
-        <view class="text-center text-28rpx">
-          <image
-            class="h-64rpx w-64rpx"
-            :src="`${StaticUrl}/${chargeOrderStatus(item.hbOrderStatus).icon}.png`"
-          />
-          <view :style="{ color: chargeOrderStatus(item.hbOrderStatus).color }">
-            {{ chargeOrderStatus(item.hbOrderStatus).text }}
-          </view>
+        <view class="mt-20rpx text-24rpx text-#AAA">
+          订单时间:{{ order.createTime || '未知' }}
         </view>
-      </view>
-      <view class="my-20rpx h-2rpx w-full bg-#F0F0F0" />
-      <view class="flex items-center justify-between">
-        <view class="text-28rpx">
-          充电费用:
+        <view class="mt-20rpx text-24rpx text-#AAA">
+          终端编号:{{ order.chargeOrder?.connectorId || '未知' }}
         </view>
-        <view class="text-32rpx text-#FF6464 font-800">
-          <text class="text-18rpx">
-            ¥
-          </text>
-          {{ item.chargeOrder?.realCost }}
+      </view>
+      <view class="text-center text-28rpx">
+        <image
+          class="h-64rpx w-64rpx"
+          :src="`${StaticUrl}/${chargeOrderStatus(order.hbOrderStatus).icon}.png`"
+        />
+        <view :style="{ color: chargeOrderStatus(order.hbOrderStatus).color }">
+          {{ chargeOrderStatus(order.hbOrderStatus).text }}
         </view>
       </view>
     </view>
+    <view class="my-20rpx h-2rpx w-full bg-#F0F0F0" />
+    <view class="flex items-center justify-between">
+      <view class="text-28rpx">
+        充电费用:
+      </view>
+      <view class="text-32rpx text-#FF6464 font-800">
+        <text class="text-18rpx">
+          ¥
+        </text>
+        {{ order.chargeOrder?.realCost }}
+      </view>
+    </view>
   </view>
 </template>
 

+ 26 - 44
src/subPack-smqjh/components/film-orderList/film-orderList.vue

@@ -1,42 +1,27 @@
 <script setup lang="ts">
-// import { StaticUrl } from '@/config'
 import router from '@/router'
 
-const props = defineProps<{
-  orderList: Api.xsbOrderList[]
-  subPackOrder?: typeof import('@/subPack-film/utils/order-data')
-  subPackConfirm?: typeof import('@/subPack-film/utils/confirm-order')
+defineProps<{
+  order: Api.xsbOrderList
 }>()
 
 const _emit = defineEmits<{
-  'after-sale': [item: Api.xsbOrderList]
-  'refresh': []
+  refresh: []
 }>()
 
-function resolveModule<T = any>(maybeRef: any): T | undefined {
-  if (!maybeRef)
-    return undefined
-  if (maybeRef.value !== undefined)
-    return maybeRef.value as T
-  return maybeRef as T
-}
 async function handlePay(orderNumber: string) {
-  const spc = resolveModule(props.subPackConfirm)
-  if (!spc)
-    return
-  const res = await spc.handleCommonPayMent(orderNumber)
+  const res = await useUserStore().handleCommonPayMent(orderNumber)
   if (res.payType !== 1) {
-    await getWxCommonPayment(res)
+    // await useUserStore().getWxCommonPayment(res, 1)
+    useGlobalToast().show('当前只支持积分支付')
   }
   else {
     _emit('refresh')
   }
 }
+
 async function handleCancel(order: Api.xsbOrderList) {
-  const sp = resolveModule(props.subPackOrder)
-  if (!sp)
-    return
-  await handleCommonCancelOrder(order)
+  await useUserStore().handleCommonCancelOrder(order)
   _emit('refresh')
 }
 function handleCopy(data: string) {
@@ -54,31 +39,28 @@ function handleOrder(orderNo: string) {
     },
   })
 }
-onMounted(() => {
-  console.log('mounted', props.orderList)
-})
 </script>
 
 <template>
   <view
-    v-for="(item, index) in props.orderList" :key="index" class="order-item block"
-    @click.self="handleOrder(item.orderNumber as string)"
+    class="blockc order-item"
+    @click.self="handleOrder(order.orderNumber as string)"
   >
     <view class="top-box">
       <view class="title">
-        {{ item.movieName }}
+        {{ order.movieName }}
       </view>
       <view class="status">
-        <template v-if="item.hbOrderStatus === props.subPackOrder?.OrderStatus.PaddingPay">
+        <template v-if="order.hbOrderStatus === OrderStatus.PaddingPay">
           <view class="flex items-center">
             待支付( 还剩 <wd-count-down
-              :time="props.subPackOrder?.handleCommonOrderStatusText(item)"
+              :time="useUserStore().handleFilmCommonOrderStatusText(order)"
               @finish="() => _emit('refresh')"
             /> )
           </view>
         </template>
         <text v-else>
-          {{ props.subPackOrder?.handleCommonOrderStatusText(item) }}
+          {{ useUserStore().handleFilmCommonOrderStatusText(order) }}
         </text>
       </view>
     </view>
@@ -95,44 +77,44 @@ onMounted(() => {
         </view> -->
 
     <view class="info-box">
-      <image class="img" :src="item.orderImage" mode="scaleToFill" />
+      <image class="img" :src="order.orderImage" mode="scaleToFill" />
       <view class="info">
         <view class="info-item">
-          影院:{{ item.cinemaName }}
+          影院:{{ order.cinemaName }}
         </view>
         <view class="info-item">
-          场次:{{ item.session.replace('T', ' ') }}
+          场次:{{ order.session.replace('T', ' ') }}
         </view>
         <view class="info-item">
-          数量:{{ item.orderMovieItems?.length }}张
+          数量:{{ order.orderMovieItems?.length }}张
         </view>
         <view class="info-item">
-          总价:¥{{ item.orderMoney }}
+          总价:¥{{ order.orderMoney }}
         </view>
       </view>
     </view>
     <view class="btn-box">
-      <template v-if="item.hbOrderStatus === props.subPackOrder?.OrderStatus.PaddingPay">
+      <template v-if="order.hbOrderStatus === OrderStatus.PaddingPay">
         <!-- 待支付 -->
         <view
           class="btn cancel"
           custom-style="width: 128rpx;height: 38rpx;font-size: 24rpx;color: #AAAAAA;box-sizing: border-box;"
-          @click.stop="handleCancel(item)"
+          @click.stop="handleCancel(order)"
         >
           取消订单
         </view>
         <view
           class="btn"
           custom-style="width: 128rpx;height: 38rpx;font-size: 24rpx;color: #222222;box-sizing: border-box"
-          @click.stop="handlePay(item.orderNumber as string)"
+          @click.stop="handlePay(order.orderNumber as string)"
         >
           付款
         </view>
       </template>
       <wd-button
-        v-if="item.orderMovieItems[0].ticketCode"
+        v-if="order.orderMovieItems[0].ticketCode"
         custom-style="width: 188rpx;height: 44rpx;font-size: 28rpx;box-sizing: border-box"
-        @click.stop="handleCopy(item.orderMovieItems[0].ticketCode as string)"
+        @click.stop="handleCopy(order.orderMovieItems[0].ticketCode as string)"
       >
         复制取票码
       </wd-button>
@@ -141,11 +123,11 @@ onMounted(() => {
 </template>
 
 <style lang="scss" scoped>
-.block {
+.blockc {
   background: #FFFFFF;
   border-radius: 16rpx 16rpx 16rpx 16rpx;
   padding: 24rpx;
-  margin-bottom: 20rpx;
+  margin-top: 20rpx;
 }
 
   .order-item {

+ 34 - 49
src/subPack-smqjh/components/xsb-orderList/xsb-orderList.vue

@@ -2,40 +2,24 @@
 import { StaticUrl } from '@/config'
 import router from '@/router'
 
-const props = defineProps<{
-  orderList: Api.xsbOrderList[]
-  subPackOrder?: typeof import('@/subPack-xsb/utils/order-data')
-  subPackConfirm?: typeof import('@/subPack-xsb/utils/confirm-order')
+defineProps<{
+  order: Api.xsbOrderList
 }>()
 
 const _emit = defineEmits<{
-  'after-sale': [item: Api.xsbOrderList]
-  'refresh': []
+  refresh: []
 }>()
 
-function resolveModule<T = any>(maybeRef: any): T | undefined {
-  if (!maybeRef)
-    return undefined
-  if (maybeRef.value !== undefined)
-    return maybeRef.value as T
-  return maybeRef as T
-}
-
 async function handleCancel(order: Api.xsbOrderList) {
-  const sp = resolveModule(props.subPackOrder)
-  if (!sp)
-    return
-  await sp.handleCommonCancelOrder?.(order)
+  await useUserStore().handleCommonCancelOrder?.(order)
   _emit('refresh')
 }
 
 async function handlePay(orderNumber: string) {
-  const spc = resolveModule(props.subPackConfirm)
-  if (!spc)
-    return
-  const res = await spc.handleCommonPayMent?.(orderNumber)
+  const res = await useUserStore().handleCommonPayMent?.(orderNumber)
   if (res?.payType !== 1 && res) {
-    await spc.getWxCommonPayment?.(res)
+    await useUserStore().getWxCommonPayment(res, 1)
+    _emit('refresh')
   }
   else {
     _emit('refresh')
@@ -43,42 +27,43 @@ async function handlePay(orderNumber: string) {
 }
 
 async function handleSubmit(order: Api.xsbOrderList) {
-  const sp = resolveModule(props.subPackOrder)
-  if (!sp)
-    return
-  await sp.handleCommonOrderReceive?.(order)
+  await useUserStore().handleCommonOrderReceive(order)
   _emit('refresh')
 }
 
 async function handleDel(order: Api.xsbOrderList) {
-  const sp = resolveModule(props.subPackOrder)
-  if (!sp)
-    return
-  await sp.handleCommonDeleteOrder?.(order)
+  await useUserStore().handleCommonDeleteOrder(order)
   _emit('refresh')
 }
 
 function handleClick(no: string) {
   router.push({ name: 'xsb-orderDetaile', params: { id: no } })
 }
+async function handleAfterSale(item: Api.xsbOrderList) {
+  if (!item.orderItemList) {
+    useGlobalToast().show('商品异常!')
+    return
+  }
+  await useSysStore().getRefunOrder(item.orderNumber as string)
+}
 </script>
 
 <template>
-  <view v-for="item in orderList" :key="item.orderNumber" class="mt-20rpx rounded-16rpx bg-white p-24rpx">
+  <view class="mt-20rpx rounded-16rpx bg-white p-24rpx">
     <view class="flex items-center justify-between">
       <view class="flex items-center">
         <image :src="`${StaticUrl}/order-icon.png`" class="h-36rpx w-36rpx" />
         <view class="ml-20rpx text-32rpx font-semibold">
-          {{ item.shopName }}
+          {{ order.shopName }}
         </view>
       </view>
       <view class="text-24rpx text-[#FF4D3A]">
-        <template v-if="item.hbOrderStatus !== props.subPackOrder?.OrderStatus.PaddingPay">
-          {{ props.subPackOrder?.handleCommonOrderStatusText(item) }}
+        <template v-if="order.hbOrderStatus !== OrderStatus.PaddingPay">
+          {{ useUserStore().handleXSBCommonOrderStatusText(order) }}
         </template>
         <template v-else>
           <view class="flex items-center">
-            待支付( 还剩 <wd-count-down :time="props.subPackOrder?.handleCommonOrderStatusText(item)" @finish="$emit('refresh')" /> )
+            待支付( 还剩 <wd-count-down :time="useUserStore().handleXSBCommonOrderStatusText(order)" @finish="$emit('refresh')" /> )
           </view>
         </template>
       </view>
@@ -101,12 +86,12 @@ function handleClick(no: string) {
           </view> -->
       <view
         class="box-border h-176rpx w-full flex items-center justify-between rounded-16rpx bg-[#F9F9F9]"
-        @click="handleClick(item.orderNumber as string)"
+        @click="handleClick(order.orderNumber as string)"
       >
         <view class="box-border h-full w-480rpx py-28rpx pl-20rpx">
           <scroll-view scroll-x class="h-full w-full whitespace-nowrap">
             <view class="flex items-center">
-              <view v-for="goods in item.orderItemList" :key="goods.skuId" class="mr-50rpx">
+              <view v-for="goods in order.orderItemList" :key="goods.skuId" class="mr-50rpx">
                 <image :src="goods.pic" class="h-120rpx w-120rpx" />
               </view>
             </view>
@@ -114,44 +99,44 @@ function handleClick(no: string) {
         </view>
         <view class="box-shadow box-border h-full flex-1 flex-shrink-0 px-14rpx py-40rpx">
           <view class="text-center text-32rpx text-[#FF4D3A] font-semibold">
-            ¥{{ item.actualTotal }}
+            ¥{{ order.actualTotal }}
           </view>
           <view class="text-center text-28rpx text-[#AAAAAA]">
-            共{{ item.goodsTotal }}件
+            共{{ order.goodsTotal }}件
           </view>
         </view>
       </view>
     </view>
     <view class="my-24rpx flex items-center justify-end">
-      <template v-if="item.hbOrderStatus === resolveModule(props.subPackOrder)?.OrderStatus.PaddingPay">
+      <template v-if="order.hbOrderStatus === OrderStatus.PaddingPay">
         <view class="mr-20rpx">
-          <wd-button size="small" plain type="info" @click.stop="handleCancel(item)">
+          <wd-button size="small" plain type="info" @click.stop="handleCancel(order)">
             取消订单
           </wd-button>
         </view>
         <view class="mr-20rpx">
-          <wd-button size="small" plain type="error" @click.stop="handlePay(item.orderNumber as string)">
+          <wd-button size="small" plain type="error" @click.stop="handlePay(order.orderNumber as string)">
             付款
           </wd-button>
         </view>
       </template>
-      <template v-if="[resolveModule(props.subPackOrder)?.OrderStatus.OrderCancel, resolveModule(props.subPackOrder)?.OrderStatus.OrderCompleted].includes(item.hbOrderStatus) ">
+      <template v-if="[OrderStatus.OrderCancel, OrderStatus.OrderCompleted].includes(order.hbOrderStatus) ">
         <view class="mr-20rpx">
-          <wd-button size="small" plain type="info" @click.stop="handleDel(item)">
+          <wd-button size="small" plain type="info" @click.stop="handleDel(order)">
             删除订单
           </wd-button>
         </view>
       </template>
-      <template v-if="item.hbOrderStatus === resolveModule(props.subPackOrder)?.OrderStatus.OrderArrived">
+      <template v-if="order.hbOrderStatus === OrderStatus.OrderArrived">
         <view class="mr-20rpx">
-          <wd-button size="small" plain type="info" @click.stop="handleSubmit(item)">
+          <wd-button size="small" plain type="info" @click.stop="handleSubmit(order)">
             确认收货
           </wd-button>
         </view>
       </template>
-      <template v-if="item.refundStatus != 2 && [resolveModule(props.subPackOrder)?.OrderStatus.OrderCompleted, resolveModule(props.subPackOrder)?.OrderStatus.OrderWaitDelivery, resolveModule(props.subPackOrder)?.OrderStatus.OrderAccepted].includes(item.hbOrderStatus) ">
+      <template v-if="order.refundStatus != 2 && [OrderStatus.OrderCompleted, OrderStatus.OrderWaitDelivery, OrderStatus.OrderAccepted].includes(order.hbOrderStatus) ">
         <view class="mr-20rpx">
-          <wd-button size="small" plain type="info" @click.stop="() => _emit('after-sale', item)">
+          <wd-button size="small" plain type="info" @click.stop="() => handleAfterSale(order)">
             申请售后
           </wd-button>
         </view>

+ 13 - 47
src/subPack-smqjh/order/components/OrderRenderer.vue

@@ -4,61 +4,27 @@ import xsbList from '../../components/xsb-orderList/xsb-orderList.vue'
 import filmList from '../../components/film-orderList/film-orderList.vue'
 
 interface Props {
-  orderList: Api.xsbOrderList[]
+  orderList: Api.xsbOrderList
   navActiveTab: string
-  subPackOrder: any
-  subPackConfirm: any
 }
 
 defineProps<Props>()
 
 defineEmits<{
-  'cancel': [order: Api.xsbOrderList]
-  'pay': [orderNumber: string]
-  'submit': [order: Api.xsbOrderList]
-  'del': [order: Api.xsbOrderList]
-  'after-sale': [item: Api.xsbOrderList]
-  'refresh': []
+  refresh: []
 }>()
-
-const subPackFilmOrder = ref<typeof import('@/subPack-film/utils/order-data')>()
-const subPackFilmComfirm = ref<typeof import('@/subPack-film/utils/confirm-order')>()
-
-onMounted(async () => {
-  subPackFilmOrder.value = await AsyncImport('@/subPack-film/utils/order-data')
-  subPackFilmComfirm.value = await AsyncImport('@/subPack-film/utils/confirm-order')
-})
 </script>
 
 <template>
-  <template v-if="navActiveTab === 'all'">
-    <template v-for="order in orderList" :key="order.orderNumber">
-      <xsbList
-        v-if="order.businessType === 'XSB'" :order-list="[order]" :sub-pack-order="subPackOrder"
-        :sub-pack-confirm="subPackConfirm" @cancel="$emit('cancel', $event)" @pay="$emit('pay', $event)"
-        @submit="$emit('submit', $event)" @del="$emit('del', $event)" @after-sale="$emit('after-sale', $event)"
-        @refresh="$emit('refresh')"
-      />
-      <chargeList v-else-if="order.businessType === 'CD'" :order-list="[order]" />
-      <filmList
-        v-else-if="order.businessType === 'DYY'" :order-list="[order]" :sub-pack-order="subPackFilmOrder"
-        :sub-pack-confirm="subPackFilmComfirm" @cancel="$emit('cancel', $event)" @pay="$emit('pay', $event)"
-        @submit="$emit('submit', $event)" @del="$emit('del', $event)" @after-sale="$emit('after-sale', $event)"
-        @refresh="$emit('refresh')"
-      />
-    </template>
-  </template>
-  <xsbList
-    v-else-if="navActiveTab === 'XSB'" :order-list="orderList" :sub-pack-order="subPackOrder"
-    :sub-pack-confirm="subPackConfirm" @cancel="$emit('cancel', $event)" @pay="$emit('pay', $event)"
-    @submit="$emit('submit', $event)" @del="$emit('del', $event)" @after-sale="$emit('after-sale', $event)"
-    @refresh="$emit('refresh')"
-  />
-  <chargeList v-else-if="navActiveTab === 'CD'" :order-list="orderList" />
-  <filmList
-    v-else-if="navActiveTab === 'DYY'" :order-list="orderList" :sub-pack-order="subPackFilmOrder"
-    :sub-pack-confirm="subPackFilmComfirm" @cancel="$emit('cancel', $event)" @pay="$emit('pay', $event)"
-    @submit="$emit('submit', $event)" @del="$emit('del', $event)" @after-sale="$emit('after-sale', $event)"
-    @refresh="$emit('refresh')"
-  />
+  <block>
+    <xsbList
+      v-if="orderList.businessType === 'XSB' || orderList.businessType === 'all'" :order="orderList"
+      @refresh="$emit('refresh')"
+    />
+    <chargeList v-else-if="orderList.businessType === 'CD' || orderList.businessType === 'all'" :order="orderList" />
+    <filmList
+      v-else-if="orderList.businessType === 'DYY' || orderList.businessType === 'all'" :order="orderList"
+      @refresh="$emit('refresh')"
+    />
+  </block>
 </template>

+ 7 - 55
src/subPack-smqjh/order/index.vue

@@ -1,5 +1,4 @@
 <script setup lang="ts">
-import { computed } from 'vue'
 import OrderRenderer from './components/OrderRenderer.vue'
 import { navTabTypeList, orderStatusList } from './order-data'
 import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
@@ -11,8 +10,6 @@ definePage({
     navigationBarTitleText: '订单列表',
   },
 })
-const subPackOrder = ref<typeof import('@/subPack-xsb/utils/order-data')>()
-const subPackComfirm = ref<typeof import('@/subPack-xsb/utils/confirm-order')>()
 
 const navActiveTab = ref('all')
 const scrollViewId = ref()
@@ -34,42 +31,6 @@ const { data: orderList, refresh, isLastPage, page, reload } = usePagination((pa
   middleware: createGlobalLoadingMiddleware(),
 })
 
-function createFilteredList(businessType: string) {
-  return computed(() => {
-    if (navActiveTab.value === 'all') {
-      return orderList.value.filter(order => order.businessType === businessType)
-    }
-    else if (navActiveTab.value === businessType) {
-      return orderList.value
-    }
-    return []
-  })
-}
-
-const xsbOrderList = createFilteredList('XSB')
-const chargeOrderList = createFilteredList('CD')
-const filmOrderList = createFilteredList('DYY')
-
-const currentOrderList = computed(() => {
-  if (navActiveTab.value === 'all') {
-    return orderList.value
-  }
-  else if (navActiveTab.value === 'XSB') {
-    return xsbOrderList.value
-  }
-  else if (navActiveTab.value === 'CD') {
-    return chargeOrderList.value
-  }
-  else if (navActiveTab.value === 'DYY') {
-    return filmOrderList.value
-  }
-  return []
-})
-
-onMounted(async () => {
-  subPackOrder.value = await AsyncImport('@/subPack-xsb/utils/order-data')
-  subPackComfirm.value = await AsyncImport('@/subPack-xsb/utils/confirm-order')
-})
 function handleChangeTypeNav(value: string) {
   navActiveTab.value = value
   scrollViewId.value = null
@@ -91,14 +52,6 @@ function handleChangeStatus(value: string) {
   orderList.value = []
   reload()
 }
-// Cancel / Pay / Submit / Delete are handled inside child components now
-async function handleAfterSale(item: Api.xsbOrderList) {
-  if (!item.orderItemList) {
-    useGlobalToast().show('商品异常!')
-    return
-  }
-  await useSysStore().getRefunOrder(item.orderNumber as string)
-}
 </script>
 
 <template>
@@ -135,14 +88,13 @@ async function handleAfterSale(item: Api.xsbOrderList) {
       </view>
     </view>
     <view class="px-24rpx">
-      <OrderRenderer
-        :order-list="currentOrderList"
-        :nav-active-tab="navActiveTab"
-        :sub-pack-order="subPackOrder"
-        :sub-pack-confirm="subPackComfirm"
-        @after-sale="handleAfterSale"
-        @refresh="refresh"
-      />
+      <template v-for="item in orderList" :key="item.orderNumber">
+        <OrderRenderer
+          :order-list="item"
+          :nav-active-tab="navActiveTab"
+          @refresh="reload"
+        />
+      </template>
       <StatusTip v-if="!orderList.length" tip="暂无内容" />
     </view>
     <view class="h-20rpx" />

+ 0 - 18
src/subPack-smqjh/order/order-data.ts

@@ -15,24 +15,6 @@ export const orderStatusList = [
   { name: '已取消', value: 'cancel' },
 ]
 
-/**
- * 统一待支付状态支付按钮逻辑处理
- * @param order
- */
-
-export function handleCommonOrderPay(order: any) {
-  return order
-}
-
-/**
- *  统一取消订单逻辑处理
- * @param order
- */
-
-export function handleCommonCancelOrder(order: any) {
-  return order
-}
-
 /**
  * 统一充电订单状态处理
  * @param status 0:待充电,20:充电中,30:结算中,80:已完成

+ 9 - 7
src/subPack-xsb/confirmOrder/index.vue

@@ -1,5 +1,4 @@
 <script setup lang="ts">
-import { clearCart, getOrderPayMent, getWxCommonPayment, handleCommonPayMent, paySuccess } from '../utils/confirm-order'
 import router from '@/router'
 
 definePage({
@@ -65,17 +64,20 @@ async function handlePay() {
       }
     })
 
-    const orderNumber = await getOrderPayMent(orderInfo.value.transfee, 'XSB', deliveryType.value, Number(orderInfo.value?.skuList[0].shopId || SelectShopInfo.value.shopId), orderItemList, unref(remarks))
-    const res = await handleCommonPayMent(orderNumber)
-    await clearCart(orderInfo.value.skuList)
+    const orderNumber = await useUserStore().getOrderPayMent(orderInfo.value.transfee, 'XSB', deliveryType.value, Number(orderInfo.value?.skuList[0].shopId || SelectShopInfo.value.shopId), orderItemList, unref(remarks))
+    const res = await useUserStore().handleCommonPayMent(orderNumber)
+    await useUserStore().clearCart(orderInfo.value.skuList)
     totalProduct.value = null
+    console.log('进入微信支付', res)
+
     if (res.payType !== 1) {
-      await getWxCommonPayment(res)
-      await paySuccess()
+      console.log('进入微信支付')
+
+      await useUserStore().getWxCommonPayment(res, 0)
       isPay.value = false
     }
     else {
-      await paySuccess()
+      await useUserStore().paySuccess()
       isPay.value = false
     }
   }

+ 17 - 132
src/subPack-xsb/order/index.vue

@@ -1,9 +1,6 @@
 <script setup lang="ts">
-import { getWxCommonPayment, handleCommonPayMent } from '../utils/confirm-order'
-import { OrderStatus, handleCommonCancelOrder, handleCommonDeleteOrder, handleCommonOrderReceive, handleCommonOrderStatusText, navTabTypeList, orderStatusList } from '../utils/order-data'
 import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
-import { StaticUrl } from '@/config'
-import router from '@/router'
+import xsbOrderList from '@/subPack-smqjh/components/xsb-orderList/xsb-orderList.vue?async'
 
 definePage({
   name: 'xsb-order',
@@ -12,7 +9,19 @@ definePage({
     navigationBarTitleText: '订单列表',
   },
 })
+const navTabTypeList = [
+  { name: '全部', value: 0 },
+  { name: '配送(外卖)', value: 3 },
+  { name: '快递', value: 1 },
+]
 
+const orderStatusList = [
+  { name: '全部', value: 'all' },
+  { name: '待支付', value: 'paddingPay' },
+  { name: '进行中', value: 'ing' },
+  { name: '已完成', value: 'completed' },
+  { name: '已取消', value: 'cancel' },
+]
 const navActiveTab = ref(0)
 const orderStatusActive = ref('all') // 我的订单 all-全部 paddingPay-待支付 ing-进行中 completed-已完成 cancel-已取消
 
@@ -42,9 +51,7 @@ function handleChangeStatus(value: string) {
   orderList.value = []
   reload()
 }
-function handleClick(item: Api.xsbOrderList) {
-  router.push({ name: 'xsb-orderDetaile', params: { id: String(item.orderNumber) } })
-}
+
 onReachBottom(() => {
   if (!isLastPage.value) {
     page.value++
@@ -53,35 +60,6 @@ onReachBottom(() => {
 onShow(() => {
   refresh()
 })
-
-async function handlePay(orderNumber: string) {
-  const res = await handleCommonPayMent(orderNumber)
-  if (res.payType !== 1) {
-    await getWxCommonPayment(res)
-  }
-  else {
-    reload()
-  }
-}
-async function handleCancel(order: Api.xsbOrderList) {
-  await handleCommonCancelOrder(order)
-  reload()
-}
-async function handleDel(order: Api.xsbOrderList) {
-  await handleCommonDeleteOrder(order)
-  reload()
-}
-async function handleSubmitOrder(order: Api.xsbOrderList) {
-  await handleCommonOrderReceive(order)
-  reload()
-}
-async function handleAfterSale(item: Api.xsbOrderList) {
-  if (!item.orderItemList) {
-    useGlobalToast().show('商品异常!')
-    return
-  }
-  await useSysStore().getRefunOrder(item.orderNumber as string)
-}
 </script>
 
 <template>
@@ -112,102 +90,9 @@ async function handleAfterSale(item: Api.xsbOrderList) {
       </view>
     </view>
     <view class="px-24rpx">
-      <view v-for="item in orderList" :key="item.orderNumber" class="mt-20rpx rounded-16rpx bg-white p-24rpx">
-        <view class="w-full flex items-center justify-between">
-          <view class="flex items-center">
-            <image :src="`${StaticUrl}/order-icon.png`" class="h-36rpx w-36rpx" />
-            <view class="ml-20rpx text-32rpx font-semibold">
-              {{ item.shopName }}
-            </view>
-          </view>
-          <view class="text-24rpx text-[#FF4D3A]">
-            <template v-if="item.hbOrderStatus === OrderStatus.PaddingPay">
-              <view class="flex items-center">
-                待支付( 还剩 <wd-count-down :time="handleCommonOrderStatusText(item)" @finish="refresh" /> )
-              </view>
-            </template>
-            <text v-else>
-              {{ handleCommonOrderStatusText(item) }}
-            </text>
-          </view>
-        </view>
-        <view class="my-24rpx h-2rpx w-full bg-[#F0F0F0]" />
-        <view>
-          <!-- <view class="mb20rpx box-border rounded-16rpx bg-#F9F9F9 p24rpx">
-            <view class="flex items-center">
-              <image :src="`${StaticUrl}/order-car.png`" class="h36rpx w36rpx" />
-              <view class="ml20rpx text-28rpx text-#222 font-semibold">
-                预计10:40前可送达
-              </view>
-            </view>
-            <view class="mt18rpx">
-              您的订单预计3月7日 10:40前送达
-            </view>
-            <view class="mt20rpx">
-              2025-03-26 11:56:07
-            </view>
-          </view> -->
-          <view class="box-border h-176rpx w-full flex items-center justify-between rounded-16rpx bg-[#F9F9F9]" @click="handleClick(item)">
-            <view class="box-border h-full w-480rpx py-28rpx pl-20rpx">
-              <scroll-view scroll-x class="h-full w-full whitespace-nowrap">
-                <view class="flex items-center">
-                  <view v-for="goods in item.orderItemList" :key="goods.skuId" class="mr-50rpx">
-                    <image :src="goods.pic" class="h-120rpx w-120rpx" />
-                  </view>
-                </view>
-              </scroll-view>
-            </view>
-            <view class="box-shadow box-border h-full flex-1 flex-shrink-0 px-14rpx py-40rpx">
-              <view class="text-center text-32rpx text-[#FF4D3A] font-semibold">
-                ¥{{ item.actualTotal }}
-              </view>
-              <view class="text-center text-28rpx text-[#AAAAAA]">
-                共{{ item.goodsTotal }}件
-              </view>
-            </view>
-          </view>
-        </view>
-        <view class="mt-24rpx flex items-center justify-end">
-          <template v-if="item.hbOrderStatus === OrderStatus.PaddingPay">
-            <view class="mr-20rpx">
-              <wd-button size="small" plain type="info" @click.stop="handleCancel(item)">
-                取消订单
-              </wd-button>
-            </view>
-            <view class="mr-20rpx">
-              <wd-button size="small" plain type="error" @click.stop="handlePay(item.orderNumber as string)">
-                付款
-              </wd-button>
-            </view>
-          </template>
-          <template v-if="[OrderStatus.OrderCancel, OrderStatus.OrderCompleted].includes(item.hbOrderStatus) ">
-            <view class="mr-20rpx">
-              <wd-button size="small" plain type="info" @click.stop="handleDel(item)">
-                删除订单
-              </wd-button>
-            </view>
-            <!-- <view class="ml20rpx">
-              <wd-button size="small" plain type="error" @click.stop="handleDel(item)">
-                再次购买
-              </wd-button>
-            </view> -->
-          </template>
-          <template v-if="item.hbOrderStatus === OrderStatus.OrderArrived">
-            <view class="mr-20rpx">
-              <wd-button size="small" plain type="info" @click.stop="handleSubmitOrder(item)">
-                确认收货
-              </wd-button>
-            </view>
-          </template>
-          <template v-if="item.refundStatus != 2 && [OrderStatus.OrderCompleted, OrderStatus.OrderWaitDelivery, OrderStatus.OrderAccepted].includes(item.hbOrderStatus) ">
-            <view class="mr-20rpx">
-              <wd-button size="small" plain type="info" @click.stop="handleAfterSale(item)">
-                申请售后
-              </wd-button>
-            </view>
-          </template>
-        </view>
-      </view>
+      <template v-for="item in orderList" :key="item.orderNumber">
+        <xsbOrderList :order="item" @refresh="reload" />
+      </template>
     </view>
     <StatusTip v-if="!orderList.length" tip="暂无内容" />
     <view class="h-20rpx" />

+ 4 - 6
src/subPack-xsb/orderDetaile/index.vue

@@ -1,9 +1,7 @@
 <script setup lang="ts">
 import type { MapMarker, MapPolyline } from '@uni-helper/uni-types'
-import { OrderStatus, handleCommonCancelOrder, handleCommonDeleteOrder, handleCommonOrderReceive, handleCommonOrderStatusText } from '../utils/order-data'
 import { StaticUrl } from '@/config'
 import router from '@/router'
-import { getWxCommonPayment, handleCommonPayMent } from '@/subPack-xsb/utils/confirm-order'
 
 const plugins = requirePlugin('logisticsPlugin')
 const { statusBarHeight, MenuButtonHeight } = storeToRefs(useSysStore())
@@ -264,7 +262,7 @@ async function handleMarkerTap(e: UniHelper.MapOnMarkertapEvent) {
   }
 }
 async function handleReceive() {
-  await handleCommonOrderReceive(orderInfo.value as Api.xsbOrderList)
+  await useUserStore().handleCommonOrderReceive(orderInfo.value as Api.xsbOrderList)
   getDetail(String(unref(orderInfo)?.orderNumber))
 }
 </script>
@@ -293,7 +291,7 @@ async function handleReceive() {
           <view v-if="orderInfo.hbOrderStatus === OrderStatus.PaddingPay">
             <view class="flex items-center">
               请在
-              <wd-count-down format="mm:ss" :time="handleCommonOrderStatusText(orderInfo)" @finish="handleFinish">
+              <wd-count-down format="mm:ss" :time="useUserStore().handleXSBCommonOrderStatusText(orderInfo)" @finish="handleFinish">
                 <template #default="{ current }">
                   <view class="flex items-center">
                     <view> {{ current.minutes }} 分</view>
@@ -303,9 +301,9 @@ async function handleReceive() {
               </wd-count-down>
               内支付
             </view>
-            <view class="mt-20rpx text-28rpx text-[#AAAAAA]">
+            <!-- <view class="mt-20rpx text-28rpx text-[#AAAAAA]">
               现在支付:预计10:40-10:55送达
-            </view>
+            </view> -->
             <view class="btn mt-20rpx flex items-center justify-between">
               <view class="info-btn mr-20rpx w-226rpx">
                 <wd-button type="info" @click="handleCancel">

+ 0 - 155
src/subPack-xsb/utils/confirm-order.ts

@@ -1,155 +0,0 @@
-import type { wxpay } from '@/api/globals'
-import router from '@/router'
-
-export function handleCommonPayMent(orderNumber: string): Promise<wxpay> {
-  return new Promise((resolve, reject) => {
-    if (!orderNumber) {
-      useGlobalToast().show({ msg: '订单号为空!请联系管理员' })
-      reject(new Error('订单号为空!请联系管理员'))
-      return
-    }
-    uni.showLoading({ mask: true })
-    Apis.common.hybridPayment({ data: { orderNumber } }).then((res) => {
-      resolve(res.data)
-      uni.hideLoading()
-    }).catch((err) => {
-      uni.hideLoading()
-      reject(err)
-    })
-  })
-}
-const { selectedAddress, userInfo } = storeToRefs(useUserStore())
-
-/**
- *
- * @param businessType
- * @param dvyType  配送类型 1:快递 2:自提 3:及时配送
- * @param remarks
- * @param shopId
- * @param orderItemList
- * @returns 下单获取待支付订单号
- */
-export function getOrderPayMent(freightFee: number, businessType: string, dvyType: number, shopId: number, orderItemList: {
-  prodCount?: number
-  skuId?: number
-}[], remarks?: string): Promise<string> {
-  uni.showLoading({ mask: true })
-  return new Promise((resolve, reject) => {
-    if (!selectedAddress.value) {
-      reject(new Error('请选择收货地址'))
-      return
-    }
-    Apis.common.addOrder({
-      data: {
-        channelId: Number(unref(userInfo).channelId),
-        businessType,
-        addressId: selectedAddress.value.id,
-        dvyType,
-        freightAmount: freightFee,
-        shopId,
-        orderItemList,
-        remarks,
-      },
-    }).then((res) => {
-      resolve(res.data)
-      uni.hideLoading()
-    }).catch((err) => {
-      uni.hideLoading()
-      reject(err)
-    })
-  })
-}
-/**
- *
- * @param orderInfo
- * @returns 统一拉起微信支付
- */
-
-export function getWxCommonPayment(orderPay: wxpay) {
-  uni.showLoading({ mask: true })
-  return new Promise((resolve, reject) => {
-    const orderInfo = {
-      appid: orderPay.appId,
-      timeStamp: orderPay.timeStamp,
-      nonceStr: orderPay.nonceStr,
-      package: orderPay.package,
-      signType: orderPay.signType,
-      paySign: orderPay.paySign,
-    }
-    uni.requestPayment({
-      provider: 'wxpay',
-      orderInfo,
-      ...orderInfo,
-      success(res) {
-        resolve(res)
-      },
-      fail(e) {
-        console.log(e, '失败')
-        payError()
-        reject(e)
-      },
-      complete() {
-        uni.hideLoading()
-      },
-    })
-  })
-}
-
-/**
- * 星闪豹
- * 支付成功统一跳转
- */
-export function paySuccess() {
-  return new Promise((resolve) => {
-    const { paySuccessPath, payBackIndexPath } = storeToRefs(useSysStore())
-    paySuccessPath.value = 'xsb-order'
-    payBackIndexPath.value = 'subPack-xsb/commonTab/index'
-    router.replace({ name: 'common-paySuccess' })
-    setTimeout(() => {
-      resolve(1)
-    }, 2000)
-  })
-}
-/**
- * 星闪豹
- * 支付成功统一跳转
- */
-export function payError() {
-  console.log('进入支付失败')
-
-  return new Promise((resolve) => {
-    const { paySuccessPath, payBackIndexPath } = storeToRefs(useSysStore())
-    paySuccessPath.value = 'xsb-order'
-    payBackIndexPath.value = 'subPack-xsb/commonTab/index'
-    router.replace({ name: 'common-payError' })
-    setTimeout(() => {
-      resolve(1)
-    }, 2000)
-  })
-}
-
-/**
- * 支付成功清空购买的商品的购物车
- */
-
-export async function clearCart(skuList: Api.CartSkuVo[]) {
-  uni.showLoading({ mask: true })
-  return new Promise((resolve) => {
-    const skuids = skuList.map(item => item.id).join(',')
-    if (skuids.length) {
-      Apis.common.deleteShoppingCart({
-        pathParams: {
-          ids: skuids,
-        },
-      }).then(async (res) => {
-        resolve(res)
-        await useSmqjhCartStore().getCartList('XSB')
-        uni.hideLoading()
-      }).finally(() => resolve(1))
-    }
-    else {
-      resolve(1)
-      uni.hideLoading()
-    }
-  })
-}

+ 0 - 156
src/subPack-xsb/utils/order-data.ts

@@ -1,156 +0,0 @@
-import { dayjs } from 'wot-design-uni'
-
-export const navTabTypeList = [
-  { name: '全部', value: 0 },
-  { name: '配送(外卖)', value: 3 },
-  { name: '快递', value: 1 },
-]
-
-export const orderStatusList = [
-  { name: '全部', value: 'all' },
-  { name: '待支付', value: 'paddingPay' },
-  { name: '进行中', value: 'ing' },
-  { name: '已完成', value: 'completed' },
-  { name: '已取消', value: 'cancel' },
-]
-export enum OrderStatus {
-  /**
-   * 待支付
-   */
-  PaddingPay = 0,
-  /**
-   * 订单已接单
-   */
-  OrderAccepted = 20,
-  /**
-   * 订单待配送
-   */
-  OrderWaitDelivery = 30,
-  /**
-   * 订单配送中
-   */
-  OrderDelivering = 40,
-  /**
-   * 订单取消审核
-   */
-  OrderCancelAudit = 50,
-  /**
-   * 订单取消
-   */
-  OrderCancel = 60,
-  /**
-   * 订单已送达
-   */
-  OrderArrived = 70,
-  /**
-   * 订单完成
-   */
-  OrderCompleted = 80,
-}
-
-/**
- * 订单状态文字统一处理
- * @param order
- *
- */
-export function handleCommonOrderStatusText(order: Api.xsbOrderList): any {
-  if (order.hbOrderStatus === OrderStatus.PaddingPay) {
-    const endTime = dayjs(order.createTime).add(16, 'minutes')
-    const remaining = dayjs(endTime).valueOf() - dayjs().valueOf()
-    return Math.max(0, remaining) // 确保不会返回负数
-  }
-
-  if (order.hbOrderStatus === OrderStatus.OrderAccepted) {
-    return '订单已接单'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderWaitDelivery) {
-    return '订单待配送'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderDelivering) {
-    return '订单配送中'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderCancelAudit) {
-    return '订单取消审核'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderCancel) {
-    return '订单取消'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderArrived) {
-    return '订单已送达'
-  }
-  if (order.hbOrderStatus === OrderStatus.OrderCompleted) {
-    return '订单完成'
-  }
-  return '未知订单状态'
-}
-
-/**
- *  统一取消订单逻辑处理
- * @param order
- */
-export function handleCommonCancelOrder(order: Api.xsbOrderList) {
-  console.log(order, '取消顶顶顶')
-
-  return new Promise((resolve, reject) => {
-    useGlobalMessage().confirm({
-      title: '取消订单',
-      msg: '确定要取消订单吗?',
-      success: async () => {
-        uni.showLoading({ mask: true })
-        Apis.xsb.cancelOrder({
-          data: {
-            orderNo: String(order.orderNumber),
-          },
-        }).then(res => resolve(res)).catch(err => reject(err)).finally(() => uni.hideLoading())
-      },
-      fail: async (err) => {
-        reject(err)
-      },
-    })
-  })
-}
-
-/**
- * 统一删除订单
- */
-export function handleCommonDeleteOrder(order: Api.xsbOrderList) {
-  return new Promise((resolve, reject) => {
-    useGlobalMessage().confirm({
-      title: '删除订单',
-      msg: '确定要删除该订单吗?',
-      success: async () => {
-        uni.showLoading({ mask: true })
-        Apis.xsb.deleteOrder({
-          pathParams: {
-            ids: String(order.orderId),
-          },
-        }).then(res => resolve(res)).catch(err => reject(err)).finally(() => uni.hideLoading())
-      },
-      fail: async (err) => {
-        reject(err)
-      },
-    })
-  })
-}
-
-/**
- * 统一确认收货
- */
-export function handleCommonOrderReceive(order: Api.xsbOrderList) {
-  return new Promise((resolve, reject) => {
-    useGlobalMessage().confirm({
-      title: '确认收货',
-      msg: '确定要确认收货吗?',
-      success: async () => {
-        uni.showLoading({ mask: true })
-        await Apis.xsb.confirmReceipt({
-          data: {
-            orderNumber: String(order.orderNumber),
-          },
-        })
-        resolve(1)
-      },
-      fail: err => reject(err),
-    })
-  })
-}

+ 37 - 0
src/utils/index.ts

@@ -75,3 +75,40 @@ export function calculateCenterPointSpherical(
     lng: toDegrees(centerLng),
   }
 }
+/**
+ * 订单统一枚举
+ */
+export enum OrderStatus {
+  /**
+   * 待支付
+   */
+  PaddingPay = 0,
+  /**
+   * 订单已接单
+   */
+  OrderAccepted = 20,
+  /**
+   * 订单待配送
+   */
+  OrderWaitDelivery = 30,
+  /**
+   * 订单配送中
+   */
+  OrderDelivering = 40,
+  /**
+   * 订单取消审核
+   */
+  OrderCancelAudit = 50,
+  /**
+   * 订单取消
+   */
+  OrderCancel = 60,
+  /**
+   * 订单已送达
+   */
+  OrderArrived = 70,
+  /**
+   * 订单完成
+   */
+  OrderCompleted = 80,
+}

+ 4 - 10
vite.config.ts

@@ -1,5 +1,4 @@
 import process from 'node:process'
-import path from 'node:path'
 import Uni from '@dcloudio/vite-plugin-uni'
 import UniHelperComponents from '@uni-helper/vite-plugin-uni-components'
 import { WotResolver } from '@uni-helper/vite-plugin-uni-components/resolvers'
@@ -24,8 +23,8 @@ export default async () => {
       UniHelperManifest(),
       // https://github.com/uni-helper/vite-plugin-uni-pages
       pagesJson({
-        dts: path.resolve(process.cwd(), 'src/uni-pages.d.ts'),
-        pagesDir: 'pages',
+        dts: 'src/uni-pages.d.ts',
+        pageDir: 'pages',
         subPackageDirs: [
           'subPack-xsb',
           'subPack-common',
@@ -41,12 +40,6 @@ export default async () => {
         exclude: ['**/components/**/*.*'],
         hooks: [
           hookUniPlatform,
-          // 简单调试 hook:在生成时打印上下文,帮助定位问题
-          (ctx) => {
-            console.log('[pages-json] pages type:', Object.prototype.toString.call(ctx.pages))
-            console.log('[pages-json] pages count:', Array.isArray(ctx.pages) ? ctx.pages.length : 'not array')
-            console.log('[pages-json] output dts:', path.resolve(process.cwd(), 'src/uni-pages.d.ts'))
-          },
         ],
       }),
       // https://github.com/uni-helper/vite-plugin-uni-layouts
@@ -60,7 +53,8 @@ export default async () => {
       }),
       // https://github.com/uni-ku/root
       UniKuRoot(),
-      Uni(),
+      Uni({
+      }),
       // https://github.com/uni-ku/bundle-optimizer
       Optimization({
         logger: true,