index.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import request from '@/helpers/request'
  2. import { state } from '@/state'
  3. import { Button, Empty, Grid, GridItem, Icon, showToast, Toast } from 'vant'
  4. import { defineComponent, onMounted, reactive } from 'vue'
  5. import styles from './index.module.less'
  6. import iconLook from './image/look.svg'
  7. import { useRoute, useRouter } from 'vue-router'
  8. import OEmpty from '@/components/o-empty'
  9. import OSticky from '@/components/o-sticky'
  10. import OHeader from '@/components/o-header'
  11. import CourseItem from './component/CourseItem'
  12. export default defineComponent({
  13. name: 'lessonCourseware',
  14. setup() {
  15. const route = useRoute()
  16. const router = useRouter()
  17. const data = reactive({
  18. loading: true,
  19. list: [] as any
  20. })
  21. const filterData = (list: any[]) => {
  22. const schoolTerm = {}
  23. for(let i = 0; i < list.length; i++){
  24. if (schoolTerm[list[i].sortNo]){
  25. schoolTerm[list[i].sortNo].push(list[i])
  26. } else {
  27. schoolTerm[list[i].sortNo] = [list[i]]
  28. }
  29. }
  30. return schoolTerm
  31. }
  32. const getList = async () => {
  33. data.loading = true
  34. if (route.query.code === 'select') {
  35. try {
  36. const res: any = await request.post(
  37. state.platformApi + `/courseSchedule/getCourseware/${route.query.courseScheduleId}`
  38. )
  39. if (Array.isArray(res?.data)) {
  40. const data = res.data.map((n: any) => {
  41. return {
  42. coverImg: n.coverImg,
  43. name: n.coursewareName,
  44. id: n.lessonCoursewareId,
  45. courseNum: n.coursewareNum
  46. }
  47. })
  48. data.list = filterData(data)
  49. }
  50. } catch (error) {}
  51. } else {
  52. try {
  53. const res: any = await request.post(state.platformApi + '/courseSchedule/myCourseware')
  54. if (Array.isArray(res?.data)) {
  55. data.list = filterData(res.data)
  56. }
  57. } catch (error) {}
  58. }
  59. data.loading = false
  60. }
  61. onMounted(() => {
  62. getList()
  63. })
  64. const handleClick = (item: any) => {
  65. if (route.query.code === 'select') {
  66. router.push({
  67. path: '/courseList',
  68. query: {
  69. ...route.query,
  70. id: item.id
  71. }
  72. })
  73. return
  74. }
  75. router.push({
  76. path: '/courseList',
  77. query: {
  78. id: item.id
  79. }
  80. })
  81. }
  82. return () => (
  83. <div class={[styles.lessonCourseware, !Object.values(data.list).length && 'emptyRootContainer']}>
  84. <OSticky
  85. onGetHeight={(height: number) => {
  86. document.documentElement.style.setProperty('--header-height', height + 'px')
  87. }}
  88. >
  89. <OHeader
  90. border={false}
  91. background="rgba(255, 232, 206, 1)"
  92. color="rgba(124, 61, 18, 1)"
  93. title="我的教材"
  94. />
  95. </OSticky>
  96. {Object.keys(data.list).map((key: any) => {
  97. console.error(key)
  98. return <CourseItem term={key} list={data.list[key]} onItemClick={(row) => handleClick(row)} />
  99. })}
  100. {!data.loading && !Object.values(data.list).length && <OEmpty tips="没有课件" />}
  101. </div>
  102. )
  103. }
  104. })