refactor: 统一重构底部导航栏间距逻辑与显示规则
1. 新增全局计算属性统一处理底部导航栏显示判断与间距样式 2. 替换多个页面的手写底部间距逻辑为通用样式 3. 新增路由匹配工具函数,支持灵活配置导航栏显示范围 4. 优化底部导航组件的显示条件判断
This commit is contained in:
@@ -152,6 +152,66 @@ export const resolvePageUrl = (page_key, params = {}) => {
|
||||
return url;
|
||||
};
|
||||
|
||||
/**
|
||||
* 判断当前路由是否命中 page_routes 列表
|
||||
* 支持 3 种写法,可混合使用:
|
||||
* 1) PAGE_KEY_MAP 的 key → 如 "PAGE_INDEX"
|
||||
* 2) 实际页面路径 → 如 "/pages/index/index"
|
||||
* 3) 通配符路径 → 如 "/pages_tool/*" 或 "PAGE_ORDER_*"
|
||||
* @param {string} currentRoute 当前页面路径(会自动补 / 前缀)
|
||||
* @param {string[]} routeList 后台配置的 page_routes 数组
|
||||
* @returns {boolean} 是否命中
|
||||
*/
|
||||
export const isPageInRouteList = (currentRoute, routeList) => {
|
||||
if (!currentRoute || !routeList || !Array.isArray(routeList) || routeList.length === 0) {
|
||||
return false;
|
||||
}
|
||||
const route = currentRoute.startsWith('/') ? currentRoute : '/' + currentRoute;
|
||||
|
||||
for (const item of routeList) {
|
||||
if (!item || typeof item !== 'string') continue;
|
||||
const entry = item.trim();
|
||||
if (!entry) continue;
|
||||
|
||||
if (entry.endsWith('/*')) {
|
||||
const prefix = entry.slice(0, -1);
|
||||
if (route.startsWith(prefix)) return true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entry.endsWith('_*') && PAGE_KEY_MAP) {
|
||||
const keyPrefix = entry.slice(0, -1);
|
||||
const matchedPaths = [];
|
||||
for (const k of Object.keys(PAGE_KEY_MAP)) {
|
||||
if (k.startsWith(keyPrefix) && PAGE_KEY_MAP[k]) {
|
||||
matchedPaths.push(PAGE_KEY_MAP[k]);
|
||||
}
|
||||
}
|
||||
for (const p of matchedPaths) {
|
||||
const pn = p.startsWith('/') ? p : '/' + p;
|
||||
const dirPrefix = pn.substring(0, pn.lastIndexOf('/') + 1);
|
||||
if (route.startsWith(dirPrefix)) return true;
|
||||
if (route === pn) return true;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (PAGE_KEY_MAP && PAGE_KEY_MAP[entry]) {
|
||||
let mapped = PAGE_KEY_MAP[entry];
|
||||
mapped = mapped.startsWith('/') ? mapped : '/' + mapped;
|
||||
if (route === mapped) return true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entry.startsWith('/')) {
|
||||
if (route === entry) return true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* 解析 link 对象得到最终可跳转的 URL
|
||||
* 优先级: page_key → wap_url → null
|
||||
@@ -343,6 +403,9 @@ export default {
|
||||
/** 根据 page_key + params 解析实际URL */
|
||||
resolvePageUrl,
|
||||
|
||||
/** 判断当前路由是否命中 page_routes 列表(支持 PAGE_KEY / 实际路径 / 通配符) */
|
||||
isPageInRouteList,
|
||||
|
||||
/** 解析 link 对象得到最终可跳转的 URL(优先级: page_key → wap_url) */
|
||||
resolveLinkUrl,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user