import { setProperties } from 'uni-shared' const setTabBarItemProps = ['text', 'iconPath', 'selectedIconPath'] const setTabBarStyleProps = ['color', 'selectedColor', 'backgroundColor', 'borderStyle'] const setTabBarBadgeProps = ['badge', 'redDot'] function setTabBar (type, args = {}) { const app = getApp() if (app) { let isTabBar = false const pages = getCurrentPages() if (pages.length) { if (pages[pages.length - 1].$page.meta.isTabBar) { isTabBar = true } } else if (app.$children[0].hasTabBar) { isTabBar = true } if (!isTabBar) { return { errMsg: `${type}:fail not TabBar page` } } const { index } = args const tabBar = __uniConfig.tabBar if (index >= __uniConfig.tabBar.list.length) { return { errMsg: `${type}:fail tabbar item not found` } } switch (type) { case 'showTabBar': app.$children[0].hideTabBar = false break case 'hideTabBar': app.$children[0].hideTabBar = true break case 'setTabBarItem': { setProperties(tabBar.list[index], setTabBarItemProps, args) const pagePath = args.pagePath const route = pagePath && __uniRoutes.find(({ path }) => path === pagePath) if (route) { const meta = route.meta meta.isTabBar = true meta.tabBarIndex = index meta.isQuit = true const tabBar = __uniConfig.tabBar if (tabBar && tabBar.list && tabBar.list[index]) { tabBar.list[index].pagePath = pagePath.startsWith('/') ? pagePath.substring(1) : pagePath } } break } case 'setTabBarStyle': setProperties(tabBar, setTabBarStyleProps, args) break case 'showTabBarRedDot': setProperties(tabBar.list[index], setTabBarBadgeProps, { badge: '', redDot: true }) break case 'setTabBarBadge': setProperties(tabBar.list[index], setTabBarBadgeProps, { badge: args.text, redDot: true }) break case 'hideTabBarRedDot': case 'removeTabBarBadge': setProperties(tabBar.list[index], setTabBarBadgeProps, { badge: '', redDot: false }) break } } return {} } export function setTabBarItem (args) { return setTabBar('setTabBarItem', args) } export function setTabBarStyle (args) { return setTabBar('setTabBarStyle', args) } export function hideTabBar (args) { return setTabBar('hideTabBar', args) } export function showTabBar (args) { return setTabBar('showTabBar', args) } export function hideTabBarRedDot (args) { return setTabBar('hideTabBarRedDot', args) } export function showTabBarRedDot (args) { return setTabBar('showTabBarRedDot', args) } export function removeTabBarBadge (args) { return setTabBar('removeTabBarBadge', args) } export function setTabBarBadge (args) { return setTabBar('setTabBarBadge', args) }