index.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import MHeader from '@/components/m-header';
  2. import MSticky from '@/components/m-sticky';
  3. import { defineComponent, onMounted, reactive } from 'vue';
  4. import styles from './index.module.less';
  5. import { useRoute, useRouter } from 'vue-router';
  6. import { Button, Collapse, CollapseItem, Image } from 'vant';
  7. import request from '@/helpers/request';
  8. import library1 from './images/library-1.png';
  9. import library2 from './images/library-2.png';
  10. import library3 from './images/library-3.png';
  11. import { useEventListener, useWindowScroll } from '@vueuse/core';
  12. export default defineComponent({
  13. name: 'knowledge-ligrary',
  14. setup() {
  15. const router = useRouter();
  16. const route = useRoute();
  17. const forms = reactive({
  18. cid: route.query.cid,
  19. list: [] as any,
  20. activeNames: null,
  21. background: 'transparent',
  22. color: '#fff'
  23. });
  24. const getList = async () => {
  25. try {
  26. const { data } = await request.post(
  27. '/edu-app/lessonCourseware/queryStudentLessonDetail',
  28. {
  29. requestType: 'form',
  30. data: {
  31. lessonCoursewareId: forms.cid
  32. }
  33. }
  34. );
  35. forms.list = data;
  36. if (data && data.length > 0) {
  37. forms.activeNames = data[0].lessonCoursewareDetailId;
  38. }
  39. } catch {
  40. //
  41. }
  42. };
  43. const getBg = (index: number) => {
  44. if (index % 3 === 1) {
  45. return library1;
  46. } else if (index % 3 === 2) {
  47. return library2;
  48. } else if (index % 3 === 0) {
  49. return library3;
  50. }
  51. };
  52. onMounted(() => {
  53. useEventListener(document, 'scroll', () => {
  54. const { y } = useWindowScroll();
  55. if (y.value > 52) {
  56. forms.background = '#fff';
  57. forms.color = '#323333';
  58. } else {
  59. forms.background = 'transparent';
  60. forms.color = '#fff';
  61. }
  62. });
  63. getList();
  64. });
  65. return () => (
  66. <div class={styles.knowledgeLibrary}>
  67. <MSticky position="top">
  68. <MHeader
  69. border={false}
  70. background={forms.background}
  71. color={forms.color}>
  72. {{
  73. right: () => (
  74. <div
  75. class={[styles.wroingBtn]}
  76. onClick={() => router.push('/wroing-book')}>
  77. <i class={styles.iconWroing}></i>错题本
  78. </div>
  79. )
  80. }}
  81. </MHeader>
  82. </MSticky>
  83. <div class={styles.btnGroup}>
  84. <Button
  85. class={styles.btnPractice}
  86. round
  87. onClick={() =>
  88. router.push({
  89. path: '/practice-mode',
  90. query: { lessonCoursewareId: forms.cid }
  91. })
  92. }></Button>
  93. <Button class={styles.btnTest} round></Button>
  94. </div>
  95. <div class={[styles.containerSection, styles.librarySection]}>
  96. <Collapse v-model={forms.activeNames} accordion border={false}>
  97. {forms.list.map((item: any) => (
  98. <CollapseItem
  99. title={item.lessonCoursewareDetailName}
  100. name={item.lessonCoursewareDetailId}
  101. value={forms.activeNames === 1 ? '收起' : '展开'}
  102. border={false}>
  103. {item.knowledgeDetails &&
  104. item.knowledgeDetails.map((detail: any, index: number) => (
  105. <div
  106. class={styles.unitItem}
  107. onClick={() =>
  108. router.push({
  109. path: '/unit-detail',
  110. query: {
  111. detailId: detail.lessonCoursewareDetailId
  112. }
  113. })
  114. }>
  115. <Image
  116. class={styles.unitImg}
  117. lazyLoad
  118. src={getBg(index)}
  119. />
  120. <p class={styles.name}>
  121. <span>{detail.name}</span>
  122. </p>
  123. </div>
  124. ))}
  125. </CollapseItem>
  126. ))}
  127. </Collapse>
  128. </div>
  129. </div>
  130. );
  131. }
  132. });