From e0dc5cf2f299fd4c1efdf4f00b9f0f72f07d5937 Mon Sep 17 00:00:00 2001 From: Vben Date: Sun, 7 Mar 2021 23:18:33 +0800 Subject: [PATCH] fix(breadcrumb): ensure that the single-level breadcrumbs jump correctly close #321 --- CHANGELOG.zh_CN.md | 1 + .../default/header/components/Breadcrumb.vue | 51 +++++++++++++------ src/main.ts | 2 +- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 09da9430..4e0a131f 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -21,6 +21,7 @@ - 修复树组件 demo 示例样式错误 - 修复账号管理新增未清空旧数据 - form 组件应允许 setFieldsValue 方法值为 null 或者 undefined +- 确保单级面包屑正确跳转 ## 2.0.2 (2021-03-04) diff --git a/src/layouts/default/header/components/Breadcrumb.vue b/src/layouts/default/header/components/Breadcrumb.vue index 30e8a5ae..6ec6480e 100644 --- a/src/layouts/default/header/components/Breadcrumb.vue +++ b/src/layouts/default/header/components/Breadcrumb.vue @@ -72,10 +72,25 @@ if (currentRoute.value.meta?.currentActiveMenu) { filterBreadcrumbList.push((currentRoute.value as unknown) as RouteLocationMatched); } - // routes.value = filterBreadcrumbList.length === 1 ? [] : filterBreadcrumbList; - routes.value = filterBreadcrumbList; + routes.value = subRouteExtraction(filterBreadcrumbList); }); + function subRouteExtraction(routeList: RouteLocationMatched[]) { + const resultRoutes: RouteLocationMatched[] = []; + routeList.forEach((route) => { + if (route.children?.length === 1) { + const subRoute = route.children[0] as RouteLocationMatched; + const subRouteName = subRoute.name as string; + const routeName = route.name; + if (subRouteName && `${subRouteName}Parent` === routeName) { + route = subRoute; + } + } + resultRoutes.push(route); + }); + return resultRoutes; + } + function filterItem(list: RouteLocationMatched[]) { let resultList = filter(list, (item) => { const { meta } = item; @@ -83,15 +98,14 @@ if (!meta) { return false; } + const { title, hideBreadcrumb, hideMenu } = meta; if (!title || hideBreadcrumb || hideMenu) { return false; } - return true; }).filter((item) => !item.meta?.hideBreadcrumb || !item.meta?.hideMenu); - // resultList = resultList.filter((item) => item.path !== PageEnum.BASE_HOME); return resultList; } @@ -101,7 +115,8 @@ children, redirect, meta, - // components + + // components } = route; // const isParent = @@ -123,23 +138,29 @@ if (redirect && isString(redirect)) { go(redirect); } else { - const ps = paths.slice(1); - const lastPath = ps.pop() || ''; - const parentPath = ps.pop() || ''; - let path = `${parentPath}/${lastPath}`; - path = /^\//.test(path) ? path : `/${path}`; - go(path); + let goPath = ''; + if (paths.length === 1) { + goPath = paths[0]; + } else { + const ps = paths.slice(1); + const lastPath = ps.pop() || ''; + const parentPath = ps.pop() || ''; + goPath = `${parentPath}/${lastPath}`; + } + goPath = /^\//.test(goPath) ? goPath : `/${goPath}`; + go(goPath); } } function hasRedirect(routes: RouteLocationMatched[], route: RouteLocationMatched) { - if (route?.meta?.isLink) { - return true; - } - if (routes.indexOf(route) === routes.length - 1) { return false; } + + // if (route?.meta?.isLink) { + // return true; + // } + return true; } diff --git a/src/main.ts b/src/main.ts index 49c9e36b..198e55ab 100644 --- a/src/main.ts +++ b/src/main.ts @@ -51,7 +51,7 @@ import { isDevMode } from '/@/utils/env'; // The development environment takes effect if (isDevMode()) { - app.config.performance = true; + // app.config.performance = true; window.__APP__ = app; } })(); -- GitLab