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
