personal.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { defineComponent, reactive, ref, watch } from 'vue'
  2. import { List } from 'vant'
  3. import request from '@/helpers/request'
  4. import { useRoute, useRouter } from 'vue-router'
  5. import ColResult from '@/components/col-result'
  6. import { state } from '@/state'
  7. import styles from './index.module.less'
  8. import Song from '../component/song'
  9. import { number } from 'echarts/core'
  10. export default defineComponent({
  11. name: 'MusicList',
  12. emits: ['favorite'],
  13. props: {
  14. gift: {
  15. type: Number,
  16. default: 0
  17. }
  18. },
  19. setup(props, { expose, emit }) {
  20. const route = useRoute()
  21. const router = useRouter()
  22. const params = reactive({
  23. search: (route.query.search as string) || '',
  24. musicTagIds: route.query.tagids || '',
  25. gift: props.gift,
  26. page: 1
  27. })
  28. const data = ref<any>(null)
  29. const rows = ref<any[]>([])
  30. const loading = ref(false)
  31. const finished = ref(false)
  32. const isError = ref(false)
  33. const FetchList = async () => {
  34. if (loading.value) {
  35. return
  36. }
  37. loading.value = true
  38. isError.value = false
  39. try {
  40. const res = await request('/music/sheet/my', {
  41. method: state.platformType === 'TEACHER' ? 'POST' : 'GET',
  42. prefix:
  43. state.platformType === 'TEACHER' ? '/api-teacher' : '/api-student',
  44. params,
  45. data: state.platformType === 'TEACHER' ? params : {}
  46. })
  47. rows.value = [...rows.value, ...res.data.rows]
  48. data.value = res.data
  49. params.page = res.data.pageNo + 1
  50. finished.value = res.data.pageNo >= res.data.totalPage
  51. } catch (error) {
  52. isError.value = true
  53. }
  54. loading.value = false
  55. }
  56. watch(
  57. () => props.gift,
  58. gift => {
  59. isError.value = false
  60. rows.value = []
  61. params.page = 1
  62. finished.value = false
  63. params.gift = gift
  64. FetchList()
  65. }
  66. )
  67. expose({
  68. reset: () => {
  69. isError.value = false
  70. rows.value = []
  71. params.page = 1
  72. finished.value = false
  73. FetchList()
  74. },
  75. FetchList
  76. })
  77. return () => (
  78. <List
  79. loading={loading.value}
  80. finished={finished.value}
  81. finished-text={rows.value.length ? '没有更多了' : ''}
  82. onLoad={FetchList}
  83. error={isError.value}
  84. >
  85. {rows.value.length ? (
  86. <div class={styles.personalSong}>
  87. <Song
  88. list={rows.value}
  89. onDetail={(item: any) => {
  90. router.push({
  91. path: '/music-detail',
  92. query: {
  93. id: item.id
  94. }
  95. })
  96. }}
  97. />
  98. </div>
  99. ) : (
  100. !loading.value && (
  101. <ColResult tips="暂无单曲" classImgSize="SMALL" btnStatus={false} />
  102. )
  103. )}
  104. </List>
  105. )
  106. }
  107. })