From 36634f2b151664101265f34b35bb47e5be2a020e Mon Sep 17 00:00:00 2001
From: Hooray <304327508@qq.com>
Date: Mon, 6 Apr 2026 01:28:16 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=90=8E=E7=AB=AF?=
=?UTF-8?q?=E8=BF=94=E5=9B=9E=E8=B7=AF=E7=94=B1=E9=A1=B5=E9=9D=A2=E6=97=A0?=
=?UTF-8?q?=E6=B3=95=E6=AD=A3=E5=B8=B8=E6=98=BE=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/core/src/api/modules/app.fake.ts | 178 +-----------------
.../router/modules/multilevel.menu.example.ts | 69 +++++++
apps/core/src/router/routes.ts | 13 +-
apps/core/src/store/modules/app/route.ts | 4 +-
.../level2/level3/page1.vue | 10 +
.../level2/level3/page2.vue | 10 +
.../multilevel_menu_example/level2/page.vue | 10 +
.../views/multilevel_menu_example/page.vue | 10 +
apps/example/src/api/modules/app.fake.ts | 119 +-----------
.../src/api/modules/standardModule.fake.ts | 86 ---------
.../example/src/api/modules/standardModule.ts | 33 ----
.../router/modules/multilevel.menu.example.ts | 2 +-
apps/example/src/store/modules/app/route.ts | 4 +-
apps/example/src/views/auth_example/index.vue | 2 +-
14 files changed, 139 insertions(+), 411 deletions(-)
create mode 100755 apps/core/src/router/modules/multilevel.menu.example.ts
create mode 100755 apps/core/src/views/multilevel_menu_example/level2/level3/page1.vue
create mode 100755 apps/core/src/views/multilevel_menu_example/level2/level3/page2.vue
create mode 100755 apps/core/src/views/multilevel_menu_example/level2/page.vue
create mode 100755 apps/core/src/views/multilevel_menu_example/page.vue
delete mode 100755 apps/example/src/api/modules/standardModule.fake.ts
delete mode 100755 apps/example/src/api/modules/standardModule.ts
diff --git a/apps/core/src/api/modules/app.fake.ts b/apps/core/src/api/modules/app.fake.ts
index b9fae1cc..5e5f582d 100755
--- a/apps/core/src/api/modules/app.fake.ts
+++ b/apps/core/src/api/modules/app.fake.ts
@@ -23,7 +23,7 @@ export default defineFakeRoute([
component: 'Layout',
name: 'multilevelMenuExample',
meta: {
- title: 'route.multimenu.root',
+ title: '多级导航',
icon: 'heroicons-solid:menu-alt-3',
},
children: [
@@ -33,14 +33,14 @@ export default defineFakeRoute([
name: 'multilevelMenuExample1',
component: 'multilevel_menu_example/page.vue',
meta: {
- title: 'route.multimenu.page',
+ title: '导航1',
},
},
{
path: 'level2',
name: 'multilevelMenuExample2',
meta: {
- title: 'route.multimenu.level2.root',
+ title: '导航2',
},
children: [
// 次导航(三级路由)
@@ -49,14 +49,14 @@ export default defineFakeRoute([
name: 'multilevelMenuExample2-1',
component: 'multilevel_menu_example/level2/page.vue',
meta: {
- title: 'route.multimenu.level2.page',
+ title: '导航2-1',
},
},
{
path: 'level3',
name: 'multilevelMenuExample2-2',
meta: {
- title: 'route.multimenu.level2.level3.root',
+ title: '导航2-2',
},
children: [
// 次导航(四级路由)
@@ -65,172 +65,13 @@ export default defineFakeRoute([
name: 'multilevelMenuExample2-2-1',
component: 'multilevel_menu_example/level2/level3/page1.vue',
meta: {
- title: 'route.multimenu.level2.level3.page1',
+ title: '导航2-2-1',
},
},
{
path: 'page2',
name: 'multilevelMenuExample2-2-2',
component: 'multilevel_menu_example/level2/level3/page2.vue',
- meta: {
- title: 'route.multimenu.level2.level3.page2',
- },
- },
- ],
- },
- ],
- },
- ],
- },
- {
- path: '/permission_example',
- component: 'Layout',
- name: 'permissionExample',
- meta: {
- title: 'route.permission',
- icon: 'ri:shield-keyhole-line',
- },
- children: [
- {
- path: 'index',
- name: 'permissionExampleIndex',
- component: 'permission_example/index.vue',
- meta: {
- title: 'route.permission',
- menu: false,
- breadcrumb: false,
- activeMenu: '/permission_example',
- },
- },
- {
- path: 'test',
- name: 'permissionExampleTest',
- component: 'permission_example/test.vue',
- meta: {
- title: '测试页面',
- auth: ['permission.browse'],
- menu: false,
- breadcrumb: false,
- activeMenu: '/permission_example',
- },
- },
- ],
- },
- ],
- },
- {
- meta: {
- title: '页面',
- icon: 'ri:pages-line',
- auth: 'permission.browse',
- },
- children: [
- {
- path: '/pages_example/general',
- component: 'Layout',
- name: 'pagesExampleGeneral',
- meta: {
- title: '通用',
- icon: 'ri:function-line',
- },
- children: [
- {
- path: 'manager',
- name: 'pagesExampleGeneralManager',
- meta: {
- title: '管理员管理',
- },
- children: [
- {
- path: '',
- name: 'pagesExampleGeneralManagerList',
- component: 'pages_example/manager/list.vue',
- meta: {
- title: '管理员列表',
- menu: false,
- breadcrumb: false,
- },
- },
- {
- path: 'detail',
- name: 'pagesExampleGeneralManagerCreate',
- component: 'pages_example/manager/detail.vue',
- meta: {
- title: '新增管理员',
- menu: false,
- activeMenu: '/pages_example/general/manager',
- },
- },
- {
- path: 'detail/:id',
- name: 'pagesExampleGeneralManagerEdit',
- component: 'pages_example/manager/detail.vue',
- meta: {
- title: '编辑管理员',
- menu: false,
- activeMenu: '/pages_example/general/manager',
- },
- },
- ],
- },
- ],
- },
- ],
- },
- ],
- }
- },
- },
- {
- url: '/fake/app/menu/list',
- method: 'get',
- response: () => {
- return {
- error: '',
- status: 1,
- data: [
- {
- meta: {
- title: '演示',
- icon: 'uim:box',
- },
- children: [
- {
- meta: {
- title: '多级导航',
- icon: 'heroicons-solid:menu-alt-3',
- },
- children: [
- {
- path: '/multilevel_menu_example/page',
- meta: {
- title: '导航1',
- },
- },
- {
- meta: {
- title: '导航2',
- },
- children: [
- {
- path: '/multilevel_menu_example/level2/page',
- meta: {
- title: '导航2-1',
- },
- },
- {
- meta: {
- title: '导航2-2',
- },
- children: [
- {
- path: '/multilevel_menu_example/level2/level3/page1',
- meta: {
- title: '导航2-2-1',
- },
- },
- {
- path: '/multilevel_menu_example/level2/level3/page2',
meta: {
title: '导航2-2-2',
},
@@ -241,13 +82,6 @@ export default defineFakeRoute([
},
],
},
- {
- path: '/permission_example',
- meta: {
- title: '权限验证',
- icon: 'ri:shield-keyhole-line',
- },
- },
],
},
],
diff --git a/apps/core/src/router/modules/multilevel.menu.example.ts b/apps/core/src/router/modules/multilevel.menu.example.ts
new file mode 100755
index 00000000..a82aba7c
--- /dev/null
+++ b/apps/core/src/router/modules/multilevel.menu.example.ts
@@ -0,0 +1,69 @@
+import type { RouteRecordRaw } from 'vue-router'
+
+function Layout() {
+ return import('@/layouts/index.vue')
+}
+
+const routes: RouteRecordRaw = {
+ path: '/multilevel_menu_example',
+ component: Layout,
+ name: 'multilevelMenuExample',
+ meta: {
+ title: '多级导航',
+ icon: 'i-heroicons-solid:menu-alt-3',
+ },
+ children: [
+ {
+ path: 'page',
+ name: 'multilevelMenuExample1',
+ component: () => import('@/views/multilevel_menu_example/page.vue'),
+ meta: {
+ title: '导航1',
+ },
+ },
+ {
+ path: 'level2',
+ name: 'multilevelMenuExample2',
+ meta: {
+ title: '导航2',
+ },
+ children: [
+ {
+ path: 'page',
+ name: 'multilevelMenuExample2-1',
+ component: () => import('@/views/multilevel_menu_example/level2/page.vue'),
+ meta: {
+ title: '导航2-1',
+ },
+ },
+ {
+ path: 'level3',
+ name: 'multilevelMenuExample2-2',
+ meta: {
+ title: '导航2-2',
+ },
+ children: [
+ {
+ path: 'page1',
+ name: 'multilevelMenuExample2-2-1',
+ component: () => import('@/views/multilevel_menu_example/level2/level3/page1.vue'),
+ meta: {
+ title: '导航2-2-1',
+ },
+ },
+ {
+ path: 'page2',
+ name: 'multilevelMenuExample2-2-2',
+ component: () => import('@/views/multilevel_menu_example/level2/level3/page2.vue'),
+ meta: {
+ title: '导航2-2-2',
+ },
+ },
+ ],
+ },
+ ],
+ },
+ ],
+}
+
+export default routes
diff --git a/apps/core/src/router/routes.ts b/apps/core/src/router/routes.ts
index 4ea2e7db..824b4c26 100755
--- a/apps/core/src/router/routes.ts
+++ b/apps/core/src/router/routes.ts
@@ -1,6 +1,7 @@
import type { RouteRecordMainRaw } from '@fantastic-admin/types'
import type { RouteRecordRaw } from 'vue-router'
import pinia from '@/store'
+import MultilevelMenuExample from './modules/multilevel.menu.example'
// 固定路由(默认路由)
const constantRoutes: RouteRecordRaw[] = [
@@ -54,7 +55,17 @@ const systemRoutes: RouteRecordRaw[] = [
]
// 动态路由(异步路由、导航菜单路由)
-const asyncRoutes: RouteRecordMainRaw[] = []
+const asyncRoutes: RouteRecordMainRaw[] = [
+ {
+ meta: {
+ title: '演示',
+ icon: 'i-ri:function-ai-line',
+ },
+ children: [
+ MultilevelMenuExample,
+ ],
+ },
+]
export {
asyncRoutes,
diff --git a/apps/core/src/store/modules/app/route.ts b/apps/core/src/store/modules/app/route.ts
index 169f18a0..021493ec 100755
--- a/apps/core/src/store/modules/app/route.ts
+++ b/apps/core/src/store/modules/app/route.ts
@@ -97,7 +97,7 @@ export const useAppRouteStore = defineStore(
isGenerate.value = true
}
// 格式化后端路由数据
- function formatBackRoutes(routes: any, views = import.meta.glob('../../views/**/*.vue')): RouteRecordMainRaw[] {
+ function formatBackRoutes(routes: any, views = import.meta.glob('@/views/**/*.vue')): RouteRecordMainRaw[] {
return routes.map((route: any) => {
switch (route.component) {
case 'Layout':
@@ -105,7 +105,7 @@ export const useAppRouteStore = defineStore(
break
default:
if (route.component) {
- route.component = views[`../../views/${route.component}`]
+ route.component = views[`/src/views/${route.component}`]
}
else {
delete route.component
diff --git a/apps/core/src/views/multilevel_menu_example/level2/level3/page1.vue b/apps/core/src/views/multilevel_menu_example/level2/level3/page1.vue
new file mode 100755
index 00000000..71af8f16
--- /dev/null
+++ b/apps/core/src/views/multilevel_menu_example/level2/level3/page1.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
+ 导航2-2-1
+
+
+
diff --git a/apps/core/src/views/multilevel_menu_example/level2/level3/page2.vue b/apps/core/src/views/multilevel_menu_example/level2/level3/page2.vue
new file mode 100755
index 00000000..fc7e8175
--- /dev/null
+++ b/apps/core/src/views/multilevel_menu_example/level2/level3/page2.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
+ 导航2-2-2
+
+
+
diff --git a/apps/core/src/views/multilevel_menu_example/level2/page.vue b/apps/core/src/views/multilevel_menu_example/level2/page.vue
new file mode 100755
index 00000000..4ee7f70f
--- /dev/null
+++ b/apps/core/src/views/multilevel_menu_example/level2/page.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
+ 导航2-1
+
+
+
diff --git a/apps/core/src/views/multilevel_menu_example/page.vue b/apps/core/src/views/multilevel_menu_example/page.vue
new file mode 100755
index 00000000..0f6fd2d7
--- /dev/null
+++ b/apps/core/src/views/multilevel_menu_example/page.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
+ 导航1
+
+
+
diff --git a/apps/example/src/api/modules/app.fake.ts b/apps/example/src/api/modules/app.fake.ts
index 127151d5..5e5f582d 100755
--- a/apps/example/src/api/modules/app.fake.ts
+++ b/apps/example/src/api/modules/app.fake.ts
@@ -23,7 +23,7 @@ export default defineFakeRoute([
component: 'Layout',
name: 'multilevelMenuExample',
meta: {
- title: 'route.multimenu.root',
+ title: '多级导航',
icon: 'heroicons-solid:menu-alt-3',
},
children: [
@@ -33,14 +33,14 @@ export default defineFakeRoute([
name: 'multilevelMenuExample1',
component: 'multilevel_menu_example/page.vue',
meta: {
- title: 'route.multimenu.page',
+ title: '导航1',
},
},
{
path: 'level2',
name: 'multilevelMenuExample2',
meta: {
- title: 'route.multimenu.level2.root',
+ title: '导航2',
},
children: [
// 次导航(三级路由)
@@ -49,14 +49,14 @@ export default defineFakeRoute([
name: 'multilevelMenuExample2-1',
component: 'multilevel_menu_example/level2/page.vue',
meta: {
- title: 'route.multimenu.level2.page',
+ title: '导航2-1',
},
},
{
path: 'level3',
name: 'multilevelMenuExample2-2',
meta: {
- title: 'route.multimenu.level2.level3.root',
+ title: '导航2-2',
},
children: [
// 次导航(四级路由)
@@ -65,113 +65,13 @@ export default defineFakeRoute([
name: 'multilevelMenuExample2-2-1',
component: 'multilevel_menu_example/level2/level3/page1.vue',
meta: {
- title: 'route.multimenu.level2.level3.page1',
+ title: '导航2-2-1',
},
},
{
path: 'page2',
name: 'multilevelMenuExample2-2-2',
component: 'multilevel_menu_example/level2/level3/page2.vue',
- meta: {
- title: 'route.multimenu.level2.level3.page2',
- },
- },
- ],
- },
- ],
- },
- ],
- },
- {
- path: '/permission_example',
- component: 'Layout',
- name: 'permissionExample',
- meta: {
- title: 'route.permission',
- icon: 'ri:shield-keyhole-line',
- },
- children: [
- {
- path: 'index',
- name: 'permissionExampleIndex',
- component: 'permission_example/index.vue',
- meta: {
- title: 'route.permission',
- menu: false,
- breadcrumb: false,
- activeMenu: '/permission_example',
- },
- },
- {
- path: 'test',
- name: 'permissionExampleTest',
- component: 'permission_example/test.vue',
- meta: {
- title: '测试页面',
- auth: ['permission.browse'],
- menu: false,
- breadcrumb: false,
- activeMenu: '/permission_example',
- },
- },
- ],
- },
- ],
- },
- ],
- }
- },
- },
- {
- url: '/fake/app/menu/list',
- method: 'get',
- response: () => {
- return {
- error: '',
- status: 1,
- data: [
- {
- meta: {
- title: '演示',
- icon: 'uim:box',
- },
- children: [
- {
- meta: {
- title: '多级导航',
- icon: 'heroicons-solid:menu-alt-3',
- },
- children: [
- {
- path: '/multilevel_menu_example/page',
- meta: {
- title: '导航1',
- },
- },
- {
- meta: {
- title: '导航2',
- },
- children: [
- {
- path: '/multilevel_menu_example/level2/page',
- meta: {
- title: '导航2-1',
- },
- },
- {
- meta: {
- title: '导航2-2',
- },
- children: [
- {
- path: '/multilevel_menu_example/level2/level3/page1',
- meta: {
- title: '导航2-2-1',
- },
- },
- {
- path: '/multilevel_menu_example/level2/level3/page2',
meta: {
title: '导航2-2-2',
},
@@ -182,13 +82,6 @@ export default defineFakeRoute([
},
],
},
- {
- path: '/permission_example',
- meta: {
- title: '权限验证',
- icon: 'ri:shield-keyhole-line',
- },
- },
],
},
],
diff --git a/apps/example/src/api/modules/standardModule.fake.ts b/apps/example/src/api/modules/standardModule.fake.ts
deleted file mode 100755
index a12f89a8..00000000
--- a/apps/example/src/api/modules/standardModule.fake.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import { faker } from '@faker-js/faker'
-import { defineFakeRoute } from 'vite-plugin-fake-server/client'
-
-// 标准模块
-const standardModuleList: any[] = []
-for (let i = 0; i < 50; i++) {
- standardModuleList.push({
- id: i + 1,
- title: faker.book.title(),
- })
-}
-
-export default defineFakeRoute([
- {
- url: '/fake/standard_module/list',
- method: 'get',
- response: ({ query }) => {
- const { title, from, limit } = query
- const list = standardModuleList.filter((item) => {
- return title ? item.title.includes(title) : true
- })
- const pageList = list.filter((_item, index) => {
- return index >= ~~from && index < (~~from + ~~limit)
- })
- return {
- error: '',
- status: 1,
- data: {
- list: pageList,
- total: list.length,
- },
- }
- },
- },
- {
- url: '/fake/standard_module/detail',
- method: 'get',
- response: ({ query }) => {
- const info = standardModuleList.filter(item => item.id === ~~query.id)
- return {
- error: '',
- status: 1,
- data: info[0],
- }
- },
- },
- {
- url: '/fake/standard_module/create',
- method: 'post',
- response: () => {
- return {
- error: '',
- status: 1,
- data: {
- isSuccess: true,
- },
- }
- },
- },
- {
- url: '/fake/standard_module/edit',
- method: 'post',
- response: () => {
- return {
- error: '',
- status: 1,
- data: {
- isSuccess: true,
- },
- }
- },
- },
- {
- url: '/fake/standard_module/delete',
- method: 'post',
- response: () => {
- return {
- error: '',
- status: 1,
- data: {
- isSuccess: true,
- },
- }
- },
- },
-])
diff --git a/apps/example/src/api/modules/standardModule.ts b/apps/example/src/api/modules/standardModule.ts
deleted file mode 100755
index cae19ee5..00000000
--- a/apps/example/src/api/modules/standardModule.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import api from '../index'
-
-export default {
- list: (data: {
- title?: string
- from: number
- limit: number
- }) => api.get('standard_module/list', {
- params: data,
- fake: true,
- }),
-
- detail: (id: number | string) => api.get('standard_module/detail', {
- params: {
- id,
- },
- fake: true,
- }),
-
- create: (data: any) => api.post('standard_module/create', data, {
- fake: true,
- }),
-
- edit: (data: any) => api.post('standard_module/edit', data, {
- fake: true,
- }),
-
- delete: (id: number | string) => api.post('standard_module/delete', {
- id,
- }, {
- fake: true,
- }),
-}
diff --git a/apps/example/src/router/modules/multilevel.menu.example.ts b/apps/example/src/router/modules/multilevel.menu.example.ts
index 5b0ebc72..a82aba7c 100755
--- a/apps/example/src/router/modules/multilevel.menu.example.ts
+++ b/apps/example/src/router/modules/multilevel.menu.example.ts
@@ -40,7 +40,7 @@ const routes: RouteRecordRaw = {
path: 'level3',
name: 'multilevelMenuExample2-2',
meta: {
- title: '导航3',
+ title: '导航2-2',
},
children: [
{
diff --git a/apps/example/src/store/modules/app/route.ts b/apps/example/src/store/modules/app/route.ts
index 169f18a0..021493ec 100755
--- a/apps/example/src/store/modules/app/route.ts
+++ b/apps/example/src/store/modules/app/route.ts
@@ -97,7 +97,7 @@ export const useAppRouteStore = defineStore(
isGenerate.value = true
}
// 格式化后端路由数据
- function formatBackRoutes(routes: any, views = import.meta.glob('../../views/**/*.vue')): RouteRecordMainRaw[] {
+ function formatBackRoutes(routes: any, views = import.meta.glob('@/views/**/*.vue')): RouteRecordMainRaw[] {
return routes.map((route: any) => {
switch (route.component) {
case 'Layout':
@@ -105,7 +105,7 @@ export const useAppRouteStore = defineStore(
break
default:
if (route.component) {
- route.component = views[`../../views/${route.component}`]
+ route.component = views[`/src/views/${route.component}`]
}
else {
delete route.component
diff --git a/apps/example/src/views/auth_example/index.vue b/apps/example/src/views/auth_example/index.vue
index d9eb35fa..e7c6a9f1 100755
--- a/apps/example/src/views/auth_example/index.vue
+++ b/apps/example/src/views/auth_example/index.vue
@@ -19,7 +19,7 @@ async function accountSwitch(val: any) {
}
function goTest() {
router.push({
- name: 'permissionExampleTest',
+ name: 'authExampleTest',
})
}
function permissionCheck(permissions: string | string[]) {