refactor(common,components): 优化底部导航栏显隐逻辑
1. 新增isCurrentPageTabBarRoot工具方法封装页面判断逻辑 2. 调整弹窗打开时的导航栏隐藏时机,仅在非TabBar根页面执行 3. 移除弹窗open回调中的导航栏显示逻辑,改为在关闭弹窗时显式处理 4. 补充注释说明回调不可靠的问题和根页面不隐藏导航的原因
This commit is contained in:
@@ -584,6 +584,25 @@ export const isTabBarRootPage = (pagePath, tabBarList) => {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 判断**当前**页面是否是 TabBar 根页面
|
||||
* 封装了 getCurrentPages() + isTabBarRootPage 的组合,供业务组件在弹窗/操作前判断
|
||||
* 例: 登录弹窗在会员中心页打开时,应当跳过 hideTabBar 的调用
|
||||
* @returns {boolean} 当前页是 TabBar 项时返回 true,否则 false(getCurrentPages 不可用时也返回 false)
|
||||
*/
|
||||
export const isCurrentPageTabBarRoot = () => {
|
||||
try {
|
||||
const pages = typeof getCurrentPages === 'function' ? getCurrentPages() : []
|
||||
if (!pages || !pages.length) return false
|
||||
const currentRoute = '/' + String(pages[pages.length - 1].route || '').replace(/^\//, '')
|
||||
if (!currentRoute) return false
|
||||
const tabBarList = store && store.state ? store.state.tabBarList : null
|
||||
return isTabBarRootPage(currentRoute, tabBarList)
|
||||
} catch (e) {
|
||||
return false
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 检查tabBar是否激活
|
||||
* @param {string} linkUrl 链接路径 /pages/goods/category
|
||||
@@ -671,6 +690,9 @@ export default {
|
||||
/** 判断给定路径是否是 TabBar 根页面(用于动态控制返回按钮显示) */
|
||||
isTabBarRootPage,
|
||||
|
||||
/** 判断当前页面是否是 TabBar 根页面(供业务组件在弹窗前判断是否需要隐藏 TabBar) */
|
||||
isCurrentPageTabBarRoot,
|
||||
|
||||
/**
|
||||
* 页面跳转
|
||||
* @param {string} to 跳转链接 /pages/idnex/index
|
||||
|
||||
@@ -634,10 +634,13 @@ export default {
|
||||
});
|
||||
},
|
||||
openCompleteInfoPop(callback) {
|
||||
this.$refs.completeInfoPopup.open(() => {
|
||||
this.$store.commit('setBottomNavHidden', false); //显示底部导航
|
||||
});
|
||||
this.$store.commit('setBottomNavHidden', true); // 隐藏底部导航
|
||||
this.$refs.completeInfoPopup.open();
|
||||
// 关闭时(setBottomNavHidden=false)由 saveCompleteInfo / cancelCompleteInfo 显式处理,
|
||||
// 不在 open 回调里写 — 回调在"弹窗被销毁/页面被卸载"等异常路径下不保证触发,会卡住 TabBar 隐藏态
|
||||
// TabBar 根页面(如会员中心)不能藏 TabBar — 否则会被自己藏起来
|
||||
if (!this.$util.isCurrentPageTabBarRoot()) {
|
||||
this.$store.commit('setBottomNavHidden', true); // 隐藏底部导航
|
||||
}
|
||||
this.completeInfoCallback = callback;
|
||||
},
|
||||
saveCompleteInfo() {
|
||||
|
||||
@@ -237,6 +237,7 @@ export default {
|
||||
// 关闭登录
|
||||
closeLogin() {
|
||||
this.$refs.completeInfoPopup.close();
|
||||
this.$store.commit('setBottomNavHidden', false); // 显示底部导航
|
||||
},
|
||||
|
||||
// 获取注册配置
|
||||
@@ -346,10 +347,13 @@ export default {
|
||||
if (!this.storeToken) this.getCaptchaConfig();
|
||||
// #endif
|
||||
|
||||
this.$refs.completeInfoPopup.open(() => {
|
||||
this.$store.commit('setBottomNavHidden', false); //显示底部导航
|
||||
});
|
||||
this.$store.commit('setBottomNavHidden', true); //隐藏底部导航
|
||||
this.$refs.completeInfoPopup.open();
|
||||
// 关闭时(setBottomNavHidden=false)由 cancelCompleteInfo / forceBindMobile 显式处理,
|
||||
// 不在 open 回调里写 — 回调在"弹窗被销毁/页面被卸载"等异常路径下不保证触发,会卡住 TabBar 隐藏态
|
||||
// TabBar 根页面(如会员中心)不能藏 TabBar — 否则会被自己藏起来
|
||||
if (!this.$util.isCurrentPageTabBarRoot()) {
|
||||
this.$store.commit('setBottomNavHidden', true); //隐藏底部导航
|
||||
}
|
||||
},
|
||||
|
||||
// 获取前台登录验证码开关配置
|
||||
|
||||
Reference in New Issue
Block a user