UNPKG

@eim-materials/eim-pc-admin-lite

Version:

该模板适用于从 0 到 1 开始搭建项目,内置基础的页面,路由和菜单展示。

250 lines (236 loc) 5.7 kB
import Vue from 'vue'; import Router from 'vue-router'; import routerConfig from './routerConfig'; import { asideMenuConfig } from './menuConfig'; const SubAppMain = () => import('@/components/Layout/SubAppMain'); const Login = () => import('@/pages/login/index'); const Error404 = () => import('@/pages/errorpage/404'); const Error403 = () => import('@/pages/errorpage/403'); const Error500 = () => import('@/pages/errorpage/500'); Vue.use(Router); const defaultRouterMap = [ { path: '/', redirect: '/login', hidden: true, }, { path: '/login', name: 'login', component: Login, hidden: true, }, { path: '/404', name: '404', component: Error404, hidden: true, }, { path: '/403', name: '403', component: Error403, hidden: true, }, { path: '/500', name: '500', component: Error500, hidden: true, }, { name: 'except', path: '*', redirect: '/404', hidden: true }, ]; const createRouterMap = []; const roleTree = [{ id: 'all', name: '所有权限', children: [], }]; function generateFirstLevelMenu(menu, route) { const { pathId, name, path, icon, hidden, parent, iframeParam } = menu; const { layout, component } = route; const router = { path, component: layout, name, children: [{ path: 'index', name: pathId, component, meta: { title: name, icon, parent, iframeParam, }, hidden, }], }; const role = { id: pathId, name: parent ? `${parent}/${name}` : name, }; createRouterMap.push(router); roleTree[0].children.push(role); } function generateSecondLevelMenu(menu, route) { const { pathId, name, path, icon, hidden, parent, iframeParam } = menu; const { layout, component } = route; const nameArr = name.split('/'); const pathArr = path.split('/'); const iconArr = icon.split('/'); const childRouter = { path: pathArr[2], // name: nameArr[1], name: pathId, component, meta: { title: nameArr[1], icon: iconArr[1], parent, iframeParam, }, hidden, }; const childRole = { id: pathId, name: parent ? `${parent}/${nameArr[1]}` : nameArr[1], }; let index = 0; if (createRouterMap.some((ele, idx) => { index = idx; return ele.name === nameArr[0]; })) { createRouterMap[index].children.push(childRouter); roleTree[0].children[index].children.push(childRole); } else { const router = { path: `/${pathArr[1]}`, component: layout, name: nameArr[0], redirect: path, meta: { title: nameArr[0], icon: iconArr[0], }, children: [ childRouter, ], }; const role = { id: name, name: nameArr[0], children: [ childRole, ], }; createRouterMap.push(router); roleTree[0].children.push(role); } } function generateThirdLevelMenu(menu, route) { const { pathId, name, path, icon, hidden, parent, iframeParam } = menu; const { layout, component } = route; const nameArr = name.split('/'); const pathArr = path.split('/'); const iconArr = icon.split('/'); const grandChildRouter = { path: pathArr[3], // name: nameArr[2], name: pathId, component, meta: { title: nameArr[2], icon: iconArr[2], parent, iframeParam, }, hidden, }; const grandChildRole = { id: pathId, name: parent ? `${parent}/${nameArr[2]}` : nameArr[2], }; const childRouter = { path: pathArr[2], name: nameArr[1], component: SubAppMain, redirect: path, meta: { title: nameArr[1], icon: iconArr[1], }, children: [ grandChildRouter, ], }; const childRole = { id: nameArr[0] + nameArr[1], name: nameArr[1], children: [ grandChildRole, ], }; let index = 0; if (createRouterMap.some((ele, idx) => { index = idx; return ele.name === nameArr[0]; })) { let childIndex = 0; if (createRouterMap[index].children && createRouterMap[index].children.some((ele, idx) => { childIndex = idx; return ele.name === nameArr[1]; })) { createRouterMap[index].children[childIndex].children.push(grandChildRouter); roleTree[0].children[index].children[childIndex].children.push(grandChildRole); } else { createRouterMap[index].children.push(childRouter); roleTree[0].children[index].children.push(childRole); } } else { const router = { path: `/${pathArr[1]}`, component: layout, name: nameArr[0], redirect: path, meta: { title: nameArr[0], icon: iconArr[0], }, children: [ childRouter, ], }; const role = { id: name, name: nameArr[0], }; createRouterMap.push(router); roleTree[0].children.push(role); } } asideMenuConfig.forEach((menu) => { // 获取菜单信息,以/ 分割,如/example/chart => 会拆分为example和chart两级菜单 const menuArr = menu.name.split('/'); const length = menuArr.length; const route = routerConfig.find(routeItem => routeItem.path === menu.path); switch (length) { case 1: generateFirstLevelMenu(menu, route); break; case 2: generateSecondLevelMenu(menu, route); break; case 3: generateThirdLevelMenu(menu, route); break; default: } }); export const menuConfig = createRouterMap; export const roleTreeConfig = roleTree; export const constantRouterMap = [...defaultRouterMap, ...createRouterMap]; export default new Router({ scrollBehavior: () => ({ y: 0 }), routes: constantRouterMap, });