hooks.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import { reactive } from 'vue'
  2. import { postMessage } from './native-message'
  3. import request from './request'
  4. import { browser } from './utils'
  5. // 搜索关键字
  6. export const SubjectEnum = {
  7. SEARCH: 'music-songbook-subject',
  8. ALBUM: 'music-album-subject',
  9. MUSIC: 'music-subject',
  10. LIVE: 'live-subject',
  11. VIDEO: 'video-subject',
  12. ELEGANT: 'elegant-subject',
  13. MUSIC_FREE: 'music-list-free'
  14. }
  15. /**
  16. * 获取声部编号 | 保存声部编号
  17. */
  18. export const useSubjectId = (
  19. key: string,
  20. value?: any,
  21. type = 'get' as 'get' | 'set' | 'remove'
  22. ) => {
  23. // 判断是否在关键字
  24. // console.log(key, value, type)
  25. if (!key) return ''
  26. if (type === 'get') {
  27. let subject = localStorage.getItem(key)
  28. subject = subject ? JSON.parse(subject) : { name: '', id: '' }
  29. return subject
  30. } else if (type === 'remove') {
  31. localStorage.removeItem(key)
  32. } else {
  33. localStorage.setItem(key, value)
  34. return ''
  35. }
  36. }
  37. interface IList {
  38. params?: any
  39. requestType?: 'json' | 'form'
  40. loading: boolean
  41. list: any[]
  42. dataShow: boolean
  43. finished: boolean
  44. }
  45. let lockLoad = false
  46. /*
  47. * 列表获取数据
  48. * @param url 请求地址
  49. * @returns {Promise<IList>}
  50. */
  51. export const useList = async (
  52. url: string,
  53. params: IList,
  54. method = 'POST' as 'POST' | 'GET'
  55. ) => {
  56. try {
  57. if (lockLoad) return params
  58. // 上锁
  59. lockLoad = true
  60. const res =
  61. method === 'POST'
  62. ? await request.post(url, {
  63. requestType: params.requestType || 'json',
  64. data: {
  65. ...params.params
  66. }
  67. })
  68. : await request.get(url, {
  69. requestType: params.requestType || 'json',
  70. params: {
  71. ...params.params
  72. }
  73. })
  74. params.loading = false
  75. const result = res.data || {}
  76. params.list = params.list.concat(result.rows || [])
  77. params.finished = result.pageNo >= result.totalPage
  78. params.params.page = result.pageNo + 1
  79. params.dataShow = params.list.length > 0
  80. } catch {
  81. params.dataShow = false
  82. params.finished = true
  83. }
  84. // 解锁
  85. lockLoad = false
  86. return params
  87. }
  88. const eventTracks = {
  89. 专辑: 'klx_album',
  90. 视频课: 'klx_videoClass',
  91. 直播课: 'klx_liveClass',
  92. 老师风采: 'klx_talentElegant',
  93. 热门资讯: 'klx_hotInformation',
  94. 小酷AI功能埋点: 'klx_xiaokuAI',
  95. 我的乐谱: 'klx_myMusic',
  96. 评测记录: 'klx_myEvaluation',
  97. 订单: 'klx_myOrder',
  98. 交易记录: 'klx_myTrade',
  99. 优惠券: 'klx_myCoupon',
  100. 帮助中心: 'klx_helpCenter',
  101. 商品列表: 'klx_goods',
  102. 商品详情: 'klx_goodDetail',
  103. 购买支付: 'klx_payment',
  104. 取消支付: 'klx_cancelPayment'
  105. }
  106. type eventName =
  107. | '专辑'
  108. | '视频课'
  109. | '直播课'
  110. | '老师风采'
  111. | '热门资讯'
  112. | '小酷AI功能埋点'
  113. | '我的乐谱'
  114. | '评测记录'
  115. | '订单'
  116. | '交易记录'
  117. | '优惠券'
  118. | '帮助中心'
  119. | '商品列表'
  120. | '商品详情'
  121. | '购买支付'
  122. | '取消支付'
  123. /**
  124. * 事件埋点
  125. */
  126. export const useEventTracking = (name: eventName) => {
  127. postMessage({
  128. api: 'setEventTracking',
  129. content: {
  130. type: eventTracks[name]
  131. }
  132. })
  133. }
  134. /**
  135. * 学生端 - 埋点统计
  136. * @param params { objectType: string, objectId: number}
  137. */
  138. export const useStatisticTracking = (params: {
  139. objectType: 'VIP_COURSE' | 'PRACTICE' | 'GROUP' | 'LIVE' | 'VIDEO' | 'MUSIC'
  140. objectId: number | string
  141. }) => {
  142. request.post('/api-student/exposure/record', {
  143. hideLoading: false,
  144. data: [{ ...params, platform: browser().ios ? 'ios' : 'android' }]
  145. })
  146. }