diff --git a/manager/src/libs/lazyLoading.js b/manager/src/libs/lazyLoading.js index 8f3e11b0..499ef52f 100644 --- a/manager/src/libs/lazyLoading.js +++ b/manager/src/libs/lazyLoading.js @@ -1,9 +1,7 @@ const viewContext = require.context("@/views", true, /\.vue$/); /** 后端菜单 frontRoute 与前端实际路径不一致时的映射 */ -const VIEW_ALIASES = { - "live/list": "promotions/live/live", -}; +const VIEW_ALIASES = {}; function resolveViewPath(url) { return VIEW_ALIASES[url] || url; diff --git a/manager/src/libs/util.js b/manager/src/libs/util.js index d5998aa2..4d13a881 100644 --- a/manager/src/libs/util.js +++ b/manager/src/libs/util.js @@ -7,6 +7,30 @@ let util = {}; /** 动态菜单路由 name,用于登出或重新注册时清理 */ util.dynamicRouteNames = []; +util.normalizeRoutePath = function (path) { + return String(path || "") + .replace(/^\/+/, "") + .replace(/\/+$/, ""); +}; + +util.isSameRoutePage = function (a, b) { + if (!a || !b) return false; + if (a.name && b.name && a.name === b.name) return true; + const pathA = util.normalizeRoutePath(a.path); + const pathB = util.normalizeRoutePath(b.path); + return !!(pathA && pathB && pathA === pathB); +}; + +util.findOpenedPageIndex = function (pageOpenedList, name, path) { + const normalizedPath = util.normalizeRoutePath(path); + return pageOpenedList.findIndex( + (item) => + item.name === name || + (normalizedPath && + util.normalizeRoutePath(item.path) === normalizedPath) + ); +}; + util.clearDynamicRoutes = function () { const router = getRouter(); if (!router) return; @@ -75,16 +99,17 @@ util.registerDynamicRoutes = function (menuData, options = {}) { }); leaves.forEach((leaf) => { - const path = (leaf.path || leaf.name || "").replace(/^\//, ""); - if (!router.hasRoute(leaf.name)) { - router.addRoute("otherRouter", { - path, - name: leaf.name, - component: leaf.component, - meta: leaf.meta, - }); - util.dynamicRouteNames.push(leaf.name); + const path = util.normalizeRoutePath(leaf.path || leaf.name); + if (router.hasRoute(leaf.name)) { + return; } + router.addRoute("otherRouter", { + path, + name: leaf.name, + component: leaf.component, + meta: leaf.meta, + }); + util.dynamicRouteNames.push(leaf.name); }); if (!router.hasRoute("error-404")) { @@ -147,41 +172,43 @@ util.openNewPage = function(vm, name, argu, query) { return; } let pageOpenedList = vm.$store.state.app.pageOpenedList; - let openedPageLen = pageOpenedList.length; - let i = 0; - let tagHasOpened = false; - while (i < openedPageLen) { - if (name == pageOpenedList[i].name) { - // 页面已经打开 - vm.$store.commit("pageOpenedList", { - index: i, - argu: argu, - query: query - }); - tagHasOpened = true; - break; - } - i++; - } - if (!tagHasOpened) { - let tag = vm.$store.state.app.tagsList.filter(item => { - if (item.children) { - return name == item.children[0].name; - } else { - return name == item.name; - } + const currentPath = vm.$route ? vm.$route.path : ""; + const openedIndex = util.findOpenedPageIndex(pageOpenedList, name, currentPath); + if (openedIndex >= 0) { + vm.$store.commit("pageOpenedList", { + index: openedIndex, + argu: argu, + query: query }); - tag = tag[0]; - if (tag) { - tag = tag.children ? tag.children[0] : tag; - if (argu) { - tag.argu = argu; - } - if (query) { - tag.query = query; - } - vm.$store.commit("increateTag", tag); + return; + } + let tag = vm.$store.state.app.tagsList.filter(item => { + if (item.children) { + return name == item.children[0].name; + } else { + return name == item.name; } + }); + tag = tag[0]; + if (!tag) { + tag = vm.$store.state.app.tagsList.find((item) => { + const candidate = item.children ? item.children[0] : item; + return util.isSameRoutePage(candidate, { name, path: currentPath }); + }); + if (tag && tag.children) { + tag = tag.children[0]; + } + } + if (tag) { + tag = tag.children ? tag.children[0] : tag; + const tagObj = { ...tag, name: name || tag.name }; + if (argu) { + tagObj.argu = argu; + } + if (query) { + tagObj.query = query; + } + vm.$store.commit("increateTag", tagObj); } }; diff --git a/manager/src/router/router.js b/manager/src/router/router.js index 7a03db7c..0546e218 100644 --- a/manager/src/router/router.js +++ b/manager/src/router/router.js @@ -355,12 +355,6 @@ export const otherRouter = { name: "add-sms-sign", component: () => import("@/views/sys/message/smsSign.vue") }, - { - path: "live-list", - title: "直播管理", - name: "live-list", - component: () => import("@/views/live/list.vue") - }, { path: "live-add", title: "创建直播", diff --git a/manager/src/views/Main.vue b/manager/src/views/Main.vue index 19c6c4b8..052964f9 100644 --- a/manager/src/views/Main.vue +++ b/manager/src/views/Main.vue @@ -159,7 +159,11 @@ export default { } }, checkTag(name) { - const openpageHasTag = this.pageTagsList.some((item) => item.name == name); + const openpageHasTag = util.findOpenedPageIndex( + this.pageTagsList, + name, + this.$route.path + ) >= 0; if (!openpageHasTag) { util.openNewPage( this, diff --git a/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue b/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue index f7299dc4..8788834e 100644 --- a/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue +++ b/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue @@ -10,9 +10,9 @@