import { NAV_INNER_PX } from '../../utils/navMetrics'; const HOME_TAB_URL = '/pages/home/home'; const TAB_BAR_ROUTES = new Set([ 'pages/home/home', 'pages/age/age', 'pages/favorites/favorites', 'pages/profile/profile', ]); Component({ options: { multipleSlots: true }, properties: { title: { type: String, value: '' }, background: { type: String, value: '' }, }, data: { statusBarHeight: 0, navBlockHeight: 0, leftActionType: 'none', }, lifetimes: { attached() { const { statusBarHeight } = wx.getWindowInfo(); this.setData({ statusBarHeight, navBlockHeight: statusBarHeight + NAV_INNER_PX, }); this.syncLeftAction(); }, }, pageLifetimes: { show() { this.syncLeftAction(); }, }, methods: { syncLeftAction() { const pages = getCurrentPages(); const currentRoute = pages[pages.length - 1]?.route || ''; const isTabBarPage = TAB_BAR_ROUTES.has(currentRoute); let leftActionType: 'none' | 'back' | 'home' = 'none'; if (pages.length > 1) { leftActionType = 'back'; } else if (!isTabBarPage) { leftActionType = 'home'; } this.setData({ leftActionType }); }, handleLeftAction() { if (this.data.leftActionType === 'back') { wx.navigateBack({ fail: () => { wx.switchTab({ url: HOME_TAB_URL }); }, }); return; } if (this.data.leftActionType === 'home') { wx.switchTab({ url: HOME_TAB_URL }); } }, }, });