unit-detail.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import MHeader from '@/components/m-header';
  2. import MSticky from '@/components/m-sticky';
  3. import { defineComponent, onMounted, reactive, ref } from 'vue';
  4. import styles from './index.module.less';
  5. import { useRoute, useRouter } from 'vue-router';
  6. import request from '@/helpers/request';
  7. import { useEventListener, useWindowScroll } from '@vueuse/core';
  8. import iconExamQuestion from './images/icon-exam-question.png';
  9. import MEmpty from '@/components/m-empty';
  10. import { showToast } from 'vant';
  11. export default defineComponent({
  12. name: 'unit-detail',
  13. setup() {
  14. const router = useRouter();
  15. const route = useRoute();
  16. const forms = reactive({
  17. detailId: route.query.detailId,
  18. loading: false,
  19. background: 'transparent',
  20. color: '#fff',
  21. dataInfo: {} as any
  22. });
  23. const getList = async () => {
  24. forms.loading = true;
  25. try {
  26. const { data } = await request.get(
  27. '/edu-app/lessonCoursewareKnowledgeDetail/detail/' + forms.detailId
  28. );
  29. forms.dataInfo = data;
  30. } catch {
  31. //
  32. }
  33. forms.loading = false;
  34. };
  35. const onGotoModel = async () => {
  36. try {
  37. const { data } = await request.get(
  38. '/edu-app/studentUnitExamination/checkKnowledgePointIds',
  39. {
  40. params: {
  41. knowledgePointIds: forms.dataInfo.knowledgePointIds
  42. }
  43. }
  44. );
  45. if (data) {
  46. router.push({
  47. path: '/practice-mode',
  48. query: { knowledgePointIds: forms.dataInfo.knowledgePointIds }
  49. });
  50. } else {
  51. setTimeout(() => {
  52. showToast('暂无题目');
  53. }, 100);
  54. return;
  55. }
  56. } catch {
  57. //
  58. }
  59. };
  60. onMounted(() => {
  61. useEventListener(document, 'scroll', () => {
  62. const { y } = useWindowScroll();
  63. if (y.value > 52) {
  64. forms.background = '#fff';
  65. forms.color = '#323333';
  66. } else {
  67. forms.background = 'transparent';
  68. forms.color = '#fff';
  69. }
  70. });
  71. getList();
  72. });
  73. return () => (
  74. <div class={styles.knowledgeLibrary}>
  75. <MSticky position="top">
  76. <MHeader
  77. border={false}
  78. background={forms.background}
  79. color={forms.color}>
  80. {{
  81. right: () => (
  82. <div
  83. class={styles.wroingBtn}
  84. onClick={() => router.push('/wroing-book')}>
  85. <i class={styles.iconWroing}></i>错题本
  86. </div>
  87. )
  88. }}
  89. </MHeader>
  90. </MSticky>
  91. <div class={[styles.containerSection, styles.woringSection]}>
  92. {forms.dataInfo.desc && (
  93. <div
  94. class={styles.woringContent}
  95. v-html={forms.dataInfo.desc}></div>
  96. )}
  97. {!forms.dataInfo.desc && !forms.loading && (
  98. <div class={styles.woringContent}>
  99. <MEmpty description="暂无内容" style={{ paddingTop: '40px' }} />
  100. </div>
  101. )}
  102. </div>
  103. <img
  104. src={iconExamQuestion}
  105. class={styles.iconExamQuestion}
  106. onClick={onGotoModel}
  107. />
  108. </div>
  109. );
  110. }
  111. });