album.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { defineComponent, reactive, ref } from 'vue'
  2. import { List } from 'vant'
  3. import request from '@/helpers/request'
  4. import Item from '../album/item'
  5. import { useRoute, useRouter } from 'vue-router'
  6. import ColResult from '@/components/col-result'
  7. export default defineComponent({
  8. name: 'MusicList',
  9. setup() {
  10. const route = useRoute()
  11. const params = reactive({
  12. search: (route.query.search as string) || '',
  13. musicTagIds: route.query.tagids || '',
  14. page: 1
  15. })
  16. const rows = ref<any>([])
  17. const data = ref<any>(null)
  18. const loading = ref(false)
  19. const finished = ref(false)
  20. const isError = ref(false)
  21. const FetchList = async () => {
  22. if (loading.value) {
  23. return
  24. }
  25. loading.value = true
  26. isError.value = false
  27. try {
  28. const res = await request('/api-student/music/album/favorite', {
  29. params
  30. })
  31. rows.value = [...rows.value, ...res.data.rows]
  32. data.value = res.data
  33. params.page = res.data.pageNo + 1
  34. finished.value = res.data.pageNo >= res.data.totalPage
  35. } catch (error) {
  36. isError.value = true
  37. }
  38. loading.value = false
  39. }
  40. return () => (
  41. <List
  42. loading={loading.value}
  43. finished={finished.value}
  44. finished-text={rows.value.length ? '没有更多了' : ''}
  45. onLoad={FetchList}
  46. error={isError.value}
  47. >
  48. {rows.value.length
  49. ? rows.value.map(item => <Item data={item} />)
  50. : !loading.value && (
  51. <ColResult
  52. tips="暂无收藏专辑"
  53. classImgSize="SMALL"
  54. btnStatus={false}
  55. />
  56. )}
  57. </List>
  58. )
  59. }
  60. })