index.vue 3.2 KB

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