Prechádzať zdrojové kódy

Merge branch 'master' into zzx

zouzexu 3 dní pred
rodič
commit
db5332f04e

+ 1 - 0
src/api/apiDefinitions.ts

@@ -82,6 +82,7 @@ export default {
   'common.addOrder':['POST', '/smqjh-oms/api/v1/order/addOrder'],
   'common.hybridPayment':['POST', '/smqjh-oms/service/pay/hybridPayment'],
   'smqjh.getCategoryList':['POST', '/smqjh-pms/app-api/v1/categories/getCategoryList'],
+  'common.hybridPaymentType':['POST', '/smqjh-oms/service/pay/hybridPaymentType'],
 
   'film.getCityList':['GET', '/smqjh-pms/api/v1/app/city/list'],
   'film.getMovieList':['GET', '/smqjh-pms/api/v1/app/movie/page'],

+ 9 - 0
src/api/globals.d.ts

@@ -777,6 +777,15 @@ declare global {
       >(
         config: Config
       ): Alova2Method<apiResData<wxpay>, 'common.hybridPayment', Config>;
+      hybridPaymentType<
+        Config extends Alova2MethodConfig<apiResData<{ payType:  'point' | 'hybrid' | 'wx' }>> & {
+          data: {
+            orderNumber: string;
+          }
+        }
+      >(
+        config: Config
+      ): Alova2Method<apiResData<{ payType:  'point' | 'hybrid' | 'wx' }>, 'common.hybridPaymentType', Config>;
     }
     smqjh: {
       getCategoryList<

+ 8 - 1
src/components/QCode.vue

@@ -11,11 +11,18 @@ function createQRCode() {
   qr.data = props.text
   qr.size = props.qwidth || 100 // 这里是px,和下面的不匹配
   qr.make()
+  console.log(qr, '=====')
+
   const canvasContext = uni.createCanvasContext(props.qrKey, _this)
   qr.canvasContext = canvasContext
   qr.drawCanvas()
 }
-createQRCode()
+onMounted(createQRCode)
+
+watch(
+  () => [props.text, props.qrKey, props.qwidth],
+  () => createQRCode(),
+)
 
 async function downloadQrcode() {
   try {

+ 4 - 2
src/pages/my/index.vue

@@ -128,16 +128,18 @@ function handleGo(item: { name: string, status: string }) {
               <image :src="`${StaticUrl}/4.png`" class="h-50rpx w-50rpx" />
             </template>
           </wd-cell>
+          <!-- #ifdef MP-WEIXIN -->
           <wd-cell custom-title-class="cell-title" clickable is-link>
             <template #icon>
-              <image :src="`${StaticUrl}/5.png`" class="h-50rpx w-50rpx" />
+              <image :src="`${StaticUrl}/5.png`" class="h50rpx w50rpx" />
             </template>
             <template #title>
-              <view class="ml-20rpx w-[90%]">
+              <view class="ml20rpx w100%">
                 <Zcontact>联系平台客服</Zcontact>
               </view>
             </template>
           </wd-cell>
+          <!-- #endif -->
           <wd-cell title="账户设置" custom-title-class="cell-title" clickable is-link @click="router.push({ name: 'common-user-center' })">
             <template #icon>
               <image :src="`${StaticUrl}/mine-setting-icon.png`" class="h-50rpx w-50rpx" />

+ 14 - 5
src/store/cart.ts

@@ -46,13 +46,18 @@ export const useSmqjhCartStore = defineStore('smqjh-cart', {
      */
     async addCart(skuId: number, num: number, shopId: number, businessType: string) {
       return new Promise((resolve, reject) => {
+        if (this.isAddingCart) {
+          useGlobalToast().show({ msg: '操作中,请稍后' })
+          reject(new Error('操作中,请稍后'))
+          return
+        }
         if (!skuId) {
           useGlobalToast().show({ msg: '请选择商品规格' })
           return reject(new Error('请选择商品规格'))
         }
+        this.isAddingCart = true
         const { userInfo } = storeToRefs(useUserStore())
         useUserStore().checkLogin().then(() => {
-          this.isAddingCart = true
           Apis.common.addShoppingCart({
             data: {
               businessType,
@@ -64,10 +69,14 @@ export const useSmqjhCartStore = defineStore('smqjh-cart', {
           }).then((res) => {
             this.getCartList('XSB')
             resolve(res)
-          }).finally(() => {
+          }).catch((err) => {
             this.isAddingCart = false
+            reject(err)
           })
-        }).catch(err => reject(err))
+        }).catch((err) => {
+          this.isAddingCart = false
+          reject(err)
+        })
       })
     },
     /**
@@ -92,6 +101,7 @@ export const useSmqjhCartStore = defineStore('smqjh-cart', {
       })
       this.isCartAllChecked = false
       this.totalProduct = null
+      this.isAddingCart = false
       useTabbar().setTabbarItem('smqjh-cart', this.getTotalNum)
     },
     /**
@@ -193,11 +203,10 @@ export const useSmqjhCartStore = defineStore('smqjh-cart', {
         useGlobalToast().show({ msg: '移除商品中,请稍后' })
         return
       }
-      console.log(item.num, '===============================')
-
       if (item.num === 1) {
         useGlobalMessage().confirm({
           msg: '是否删除该商品?',
+          closeOnClickModal: false,
           success: async ({ action }) => {
             if (action === 'confirm') {
               await this.addCart(item.skuId, -1, item.shopId, 'XSB')

+ 52 - 3
src/store/user.ts

@@ -173,6 +173,45 @@ export const useUserStore = defineStore('user', {
           reject(err)
         })
       })
+    },
+    /**
+     * H5支付后轮询通用订单支付状态
+     * @param orderNumber 订单号
+     * @param interval 轮询间隔,默认3秒
+     * @param timeout 超时时间,默认90秒
+     */
+    async pollOrderPaySuccess(orderNumber: string, interval = 3000, timeout = 90000): Promise<boolean> {
+      if (!orderNumber) {
+        useGlobalToast().show({ msg: '订单号为空!请联系管理员' })
+        return false
+      }
+
+      const startedAt = Date.now()
+      const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms))
+
+      while (Date.now() - startedAt <= timeout) {
+        try {
+          const res = await Apis.xsb.orderInfo({
+            data: {
+              orderNo: orderNumber,
+            },
+          })
+          const orderInfo = res.data
+          if (orderInfo?.isPayed === 1 || (orderInfo?.hbOrderStatus !== undefined && orderInfo.hbOrderStatus !== OrderStatus.PaddingPay)) {
+            return true
+          }
+        }
+        catch (error) {
+          console.error('轮询订单支付状态失败', error)
+        }
+
+        if (Date.now() - startedAt + interval > timeout)
+          break
+
+        await sleep(interval)
+      }
+
+      return false
     }, /**
         *
         * @param freightFee
@@ -290,11 +329,9 @@ export const useUserStore = defineStore('user', {
         */
 
     clearCart(skuList: Api.CartSkuVo[]) {
-      console.log('进入清空购物车')
       uni.showLoading({ mask: true })
       return new Promise((resolve) => {
         const skuids = skuList.map(item => item.id).join(',')
-        console.log(skuids, '执行前')
         if (skuids.length) {
           console.log(skuids, '执行中')
           Apis.common.deleteShoppingCart({
@@ -548,12 +585,13 @@ export const useUserStore = defineStore('user', {
      * h5第三方统一拉起微信支付跳转路径及参数
      * @param orderNumber
      */
-    handleCommonWechatPay(orderNumber: string) {
+    handleCommonWechatPay(orderNumber: string, model: string = 'mixture') {
       // #ifdef H5
       uni.showLoading({ mask: true })
       const query = {
         orderNumber,
         phone: String(this.userInfo.mobile),
+        model,
         tenantCode: useSysStore().tenantCode,
       }
       const queryString = Object.entries(query)
@@ -567,5 +605,16 @@ export const useUserStore = defineStore('user', {
       uni.hideLoading()
       // #endif
     },
+    async getPayMent(orderNumber: string): Promise<{ payType: 'point' | 'hybrid' | 'wx' }> {
+      return new Promise((resolve, reject) => {
+        Apis.common.hybridPaymentType({ data: { orderNumber } })
+          .then((res) => {
+            resolve(res.data)
+          })
+          .catch((err) => {
+            reject(err)
+          })
+      })
+    },
   },
 })

+ 9 - 1
src/subPack-attractions/attractionsDetail/attractionsDetail.vue

@@ -95,12 +95,20 @@ function handleOrder() {
   router.push({ name: 'attractions-tabbar', params: { tabbar: '1' } })
 }
 
+function formatDateParam(dateValue: Date) {
+  const year = dateValue.getFullYear()
+  const month = String(dateValue.getMonth() + 1).padStart(2, '0')
+  const day = String(dateValue.getDate()).padStart(2, '0')
+  return `${year}-${month}-${day}`
+}
+
 function handleBook() {
+  const travelDate = selectedDate.value instanceof Date ? selectedDate.value : new Date()
   router.push({
     name: 'attractions-reservation-info',
     params: {
       productNo: productNo.value,
-      selectDate: selectedDate.value || new Date(),
+      selectDate: formatDateParam(travelDate),
       productName: attractionDetail.value?.productName || '',
       isSingle: String(attractionDetail.value?.isSingle),
       price: String(attractionDetail.value?.salePrice),

+ 20 - 7
src/subPack-attractions/attractionsOrderPay/attractionsOrderPay.vue

@@ -28,25 +28,38 @@ async function getPayPreview() {
   payPreviewInfo.value = res.data
 }
 
+async function handleH5PayResult(orderNumber: string) {
+  const isPaySuccess = await useUserStore().pollOrderPaySuccess(orderNumber)
+  if (isPaySuccess) {
+    router.replace({ name: 'attractions-tabbar', params: { tabbar: '1' } })
+    return
+  }
+
+  useGlobalToast().show({ msg: '暂未查询到支付成功,请稍后在订单列表查看' })
+}
+
 async function submitPay() {
-  // #ifdef MP-WEIXIN
-  const res = await useUserStore().handleCommonPayMent(orderNo.value)
-  if (res.payType !== 1) {
+  const payMent = await useUserStore().getPayMent(orderNo.value)
+  if (payMent.payType !== 'point') {
     try {
+      // #ifdef MP-WEIXIN
+      const res = await useUserStore().handleCommonPayMent(orderNo.value)
       await useUserStore().getWxCommonPayment(res)
       router.replace({ name: 'attractions-order-detail', params: { orderNo: String(payPreviewInfo.value?.orderNumber), ispay: 'true' } })
+      // #endif
+      // #ifdef H5
+      useUserStore().handleCommonWechatPay(orderNo.value)
+      await handleH5PayResult(orderNo.value)
+      // #endif
     }
     catch {
       await useUserStore().payError('attractions-tabbar', 'subPack-attractions/commonTab/index')
     }
   }
   else {
+    await useUserStore().handleCommonPayMent(orderNo.value)
     router.replace({ name: 'attractions-order-detail', params: { orderNo: String(payPreviewInfo.value?.orderNumber), ispay: 'true' } })
   }
-  // #endif
-  // #ifdef H5
-  useUserStore().handleCommonWechatPay(orderNo.value)
-  // #endif
 }
 </script>
 

+ 64 - 14
src/subPack-attractions/attractionsReservation/attractionsReservation.vue

@@ -70,24 +70,69 @@ watch(quantity, (newVal) => {
 const orderPopup = ref(false)
 const orderMemo = ref('')
 
+interface ParsedDate {
+  year: number
+  month: string
+  day: string
+}
+
+function formatDateParts(date: Date): ParsedDate | null {
+  if (Number.isNaN(date.getTime()))
+    return null
+
+  return {
+    year: date.getFullYear(),
+    month: String(date.getMonth() + 1).padStart(2, '0'),
+    day: String(date.getDate()).padStart(2, '0'),
+  }
+}
+
+function parseSelectDate(value: string): ParsedDate | null {
+  const dateText = value.trim()
+  if (!dateText)
+    return null
+
+  const dateMatch = dateText.match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})/)
+  if (dateMatch) {
+    const year = Number(dateMatch[1])
+    const month = Number(dateMatch[2])
+    const day = Number(dateMatch[3])
+    const parsedDate = new Date(year, month - 1, day)
+
+    if (
+      parsedDate.getFullYear() !== year
+      || parsedDate.getMonth() !== month - 1
+      || parsedDate.getDate() !== day
+    ) {
+      return null
+    }
+
+    return {
+      year,
+      month: String(month).padStart(2, '0'),
+      day: String(day).padStart(2, '0'),
+    }
+  }
+
+  return formatDateParts(new Date(dateText))
+}
+
+const parsedSelectDate = computed(() => parseSelectDate(selectDate.value))
+
 const formattedDate = computed(() => {
-  if (!selectDate.value)
+  if (!parsedSelectDate.value)
     return ''
-  const date = new Date(selectDate.value)
-  const year = date.getFullYear()
-  const month = String(date.getMonth() + 1).padStart(2, '0')
-  const day = String(date.getDate()).padStart(2, '0')
+
+  const { year, month, day } = parsedSelectDate.value
   return `${year}年${month}月${day}日`
 })
 
 // 接口需要的日期格式 yyyy-MM-dd
 const travelDate = computed(() => {
-  if (!selectDate.value)
+  if (!parsedSelectDate.value)
     return ''
-  const date = new Date(selectDate.value)
-  const year = date.getFullYear()
-  const month = String(date.getMonth() + 1).padStart(2, '0')
-  const day = String(date.getDate()).padStart(2, '0')
+
+  const { year, month, day } = parsedSelectDate.value
   return `${year}-${month}-${day}`
 })
 
@@ -105,6 +150,11 @@ function handlePeopleCreditConfirm(index: number, { value: selectedValue }: { va
 
 // 表单校验
 function validateForm(): boolean {
+  if (!travelDate.value) {
+    useGlobalToast().show({ msg: '请选择游玩日期' })
+    return false
+  }
+
   // 联系人姓名校验
   if (!linkMan.value.trim()) {
     useGlobalToast().show({ msg: '请输入联系人姓名' })
@@ -204,7 +254,7 @@ async function handleSubmit() {
         <view class="flex items-center gap-24rpx">
           <view
             class="h-36rpx w-36rpx rounded-50% text-center text-28rpx font-600 line-height-[36rpx]"
-            :class="quantity > 1 ? 'bg-#E8FFA7 text-#9ED605' : 'bg-#F0F0F0 text-#AAAAAA'"
+            :class="quantity > 1 ? 'bg-[var(--them-color)] text-white' : 'bg-#F0F0F0 text-#AAAAAA'"
             @click="handleMinus"
           >
             -
@@ -213,7 +263,7 @@ async function handleSubmit() {
             {{ quantity }}
           </view>
           <view
-            class="h-36rpx w-36rpx rounded-50% bg-#E8FFA7 text-center text-28rpx text-#9ED605 font-600 line-height-[36rpx]"
+            class="h-36rpx w-36rpx rounded-50% bg-[var(--them-color)] text-center text-28rpx text-white font-600 line-height-[36rpx]"
             @click="handlePlus"
           >
             +
@@ -264,7 +314,7 @@ async function handleSubmit() {
         </view>
         <view class="h-2rpx w-full bg-#F0F0F0" />
         <view>
-          <wd-picker v-model="people.linkCreditType" required :columns="columns" label="证件类型" @confirm="(e: { value: number }) => handlePeopleCreditConfirm(index, e)" />
+          <wd-picker v-model="people.linkCreditType" required :columns="columns" label="证件类型" @confirm="e => handlePeopleCreditConfirm(index, e)" />
         </view>
         <view class="h-2rpx w-full bg-#F0F0F0" />
         <view>
@@ -307,7 +357,7 @@ async function handleSubmit() {
           <wd-icon name="arrow-up" size="18px" />
         </view>
         <view
-          class="h-80rpx w-180rpx rounded-40rpx bg-#9ED605 text-center text-28rpx text-#FFF font-bold line-height-[80rpx]"
+          class="h-80rpx w-180rpx rounded-40rpx bg-[var(--them-color)] text-center text-28rpx text-#FFF font-bold line-height-[80rpx]"
           @click="handleSubmit"
         >
           提交

+ 12 - 1
src/subPack-charge/chargeVoucher/chargeVoucher.vue

@@ -48,6 +48,16 @@ function getSelectedLevel(): Api.RechargeLevel | undefined {
   return rechargeLevels.value[selectIndex.value]
 }
 
+async function handleH5PayResult(orderNumber: string) {
+  const isPaySuccess = await useUserStore().pollOrderPaySuccess(orderNumber)
+  if (isPaySuccess) {
+    router.replace({ name: 'charge-buy-a-ticket-list' })
+    return
+  }
+
+  useGlobalToast().show({ msg: '暂未查询到支付成功,请稍后在订单列表查看' })
+}
+
 /**
  * 提交支付
  */
@@ -86,7 +96,8 @@ async function submitPay() {
     // #endif
     // #ifdef H5
     uni.hideLoading()
-    useUserStore().handleCommonWechatPay(orderNumber)
+    useUserStore().handleCommonWechatPay(orderNumber, 'wx')
+    await handleH5PayResult(orderNumber)
     // #endif
   }
   catch (error) {

+ 20 - 3
src/subPack-common/threePay/index.vue

@@ -7,9 +7,13 @@ definePage({ name: 'smqjh-threePay', islogin: false, style: { navigationBarTitle
 const { token } = storeToRefs(useUserStore())
 const { tenantCode } = storeToRefs(useSysStore())
 const orderNumber = ref()
+const model = ref('mixture')
 onLoad((options: any) => {
   orderNumber.value = options.orderNumber
   tenantCode.value = options.tenantCode
+  if (options.model) {
+    model.value = options.model
+  }
   token.value = ''
   handleLogin(options.phone)
   console.log(options, '============options=======')
@@ -40,9 +44,22 @@ function handleLogin(phoneCode: string) {
 }
 
 async function handlePay() {
-  const res = await useUserStore().handleCommonPayMent(orderNumber.value)
-  priceInfo.value = res
-  console.log(priceInfo.value, '=========================')
+  console.log(model.value, '========model.value=============')
+
+  if (model.value === 'wx') {
+    const payRes = await Apis.charge.wxJsApiPay({
+      data: {
+        orderNumber: orderNumber.value,
+      },
+    })
+    priceInfo.value = payRes.data
+    await useUserStore().getWxCommonPayment(payRes.data)
+  }
+  else {
+    const res = await useUserStore().handleCommonPayMent(orderNumber.value)
+    priceInfo.value = res
+    console.log(priceInfo.value, '=============priceInfo.value============')
+  }
 }
 async function handleGoPay() {
   if (priceInfo.value?.payType !== 1) {

+ 25 - 8
src/subPack-djk/confirmOrder/index.vue

@@ -1,4 +1,6 @@
 <script setup lang="ts">
+import router from '@/router'
+
 definePage({
   name: 'djk-confirmOrder',
   islogin: true,
@@ -28,6 +30,18 @@ async function getGoodsDetaile() {
   orderInfo.value = res.data
   getCore()
 }
+async function handleH5PayResult(orderNumber: string) {
+  const isPaySuccess = await useUserStore().pollOrderPaySuccess(orderNumber)
+  if (isPaySuccess) {
+    isPay.value = false
+    router.replace({ name: 'djk-homeTabbar', params: { pay: '1' } })
+    return
+  }
+
+  useGlobalToast().show({ msg: '暂未查询到支付成功,请稍后在订单列表查看' })
+  isPay.value = false
+}
+
 async function handlePay() {
   if (!orderInfo.value) {
     useGlobalToast().show({ msg: '网络异常!请联系客服' })
@@ -36,25 +50,28 @@ async function handlePay() {
   isPay.value = true
   try {
     const data = await Apis.djk.addDJKOrder({ data: { shopId: orderInfo.value.shopId, channelId: useUserStore().userInfo.channelId, phone: phone.value, goodsId: orderInfo.value.id, goodsNum: 1, customerAuthorization: boolToNumber(isAllow.value) } })
-    // #ifdef MP-WEIXIN
-    const res = await useUserStore().handleCommonPayMent(data.data)
-    if (res.payType !== 1) {
+    const payMent = await useUserStore().getPayMent(data.data)
+    if (payMent.payType !== 'point') {
       try {
+        // #ifdef MP-WEIXIN
+        const res = await useUserStore().handleCommonPayMent(data.data)
         await useUserStore().getWxCommonPayment(res)
         await useUserStore().paySuccess('djk-homeTabbar', 'subPack-djk/commonTab/index')
+        // #endif
+        // #ifdef H5
+        useUserStore().handleCommonWechatPay(data.data)
+        await handleH5PayResult(data.data)
+        // #endif
+        isPay.value = false
       }
       catch {
         useUserStore().payError('djk-homeTabbar', 'subPack-djk/commonTab/index')
       }
     }
     else {
+      await useUserStore().handleCommonPayMent(data.data)
       await useUserStore().paySuccess('djk-homeTabbar', 'subPack-djk/commonTab/index')
     }
-    // #endif
-    // #ifdef H5
-    useUserStore().handleCommonWechatPay(data.data)
-    isPay.value = false
-    // #endif
   }
   catch (error) {
     console.log('error', error)

+ 5 - 3
src/subPack-djk/orderDetaile/index.vue

@@ -32,9 +32,10 @@ async function handleCancel() {
   getDetail(String(unref(orderInfo)?.orderNumber))
 }
 async function handlePay() {
-  const res = await useUserStore().handleCommonPayMent(String(unref(orderInfo)?.orderNumber))
-  if (res.payType !== 1) {
+  const payMent = await useUserStore().getPayMent(String(unref(orderInfo)?.orderNumber))
+  if (payMent.payType !== 'point') {
     // #ifdef MP-WEIXIN
+    const res = await useUserStore().handleCommonPayMent(String(unref(orderInfo)?.orderNumber))
     await useUserStore().getWxCommonPayment(res)
     getDetail(String(unref(orderInfo)?.orderNumber))
     // #endif
@@ -43,6 +44,7 @@ async function handlePay() {
     // #endif
   }
   else {
+    await useUserStore().handleCommonPayMent(String(unref(orderInfo)?.orderNumber))
     getDetail(String(unref(orderInfo)?.orderNumber))
   }
   refreshOrderList.value = true
@@ -89,7 +91,7 @@ function handlePhone() {
     v-if="orderInfo" class="page-xsb"
   >
     <wd-navbar
-      title="订单详情" :bordered="false" :z-index="99" safe-area-inset-top left-arrow placeholder fixed
+      title="订单详情" :bordered="false" :z-index="99" safe-area-inset-top placeholder left-arrow fixed
       @click-left="router.back()"
     />
     <view class="relative z-90 box-border bg-[#f6f6f6] px-24rpx">

+ 4 - 2
src/subPack-smqjh/components/djk-order/index.vue

@@ -15,9 +15,10 @@ async function handleCancel(order: Api.xsbOrderList) {
 }
 
 async function handlePay(orderNumber: string) {
-  const res = await useUserStore().handleCommonPayMent?.(orderNumber)
-  if (res?.payType !== 1 && res) {
+  const payMent = await useUserStore().getPayMent(orderNumber)
+  if (payMent?.payType !== 'point' && payMent) {
     // #ifdef MP-WEIXIN
+    const res = await useUserStore().handleCommonPayMent?.(orderNumber)
     await useUserStore().getWxCommonPayment(res)
     _emit('refresh')
     // #endif
@@ -26,6 +27,7 @@ async function handlePay(orderNumber: string) {
     // #endif
   }
   else {
+    await useUserStore().handleCommonPayMent(orderNumber)
     _emit('refresh')
   }
 }

+ 5 - 2
src/subPack-smqjh/components/xsb-orderList/xsb-orderList.vue

@@ -21,9 +21,11 @@ async function handleCancel(order: Api.xsbOrderList) {
 }
 
 async function handlePay(orderNumber: string) {
-  const res = await useUserStore().handleCommonPayMent?.(orderNumber)
-  if (res?.payType !== 1 && res) {
+  const payMent = await useUserStore().getPayMent(orderNumber)
+  if (payMent?.payType !== 'point' && payMent) {
     // #ifdef MP-WEIXIN
+    const res = await useUserStore().handleCommonPayMent(orderNumber)
+
     await useUserStore().getWxCommonPayment(res)
     _emit('refresh')
     // #endif
@@ -32,6 +34,7 @@ async function handlePay(orderNumber: string) {
     // #endif
   }
   else {
+    await useUserStore().handleCommonPayMent(orderNumber)
     _emit('refresh')
   }
 }

+ 34 - 31
src/subPack-videoRights/commonTab/components/home.vue

@@ -4,7 +4,6 @@ import { StaticUrl } from '@/config'
 import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
 
 const { show } = useGlobalToast()
-const { statusBarHeight, MenuButtonHeight } = storeToRefs(useSysStore())
 /**
  * 获取视频权益列表
  */
@@ -49,43 +48,47 @@ function clearSearch() {
   <view class="video-rights-home-page">
     <wd-navbar
       title="视频权益" custom-style="background-color:#FFF" :bordered="false" :z-index="99"
-      safe-area-inset-top left-arrow fixed @click-left="router.back()"
+      safe-area-inset-top
+      left-arrow placeholder fixed @click-left="router.back()"
     />
-    <view :style="{ paddingTop: `${(Number(statusBarHeight) || 44) + MenuButtonHeight + 12}px` }" />
+    <!-- <view :style="{ paddingTop: `${(Number(statusBarHeight) || 44) + MenuButtonHeight + 12}px` }" /> -->
     <wd-search v-model="productName" placeholder="请输入名称" cancel-txt="搜索" @cancel="submitSearch" @clear="clearSearch" />
-    <view class="box-border px24rpx">
-      <scroll-view scroll-y type="custom">
-        <grid-view type="masonry" cross-axis-count="2" main-axis-gap="10" cross-axis-gap="10">
-          <view v-for="item in videoDataList" :key="item?.id" class="mt-18rpx rounded-16rpx bg-#FFF" @click="router.push({ name: 'video-rights-detail', params: { id: item.id || '' } })">
-            <view class="image-wrapper h-342rpx w-342rpx">
-              <image
-                class="h-full w-full rounded-16rpx object-c"
-                mode="aspectFill"
-                :src="item.productImg ? item.productImg : `${StaticUrl}/list-page-img.png`"
-              />
+    <view class="box-border px24rpx pt24rpx">
+      <view class="w-full columns-2 gap-[10px]">
+        <view
+          v-for="item in videoDataList"
+          :key="item?.id"
+          class="mb-[10px] break-inside-avoid rounded-16rpx bg-#FFF"
+          @click="router.push({ name: 'video-rights-detail', params: { id: item.id || '' } })"
+        >
+          <view class="image-wrapper h-342rpx w-full">
+            <image
+              class="h-full w-full rounded-16rpx object-c"
+              mode="aspectFill"
+              :src="item.productImg ? item.productImg : `${StaticUrl}/list-page-img.png`"
+            />
+          </view>
+          <view class="mx20rpx my-24rpx">
+            <view class="text-28rpx font-bold">
+              {{ item.localProductName ? item.localProductName : item.productName }}
             </view>
-            <view class="mx20rpx my-24rpx">
-              <view class="text-28rpx font-bold">
-                {{ item.localProductName ? item.localProductName : item.productName }}
+            <view class="mt-30rpx flex items-center justify-between">
+              <view class="text-#FF4D3A">
+                <text class="text-22rpx font-500">
+                  ¥
+                </text>
+                <text class="text-34rpx font-800">
+                  {{ item.price }}
+                </text>
               </view>
-              <view class="mt-30rpx flex items-center justify-between">
-                <view class="text-#FF4D3A">
-                  <text class="text-22rpx font-500">
-                    ¥
-                  </text>
-                  <text class="text-34rpx font-800">
-                    {{ item.price }}
-                  </text>
-                </view>
-                <view class="text-22rpx text-#AAA decoration-line-through">
-                  市场价¥{{ item.faceValue }}
-                </view>
+              <view class="text-22rpx text-#AAA decoration-line-through">
+                市场价¥{{ item.faceValue }}
               </view>
             </view>
           </view>
-        </grid-view>
-        <StatusTip v-if="!videoDataList.length" tip="暂无内容" />
-      </scroll-view>
+        </view>
+      </view>
+      <StatusTip v-if="!videoDataList.length" tip="暂无内容" />
       <wd-loadmore :state="state" :loading-props="{ color: '#9ED605', size: 20 }" @reload="reload" />
     </view>
   </view>

+ 3 - 1
src/subPack-xsb/commonTab/components/my.vue

@@ -95,16 +95,18 @@ function handleGo(item: { name: string, status: string }) {
               <image :src="`${StaticUrl}/4.png`" class="h50rpx w50rpx" />
             </template>
           </wd-cell>
+          <!-- #ifdef MP-WEIXIN -->
           <wd-cell custom-title-class="cell-title" clickable is-link>
             <template #icon>
               <image :src="`${StaticUrl}/5.png`" class="h50rpx w50rpx" />
             </template>
             <template #title>
-              <view class="ml20rpx w90%">
+              <view class="ml20rpx w100%">
                 <Zcontact>联系平台客服</Zcontact>
               </view>
             </template>
           </wd-cell>
+          <!-- #endif -->
         </wd-cell-group>
       </wd-card>
     </view>

+ 25 - 12
src/subPack-xsb/confirmOrder/index.vue

@@ -217,6 +217,18 @@ function confirmCoupon() {
   couponPopup.value = false
 }
 
+async function handleH5PayResult(orderNumber: string): Promise<boolean> {
+  const isPaySuccess = await useUserStore().pollOrderPaySuccess(orderNumber)
+  if (isPaySuccess) {
+    router.replace({ name: 'xsb-order' })
+    return true
+  }
+
+  useGlobalToast().show({ msg: '暂未查询到支付成功,请稍后在订单列表查看' })
+  isPay.value = false
+  return false
+}
+
 async function handlePay() {
   if (!isSelfPickup.value && !selectedAddress.value) {
     useGlobalToast().show({ msg: '请选择收货地址' })
@@ -275,30 +287,31 @@ async function handlePay() {
           }
         : undefined,
     )
-    // #ifdef MP-WEIXIN
-    const res = await useUserStore().handleCommonPayMent(orderNumber)
-    console.log(orderInfo.value, '=====订单信息')
-    await useUserStore().clearCart(orderInfo.value.skuList)
+    const payMent = await useUserStore().getPayMent(orderNumber)
+    const skuList = orderInfo.value?.skuList || []
+    await useUserStore().clearCart(skuList)
     totalProduct.value = null
-    if (res.payType !== 1) {
+    isPay.value = false
+    if (payMent.payType !== 'point') {
       try {
+        // #ifdef H5
+        useUserStore().handleCommonWechatPay(orderNumber)
+        await handleH5PayResult(orderNumber)
+        // #endif
+        // #ifdef MP-WEIXIN
+        const res = await useUserStore().handleCommonPayMent(orderNumber)
         await useUserStore().getWxCommonPayment(res)
         await useUserStore().paySuccess('xsb-order', 'subPack-xsb/commonTab/index')
+        // #endif
       }
       catch {
         await useUserStore().payError('xsb-order', 'subPack-xsb/commonTab/index')
       }
     }
     else {
+      await useUserStore().handleCommonPayMent(orderNumber)
       await useUserStore().paySuccess('xsb-order', 'subPack-xsb/commonTab/index')
     }
-    // #endif
-    // #ifdef H5
-    useUserStore().handleCommonWechatPay(orderNumber)
-    isPay.value = false
-    await useUserStore().clearCart(orderInfo.value.skuList)
-    totalProduct.value = null
-    // #endif
   }
   catch {
     isPay.value = false

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

@@ -78,9 +78,10 @@ async function handleCancel() {
   getDetail(String(unref(orderInfo)?.orderNumber))
 }
 async function handlePay() {
-  const res = await useUserStore().handleCommonPayMent(String(unref(orderInfo)?.orderNumber))
-  if (res.payType !== 1) {
+  const payMent = await useUserStore().getPayMent(String(unref(orderInfo)?.orderNumber))
+  if (payMent.payType !== 'point') {
     // #ifdef MP-WEIXIN
+    const res = await useUserStore().handleCommonPayMent(String(unref(orderInfo)?.orderNumber))
     await useUserStore().getWxCommonPayment(res)
     getDetail(String(unref(orderInfo)?.orderNumber))
     // #endif
@@ -89,6 +90,7 @@ async function handlePay() {
     // #endif
   }
   else {
+    await useUserStore().handleCommonPayMent(String(unref(orderInfo)?.orderNumber))
     getDetail(String(unref(orderInfo)?.orderNumber))
   }
 }