fix: breadcrumb i18n (#614)

* fix: breadcrumb  i18n

* fix: 还原MenuRoute.title 类型

* Revert "fix: 还原MenuRoute.title 类型"

This reverts commit 5ae1e49737.
This commit is contained in:
liweijie0812 2023-10-08 18:52:46 +08:00 committed by GitHub
parent c62c0deb74
commit 0fdb30282c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 18 deletions

View File

@ -1,5 +1,7 @@
import { defineComponent } from 'vue';
import { RouteMeta } from '@/types/interface';
export interface MenuListResult {
list: Array<RouteItem>;
}
@ -18,15 +20,3 @@ export interface RouteItem {
meta: RouteMeta;
children?: Array<RouteItem>;
}
export interface RouteMeta {
title: string;
icon?: string;
expanded?: boolean;
orderNo?: number;
hidden?: boolean;
hiddenBreadcrumb?: boolean;
single?: boolean;
keepAlive?: boolean;
frameSrc?: string;
frameBlank?: boolean;
}

View File

@ -10,6 +10,11 @@
import { computed } from 'vue';
import { useRoute } from 'vue-router';
import { useLocale } from '@/locales/useLocale';
import { RouteMeta } from '@/types/interface';
const { locale } = useLocale();
const crumbs = computed(() => {
const route = useRoute();
@ -18,14 +23,22 @@ const crumbs = computed(() => {
const breadcrumbs = pathArray.reduce((breadcrumbArray, path, idx) => {
// hiddenBreadcrumb
if (route.matched[idx]?.meta?.hiddenBreadcrumb || Object.values(route.params).includes(path)) {
const meta = route.matched[idx]?.meta as RouteMeta;
if (meta?.hiddenBreadcrumb || Object.values(route.params).includes(path)) {
return breadcrumbArray;
}
let title = path;
if (meta?.title) {
if (typeof meta.title === 'string') {
title = meta.title;
} else {
title = meta.title[locale.value];
}
}
breadcrumbArray.push({
path,
to: breadcrumbArray[idx - 1] ? `/${breadcrumbArray[idx - 1].path}/${path}` : `/${path}`,
title: route.matched[idx]?.meta?.title ?? path,
title,
});
return breadcrumbArray;
}, []);

View File

@ -3,9 +3,22 @@ import { LocationQueryRaw, RouteRecordName } from 'vue-router';
import STYLE_CONFIG from '@/config/style';
export interface RouteMeta {
title?: string | Record<string, string>;
icon?: string;
expanded?: boolean;
orderNo?: number;
hidden?: boolean;
hiddenBreadcrumb?: boolean;
single?: boolean;
keepAlive?: boolean;
frameSrc?: string;
frameBlank?: boolean;
}
export interface MenuRoute {
path: string;
title?: string;
title?: string | Record<string, string>;
name?: string;
icon?:
| string
@ -14,7 +27,7 @@ export interface MenuRoute {
};
redirect?: string;
children: MenuRoute[];
meta: any;
meta: RouteMeta;
}
export type ModeType = 'dark' | 'light';

View File

@ -1,7 +1,8 @@
import cloneDeep from 'lodash/cloneDeep';
import { shallowRef } from 'vue';
import { RouteItem, RouteMeta } from '@/api/model/permissionModel';
import { RouteItem } from '@/api/model/permissionModel';
import { RouteMeta } from '@/types/interface';
import {
BLANK_LAYOUT,
EXCEPTION_COMPONENT,