Procházet zdrojové kódy

学生端:增加会员限制

skyblued před 2 roky
rodič
revize
dff96f8111

+ 5 - 3
colexiu-report.html

@@ -44,9 +44,11 @@
         window.removeEventListener('message', setToken)
         try {
           const data = JSON.parse(evt.data)
-          const token = `${data.content.tokenType} ${data.content.accessToken}`
-          sessionStorage.setItem('Authorization', token)
-          console.log("🚀 ~ token", token)
+          if (data.api === 'getToken') {
+            const token = `${data.content.tokenType} ${data.content.accessToken}`
+            sessionStorage.setItem('Authorization', token)
+          }
+
         } catch (error) { }
       }
       window.addEventListener('message', setToken)

+ 0 - 1
index.html

@@ -26,7 +26,6 @@
         window.removeEventListener('message', setToken)
         try {
           const data = JSON.parse(evt.data)
-          console.log("🚀 ~ data", data)
           if (data.api === 'getToken') {
             const token = `${data.content.tokenType} ${data.content.accessToken}`
             sessionStorage.setItem('Authorization', token)

+ 3 - 14
src/helpers/native-message.ts

@@ -65,26 +65,15 @@ const browserInfo = browser()
 
 if (browserInfo.isApp) {
   window.addEventListener('message', (evt) => {
+    console.log('app回调', evt?.data)
     try {
-      console.log('app回调', evt.data)
       const data = evt.data ? (typeof evt.data === 'object' ? evt.data : JSON.parse(evt.data)) : {}
       const uuid = data.content?.uuid || data.uuid
-      // console.log(uuid, data.content, 'uuid')
-      try {
-        if (data.content) {
-          data.content = JSON.parse(data.content)
-        }
-      } catch (error) {
-        // console.log("🚀 ~ error", error)
-        //
-      }
-      if (data?.content?.uuid) {
-        // console.log('data', data)
+      if (data.content) {
+        data.content = JSON.parse(data.content)
       }
       if (!uuid) {
         const keys = Object.keys(calls).filter((key) => key.indexOf(data.api) === 0)
-        // console.log(keys, 'keys')
-        // console.log(data, 'data')
         for (const key of keys) {
           const callback = calls[key] || loop
           typeof callback === 'function' && callback(data)

+ 5 - 0
src/helpers/utils.ts

@@ -4,6 +4,11 @@ import SettingState from '/src/pages/detail/setting-state'
 import instruments from '/src/constant/instruments'
 import instrumentsClassfiy from '/src/constant/instrumentsClassfiy'
 
+/**是否是开发环境 */
+export const getDevelopment = function () {
+  return /(192\.168|localhost)/ig.test(location.host)
+}
+
 export const addZero = (num: number) => {
   return num < 10 ? '0' + num : num
 }

+ 7 - 7
src/pages/baseClass/index.tsx

@@ -85,13 +85,13 @@ export default defineComponent({
       const organId = appState.organId;
       // 大雅机构
       let tempOrgan: number[] = [];
-      if (getRequestHostname() === "/api-web") {
-        let tempOrganId: any = String(organId).split(",");
-        tempOrganId = tempOrganId ? tempOrganId.map((i: any) => Number(i)) : [];
-        tempOrgan = tempOrganId;
-      } else {
-        tempOrgan.push(organId);
-      }
+      // if (getRequestHostname() === "/api-web") {
+      //   let tempOrganId: any = String(organId).split(",");
+      //   tempOrganId = tempOrganId ? tempOrganId.map((i: any) => Number(i)) : [];
+      //   tempOrgan = tempOrganId;
+      // } else {
+      //   tempOrgan.push(organId);
+      // }
 
       // 如果不是大雅机构则 不过滤
       if (tenantId != 1) {

+ 12 - 5
src/subpages/colexiu/App.tsx

@@ -65,10 +65,16 @@ export const sendBackRecordTotalTime = () => {
   clearInterval(timer)
   recordTotalTime()
 }
-interface IUserInfo {
-  id?: string
-}
-export const userInfo = reactive<IUserInfo>({})
+/**用户信息 */
+export const userInfo = reactive({
+  id: '',
+  /**会员天数 */
+  membershipDays: 0,
+  /**是否有订单记录 */
+  purchaseMemberRecord: false,
+  /**是否会员 */
+  vipMember: false,
+})
 export const renderError = ref(false)
 export default defineComponent({
   setup() {
@@ -86,6 +92,7 @@ export default defineComponent({
       }
     }
 
+
     onMounted(() => {
       getUserInfo()
       clearInterval(timer)
@@ -96,7 +103,7 @@ export default defineComponent({
 
     return () => (
       <>
-        {userInfo.id && (
+        {!!userInfo.id && (
           <>
             <HomeIndex />
           </>

+ 1 - 1
src/subpages/colexiu/afterClassTraining/index.tsx

@@ -38,6 +38,6 @@ export default defineComponent({
         }
       }
     )
-    return () => <div></div>
+    return () => ''
   },
 })

+ 4 - 2
src/subpages/colexiu/index.tsx

@@ -227,7 +227,6 @@ export default defineComponent({
       }
       const freeRate = await useConfigMusicSheetFreeRate()
       detailState.freeRate = freeRate.value
-      useFee(detail.value.paymentType || detail.value.chargeType, detail.value.orderStatus)
       useCamera()
       RuntimeUtils.changeSpeed(detailState.activeSpeed)
       if (((detailState.setting?.resets || []) as string[]).includes('SPEED')) {
@@ -252,6 +251,10 @@ export default defineComponent({
           onChangeModelType(_modelType)
         })
       }
+
+      nextTick(() => {
+        useFee()
+      })
     }
 
     const onStartRender = async () => {
@@ -385,7 +388,6 @@ export default defineComponent({
 
             {/* 引导 */}
             {tipShow.value && !error && <Tips />}
-
           </div>
           {/* 效音 */}
           <Transition name="van-slide-up">{soundEffectShow.value && <SoundEffect />}</Transition>

+ 5 - 1
src/subpages/colexiu/unitTest/index.tsx

@@ -6,6 +6,7 @@ import runtime, { changeSpeed } from '/src/pages/detail/runtime'
 import state from '/src/pages/detail/state'
 import { Toast } from 'vant'
 import { userInfo } from '../App'
+import { browser } from '/src/helpers/utils'
 
 interface IquestionExtendsInfo {
   /** 评测难度 */
@@ -101,9 +102,12 @@ export default defineComponent({
       }
     }
     onMounted(() => {
+      const browserInfo = browser()
+      //如果不是学生端直接return
+      if (!browserInfo.isStudent) return
       getUnitData()
       getlessonTrainingData()
     })
-    return () => <div></div>
+    return () => ''
   },
 })

+ 43 - 84
src/subpages/colexiu/uses/use-fee.ts

@@ -1,93 +1,52 @@
-import { onBeforeUnmount, onMounted, ref, watch } from 'vue'
-import appState from '/src/state'
-import detailState from '/src/pages/detail/state'
-import runtime, * as RuntimeUtils from '/src/pages/detail/runtime'
-import { IPostMessage, listenerMessage, removeListenerMessage } from '/src/helpers/native-message'
-import { permissionPopup } from '/src/subpages/colexiu/popups/permission/permission'
-import { browser } from '/src/helpers/utils'
-import { OrderStatus } from '../index.d'
-import { useClientType, useOriginSearch } from '.'
+import { browser, getDevelopment } from '/src/helpers/utils'
+import { userInfo } from '../App'
+import { Dialog } from 'vant'
+import { postMessage } from '/src/helpers/native-message'
 
-const browserInfo = browser()
+/** 去会员中心 */
+const gotoMemberCenter = () => {
+  const isDev = getDevelopment()
+  const url = isDev
+    ? `https://ponline.colexiu.com/orchestra-student/#/memberCenter`
+    : `${location.origin}/orchestra-student/#/memberCenter`
+  postMessage({
+    api: 'back',
+  })
+  postMessage({
+    api: 'openWebView',
+    content: {
+      url: url,
+      orientation: 1,
+    },
+  })
+}
 
 /**
  * 效验是否开通会员
- * @param type VIP收费或者单曲收费类型
- * @param status 订单状态
- * @param play 后端验证是否可以播放
  */
-export const useFee = (type?: string, status?: OrderStatus) => {
-  // console.log('maxtime', type, status)
-  const orderStatus: OrderStatus = detailState.activeDetail?.orderStatus || status
-  const search = useOriginSearch()
-  const setting = (search.setting || {}) as any
-  /** 后端返回状态优先级最高 */
-  if (detailState.activeDetail?.play || setting.feeType === 'FREE') {
-    return
-  }
-  const clientType = useClientType()
-  /** web端无需验证权限 */
-  if (!browserInfo.isApp && clientType === 'web') {
-    return
-  }
-  /** VIP收费并且时长大于0天 */
-  if (type?.includes('VIP') && appState.user?.membershipDays > 0) {
-    return
-  }
-  /** 单曲收费并且订单状态已付费 */
-  if (type?.includes('CHARGE') && orderStatus === 'PAID') {
-    return
-  }
-  /** 获取收费时间 */
-  const endtime = ref(-1)
-  const lastTime = detailState.times[detailState.times.length - 1]
-  if (lastTime) {
-    endtime.value = Math.max(10, lastTime.time * detailState.freeRate)
-  }
-  // if (lastTime && lastTime.noteElement.sourceMeasure.MeasureNumberXML > 5) {
-  //   for (const time of detailState.times) {
-  //     if (time.noteElement.sourceMeasure.MeasureNumberXML === 5) {
-  //       endtime.value = time.time
-  //       break
-  //     }
-  //   }
-  // }
-  const onTimeUpdate = (evt?: IPostMessage) => {
-    const orderStatus: OrderStatus = detailState.activeDetail?.orderStatus || status
-    if (clientType == 'web') {
-      return 
+export const useFee = () => {
+  const browserInfo = browser()
+  // 学生端验证
+  if (browserInfo.isStudent) {
+    //学生有待激活会员
+    if (!userInfo.membershipDays && userInfo.purchaseMemberRecord) {
+      Dialog.alert({
+        title: '温馨提示',
+        message: '您的团练宝暂未激活,请激活后使用',
+      }).then((val) => {
+        gotoMemberCenter()
+      })
+      return
     }
-
-    if (endtime.value >= 0 && runtime.currentTimeNum >= endtime.value) {
-      if (type?.includes('CHARGE') && type.includes('VIP')) { // 会员和单曲购买
-        if(orderStatus !== 'PAID' && !(appState.user?.membershipDays > 0)) {
-          permissionPopup.active = 'memberAndDemand'
-          permissionPopup.show = true
-          RuntimeUtils.pause()
-        }
-      } else if (type === 'CHARGE') { // 单曲购买
-        if (orderStatus !== 'PAID') {
-          permissionPopup.active = 'demand'
-          permissionPopup.show = true
-          RuntimeUtils.pause()
-        }
-      } else if (type === 'VIP') { // 会员
-        if (!(appState.user?.membershipDays > 0)) {
-          permissionPopup.active = 'member'
-          permissionPopup.show = true
-          RuntimeUtils.pause()
-        }
-      }
+    //学生没有会员
+    if (!userInfo.vipMember) {
+      Dialog.alert({
+        title: '温馨提示',
+        message: '您暂未开通团练宝,请开通后使用',
+      }).then(() => {
+        gotoMemberCenter()
+      })
+      return
     }
-
-    
   }
-
-  // runtime.audiosInstance.event.on('timeupdate', onTimeUpdate)
-  // listenerMessage('cloudTimeUpdae', onTimeUpdate)
-
-  // onBeforeUnmount(() => {
-  //   runtime.audiosInstance.event.off('timeupdate', onTimeUpdate)
-  //   removeListenerMessage('cloudTimeUpdae', onTimeUpdate)
-  // })
 }