index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <view class="page-content
  3. bg-gradient-to-b from-primary-lighter to-bg bg-[length:100vw_170px] bg-no-repeat">
  4. <gradient-navbar/>
  5. <enroll-dashboard/>
  6. <mx-index-menus :data="pageConfig.menus" class="mt-[-50px]"/>
  7. <view class="mx-30 mt-30 mb-60 fx-col gap-40">
  8. <component v-for="block in pageConfig.blocks" v-bind="block" :is="blockMap[block.is]"/>
  9. </view>
  10. </view>
  11. </template>
  12. <script setup>
  13. import mxConst from "@/common/mxConst";
  14. import mxConfig from "@/common/mxConfig";
  15. import {onLoad, onShow} from '@dcloudio/uni-app'
  16. import {onMounted, ref, watchEffect} from 'vue';
  17. import {useEnvStore} from "@/hooks/useEnvStore";
  18. import {useTransfer} from "@/hooks/useTransfer";
  19. import {useUserStore} from "@/hooks/useUserStore";
  20. import {useTheme} from "@/hooks/useTheme";
  21. import {useProvidePageConfig} from "@/hooks/usePageConfigInjection";
  22. import {useProvidePageScroll} from "@/hooks/usePageScrollInjection";
  23. import GradientNavbar from "@/pages/index/components/gradient-navbar.vue";
  24. import EnrollDashboard from "@/pages/index/components/enroll-dashboard.vue";
  25. import CarouselBanner from "@/pages/index/components/carousel-banner.vue";
  26. import ScheduleSteps from "@/pages/index/components/schedule-steps.vue";
  27. import NewsTab from "@/pages/index/components/news-tab.vue";
  28. import NewsTop from "@/pages/index/components/news-top.vue";
  29. // 这里和vue2不太一样,vue2中import就能保证正常使用,但vue3中不能简单把component.is赋值为字符串
  30. const blockMap = {
  31. [CarouselBanner.name]: CarouselBanner,
  32. [ScheduleSteps.name]: ScheduleSteps,
  33. [NewsTab.name]: NewsTab,
  34. [NewsTop.name]: NewsTop
  35. }
  36. const {isLogin, isMobileBind, isScoreLocking} = useUserStore()
  37. const {isParent, isGuideRead} = useEnvStore()
  38. const {transferTo} = useTransfer()
  39. const {brands} = useTheme()
  40. const pageConfig = ref({})
  41. useProvidePageScroll()
  42. watchEffect(() => {
  43. const pageName = isParent.value ? 'Parent' : 'Index'
  44. pageConfig.value = useProvidePageConfig(pageName)
  45. })
  46. onLoad(() => {
  47. // 如果是从公众号进入本应用,隐藏底部的tab-bar,首页菜单将包含所有入口。
  48. if (isParent.value) uni.hideTabBar()
  49. })
  50. onShow(() => {
  51. if (!isGuideRead.value) {
  52. transferTo(mxConst.routes.guide)
  53. return
  54. }
  55. if (isLogin.value && !isMobileBind.value) {
  56. transferTo(mxConst.routes.bindMobile)
  57. return
  58. }
  59. if (isLogin.value && isScoreLocking.value) {
  60. uni.showModal({
  61. content: mxConfig.scoreLockingTips,
  62. showCancel: false,
  63. confirmText: '去修改分数',
  64. confirmColor: brands.primary,
  65. success: () => transferTo(mxConst.routes.basicInfo)
  66. })
  67. return
  68. }
  69. })
  70. onMounted(() => {
  71. // 这个挂钩可能是给wap2app用的,继续保留
  72. window.getPages = getPages
  73. })
  74. function getPages() {
  75. const pages = getCurrentPages();
  76. uni.postMessage({
  77. data: {
  78. pages: pages.length
  79. }
  80. });
  81. }
  82. </script>
  83. <style lang="scss" scoped>
  84. </style>