// 自定义 tabBar 实例获取:只有 tab 页自身才有 getTabBar(), // 通知页等非 tab 页调用会拿到 undefined,需从页面栈中查找仍在栈内的 tab 页。 export function getTabBarInstance(): any { const pages = typeof getCurrentPages === 'function' ? getCurrentPages() : [] for (let i = pages.length - 1; i >= 0; i--) { const page = pages[i] as any const tabBar = page && page.getTabBar && page.getTabBar() if (tabBar) return tabBar } return null } // 同步未读红点:优先让 tabBar 重新拉取真实数量,取不到实例时静默跳过 export function syncTabBarUnread(force = true): void { const tabBar = getTabBarInstance() if (tabBar && typeof tabBar.syncUnread === 'function') tabBar.syncUnread(force) } // 用已知数量直接更新红点:不发请求,供页面拉到最新未读数后同步 tabBar export function setTabBarUnread(count: number): void { const tabBar = getTabBarInstance() if (tabBar && typeof tabBar.setUnread === 'function') tabBar.setUnread(count) } // 更新选中态:走 tabBar 的 setSelected(内部保证首帧安全), // 老版本实例没有该方法时降级为 setData export function setTabBarSelected(index: number): void { const tabBar = getTabBarInstance() if (!tabBar) return if (typeof tabBar.setSelected === 'function') tabBar.setSelected(index) else tabBar.setData({ selected: index }) } // 弹层遮罩期间隐藏悬浮标签栏:tabBar 由框架渲染在页面容器之上, // 页面内任何 z-index 都盖不住它,只能让组件自身淡出(内部同样走首帧安全更新)。 // 弹层关闭后必须恢复,页面 onShow 时可再校准一次,避免残留隐藏。 export function setTabBarHidden(hidden: boolean): void { const tabBar = getTabBarInstance() if (!tabBar) return if (typeof tabBar.setHidden === 'function') tabBar.setHidden(hidden) else tabBar.setData({ hidden }) }