vite+vue3 怎么实现动态路由
import { createRouter, createWebHashHistory } from 'vue-router'
import { message } from 'ant-design-vue';
import Nprogress from 'nprogress';
import 'nprogress/nprogress.css';
// import menuStore from '@/stores/menu'
import { menu } from '@/api/auth';
const modules = import.meta.glob('/src/views/*/*.vue'); // Vite 支持使用特殊的 import.meta.glob 函数从文件系统导入多个模块
const router = createRouter({
history: createWebHashHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/login',
name: 'login',
component: modules['/src/views/login/IndexView.vue'],
meta: { login: true }
},
// {
// component: modules['/src/views/layout/IndexView.vue'],
// children: [
// {
// path: '/',
// component: modules['/src/views/home/IndexView.vue'],
// name: 'home-list',
// meta: { title: '基本信息' },
// },
// ],
// },
]
});
// 递归引入路由
const dynamicRouter = routers => {
const list = [
{
component: modules['/src/views/layout/IndexView.vue'],
children: []
}
];
routers.map((item, index) => {
list[0].children.push({
path: item.path,
name: item.unique_auth,
// component: () => import(`@/views/${item.component}.vue`),
component: modules[`/src/views/${item.component}.vue`],
meta: { title: item.name }
});
if (item.children && item.children.length) {
list[index].children.children = dynamicRouter(item.children);
list[0][index].children.children = dynamicRouter(item.children);
}
});
return list;
};
// 挂载全局前置路由守卫
router.beforeEach(async (to, from, next) => {
Nprogress.start();
document.title = to.meta.title === undefined ? '后台管理系统' : to.meta.title;
if (to.name == 'login') {
next();
return;
}
if (localStorage.getItem('Authori-zation')) {
if (to.name == 'login') {
next('/');
Nprogress.done();
} else {
// 用pina也不行
// const store = menuStore();
// if (store.menu.length) {
// next();
// } else {
// store.getMenu({type:1, show: 1});
// console.log(store.menu);
// dynamicRouter(store.menu).map(item => {
// router.addRoute(item);
// });
// next({ ...to, replace: true });
// }
// 请求接口
const { data } = await menu({type:1, show: 1});
console.log(data);
dynamicRouter(data.menu).map(item => {
router.addRoute(item);
});
// 写死也没用
// router.addRoute({
// component: modules['/src/views/layout/IndexView.vue'],
// children: [
// {
// path: '/',
// component: modules['/src/views/home/IndexView.vue'],
// name: 'home-list',
// meta: { title: '基本信息' },
// },
// ],
// });
next({ ...to, replace: true });
}
} else {
message.error('身份过期,请重新登录');
next({ name: 'login' });
Nprogress.done();
}
});
// 挂在全局后置路由
router.afterEach(() => {
Nprogress.done();
});
export default router
报错找不到路径
请教解决办法
前端一个全量的路由表,后端返回相应的路由,然后对比合并