Kaynağa Gözat

refactor(tabbar): 将图标类型从'local'重命名为'image'并添加警告

修改图标类型命名以更准确描述其用途
在image模式下未配置iconActive时添加控制台警告
feige996 9 ay önce
ebeveyn
işleme
ccfab5eea4
2 değiştirilmiş dosya ile 9 ekleme ve 5 silme
  1. 3 3
      src/tabbar/config.ts
  2. 6 2
      src/tabbar/index.vue

+ 3 - 3
src/tabbar/config.ts

@@ -1,9 +1,9 @@
 import type { TabBar } from '@uni-helper/vite-plugin-uni-pages'
 
 type FgTabBarItem = TabBar['list'][0] & {
-  iconType: 'uniUi' | 'uiLib' | 'unocss' | 'iconfont' | 'local'
+  iconType: 'uniUi' | 'uiLib' | 'unocss' | 'iconfont' | 'image'
   icon: any // 其实是 string 类型,这里是为了避免 ts 报错
-  activeIcon?: string // 只有在 local 模式下才需要,传递的是高亮的图片(PS: 不建议用 local 模式)
+  activeIcon?: string // 只有在 image 模式下才需要,传递的是高亮的图片(PS: 不建议用 image 模式)
 }
 
 /**
@@ -79,7 +79,7 @@ export const tabbarList: FgTabBarItem[] = [
   //   text: '首页',
   //   // 使用 ‘local’时,需要配置 icon + iconActive 2张图片(不推荐)
   //   // 既然已经用了自定义tabbar了,就不建议用图片了,所以不推荐
-  //   iconType: 'local',
+  //   iconType: 'image',
   //   icon: '/static/tabbar/home.png',
   //   iconActive: '/static/tabbar/homeHL.png',
   // },

+ 6 - 2
src/tabbar/index.vue

@@ -44,7 +44,11 @@ function getColorByIndex(index: number) {
   return tabbarStore.curIdx === index ? activeColor : inactiveColor
 }
 
-function getImageByIndex(index: number, item: { iconActive: string, icon: string }) {
+function getImageByIndex(index: number, item: { iconActive?: string, icon: string }) {
+  if (!item.iconActive) {
+    console.warn('image 模式下,需要配置 iconActive,否则无法切换图片')
+    return item.icon
+  }
   return tabbarStore.curIdx === index ? item.iconActive : item.icon
 }
 </script>
@@ -72,7 +76,7 @@ function getImageByIndex(index: number, item: { iconActive: string, icon: string
           <template v-if="item.iconType === 'unocss' || item.iconType === 'iconfont'">
             <view :class="item.icon" class="text-20px" />
           </template>
-          <template v-if="item.iconType === 'local'">
+          <template v-if="item.iconType === 'image'">
             <image :src="getImageByIndex(index, item)" mode="scaleToFill" class="h-20px w-20px" />
           </template>
           <view class="mt-2px text-12px">