index.vue 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <template>
  2. <view v-for="(tab, i) in tabsDefine" :key="tab.title">
  3. <view v-show="currentTab === i">
  4. <Home v-if="tab.type === 'home' && pageDefine"
  5. :pageDefine="pageDefine"
  6. :pageContentDefine="pageContentDefine"
  7. />
  8. <FlexCol v-else-if="tab.type === 'list'">
  9. <StatusBarSpace backgroundColor="background.page" />
  10. <NavBar leftButton="custom" backgroundColor="background.page">
  11. <template #left>
  12. <Image
  13. v-if="tab.pageHeadImage"
  14. :src="tab.pageHeadImage"
  15. :width="tab.pageHeadImageWidth"
  16. mode="widthFix"
  17. :innerStyle="{
  18. marginLeft: '30rpx', marginTop: '30rpx' ,
  19. ...(tab.pageHeadImageStyle || {}),
  20. }"
  21. />
  22. </template>
  23. </NavBar>
  24. <CommonCategoryList :pageConfigName="tab.pageConfigName" />
  25. <Height :height="150" />
  26. </FlexCol>
  27. <User v-else-if="tab.type === 'user'" />
  28. </view>
  29. </view>
  30. <TabBar
  31. v-model:selectedTabIndex="currentTab"
  32. :fixed="!isEditorPreview"
  33. xbarSpace
  34. :innerStyle="{
  35. zIndex: 999 ,
  36. boxShadow: '0 -2rpx 4rpx rgba(0, 0, 0, 0.1)',
  37. backdropFilter: 'blur(10px)',
  38. backgroundColor: 'rgba(246, 242, 231, 0.7)',
  39. }"
  40. >
  41. <TabBarItem
  42. v-for="tab in tabsDefine"
  43. :key="tab.title"
  44. :icon="tab.icon"
  45. :activeIcon="tab.activeIcon"
  46. :hump="tab.hump"
  47. :humpHeight="tab.humpHeight"
  48. :humpSpace="tab.humpSpace"
  49. :iconSize="tab.iconSize"
  50. :text="tab.title"
  51. />
  52. </TabBar>
  53. </template>
  54. <script setup lang="ts">
  55. import { computed, inject, ref } from 'vue';
  56. import { onShareTimeline, onShareAppMessage } from '@dcloudio/uni-app';
  57. import { injectCommonCategory } from '../article/data/CommonCategoryGlobalLoader';
  58. import { type IHomeCommonCategoryHomeDefine } from '../article/data/CommonCategoryDefine';
  59. import TabBar from '@/components/nav/TabBar.vue';
  60. import TabBarItem from '@/components/nav/TabBarItem.vue';
  61. import FlexCol from '@/components/layout/FlexCol.vue';
  62. import StatusBarSpace from '@/components/layout/space/StatusBarSpace.vue';
  63. import NavBar from '@/components/nav/NavBar.vue';
  64. import Image from '@/components/basic/Image.vue';
  65. import Height from '@/components/layout/space/Height.vue';
  66. import CommonCategoryList from '../article/data/CommonCategoryList.vue';
  67. import Home from './home.vue';
  68. import User from '../user/index.vue';
  69. const commonCategory = injectCommonCategory();
  70. const pageDefine = computed(() => commonCategory.value.page.find((p) => p.name === 'home'));
  71. const pageContentDefine = computed(() => pageDefine.value?.content as IHomeCommonCategoryHomeDefine);
  72. const isEditorPreview = inject('editorPreviewMark', false);
  73. const tabsDefine = computed(() => pageContentDefine.value?.props.tabs.filter((item) => item.visible !== false));
  74. const currentTab = ref(0);
  75. onShareTimeline(() => {
  76. return {};
  77. })
  78. onShareAppMessage(() => {
  79. return {};
  80. })
  81. </script>
  82. <style lang="scss">
  83. </style>