collection.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { defineComponent, reactive, ref } from 'vue'
  2. import { List } from 'vant'
  3. import request from '@/helpers/request'
  4. import Item from '../list/item'
  5. import { useRoute } from 'vue-router'
  6. import ColResult from '@/components/col-result'
  7. import { musicBuy } from '../music'
  8. export default defineComponent({
  9. name: 'MusicList',
  10. emits: ['favorite'],
  11. setup(props, { expose, emit }) {
  12. const route = useRoute()
  13. const params = reactive({
  14. search: (route.query.search as string) || '',
  15. musicTagIds: route.query.tagids || '',
  16. page: 1
  17. })
  18. const rows = ref<any[]>([])
  19. const data = ref<any>(null)
  20. const loading = ref(false)
  21. const finished = ref(false)
  22. const isError = ref(false)
  23. const FetchList = async () => {
  24. if (loading.value) {
  25. return
  26. }
  27. loading.value = true
  28. isError.value = false
  29. try {
  30. const res = await request('/api-student/music/sheet/favorite', {
  31. data: params
  32. })
  33. rows.value = [...res.data.rows]
  34. data.value = res.data
  35. params.page = res.data.pageNo + 1
  36. finished.value = res.data.pageNo >= res.data.totalPage
  37. } catch (error) {
  38. isError.value = true
  39. }
  40. loading.value = false
  41. }
  42. const reset = () => {
  43. isError.value = false
  44. rows.value = []
  45. params.page = 1
  46. finished.value = false
  47. FetchList()
  48. }
  49. expose({
  50. reset,
  51. FetchList
  52. })
  53. return () => (
  54. <List
  55. loading={loading.value}
  56. finished={finished.value}
  57. finished-text={rows.value.length ? '没有更多了' : ''}
  58. onLoad={FetchList}
  59. error={isError.value}
  60. >
  61. {rows.value.length
  62. ? rows.value.map(item => (
  63. <Item
  64. data={item}
  65. onClick={() => musicBuy(item)}
  66. onFavorite={() => {
  67. reset()
  68. emit('favorite')
  69. }}
  70. />
  71. ))
  72. : !loading.value && (
  73. <ColResult
  74. tips="暂无收藏曲目"
  75. classImgSize="SMALL"
  76. btnStatus={false}
  77. />
  78. )}
  79. </List>
  80. )
  81. }
  82. })