Files
zt-closet-wxmini-frontend/miniprogram/utils/tabbar.ts
T
2026-09-15 17:18:15 +08:00

44 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 自定义 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 })
}