hooks.ts 2.9 KB

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