list.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import ColResult from '@/components/col-result'
  2. import { SubjectEnum, useSubjectId } from '@/helpers/hooks'
  3. import request from '@/helpers/request'
  4. import { openDefaultWebView, state } from '@/state'
  5. import { List } from 'vant'
  6. import { defineComponent, reactive, ref } from 'vue'
  7. import { useRoute, useRouter } from 'vue-router'
  8. import Song from '../component/song'
  9. import styles from './index.module.less'
  10. import { getHttpOrigin } from '@/helpers/utils'
  11. const noop = () => {}
  12. export default defineComponent({
  13. name: 'list',
  14. props: {
  15. hideSearch: {
  16. type: Boolean,
  17. default: false
  18. },
  19. defauleParams: {
  20. type: Object,
  21. default: () => ({})
  22. },
  23. onItemClick: {
  24. type: Function,
  25. default: noop
  26. },
  27. teacherId: {
  28. type: String || Number,
  29. default: ''
  30. }
  31. },
  32. setup({ hideSearch, defauleParams, onItemClick, teacherId }, { expose }) {
  33. const route = useRoute()
  34. const router = useRouter()
  35. const tempParams: any = {}
  36. if (state.version) {
  37. tempParams.version = state.version || '' // 处理ios审核版本
  38. tempParams.platform =
  39. state.platformType === 'STUDENT' ? 'ios-student' : 'ios-teacher'
  40. }
  41. // 判断是否在搜索页面用过
  42. if (!hideSearch) {
  43. const getSubject: any = useSubjectId(SubjectEnum.SEARCH)
  44. tempParams.subjectIds = getSubject.id
  45. }
  46. //
  47. const params = reactive({
  48. search: (route.query.search as string) || '',
  49. exquisiteFlag: 1,
  50. musicTagIds: route.query.tagids || '',
  51. page: 1,
  52. ...defauleParams,
  53. ...tempParams
  54. })
  55. const data = ref<any>(null)
  56. const loading = ref(false)
  57. const finished = ref(false)
  58. const isError = ref(false)
  59. const apiSuffix = ref(
  60. state.platformType === 'STUDENT' ? '/api-student' : '/api-teacher'
  61. )
  62. const FetchList = async () => {
  63. if (loading.value) {
  64. return
  65. }
  66. loading.value = true
  67. isError.value = false
  68. const tempParams = {
  69. ...params,
  70. auditStatus: 'PASS',
  71. idAndName: params.search,
  72. createBy: teacherId
  73. }
  74. // if (state.platformType === 'TEACHER') {
  75. tempParams.myself = false
  76. // }
  77. try {
  78. const res = await request.post(`${apiSuffix.value}/music/sheet/list`, {
  79. data: tempParams
  80. })
  81. if (data.value) {
  82. const result = (data.value?.rows || []).concat(res.data.rows || [])
  83. data.value.rows = result
  84. }
  85. data.value = data.value || res.data
  86. params.page = res.data.pageNo + 1
  87. finished.value = res.data.pageNo >= res.data.totalPage
  88. } catch (error) {
  89. isError.value = true
  90. }
  91. loading.value = false
  92. }
  93. return () => (
  94. <List
  95. loading={loading.value}
  96. finished={finished.value}
  97. finished-text={data.value && data.value.rows.length ? '没有更多了' : ''}
  98. onLoad={FetchList}
  99. error={isError.value}
  100. >
  101. {data.value && data.value.rows.length ? (
  102. <div class={styles.alumnList}>
  103. <Song
  104. list={data.value.rows}
  105. onDetail={(item: any) => {
  106. if (onItemClick === noop) {
  107. const url =
  108. getHttpOrigin() +
  109. location.pathname +
  110. '#/music-detail?id=' +
  111. item.id
  112. openDefaultWebView(url, () => {
  113. router.push({
  114. path: '/music-detail',
  115. query: {
  116. id: item.id
  117. }
  118. })
  119. })
  120. } else {
  121. onItemClick?.(item)
  122. }
  123. }}
  124. />
  125. </div>
  126. ) : (
  127. !loading.value && (
  128. <ColResult tips="暂无曲目" classImgSize="SMALL" btnStatus={false} />
  129. )
  130. )}
  131. </List>
  132. )
  133. }
  134. })