index-menu.vue 1.7 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, routes } = 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: routes.pageCourseStudy,
  26. visible: true
  27. },
  28. {
  29. label: '组卷作业',
  30. icon: '/menu/menu-exam.png',
  31. pageUrl: routes.pageHomework,
  32. visible: userStore.isStudent
  33. },
  34. {
  35. label: '收藏夹',
  36. icon: '/menu/menu-favorite.png',
  37. pageUrl: routes.pageCollect,
  38. visible: true
  39. },
  40. {
  41. label: '错题本',
  42. icon: '/menu/menu-mistake.png',
  43. pageUrl: routes.pageWrongBook,
  44. visible: true
  45. },
  46. {
  47. label: '学习记录',
  48. icon: '/menu/menu-record.png',
  49. pageUrl: routes.pageStudyHistory,
  50. visible: true
  51. }
  52. ])
  53. const navigateTo = (menu: MenuItem) => {
  54. if (menu.label === '错题本') {
  55. transferTo(routes.pageWrongBook, {
  56. data: {}
  57. });
  58. } else {
  59. transferTo(menu.pageUrl);
  60. }
  61. }
  62. </script>
  63. <style lang="scss" scoped>
  64. .menu-container {
  65. @apply mx-30 mt-32 grid grid-cols-5 items-center gap-x-20;
  66. }
  67. .menu-item {
  68. @apply flex flex-col items-center justify-center;
  69. }
  70. </style>