timer-bang.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import OSearch from '@/components/o-search'
  2. import OEmpty from '@/components/o-empty'
  3. import dayjs from 'dayjs'
  4. import {
  5. Icon,
  6. Popover,
  7. DatePicker,
  8. DatePickerColumnType,
  9. Popup,
  10. List,
  11. PullRefresh,
  12. ActionSheet,
  13. showToast,
  14. Sticky
  15. } from 'vant'
  16. import { defineComponent, reactive, ref, onMounted, watch, inject } from 'vue'
  17. import { useRouter } from 'vue-router'
  18. import styles from './timer-bang.module.less'
  19. import request from '@/helpers/request'
  20. import { state as globalState } from '@/state'
  21. import RankItem from '../modals/rank-item'
  22. import MyRankingItem from '../modals/my-ranking-item'
  23. export default defineComponent({
  24. name: 'timer-bang',
  25. props: ['toHeight'],
  26. emits: ['setTime'],
  27. setup(props, { slots, attrs, emit }) {
  28. const router = useRouter()
  29. const state = reactive({
  30. showPopoverTime: false,
  31. showPopoverOrchestra: false,
  32. showPopoverSubject: false,
  33. actions: [] as any,
  34. subjects: [] as any,
  35. currentDate: [dayjs().format('YYYY'), dayjs().format('MM')]
  36. })
  37. const parentData = inject('parentData', { practiceMonth: '', timeName: '' } as any)
  38. const forms = reactive({
  39. practiceMonth: parentData.practiceMonth,
  40. page: 1,
  41. rows: 50,
  42. sortType: 'PRACTICE_TIMES'
  43. })
  44. const minDate = ref(new Date(dayjs().subtract(10, 'year').format('YYYY-MM-DD')))
  45. const maxDate = ref(new Date(dayjs().add(10, 'year').format('YYYY-MM-DD')))
  46. const refreshing = ref(false)
  47. const loading = ref(false)
  48. const finished = ref(false)
  49. const showContact = ref(false)
  50. const list = ref([])
  51. const toTop = ref(props.toHeight)
  52. watch(
  53. () => props.toHeight,
  54. (val: number) => {
  55. toTop.value = val
  56. console.log(toTop.value)
  57. }
  58. )
  59. watch(
  60. () => parentData.practiceMonth,
  61. (val) => {
  62. forms.practiceMonth = val
  63. refreshing.value = true
  64. getList()
  65. }
  66. )
  67. const getList = async () => {
  68. loading.value = true
  69. try {
  70. if (refreshing.value) {
  71. forms.page = 1
  72. list.value = []
  73. refreshing.value = false
  74. }
  75. const res = await request.post('/api-school/student/page', {
  76. data: { ...forms }
  77. })
  78. if (list.value.length > 0 && res.data.pages === 1) {
  79. return
  80. }
  81. forms.page = res.data.current + 1
  82. // list.value = list.value.concat(res.data.rows || [])
  83. list.value = res.data.rows
  84. showContact.value = list.value.length > 0
  85. console.log(showContact.value, ' showContact.value ')
  86. loading.value = false
  87. finished.value = true
  88. // finished.value = res.data.current >= res.data.pages
  89. } catch (e: any) {
  90. // console.log(e, 'e')
  91. const message = e.message
  92. showToast(message)
  93. showContact.value = false
  94. finished.value = true
  95. }
  96. }
  97. const getSubjects = async () => {
  98. try {
  99. const res = await request.post('/api-school/subject/page', {
  100. data: { page: 1, rows: 9999 }
  101. })
  102. state.subjects = res.data.rows.map((item) => {
  103. return {
  104. name: item.name,
  105. value: item.id as string
  106. }
  107. })
  108. state.subjects.unshift({ name: '全部声部', value: '' })
  109. } catch (e: any) {
  110. const message = e.message
  111. showToast(message)
  112. }
  113. }
  114. onMounted(() => {
  115. getList()
  116. emit('setTime', forms.timeName)
  117. })
  118. const onRefresh = () => {
  119. finished.value = false
  120. // 重新加载数据
  121. // 将 loading 设置为 true,表示处于加载状态
  122. loading.value = true
  123. getList()
  124. }
  125. return () => (
  126. <>
  127. {/* <OSticky position="top" background="#FFF"> */}
  128. {showContact.value ? (
  129. <div>
  130. <PullRefresh v-model={refreshing.value} onRefresh={onRefresh}>
  131. <List
  132. v-model:loading={loading.value}
  133. finished={finished.value}
  134. finished-text="没有更多了"
  135. onLoad={getList}
  136. >
  137. {list.value.map((item: any, index: number) => (
  138. <RankItem item={item} type="time" index={index + 1}></RankItem>
  139. ))}
  140. </List>
  141. </PullRefresh>
  142. <MyRankingItem item={list.value[0]}></MyRankingItem>
  143. </div>
  144. ) : (
  145. <OEmpty />
  146. )}
  147. </>
  148. )
  149. }
  150. })