feat: 优化菜单项,添加路由名称和标题支持,更新首页元信息
This commit is contained in:
@ -4,13 +4,15 @@ import type { MenuItem } from 'primevue/menuitem';
|
||||
|
||||
const router = useRouter();
|
||||
|
||||
type MenuItemWithRoute = MenuItem & { routeName?: string };
|
||||
const menuItems = computed(() => {
|
||||
let flatArray: MenuItem[] = createGetRoutes(router)()
|
||||
let flatArray: MenuItemWithRoute[] = createGetRoutes(router)()
|
||||
.filter((route) => !route.path.includes('/:'))
|
||||
.filter((route) => !route.meta.hidden)
|
||||
.map((route) => ({
|
||||
id: route.path,
|
||||
label: `${(route.name as string) || route.path}`,
|
||||
label: route.meta.title || `${(route.name as string) || route.path}`,
|
||||
routeName: route.name as string,
|
||||
}));
|
||||
|
||||
flatArray = flatArray.map((item, index) => {
|
||||
@ -52,13 +54,13 @@ const menuItems = computed(() => {
|
||||
const tree = arrayToTree(flatArray.concat(groupItems), { id: 'id', parentId: 'parentId', rootId: '_ROOT_' });
|
||||
|
||||
// 递归把 children 改为 items
|
||||
function _convertChildrenToItems(tree: MenuItem[]): MenuItem[] {
|
||||
function _convertChildrenToItems(tree: MenuItemWithRoute[]) {
|
||||
return tree.map((item) => {
|
||||
if (item.children.length) {
|
||||
item.items = _convertChildrenToItems(item.children);
|
||||
} else {
|
||||
item.command = (event) => {
|
||||
router.push({ name: item.label as never });
|
||||
router.push({ name: item.routeName as never });
|
||||
};
|
||||
}
|
||||
delete item.children;
|
||||
|
@ -1,7 +1,7 @@
|
||||
<script setup lang="tsx">
|
||||
const VITE_BUILD_COMMIT = import.meta.env.VITE_BUILD_COMMIT;
|
||||
import { routes } from 'vue-router/auto-routes';
|
||||
|
||||
definePage({ meta: { title: '首页' } });
|
||||
useHead({
|
||||
// Titles
|
||||
title: 'Hello World',
|
||||
|
@ -46,5 +46,9 @@ declare module 'vue-router' {
|
||||
* @description 是否在菜单中隐藏
|
||||
*/
|
||||
hidden?: boolean;
|
||||
/**
|
||||
* @description 菜单标题
|
||||
*/
|
||||
title?: string;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user