91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
| <template>
 | |
|   <view class="u-page__item" v-if="tabbar?.items?.length > 0">
 | |
|     <su-tabbar
 | |
|       :value="path"
 | |
|       :fixed="true"
 | |
|       :placeholder="true"
 | |
|       :safeAreaInsetBottom="true"
 | |
|       :inactiveColor="tabbar.style.color"
 | |
|       :activeColor="tabbar.style.activeColor"
 | |
|       :midTabBar="tabbar.mode === 2"
 | |
|       :customStyle="tabbarStyle"
 | |
|     >
 | |
|       <su-tabbar-item
 | |
|         v-for="(item, index) in tabbar.items"
 | |
|         :key="item.text"
 | |
|         :text="item.text"
 | |
|         :name="item.url"
 | |
|         :isCenter="getTabbarCenter(index)"
 | |
|         :centerImage="sheep.$url.cdn(item.iconUrl)"
 | |
|         @tap="sheep.$router.go(item.url)"
 | |
|       >
 | |
|         <template v-slot:active-icon>
 | |
|           <image class="u-page__item__slot-icon" :src="sheep.$url.cdn(item.activeIconUrl)"></image>
 | |
|         </template>
 | |
|         <template v-slot:inactive-icon>
 | |
|           <image class="u-page__item__slot-icon" :src="sheep.$url.cdn(item.iconUrl)"></image>
 | |
|         </template>
 | |
|       </su-tabbar-item>
 | |
|     </su-tabbar>
 | |
|   </view>
 | |
| </template>
 | |
| 
 | |
| <script setup>
 | |
|   import { computed, unref } from 'vue';
 | |
|   import sheep from '@/sheep';
 | |
| 
 | |
|   const tabbar = computed(() => {
 | |
|     return sheep.$store('app').template.basic?.tabbar;
 | |
|   });
 | |
| 
 | |
|   const tabbarStyle = computed(() => {
 | |
|     const backgroundStyle = tabbar.value.style;
 | |
|     if (backgroundStyle.bgType === 'color') {
 | |
|       return { background: backgroundStyle.bgColor };
 | |
|     }
 | |
|     if (backgroundStyle.bgType === 'img')
 | |
|       return {
 | |
|         background: `url(${sheep.$url.cdn(
 | |
|           backgroundStyle.bgImg,
 | |
|         )}) no-repeat top center / 100% auto`,
 | |
|       };
 | |
|   });
 | |
| 
 | |
|   const getTabbarCenter = (index) => {
 | |
|     if (unref(tabbar).mode !== 2) return false;
 | |
|     return unref(tabbar).items % 2 > 0
 | |
|       ? Math.ceil(unref(tabbar).items.length / 2) === index + 1
 | |
|       : false;
 | |
|   };
 | |
| 
 | |
|   const props = defineProps({
 | |
|     path: String,
 | |
|     default: '',
 | |
|   });
 | |
| </script>
 | |
| 
 | |
| <style lang="scss">
 | |
|   .u-page {
 | |
|     padding: 0;
 | |
| 
 | |
|     &__item {
 | |
|       &__title {
 | |
|         color: var(--textSize);
 | |
|         background-color: #fff;
 | |
|         padding: 15px;
 | |
|         font-size: 15px;
 | |
| 
 | |
|         &__slot-title {
 | |
|           color: var(--textSize);
 | |
|           font-size: 14px;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       &__slot-icon {
 | |
|         width: 25px;
 | |
|         height: 25px;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| </style>
 |