383 lines
8.6 KiB
TypeScript
383 lines
8.6 KiB
TypeScript
import type { MockMethod } from 'vite-plugin-mock';
|
|
|
|
const routes: AuthRoute.Route[] = [
|
|
{
|
|
name: 'dashboard',
|
|
path: '/dashboard',
|
|
component: 'basic',
|
|
children: [
|
|
{
|
|
name: 'dashboard_analysis',
|
|
path: '/dashboard/analysis',
|
|
component: 'self',
|
|
meta: {
|
|
title: '分析页',
|
|
requiresAuth: true,
|
|
icon: 'icon-park-outline:analysis',
|
|
},
|
|
},
|
|
{
|
|
name: 'dashboard_workbench',
|
|
path: '/dashboard/workbench',
|
|
component: 'self',
|
|
meta: {
|
|
title: '工作台',
|
|
requiresAuth: true,
|
|
permissions: ['super', 'admin'],
|
|
icon: 'icon-park-outline:workbench',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '仪表盘',
|
|
icon: 'carbon:dashboard',
|
|
order: 1,
|
|
},
|
|
},
|
|
{
|
|
name: 'document',
|
|
path: '/document',
|
|
component: 'basic',
|
|
children: [
|
|
{
|
|
name: 'document_vue',
|
|
path: '/document/vue',
|
|
component: 'self',
|
|
meta: {
|
|
title: 'vue文档',
|
|
requiresAuth: true,
|
|
icon: 'mdi:vuejs',
|
|
},
|
|
},
|
|
{
|
|
name: 'document_vue-new',
|
|
path: '/document/vue-new',
|
|
component: 'self',
|
|
meta: {
|
|
title: 'vue文档(新版)',
|
|
requiresAuth: true,
|
|
icon: 'mdi:vuejs',
|
|
},
|
|
},
|
|
{
|
|
name: 'document_vite',
|
|
path: '/document/vite',
|
|
component: 'self',
|
|
meta: {
|
|
title: 'vite文档',
|
|
requiresAuth: true,
|
|
icon: 'simple-icons:vite',
|
|
},
|
|
},
|
|
{
|
|
name: 'document_naive',
|
|
path: '/document/naive',
|
|
component: 'self',
|
|
meta: {
|
|
title: 'naive文档',
|
|
requiresAuth: true,
|
|
icon: 'mdi:alpha-n-box-outline',
|
|
},
|
|
},
|
|
{
|
|
name: 'document_project',
|
|
path: '/document/project',
|
|
meta: {
|
|
title: '项目文档(外链)',
|
|
requiresAuth: true,
|
|
icon: 'mdi:file-link-outline',
|
|
href: 'https://docs.soybean.pro/',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '文档',
|
|
icon: 'carbon:document',
|
|
order: 2,
|
|
},
|
|
},
|
|
{
|
|
name: 'component',
|
|
path: '/component',
|
|
component: 'basic',
|
|
children: [
|
|
{
|
|
name: 'component_button',
|
|
path: '/component/button',
|
|
component: 'self',
|
|
meta: {
|
|
title: '按钮',
|
|
requiresAuth: true,
|
|
icon: 'ic:baseline-radio-button-checked',
|
|
},
|
|
},
|
|
{
|
|
name: 'component_card',
|
|
path: '/component/card',
|
|
component: 'self',
|
|
meta: {
|
|
title: '卡片',
|
|
requiresAuth: true,
|
|
icon: 'mdi:card-outline',
|
|
},
|
|
},
|
|
{
|
|
name: 'component_table',
|
|
path: '/component/table',
|
|
component: 'self',
|
|
meta: {
|
|
title: '表格',
|
|
requiresAuth: true,
|
|
icon: 'mdi:table-large',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '组件示例',
|
|
icon: 'fluent:app-store-24-regular',
|
|
order: 3,
|
|
},
|
|
},
|
|
{
|
|
name: 'plugin',
|
|
path: '/plugin',
|
|
component: 'basic',
|
|
children: [
|
|
{
|
|
name: 'plugin_map',
|
|
path: '/plugin/map',
|
|
component: 'self',
|
|
meta: {
|
|
title: '地图',
|
|
requiresAuth: true,
|
|
icon: 'mdi:map',
|
|
},
|
|
},
|
|
{
|
|
name: 'plugin_video',
|
|
path: '/plugin/video',
|
|
component: 'self',
|
|
meta: {
|
|
title: '视频',
|
|
requiresAuth: true,
|
|
icon: 'mdi:video',
|
|
},
|
|
},
|
|
{
|
|
name: 'plugin_editor',
|
|
path: '/plugin/editor',
|
|
component: 'multi',
|
|
children: [
|
|
{
|
|
name: 'plugin_editor_quill',
|
|
path: '/plugin/editor/quill',
|
|
component: 'self',
|
|
meta: {
|
|
title: '富文本编辑器',
|
|
requiresAuth: true,
|
|
icon: 'mdi:file-document-edit-outline',
|
|
},
|
|
},
|
|
{
|
|
name: 'plugin_editor_markdown',
|
|
path: '/plugin/editor/markdown',
|
|
component: 'self',
|
|
meta: {
|
|
title: 'markdown编辑器',
|
|
requiresAuth: true,
|
|
icon: 'ri:markdown-line',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '编辑器',
|
|
icon: 'icon-park-outline:editor',
|
|
},
|
|
},
|
|
{
|
|
name: 'plugin_swiper',
|
|
path: '/plugin/swiper',
|
|
component: 'self',
|
|
meta: {
|
|
title: 'Swiper插件',
|
|
requiresAuth: true,
|
|
icon: 'simple-icons:swiper',
|
|
},
|
|
},
|
|
{
|
|
name: 'plugin_copy',
|
|
path: '/plugin/copy',
|
|
component: 'self',
|
|
meta: {
|
|
title: '剪贴板',
|
|
requiresAuth: true,
|
|
icon: 'mdi:clipboard-outline',
|
|
},
|
|
},
|
|
{
|
|
name: 'plugin_icon',
|
|
path: '/plugin/icon',
|
|
component: 'self',
|
|
meta: {
|
|
title: '图标',
|
|
requiresAuth: true,
|
|
icon: 'ic:baseline-insert-emoticon',
|
|
},
|
|
},
|
|
{
|
|
name: 'plugin_print',
|
|
path: '/plugin/print',
|
|
component: 'self',
|
|
meta: {
|
|
title: '打印',
|
|
requiresAuth: true,
|
|
icon: 'ic:baseline-local-printshop',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '插件示例',
|
|
icon: 'clarity:plugin-line',
|
|
order: 4,
|
|
},
|
|
},
|
|
{
|
|
name: 'exception',
|
|
path: '/exception',
|
|
component: 'basic',
|
|
children: [
|
|
{
|
|
name: 'exception_403',
|
|
path: '/exception/403',
|
|
component: 'self',
|
|
meta: {
|
|
title: '异常页403',
|
|
requiresAuth: true,
|
|
icon: 'ic:baseline-block',
|
|
},
|
|
},
|
|
{
|
|
name: 'exception_404',
|
|
path: '/exception/404',
|
|
component: 'self',
|
|
meta: {
|
|
title: '异常页404',
|
|
requiresAuth: true,
|
|
icon: 'ic:baseline-web-asset-off',
|
|
},
|
|
},
|
|
{
|
|
name: 'exception_500',
|
|
path: '/exception/500',
|
|
component: 'self',
|
|
meta: {
|
|
title: '异常页500',
|
|
requiresAuth: true,
|
|
icon: 'ic:baseline-wifi-off',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '异常页',
|
|
icon: 'ant-design:exception-outlined',
|
|
order: 5,
|
|
},
|
|
},
|
|
{
|
|
name: 'multi-menu',
|
|
path: '/multi-menu',
|
|
component: 'basic',
|
|
children: [
|
|
{
|
|
name: 'multi-menu_first',
|
|
path: '/multi-menu/first',
|
|
component: 'multi',
|
|
children: [
|
|
{
|
|
name: 'multi-menu_first_second',
|
|
path: '/multi-menu/first/second',
|
|
component: 'self',
|
|
meta: {
|
|
title: '二级菜单',
|
|
requiresAuth: true,
|
|
icon: 'ic:outline-menu',
|
|
},
|
|
},
|
|
{
|
|
name: 'multi-menu_first_second-new',
|
|
path: '/multi-menu/first/second-new',
|
|
component: 'multi',
|
|
children: [
|
|
{
|
|
name: 'multi-menu_first_second-new_third',
|
|
path: '/multi-menu/first/second-new/third',
|
|
component: 'self',
|
|
meta: {
|
|
title: '三级菜单',
|
|
requiresAuth: true,
|
|
icon: 'ic:outline-menu',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '二级菜单(有子菜单)',
|
|
icon: 'ic:outline-menu',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '一级菜单',
|
|
icon: 'ic:outline-menu',
|
|
},
|
|
},
|
|
],
|
|
meta: {
|
|
title: '多级菜单',
|
|
icon: 'carbon:menu',
|
|
order: 6,
|
|
},
|
|
},
|
|
{
|
|
name: 'about',
|
|
path: '/about',
|
|
component: 'self',
|
|
meta: {
|
|
title: '关于',
|
|
requiresAuth: true,
|
|
singleLayout: 'basic',
|
|
permissions: ['super', 'admin', 'test'],
|
|
icon: 'fluent:book-information-24-regular',
|
|
order: 7,
|
|
},
|
|
},
|
|
];
|
|
|
|
function dataMiddleware(data: AuthRoute.Route[]): ApiRoute.Route {
|
|
const routeHomeName: AuthRoute.RouteKey = 'dashboard_analysis';
|
|
|
|
function sortRoutes(sorts: AuthRoute.Route[]) {
|
|
return sorts.sort((next, pre) => Number(next.meta?.order) - Number(pre.meta?.order));
|
|
}
|
|
|
|
return {
|
|
routes: sortRoutes(data),
|
|
home: routeHomeName,
|
|
};
|
|
}
|
|
|
|
const apis: MockMethod[] = [
|
|
{
|
|
url: '/mock/getUserRoutes',
|
|
method: 'post',
|
|
response: (): Service.MockServiceResult => {
|
|
return {
|
|
code: 200,
|
|
message: 'ok',
|
|
data: dataMiddleware(routes),
|
|
};
|
|
},
|
|
},
|
|
];
|
|
|
|
export default apis;
|