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是否激活
|
* 检查tabBar是否激活
|
||||||
* @param {string} linkUrl 链接路径 /pages/goods/category
|
* @param {string} linkUrl 链接路径 /pages/goods/category
|
||||||
@@ -671,6 +690,9 @@ export default {
|
|||||||
/** 判断给定路径是否是 TabBar 根页面(用于动态控制返回按钮显示) */
|
/** 判断给定路径是否是 TabBar 根页面(用于动态控制返回按钮显示) */
|
||||||
isTabBarRootPage,
|
isTabBarRootPage,
|
||||||
|
|
||||||
|
/** 判断当前页面是否是 TabBar 根页面(供业务组件在弹窗前判断是否需要隐藏 TabBar) */
|
||||||
|
isCurrentPageTabBarRoot,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面跳转
|
* 页面跳转
|
||||||
* @param {string} to 跳转链接 /pages/idnex/index
|
* @param {string} to 跳转链接 /pages/idnex/index
|
||||||
|
|||||||
@@ -634,10 +634,13 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
openCompleteInfoPop(callback) {
|
openCompleteInfoPop(callback) {
|
||||||
this.$refs.completeInfoPopup.open(() => {
|
this.$refs.completeInfoPopup.open();
|
||||||
this.$store.commit('setBottomNavHidden', false); //显示底部导航
|
// 关闭时(setBottomNavHidden=false)由 saveCompleteInfo / cancelCompleteInfo 显式处理,
|
||||||
});
|
// 不在 open 回调里写 — 回调在"弹窗被销毁/页面被卸载"等异常路径下不保证触发,会卡住 TabBar 隐藏态
|
||||||
this.$store.commit('setBottomNavHidden', true); // 隐藏底部导航
|
// TabBar 根页面(如会员中心)不能藏 TabBar — 否则会被自己藏起来
|
||||||
|
if (!this.$util.isCurrentPageTabBarRoot()) {
|
||||||
|
this.$store.commit('setBottomNavHidden', true); // 隐藏底部导航
|
||||||
|
}
|
||||||
this.completeInfoCallback = callback;
|
this.completeInfoCallback = callback;
|
||||||
},
|
},
|
||||||
saveCompleteInfo() {
|
saveCompleteInfo() {
|
||||||
|
|||||||
@@ -237,6 +237,7 @@ export default {
|
|||||||
// 关闭登录
|
// 关闭登录
|
||||||
closeLogin() {
|
closeLogin() {
|
||||||
this.$refs.completeInfoPopup.close();
|
this.$refs.completeInfoPopup.close();
|
||||||
|
this.$store.commit('setBottomNavHidden', false); // 显示底部导航
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取注册配置
|
// 获取注册配置
|
||||||
@@ -346,10 +347,13 @@ export default {
|
|||||||
if (!this.storeToken) this.getCaptchaConfig();
|
if (!this.storeToken) this.getCaptchaConfig();
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
this.$refs.completeInfoPopup.open(() => {
|
this.$refs.completeInfoPopup.open();
|
||||||
this.$store.commit('setBottomNavHidden', false); //显示底部导航
|
// 关闭时(setBottomNavHidden=false)由 cancelCompleteInfo / forceBindMobile 显式处理,
|
||||||
});
|
// 不在 open 回调里写 — 回调在"弹窗被销毁/页面被卸载"等异常路径下不保证触发,会卡住 TabBar 隐藏态
|
||||||
this.$store.commit('setBottomNavHidden', true); //隐藏底部导航
|
// TabBar 根页面(如会员中心)不能藏 TabBar — 否则会被自己藏起来
|
||||||
|
if (!this.$util.isCurrentPageTabBarRoot()) {
|
||||||
|
this.$store.commit('setBottomNavHidden', true); //隐藏底部导航
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取前台登录验证码开关配置
|
// 获取前台登录验证码开关配置
|
||||||
|
|||||||
Reference in New Issue
Block a user