From 366c4e4cd0bd8df9c93761a86122d6602ab51ab4 Mon Sep 17 00:00:00 2001 From: ZF sun <34314687@qq.com> Date: Mon, 29 Dec 2025 17:47:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=BA=95=E9=83=A8TabBar):=20=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E5=90=8E=EF=BC=8C=E6=8C=89=E9=92=AE=E6=BF=80=E6=B4=BB?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8B=EF=BC=8C=E4=B8=8D=E5=8F=98=E9=A2=9C?= =?UTF-8?q?=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/js/util.js | 100 ++++++++++++++++-------------- components-diy/diy-bottom-nav.vue | 36 +++++++---- 2 files changed, 79 insertions(+), 57 deletions(-) diff --git a/common/js/util.js b/common/js/util.js index e7c7eec..45116dd 100644 --- a/common/js/util.js +++ b/common/js/util.js @@ -5,6 +5,58 @@ import { Weixin } from 'common/js/wx-jssdk.js'; + +// 当前最新的tabBar.list (参见pages.json 中的tabBar.list 配置) +export const systemTabBarList = [ + '/pages/index/index', + '/pages_goods/category', + '/pages_tool/contact/contact', + '/pages_tool/member/index' + ]; + +/** + * 适配子包路径 + * @param {string} url + * @returns + */ +export const adaptSubpackageUrl = (url) => { + /** + * 特别注意: + * 由于老版本或者后台系统服务未同步更新可以作为tabBarList的最新分包路径。历史遗留问题,需要与当前最新分包机制版本保持一致。 + * 系统当前的支持tarbarList(包含动态tabBar),注意这是实际分包后的路径 + * 根据匹配映射关系,修改url为实际分包后的路径 + */ + // 定义前缀映射表 + const urlPrefixMap = { + '/pages/goods/': '/pages_goods/', + '/pages/contact/': '/pages_tool/contact/', + '/pages/member/': '/pages_tool/member/', + '/pages/vr': '/pages_tool/vr/' + }; + + // 构建正则表达式 + const regex = new RegExp( + Object.keys(urlPrefixMap).map(key => + key.replace(/\//g, '\\/').replace(/\*/g, '.*') + ).join('|'), + 'g' + ); + + // 替换函数 + function replacePrefix(str) { + return str.replace(regex, match => { + for (const [oldPrefix, newPrefix] of Object.entries(urlPrefixMap)) { + if (match.startsWith(oldPrefix)) { + return match.replace(oldPrefix, newPrefix); + } + } + return match; // 默认返回原匹配 + }); + } + + return replacePrefix(url); +} + export default { /** * 页面跳转 @@ -15,52 +67,10 @@ export default { redirectTo(to, param, mode) { let url = to; - // 当前最新的tabBar.list (参见pages.json 中的tabBar.list 配置) - const systemTabBarList = [ - '/pages/index/index', - '/pages_goods/category', - '/pages_tool/contact/contact', - '/pages_tool/member/index' - ]; - - /** - * 特别注意: - * 由于老版本或者后台系统服务未同步更新可以作为tabBarList的最新分包路径。历史遗留问题,需要与当前最新分包机制版本保持一致。 - * 系统当前的支持tarbarList(包含动态tabBar),注意这是实际分包后的路径 - * 根据匹配映射关系,修改url为实际分包后的路径 - */ - // 定义前缀映射表 - const urlPrefixMap = { - '/pages/goods/': '/pages_goods/', - '/pages/contact/': '/pages_tool/contact/', - '/pages/member/': '/pages_tool/member/', - '/pages/vr': '/pages_tool/vr/' - }; - - // 构建正则表达式 - const regex = new RegExp( - Object.keys(urlPrefixMap).map(key => - key.replace(/\//g, '\\/').replace(/\*/g, '.*') - ).join('|'), - 'g' - ); - - // 替换函数 - function replacePrefix(str) { - return str.replace(regex, match => { - for (const [oldPrefix, newPrefix] of Object.entries(urlPrefixMap)) { - if (match.startsWith(oldPrefix)) { - return match.replace(oldPrefix, newPrefix); - } - } - return match; // 默认返回原匹配 - }); - } - - console.log('redirectTo', to, param, mode); // 替换url中的前缀 - url = replacePrefix(url); - console.log('replacePrefix', url); + console.log('redirectTo', to, param, mode); + url = adaptSubpackageUrl(url); + console.log('adaptSubpackageUrl', url); if (param != undefined) { Object.keys(param).forEach(function (key) { diff --git a/components-diy/diy-bottom-nav.vue b/components-diy/diy-bottom-nav.vue index 89490e2..863b731 100644 --- a/components-diy/diy-bottom-nav.vue +++ b/components-diy/diy-bottom-nav.vue @@ -59,6 +59,7 @@