hooks.ts 3.0 KB

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