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 { defineComponent } from 'vue';
import { RouteMeta } from '@/types/interface';
export interface MenuListResult { export interface MenuListResult {
list: Array<RouteItem>; list: Array<RouteItem>;
} }
@ -18,15 +20,3 @@ export interface RouteItem {
meta: RouteMeta; meta: RouteMeta;
children?: Array<RouteItem>; 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 { computed } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { useLocale } from '@/locales/useLocale';
import { RouteMeta } from '@/types/interface';
const { locale } = useLocale();
const crumbs = computed(() => { const crumbs = computed(() => {
const route = useRoute(); const route = useRoute();
@ -18,14 +23,22 @@ const crumbs = computed(() => {
const breadcrumbs = pathArray.reduce((breadcrumbArray, path, idx) => { const breadcrumbs = pathArray.reduce((breadcrumbArray, path, idx) => {
// hiddenBreadcrumb // 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; return breadcrumbArray;
} }
let title = path;
if (meta?.title) {
if (typeof meta.title === 'string') {
title = meta.title;
} else {
title = meta.title[locale.value];
}
}
breadcrumbArray.push({ breadcrumbArray.push({
path, path,
to: breadcrumbArray[idx - 1] ? `/${breadcrumbArray[idx - 1].path}/${path}` : `/${path}`, to: breadcrumbArray[idx - 1] ? `/${breadcrumbArray[idx - 1].path}/${path}` : `/${path}`,
title: route.matched[idx]?.meta?.title ?? path, title,
}); });
return breadcrumbArray; return breadcrumbArray;
}, []); }, []);

View File

@ -3,9 +3,22 @@ import { LocationQueryRaw, RouteRecordName } from 'vue-router';
import STYLE_CONFIG from '@/config/style'; 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 { export interface MenuRoute {
path: string; path: string;
title?: string; title?: string | Record<string, string>;
name?: string; name?: string;
icon?: icon?:
| string | string
@ -14,7 +27,7 @@ export interface MenuRoute {
}; };
redirect?: string; redirect?: string;
children: MenuRoute[]; children: MenuRoute[];
meta: any; meta: RouteMeta;
} }
export type ModeType = 'dark' | 'light'; export type ModeType = 'dark' | 'light';

View File

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