| | |
| | | <template> |
| | | <div :class="[prefixCls, `${prefixCls}--${theme}`]"> |
| | | <a-breadcrumb :routes="routes"> |
| | | <template #itemRender="{ route, routes, paths }"> |
| | | <template #itemRender="{ route, routes: routesMatched, paths }"> |
| | | <Icon :icon="getIcon(route)" v-if="getShowBreadCrumbIcon && getIcon(route)" /> |
| | | <span v-if="!hasRedirect(routes, route)"> |
| | | <span v-if="!hasRedirect(routesMatched, route)"> |
| | | {{ t(route.name || route.meta.title) }} |
| | | </span> |
| | | <router-link v-else to="" @click="handleClick(route, paths, $event)"> |
| | |
| | | </template> |
| | | <script lang="ts"> |
| | | import type { RouteLocationMatched } from 'vue-router'; |
| | | import { useRouter } from 'vue-router'; |
| | | import type { Menu } from '/@/router/types'; |
| | | |
| | | import { defineComponent, ref, watchEffect } from 'vue'; |
| | |
| | | import { useRootSetting } from '/@/hooks/setting/useRootSetting'; |
| | | import { useGo } from '/@/hooks/web/usePage'; |
| | | import { useI18n } from '/@/hooks/web/useI18n'; |
| | | import { useRouter } from 'vue-router'; |
| | | |
| | | import { propTypes } from '/@/utils/propTypes'; |
| | | import { isString } from '/@/utils/is'; |
| | |
| | | } |
| | | |
| | | function filterItem(list: RouteLocationMatched[]) { |
| | | let resultList = filter(list, (item) => { |
| | | return filter(list, (item) => { |
| | | const { meta, name } = item; |
| | | if (!meta) { |
| | | return !!name; |
| | |
| | | } |
| | | return true; |
| | | }).filter((item) => !item.meta?.hideBreadcrumb || !item.meta?.hideMenu); |
| | | |
| | | return resultList; |
| | | } |
| | | |
| | | function handleClick(route: RouteLocationMatched, paths: string[], e: Event) { |
| | |
| | | } |
| | | |
| | | function hasRedirect(routes: RouteLocationMatched[], route: RouteLocationMatched) { |
| | | if (routes.indexOf(route) === routes.length - 1) { |
| | | return false; |
| | | } |
| | | return true; |
| | | return routes.indexOf(route) !== routes.length - 1; |
| | | } |
| | | |
| | | function getIcon(route) { |