lex 2 lat temu
rodzic
commit
7fb87481d5

+ 39 - 22
src/student/live-class/live-detail.tsx

@@ -7,7 +7,7 @@ import { Icon, Sticky, Button, Dialog, Toast } from 'vant'
 import { defineComponent } from 'vue'
 import styles from './live-detail.module.less'
 import iconTips from '@common/images/icon_tips.png'
-import { orderStatus } from '@/views/order-detail/orderStatus'
+import { onSubmitZero, orderStatus } from '@/views/order-detail/orderStatus'
 import ColHeader from '@/components/col-header'
 import { postMessage } from '@/helpers/native-message'
 interface IProps {
@@ -49,7 +49,7 @@ export default defineComponent({
         lessonDesc: live.courseIntroduce,
         lessonCoverUrl: live.backgroundPic || live.backgroundPicTemplate,
         lessonName: live.courseGroupName,
-        auditVersion:live.auditVersion||0
+        auditVersion: live.auditVersion || 0
       }
     },
     courseInfo() {
@@ -92,19 +92,22 @@ export default defineComponent({
     }
   },
   async mounted() {
-    try {
-      const res = await request.get(
-        '/api-student/courseGroup/queryLiveCourseInfo',
-        {
-          params: {
-            groupId: this.groupId
-          }
-        }
-      )
-      this.live = res.data || {}
-    } catch {}
+    await this._init()
   },
   methods: {
+    async _init() {
+      try {
+        const res = await request.get(
+          '/api-student/courseGroup/queryLiveCourseInfo',
+          {
+            params: {
+              groupId: this.groupId
+            }
+          }
+        )
+        this.live = res.data || {}
+      } catch {}
+    },
     async onJoinRoom() {
       try {
         const res = await request.get(
@@ -145,15 +148,6 @@ export default defineComponent({
     },
     async onBuy() {
       try {
-        const res = await request.post(
-          '/api-student/userOrder/getPendingOrder',
-          {
-            data: {
-              goodType: 'LIVE',
-              bizId: this.groupId
-            }
-          }
-        )
         const live = this.live
         orderStatus.orderObject.orderType = 'LIVE'
         orderStatus.orderObject.orderName = '直播课购买'
@@ -175,6 +169,29 @@ export default defineComponent({
             recomUserId: this.recomUserId
           }
         ]
+        // 判断是否是0无订单
+        if (live.coursePrice <= 0) {
+          await onSubmitZero(() => {
+            Dialog.alert({
+              message: '领取成功',
+              confirmButtonText: '确定',
+              confirmButtonColor: '#2dc7aa'
+            }).then(() => {
+              this._init()
+            })
+          })
+          return
+        }
+        const res = await request.post(
+          '/api-student/userOrder/getPendingOrder',
+          {
+            data: {
+              goodType: 'LIVE',
+              bizId: this.groupId
+            }
+          }
+        )
+
         const result = res.data
         if (result) {
           Dialog.confirm({

+ 56 - 36
src/student/video-class/video-detail.tsx

@@ -6,7 +6,7 @@ import { defineComponent } from 'vue'
 import styles from './video-detail.module.less'
 import request from '@/helpers/request'
 import ColHeader from '@/components/col-header'
-import { orderStatus } from '@/views/order-detail/orderStatus'
+import { onSubmitZero, orderStatus } from '@/views/order-detail/orderStatus'
 import { tradeOrder } from '../trade/tradeOrder'
 export default defineComponent({
   name: 'VideoDetail',
@@ -22,35 +22,41 @@ export default defineComponent({
     }
   },
   async mounted() {
-    try {
-      const res = await request.get(
-        '/api-student/videoLesson/selectVideoLesson',
-        {
-          params: {
-            groupId: this.params.groupId
+    await this._init()
+  },
+  methods: {
+    async _init() {
+      try {
+        const res = await request.get(
+          '/api-student/videoLesson/selectVideoLesson',
+          {
+            params: {
+              groupId: this.params.groupId
+            }
           }
+        )
+        const result = res.data || {}
+        const lessonGroup = result.lessonGroup || {}
+        this.userInfo = {
+          alreadyBuy: result.alreadyBuy,
+          username:
+            lessonGroup.username || `游客${lessonGroup.teacherId || ''}`,
+          headUrl: lessonGroup.avatar,
+          buyNum: lessonGroup.countStudent,
+          id: lessonGroup.id,
+          lessonNum: lessonGroup.lessonCount,
+          lessonName: lessonGroup.lessonName,
+          lessonDesc: lessonGroup.lessonDesc,
+          lessonPrice: lessonGroup.lessonPrice,
+          teacherId: lessonGroup.teacherId,
+          lessonCoverUrl: lessonGroup.lessonCoverUrl,
+          auditVersion: lessonGroup.auditVersion
         }
-      )
-      const result = res.data || {}
-      const lessonGroup = result.lessonGroup || {}
-      this.userInfo = {
-        alreadyBuy: result.alreadyBuy,
-        username: lessonGroup.username || `游客${lessonGroup.teacherId || ''}`,
-        headUrl: lessonGroup.avatar,
-        buyNum: lessonGroup.countStudent,
-        id: lessonGroup.id,
-        lessonNum: lessonGroup.lessonCount,
-        lessonName: lessonGroup.lessonName,
-        lessonDesc: lessonGroup.lessonDesc,
-        lessonPrice: lessonGroup.lessonPrice,
-        teacherId: lessonGroup.teacherId,
-        lessonCoverUrl: lessonGroup.lessonCoverUrl,
-        auditVersion:lessonGroup.auditVersion
+        this.detailList = result.detailList || []
+      } catch {
+        //
       }
-      this.detailList = result.detailList || []
-    } catch {}
-  },
-  methods: {
+    },
     onPlay(detail: any) {
       this.$router.push({
         path: '/videoClassDetail',
@@ -62,15 +68,6 @@ export default defineComponent({
     },
     async onBuy() {
       try {
-        const res = await request.post(
-          '/api-student/userOrder/getPendingOrder',
-          {
-            data: {
-              goodType: 'VIDEO',
-              bizId: this.params.groupId
-            }
-          }
-        )
         const userInfo = this.userInfo
         orderStatus.orderObject.orderType = 'VIDEO'
         orderStatus.orderObject.orderName = '视频课购买'
@@ -93,6 +90,29 @@ export default defineComponent({
           }
         ]
 
+        // 判断是否是0无订单
+        if (userInfo.lessonPrice <= 0) {
+          await onSubmitZero(() => {
+            Dialog.alert({
+              message: '领取成功',
+              confirmButtonText: '确定',
+              confirmButtonColor: '#2dc7aa'
+            }).then(() => {
+              this._init()
+            })
+          })
+          return
+        }
+
+        const res = await request.post(
+          '/api-student/userOrder/getPendingOrder',
+          {
+            data: {
+              goodType: 'VIDEO',
+              bizId: this.params.groupId
+            }
+          }
+        )
         const result = res.data
         if (result) {
           Dialog.confirm({

+ 63 - 62
src/views/order-detail/index.tsx

@@ -17,7 +17,7 @@ import iconTips from '@common/images/icon_tips.png'
 import Payment from './payment'
 import ColHeader from '@/components/col-header'
 import { state } from '@/state'
-import { orderStatus } from './orderStatus'
+import { orderInfos, orderStatus } from './orderStatus'
 import OrderVideo from './order-video'
 import OrderLive from './order-live'
 import OrderPractice from './order-practice'
@@ -33,7 +33,7 @@ export default defineComponent({
   data() {
     const query = this.$route.query
     return {
-      loading: false, // 是否加载中
+      loading: false, // 是否加载中,为了处理0元订单()
       orderType: query.orderType,
       recomUserId: query.recomUserId, // 推荐人id
       id: query.id,
@@ -56,64 +56,64 @@ export default defineComponent({
       // 商品列表
       const orderObject = orderStatus.orderObject
       return orderObject.orderList || []
-    },
-    orderInfos() {
-      // 商品列表
-      const orderList = orderStatus.orderObject.orderList || []
-      return orderList.map((item: any) => {
-        const params = {
-          goodType: item.orderType,
-          goodName: item.goodsName,
-          recomUserId: item.recomUserId, // 推荐人id
-          bizContent: {}
-        }
-        if (item.orderType === 'VIDEO') {
-          params.bizContent = {
-            videoLessonGroupId: item.courseGroupId,
-            payMoney: item.coursePrice || 0
-          }
-        } else if (item.orderType === 'LIVE') {
-          params.bizContent = {
-            groupId: item.courseGroupId
-          }
-        } else if (item.orderType === 'PRACTICE') {
-          const tempTime = item.classTime || []
-          const classCourse: any = []
-          tempTime.forEach((time: any) => {
-            classCourse.push({
-              classDate: time.classDate,
-              startTime: time.startTime,
-              endTime: time.endTime
-            })
-          })
-          params.bizContent = {
-            courseGroupName: item.courseGroupName,
-            courseIntroduce: item.courseIntroduce,
-            subjectId: item.subjectId,
-            singleCourseMinutes: item.singleCourseMinutes,
-            courseNum: item.courseNum,
-            coursePrice: item.coursePrice,
-            teacherId: item.teacherId,
-            classTime: classCourse
-          }
-        } else if (item.orderType === 'VIP') {
-          params.bizContent = item.id
-        } else if (item.orderType === 'MUSIC') {
-          params.bizContent = {
-            musicSheetId: item.id,
-            actualPrice: item.actualPrice || 0,
-            clientType: state.platformType
-          }
-        } else if (item.orderType === 'PINAO_ROOM') {
-          params.bizContent = item.id
-        } else if (item.orderType === 'ACTI_REGIST') {
-          params.bizContent = {
-            activityId: item.activityId
-          }
-        }
-        return params
-      })
     }
+    // orderInfos() {
+    //   // 商品列表
+    //   const orderList = orderStatus.orderObject.orderList || []
+    //   return orderList.map((item: any) => {
+    //     const params = {
+    //       goodType: item.orderType,
+    //       goodName: item.goodsName,
+    //       recomUserId: item.recomUserId, // 推荐人id
+    //       bizContent: {}
+    //     }
+    //     if (item.orderType === 'VIDEO') {
+    //       params.bizContent = {
+    //         videoLessonGroupId: item.courseGroupId,
+    //         payMoney: item.coursePrice || 0
+    //       }
+    //     } else if (item.orderType === 'LIVE') {
+    //       params.bizContent = {
+    //         groupId: item.courseGroupId
+    //       }
+    //     } else if (item.orderType === 'PRACTICE') {
+    //       const tempTime = item.classTime || []
+    //       const classCourse: any = []
+    //       tempTime.forEach((time: any) => {
+    //         classCourse.push({
+    //           classDate: time.classDate,
+    //           startTime: time.startTime,
+    //           endTime: time.endTime
+    //         })
+    //       })
+    //       params.bizContent = {
+    //         courseGroupName: item.courseGroupName,
+    //         courseIntroduce: item.courseIntroduce,
+    //         subjectId: item.subjectId,
+    //         singleCourseMinutes: item.singleCourseMinutes,
+    //         courseNum: item.courseNum,
+    //         coursePrice: item.coursePrice,
+    //         teacherId: item.teacherId,
+    //         classTime: classCourse
+    //       }
+    //     } else if (item.orderType === 'VIP') {
+    //       params.bizContent = item.id
+    //     } else if (item.orderType === 'MUSIC') {
+    //       params.bizContent = {
+    //         musicSheetId: item.id,
+    //         actualPrice: item.actualPrice || 0,
+    //         clientType: state.platformType
+    //       }
+    //     } else if (item.orderType === 'PINAO_ROOM') {
+    //       params.bizContent = item.id
+    //     } else if (item.orderType === 'ACTI_REGIST') {
+    //       params.bizContent = {
+    //         activityId: item.activityId
+    //       }
+    //     }
+    //     return params
+    //   })
+    // }
   },
   async mounted() {
     // 判断是否是曲目购买(只有智能陪练才会有入口),其它地方不会有入口
@@ -194,11 +194,11 @@ export default defineComponent({
             orderType: orderObject.orderType,
             actualPrice: orderObject.actualPrice || 0,
             recomUserId: orderObject.recomUserId,
-            orderInfos: [...this.orderInfos]
+            orderInfos: [...orderInfos()]
           }
         })
         const result = res.data || {}
-
+        // 支付成功
         if (result.status == 'PAID') {
           this.$router.replace({
             path: '/tradeDetail',
@@ -208,9 +208,10 @@ export default defineComponent({
           })
           return
         }
+
+        // 拉起支付方式
         orderStatus.orderObject.orderNo = result.orderNo
         orderStatus.orderObject.actualPrice = result.actualPrice
-
         this.paymentStatus = true
       } catch {
         this.loading = false

+ 113 - 0
src/views/order-detail/orderStatus.ts

@@ -1,5 +1,8 @@
 import { orderType } from './../../constant/index'
 import { reactive } from 'vue'
+import { state } from '@/state'
+import request from '@/helpers/request'
+import { Dialog } from 'vant'
 type orderType =
   | 'VIDEO'
   | 'LIVE'
@@ -35,3 +38,113 @@ export const orderStatus = reactive({
     orderList: [] as Array<any>
   }
 })
+
+export const orderInfos = () => {
+  // 商品列表
+  const orderList = orderStatus.orderObject.orderList || []
+  return orderList.map((item: any) => {
+    const params = {
+      goodType: item.orderType,
+      goodName: item.goodsName,
+      recomUserId: item.recomUserId, // 推荐人id
+      bizContent: {}
+    }
+    if (item.orderType === 'VIDEO') {
+      params.bizContent = {
+        videoLessonGroupId: item.courseGroupId,
+        payMoney: item.coursePrice || 0
+      }
+    } else if (item.orderType === 'LIVE') {
+      params.bizContent = {
+        groupId: item.courseGroupId
+      }
+    } else if (item.orderType === 'PRACTICE') {
+      const tempTime = item.classTime || []
+      const classCourse: any = []
+      tempTime.forEach((time: any) => {
+        classCourse.push({
+          classDate: time.classDate,
+          startTime: time.startTime,
+          endTime: time.endTime
+        })
+      })
+      params.bizContent = {
+        courseGroupName: item.courseGroupName,
+        courseIntroduce: item.courseIntroduce,
+        subjectId: item.subjectId,
+        singleCourseMinutes: item.singleCourseMinutes,
+        courseNum: item.courseNum,
+        coursePrice: item.coursePrice,
+        teacherId: item.teacherId,
+        classTime: classCourse
+      }
+    } else if (item.orderType === 'VIP') {
+      params.bizContent = item.id
+    } else if (item.orderType === 'MUSIC') {
+      params.bizContent = {
+        musicSheetId: item.id,
+        actualPrice: item.actualPrice || 0,
+        clientType: state.platformType
+      }
+    } else if (item.orderType === 'PINAO_ROOM') {
+      params.bizContent = item.id
+    } else if (item.orderType === 'ACTI_REGIST') {
+      params.bizContent = {
+        activityId: item.activityId
+      }
+    }
+    return params
+  })
+}
+
+/**
+ * @title 0元购买
+ * @param {function} callBack 回调函数
+ * @returns {Promise<void>}
+ */
+export const onSubmitZero = async (callBack?: Function): Promise<void> => {
+  // 正常支付
+  try {
+    const orderObject = orderStatus.orderObject
+    const url =
+      state.platformType === 'TEACHER'
+        ? '/api-teacher/userOrder/executeOrder'
+        : '/api-student/userOrder/executeOrder'
+    const res = await request.post(url, {
+      data: {
+        orderName: orderObject.orderName,
+        orderDesc: orderObject.orderDesc,
+        orderType: orderObject.orderType,
+        actualPrice: orderObject.actualPrice || 0,
+        recomUserId: orderObject.recomUserId,
+        orderInfos: [...orderInfos()]
+      }
+    })
+    const result = res.data || {}
+    // 支付成功
+    if (result.status == 'PAID') {
+      if (callBack) {
+        callBack()
+      } else {
+        Dialog.alert({
+          message: '领取成功',
+          confirmButtonText: '确定',
+          confirmButtonColor: '#2dc7aa'
+        })
+      }
+    } else {
+      Dialog.alert({
+        message: result.msg,
+        confirmButtonText: '确定',
+        confirmButtonColor: '#2dc7aa'
+      })
+    }
+  } catch {
+    Dialog.alert({
+      title: '提示',
+      message: '支付失败,请稍后重试!',
+      confirmButtonText: '确定',
+      confirmButtonColor: '#2dc7aa'
+    })
+  }
+}