knowledge-practice.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <ie-page>
  3. <ie-navbar title="刷题" />
  4. <uv-tabs :list="subjectList" key-name="subjectName" @click="handleChangeTab" :scrollable="true"></uv-tabs>
  5. <view class="h-16 bg-back"></view>
  6. <view class="px-40">
  7. <knowledgeTree :tree-data="treeData" @start-practice="handleStartPractice" />
  8. </view>
  9. </ie-page>
  10. </template>
  11. <script lang="ts" setup>
  12. import { useTransferPage } from '@/hooks/useTransferPage';
  13. import { getSubjectList, getKnowledgeList } from '@/api/modules/study';
  14. import knowledgeTree from '@/pagesStudy/components/knowledge-tree.vue';
  15. import * as Study from '@/types/study';
  16. import { EnumExamMode } from '@/common/enum';
  17. const { prevData, transferTo } = useTransferPage();
  18. const universityId = computed(() => prevData.value.universityId);
  19. const currentSubjectIndex = ref<number>(-1);
  20. const currentSubjectId = computed(() => {
  21. if (subjectList.value.length > 0 && currentSubjectIndex.value >= 0) {
  22. return subjectList.value[currentSubjectIndex.value].subjectId;
  23. }
  24. return null;
  25. });
  26. const subjectList = ref<Study.Subject[]>([]);
  27. const treeData = ref<Study.KnowledgeNode[]>([]);
  28. const handleChangeTab = (item: any) => {
  29. console.log(item)
  30. currentSubjectIndex.value = item.index;
  31. }
  32. const loadKnowledgeList = async () => {
  33. if (!currentSubjectId.value) {
  34. return;
  35. }
  36. try {
  37. const { data } = await getKnowledgeList({
  38. subjectId: currentSubjectId.value,
  39. directed: prevData.value.directed
  40. });
  41. treeData.value = data as Study.KnowledgeNode[];
  42. } catch (error) {
  43. console.log(error);
  44. }
  45. }
  46. const handleStartPractice = (node: Study.KnowledgeNode) => {
  47. transferTo('/pagesStudy/pages/start-exam/start-exam', {
  48. data: {
  49. name: node.name,
  50. mode: EnumExamMode.PRACTICE,
  51. paperType: 'Practice',
  52. relateId: node.id
  53. }
  54. });
  55. }
  56. watch(() => currentSubjectIndex.value, () => {
  57. loadKnowledgeList();
  58. }, {
  59. immediate: true
  60. });
  61. const loadData = async () => {
  62. try {
  63. const { data } = await getSubjectList({
  64. universityId: universityId.value
  65. });
  66. subjectList.value = data.map(item => ({ subjectId: item.subjectId, subjectName: item.subjectName }));
  67. currentSubjectIndex.value = 0;
  68. } catch (error) { }
  69. }
  70. onLoad(() => {
  71. loadData();
  72. });
  73. </script>
  74. <style></style>