index.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <ie-page bg-color="white">
  3. <ie-navbar transparent bg-color="#FFFFFF" :placeholder="false" custom-back :click-hover="false">
  4. <template #headerLeft>
  5. <view class="flex items-center">
  6. <view class="text-36 text-fore-title font-bold">{{ orgName }}</view>
  7. <view class="w-6 h-6 rounded-2 bg-black mx-12"></view>
  8. <view>升学备考好帮手</view>
  9. </view>
  10. </template>
  11. <template #headerRight="{ isTransparent }">
  12. <view v-if="userStore.getLocation" class="ml-10 flex items-center gap-x-4" @click="handleChangeLocation">
  13. <uv-icon name="map" size="14" :color="isTransparent ? '#333' : 'var(--primary-color)'" />
  14. <text class="text-26 transition-colors duration-300"
  15. :class="[isTransparent ? 'text-fore-title' : 'text-primary']">
  16. {{ userStore.getLocation }}
  17. </text>
  18. </view>
  19. </template>
  20. </ie-navbar>
  21. <view class="absolute top-0 left-0 right-0 z-0 h-[489rpx] bg-gradient-to-b from-[#6ACAFF] to-white"></view>
  22. <view class="relative z-2" :style="{ paddingTop: baseStickyTop + 10 + 'px' }">
  23. <index-banner />
  24. <index-guide @detail="handleDetail" />
  25. <index-news @detail="handleDetail" />
  26. </view>
  27. <template #tabbar>
  28. <ie-tabbar :active="0" />
  29. <index-popup ref="popupRef" />
  30. </template>
  31. </ie-page>
  32. </template>
  33. <script lang="ts" setup>
  34. import IndexBanner from './components/index-banner.vue';
  35. import IndexGuide from './components/index-guide.vue';
  36. import IndexNews from './components/index-news.vue';
  37. import indexPopup from './components/index-popup.vue';
  38. import { useUserStore } from '@/store/userStore';
  39. // @ts-ignore
  40. import mxConst from '@/common/mxConst';
  41. import { useTransferPage } from '@/hooks/useTransferPage';
  42. import { useNavbar } from '@/hooks/useNavbar';
  43. import { onPageShow } from '@dcloudio/uni-app';
  44. const { transferTo } = useTransferPage();
  45. const { baseStickyTop } = useNavbar();
  46. const scrollTop = ref(0);
  47. const isHide = ref(false);
  48. const userStore = useUserStore();
  49. const orgName = computed(() => userStore.orgInfo.orgName);
  50. const handleDetail = async (id: number | string, title?: string) => {
  51. if (('' + id).includes(',')) {
  52. transferTo(mxConst.routes.newsGroup, {
  53. data: {
  54. ids: id,
  55. title: title
  56. }
  57. });
  58. } else {
  59. transferTo(mxConst.routes.newsDetail, {
  60. data: {
  61. id: id,
  62. title: title
  63. }
  64. })
  65. }
  66. }
  67. const popupRef = ref();
  68. const checkProvinceInfo = () => {
  69. if (!userStore.isLogin && !userStore.tempInfo?.location) {
  70. popupRef.value.open();
  71. }
  72. }
  73. const checkTeacherInfo = async () => {
  74. await userStore.checkInfoComplete();
  75. }
  76. const reloadUserInfo = async () => {
  77. if (userStore.isLogin) {
  78. await userStore.getUserInfo();
  79. }
  80. }
  81. const handleChangeLocation = () => {
  82. if (userStore.isLogin) {
  83. return;
  84. }
  85. popupRef.value.open();
  86. }
  87. onHide(() => {
  88. isHide.value = true;
  89. })
  90. onPageScroll((e) => {
  91. if (!isHide.value) {
  92. scrollTop.value = e.scrollTop;
  93. }
  94. });
  95. onShow(() => {
  96. setTimeout(() => {
  97. uni.pageScrollTo({
  98. scrollTop: scrollTop.value,
  99. duration: 0
  100. });
  101. }, 0);
  102. setTimeout(() => {
  103. checkProvinceInfo();
  104. checkTeacherInfo();
  105. reloadUserInfo();
  106. }, 500);
  107. isHide.value = false;
  108. });
  109. </script>
  110. <style lang="scss" scoped></style>