Index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <template>
  2. <div class="index">
  3. <router-view v-slot="{ Component }">
  4. <keep-alive :include="keeps">
  5. <component :is="Component" class="container barTop" />
  6. </keep-alive>
  7. </router-view>
  8. <van-tabbar
  9. :style="{ backgroundColor: tabColor }"
  10. v-model="active"
  11. z-index="20"
  12. safe-area-inset-bottom
  13. route
  14. ref="tabbar"
  15. class="bgBack"
  16. >
  17. <van-tabbar-item replace v-for="item in menus" :name="item.name" :to="`/${item.name}`" :key="item.name">
  18. <span>{{ item.title }}</span>
  19. <template #icon="props">
  20. <img :src="props.active ? item.preIcon : item.icon" />
  21. </template>
  22. </van-tabbar-item>
  23. </van-tabbar>
  24. </div>
  25. </template>
  26. <script>
  27. export default {
  28. computed: {
  29. menus() {
  30. let menus = [
  31. {
  32. name: 'home',
  33. title: '首页',
  34. icon: require('@assets/tabbar_icon_01.png'),
  35. preIcon: require('@assets/tabbar_icon_01_pre.png')
  36. },
  37. {
  38. name: 'discover',
  39. title: '发现',
  40. icon: require('@assets/tabbar_icon_02.png'),
  41. preIcon: require('@assets/tabbar_icon_02_pre.png')
  42. },
  43. {
  44. name: 'store',
  45. title: '藏品室',
  46. icon: require('@assets/tabbar_icon_03.png'),
  47. preIcon: require('@assets/tabbar_icon_03_pre.png')
  48. },
  49. {
  50. name: 'mine',
  51. title: '我的',
  52. icon: require('@assets/tabbar_icon_04.png'),
  53. preIcon: require('@assets/tabbar_icon_04_pre.png')
  54. }
  55. ];
  56. if (this.$store.state.hopeMarket) {
  57. menus = [
  58. {
  59. name: 'home',
  60. title: '首页',
  61. icon: require('@assets/tabbar_icon_01.png'),
  62. preIcon: require('@assets/tabbar_icon_01_pre.png')
  63. },
  64. {
  65. name: 'store',
  66. title: '藏品室',
  67. icon: require('@assets/tabbar_icon_03.png'),
  68. preIcon: require('@assets/tabbar_icon_03_pre.png')
  69. },
  70. {
  71. name: 'mine',
  72. title: '我的',
  73. icon: require('@assets/tabbar_icon_04.png'),
  74. preIcon: require('@assets/tabbar_icon_04_pre.png')
  75. }
  76. ];
  77. }
  78. return menus;
  79. },
  80. tabClass() {
  81. return this.$route.path === '/home' ? '' : 'bgBack';
  82. }
  83. },
  84. inject: ['keeps'],
  85. name: 'index',
  86. data() {
  87. return {
  88. menu: null,
  89. tabColor: '',
  90. active: 'home'
  91. };
  92. }
  93. };
  94. </script>
  95. <style lang="less" scoped>
  96. .container {
  97. box-sizing: border-box;
  98. flex-grow: 1;
  99. }
  100. .index {
  101. background-color: @bg3;
  102. .flex-col();
  103. padding-top: 0 !important;
  104. }
  105. /deep/.van-hairline--top-bottom {
  106. &::after {
  107. border: 1px solid @bg3;
  108. }
  109. &.bgBack {
  110. background-color: #222426;
  111. &::after {
  112. border: 1px solid #222426;
  113. }
  114. }
  115. }
  116. </style>