import Vue from 'vue'; import Router from 'vue-router'; /** * Layzloading will create many files and slow on compiling, so best not to use lazyloading on devlopment. * The syntax is lazyloading, but we convert to proper require() with babel-plugin-syntax-dynamic-import * @see https://doc.laravue.dev/guide/advanced/lazy-loading.html */ Vue.use(Router); /* Layout */ import Layout from '@/layout'; /* Router for modules */ // import componentRoutes from './modules/components'; // import chartsRoutes from './modules/charts'; // import tableRoutes from './modules/table'; import adminRoutes from './modules/admin'; import deviceRoutes from './modules/device'; import usersRoutes from './modules/users'; // import nestedRoutes from './modules/nested'; // import errorRoutes from './modules/error'; // import permissionRoutes from './modules/permission'; import historyRoutes from './modules/history.js'; import monitorRoutes from './modules/monitor.js'; import userdeviceRoutes from './modules/userdevice'; /** * Sub-menu only appear when children.length>=1 * @see https://doc.laravue.dev/guide/essentials/router-and-nav.html **/ /** * hidden: true if `hidden:true` will not show in the sidebar(default is false) * alwaysShow: true if set true, will always show the root menu, whatever its child routes length * if not set alwaysShow, only more than one route under the children * it will becomes nested mode, otherwise not show the root menu * redirect: noredirect if `redirect:noredirect` will no redirect in the breadcrumb * name:'router-name' the name is used by <keep-alive> (must set!!!) * me roles: ['admin', 'editor'] Visible for these roles only permissions: ['view menu zip', 'manage user'] Visible for these permissions only title: 'title' the name show in sub-menu and breadcrumb (recommend set) icon: 'svg-name' the icon show in the sidebar noCache: true if true, the page will no be cached(default is false) breadcrumb: false if false, the item will hidden in breadcrumb (default is true) affix: true if true, the tag will affix in the tags-view } **/ export const constantRoutes = [ { path: '/redirect', component: Layout, hidden: true, meta: { roles: ['admin'] }, permissions: ['admin'], children: [ { path: '/redirect/:path*', component: () => import('@/views/redirect/index'), }, ], }, { path: '/login', component: () => import('@/views/login/index'), hidden: true, }, { path: '/userslogin', component: () => import('@/views/userslogin/index'), hidden: true, }, { path: '/auth-redirect', component: () => import('@/views/login/AuthRedirect'), hidden: true, }, { path: '/404', redirect: { name: 'Page404' }, component: () => import('@/views/error-page/404'), hidden: true, }, { path: '/401', component: () => import('@/views/error-page/401'), hidden: true, }, { path: '', component: Layout, redirect: 'dashboard', children: [ { path: 'dashboard', component: () => import('@/views/dashboard/index'), name: 'Dashboard', meta: { title: 'dashboard', icon: 'dashboard', noCache: false, permissions: ['view menu dashboard'] }, }, ], }, // { // path: '/documentation', // component: Layout, // redirect: '/documentation/index', // children: [ // { // path: 'index', // component: () => import('@/views/documentation/index'), // name: 'Documentation', // meta: { title: 'documentation', icon: 'documentation', noCache: true }, // }, // ], // }, // { // path: '/guide', // component: Layout, // redirect: '/guide/index', // children: [ // { // path: 'index', // component: () => import('@/views/guide/index'), // name: 'Guide', // meta: { title: 'guide', icon: 'guide', noCache: true }, // }, // ], // }, ]; export const asyncRoutes = [ // permissionRoutes, // componentRoutes, // chartsRoutes, // nestedRoutes, // tableRoutes, // { // path: '/theme', // component: Layout, // redirect: 'noredirect', // children: [ // { // path: 'index', // component: () => import('@/views/theme/index'), // name: 'Theme', // meta: { title: 'theme', icon: 'theme' }, // }, // ], // }, monitorRoutes, historyRoutes, deviceRoutes, usersRoutes, adminRoutes, userdeviceRoutes, // { // path: '/userdevice', // component: Layout, // redirect: 'noredirect', // hidden: false, // meta: { permissions: ['view menu userdevice'], roles: ['user'] }, // children: [ // { // path: 'index', // component: () => import('@/views/userdevice/index'), // name: 'userdevice', // meta: { title: '设备列表', icon: 'tree-table' }, // }, // ], // }, { path: '/map', component: Layout, redirect: '/map', children: [ { path: 'map', component: () => import('@/views/map/index'), name: 'Map', meta: { title: 'map', icon: 'international', noCache: false }, }, ], }, { path: '/', redirect: '/error/404', hidden: true }, ]; const createRouter = () => new Router({ // mode: 'history', // require service support scrollBehavior: () => ({ y: 0 }), base: process.env.MIX_LARAVUE_PATH, routes: constantRoutes, }); const router = createRouter(); // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465 export function resetRouter() { const newRouter = createRouter(); router.matcher = newRouter.matcher; // reset router } export default router;