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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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[]) {