personal.tsx 2.4 KB

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