离校前端框架,包括数据字典、工作队伍、新闻公告模块
diff --git a/leave-school-vue/src/router/index.js b/leave-school-vue/src/router/index.js
new file mode 100644
index 0000000..7f638d2
--- /dev/null
+++ b/leave-school-vue/src/router/index.js
@@ -0,0 +1,111 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+
+// in development-env not use lazy-loading, because lazy-loading too many pages will cause webpack hot update too slow. so only in production use lazy-loading;
+// detail: https://panjiachen.github.io/vue-element-admin-site/#/lazy-loading
+
+Vue.use(Router)
+
+/* Layout */
+import Layout from '../views/layout/Layout'
+import { getMenuList } from '../api/menulist-api'
+
+/**
+* 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 redirct in the breadcrumb
+* name:'router-name'             the name is used by <keep-alive> (must set!!!)
+* meta : {
+    title: 'title'               the name show in submenu and breadcrumb (recommend set)
+    icon: 'svg-name'             the icon show in the sidebar,
+  }
+**/
+// 全局路由
+const globalRouter = [
+  { path: '/login', component: () => import('@/views/login/index'), hidden: true },
+  { path: '/404', component: () => import('@/views/404'), hidden: true }
+]
+// 主页路由
+const mainRouter = {
+  path: '/',
+  component: Layout,
+  redirect: '/dashboard',
+  hidden: true,
+  children: [{
+    path: 'dashboard',
+    component: () => import('@/views/dashboard/index'),
+    name: 'Dashboard',
+    meta: { title: 'Dashboard', icon: 'dashboard', noCache: true }
+  }]
+}
+// 菜单路由
+const menuRouter = []
+
+const constantRouterMap = globalRouter.concat(mainRouter).concat(menuRouter)
+
+const router = new Router({
+  // mode: 'history', //后端支持可开
+  scrollBehavior: () => ({ y: 0 }),
+  hasLoadedDynamicRoutes: false, // 动态路由已加载
+  routes: constantRouterMap
+})
+
+router.beforeEach((to, from, next) => {
+  if (router.options.hasLoadedDynamicRoutes) {
+    next()
+  } else {
+    getMenuList().then(response => {
+      const menuList = initDynamicRouters(response.items)
+      router.options.routes.push(...menuList)
+      router.addRoutes(menuList)
+      router.addRoutes([{ path: '*', redirect: '/404', hidden: true }])
+      router.options.hasLoadedDynamicRoutes = true
+      next({ ...to, replace: true })
+    })
+  }
+})
+function getMenuResource(resource) {
+  let menuresource = resource
+  if (menuresource && menuresource.startsWith('/views/')) {
+    menuresource = menuresource.substring(6)
+  }
+  return menuresource
+}
+function getChildren(menus) {
+  const children = []
+  for (const menu of menus) {
+    const menuresource = getMenuResource(menu.resource)
+    const route = {
+      path: menu.path,
+      name: menu.code,
+      component: () => import('@/views' + menuresource),
+      meta: menu.meta,
+      children: menu.children ? getChildren(menu.children) : null
+    }
+    children.push(route)
+  }
+  return children.length > 0 ? children : null
+}
+
+function initDynamicRouters(menus) {
+  const menuList = []
+  if (menus && menus.length > 0) {
+    for (const menu of menus) {
+      const route = {
+        path: menu.path,
+        component: Layout,
+        // alwaysShow: true,
+        redirect: menu.path + '/' + ((menu.children && menu.children.length > 0) ? menu.children[0].path : null),
+        name: menu.code,
+        meta: menu.meta,
+        children: menu.children ? getChildren(menu.children) : null
+      }
+      menuList.push(route)
+    }
+  }
+  return menuList
+}
+
+export default router