--- title: 路由定义 description: 通过插件为 Console 控制台和 UC 个人中心添加新路由 --- Halo 为插件提供了为 Console 控制台和 UC 个人中心添加新路由的入口,可以用于为插件单独提供一个页面。 此文档将介绍如何定义路由以及侧边菜单项。 ## 定义方式 Console 控制台和 UC 个人中心的路由定义基本和 Vue Router 官方的保持一致,为了区分 Console 控制台和 UC 个人中心的路由,Halo 为插件提供了两个不同的路由定义入口。 - `routes`:Console 控制台路由定义 - `ucRoutes`:UC 个人中心路由定义 ```ts import HomeView from "./views/HomeView.vue" import { IconComputer } from "@halo-dev/components"; export default definePlugin({ routes: [ // Console 控制台路由定义 { parentName: "Root", route: { path: "/foo", name: "Foo", component: HomeView, meta: { permissions: [""], menu: { name: "Foo", group: "content", icon: markRaw(IconComputer), priority: 40 }, }, }, }, ], ucRoutes: [ // UC 个人中心路由定义 { parentName: "Root", route: { path: "/uc-foo", name: "FooUC", component: HomeView, meta: { permissions: [""], menu: { name: "FooUC", group: "content", icon: markRaw(IconComputer), priority: 40 }, }, }, }, ] }); ``` ## 类型定义 ```ts { routes?: RouteRecordRaw[] | RouteRecordAppend[]; ucRoutes?: RouteRecordRaw[] | RouteRecordAppend[]; } ``` ```ts export interface RouteRecordAppend { parentName: RouteRecordName; route: RouteRecordRaw; } ``` - `parentName`:父路由名称,主要用于确认页面 Layout,如果想要添加到顶级路由,可以设置为 `Root`。如果不需要设置父路由,可以完全使用 `RouteRecordRaw` 定义。此外,如果同时设置了 `parentName` 以及其下路由设置了 `meta.menu`,那么此路由的菜单项将成为父菜单的子菜单项,可支持的父路由名称如下: - Console: - `AttachmentsRoot`(附件) - `CommentsRoot`(评论) - `SinglePagesRoot`(页面) - `PostsRoot`(文章) - `MenusRoot`(菜单) - `ThemeRoot`(主题) - `OverviewRoot`(概览) - `BackupRoot`(备份) - `PluginsRoot`(插件) - `SettingsRoot`(设置) - `UsersRoot`(用户) - `ToolsRoot`(工具) - UC: - `PostsRoot`(文章) - `NotificationsRoot`(消息) :::info 提示 `RouteRecordRaw` 来自 Vue Router,详见 [API 文档 | Vue Router](https://router.vuejs.org/zh/api/#Type-Aliases-RouteRecordRaw) ::: 此外,为了方便插件在 Console 控制台和 UC 个人中心添加菜单项等操作,Halo 为 `RouteRecordRaw` 添加了 `meta` 属性,该属性为 `RouteMeta` 类型,定义如下: ```ts interface RouteMeta { title?: string; // 浏览器标题 searchable?: boolean; // 是否可以在 Console 的全局搜索中搜索到 permissions?: string[]; // UI 权限 menu?: { // 侧边菜单配置 name: string; // 菜单名称 group?: CoreMenuGroupId; // 内置菜单分组 ID,如果不使用内置的分组,也可以直接填写分组名称 icon?: Component; // 菜单图标,类型为 Vue 组件,推荐使用 https://github.com/unplugin/unplugin-icons priority: number; // 菜单项排序,数字越小越靠前 mobile?: boolean; // 是否在移动端显示 }; } ``` ```ts export type CoreMenuGroupId = "dashboard" | "content" | "interface" | "system" | "tool"; ```