index-menu.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <view class="menu-container">
  3. <template v-for="menu in menus" :key="menu.label">
  4. <view class="menu-item" v-if="menu.visible" @click="navigateTo(menu)">
  5. <ie-image :is-oss="true" :src="menu.icon" custom-class="w-98 h-110" />
  6. <view class="text-26 text-fore-title">{{ menu.label }}</view>
  7. </view>
  8. </template>
  9. </view>
  10. </template>
  11. <script lang="ts" setup>
  12. import { useUserStore } from '@/store/userStore';
  13. import { useTransferPage } from '@/hooks/useTransferPage';
  14. const { transferTo } = useTransferPage();
  15. const userStore = useUserStore();
  16. type MenuItem = {
  17. label: string;
  18. icon: string;
  19. pageUrl: string;
  20. }
  21. const menus = computed(() => [
  22. {
  23. label: '课程学习',
  24. icon: '/menu/menu-course.png',
  25. pageUrl: '/pagesOther/pages/video-center/index/index',
  26. visible: true
  27. },
  28. {
  29. label: '组卷作业',
  30. icon: '/menu/menu-exam.png',
  31. pageUrl: '/pagesStudy/pages/homework/homework',
  32. visible: userStore.isStudent
  33. },
  34. {
  35. label: '收藏夹',
  36. icon: '/menu/menu-favorite.png',
  37. // pageUrl: '/pagesOther/pages/personal-center/my-concerned/my-concerned'
  38. pageUrl: '/pagesOther/pages/topic-center/topic-collection/topic-collection',
  39. visible: true
  40. },
  41. {
  42. label: '错题本',
  43. icon: '/menu/menu-mistake.png',
  44. pageUrl: '/pagesOther/pages/topic-center/wrong-book/wrong-book',
  45. visible: true
  46. },
  47. {
  48. label: '学习记录',
  49. icon: '/menu/menu-record.png',
  50. pageUrl: '/pagesStudy/pages/study-history/study-history',
  51. visible: userStore.isStudent
  52. }
  53. ])
  54. const navigateTo = (menu: MenuItem) => {
  55. if (menu.label === '错题本') {
  56. transferTo('/pagesOther/pages/topic-center/wrong-book/wrong-book', {
  57. data: {}
  58. });
  59. } else {
  60. transferTo(menu.pageUrl);
  61. }
  62. }
  63. </script>
  64. <style lang="scss" scoped>
  65. .menu-container {
  66. @apply mx-30 mt-32 grid grid-cols-5 items-center gap-x-20;
  67. }
  68. .menu-item {
  69. @apply flex flex-col items-center justify-center;
  70. }
  71. </style>