70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
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 });
|
|
}
|
|
},
|
|
},
|
|
});
|