forked from liweijie/education
1 line
14 KiB
JSON
1 line
14 KiB
JSON
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\layout\\components\\TopNav\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\layout\\components\\TopNav\\index.vue","mtime":1787309162972},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBjb25zdGFudFJvdXRlcyB9IGZyb20gIkAvcm91dGVyIg0KaW1wb3J0IHsgaXNIdHRwIH0gZnJvbSAiQC91dGlscy92YWxpZGF0ZSINCg0KLy8g6ZqQ6JeP5L6n6L655qCP6Lev55SxDQpjb25zdCBoaWRlTGlzdCA9IFsnL2luZGV4JywgJy91c2VyL3Byb2ZpbGUnXQ0KDQpleHBvcnQgZGVmYXVsdCB7DQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIC8vIOmhtumDqOagj+WIneWni+aVsA0KICAgICAgdmlzaWJsZU51bWJlcjogNSwNCiAgICAgIC8vIOW9k+WJjea/gOa0u+iPnOWNleeahCBpbmRleA0KICAgICAgY3VycmVudEluZGV4OiB1bmRlZmluZWQNCiAgICB9DQogIH0sDQogIGNvbXB1dGVkOiB7DQogICAgdGhlbWUoKSB7DQogICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuc2V0dGluZ3MudGhlbWUNCiAgICB9LA0KICAgIC8vIOmhtumDqOaYvuekuuiPnOWNlQ0KICAgIHRvcE1lbnVzKCkgew0KICAgICAgbGV0IHRvcE1lbnVzID0gW10NCiAgICAgIHRoaXMucm91dGVycy5tYXAoKG1lbnUpID0+IHsNCiAgICAgICAgaWYgKG1lbnUuaGlkZGVuICE9PSB0cnVlKSB7DQogICAgICAgICAgLy8g5YW85a656aG26YOo5qCP5LiA57qn6I+c5Y2V5YaF6YOo6Lez6L2sDQogICAgICAgICAgaWYgKG1lbnUucGF0aCA9PT0gJy8nICYmIG1lbnUuY2hpbGRyZW4pIHsNCiAgICAgICAgICAgIHRvcE1lbnVzLnB1c2gobWVudS5jaGlsZHJlblswXSkNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdG9wTWVudXMucHVzaChtZW51KQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfSkNCiAgICAgIHJldHVybiB0b3BNZW51cw0KICAgIH0sDQogICAgLy8g5omA5pyJ55qE6Lev55Sx5L+h5oGvDQogICAgcm91dGVycygpIHsNCiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5wZXJtaXNzaW9uLnRvcGJhclJvdXRlcnMNCiAgICB9LA0KICAgIC8vIOiuvue9ruWtkOi3r+eUsQ0KICAgIGNoaWxkcmVuTWVudXMoKSB7DQogICAgICB2YXIgY2hpbGRyZW5NZW51cyA9IFtdDQogICAgICB0aGlzLnJvdXRlcnMubWFwKChyb3V0ZXIpID0+IHsNCiAgICAgICAgZm9yICh2YXIgaXRlbSBpbiByb3V0ZXIuY2hpbGRyZW4pIHsNCiAgICAgICAgICBpZiAocm91dGVyLmNoaWxkcmVuW2l0ZW1dLnBhcmVudFBhdGggPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgaWYgKHJvdXRlci5wYXRoID09PSAiLyIpIHsNCiAgICAgICAgICAgICAgcm91dGVyLmNoaWxkcmVuW2l0ZW1dLnBhdGggPSAiLyIgKyByb3V0ZXIuY2hpbGRyZW5baXRlbV0ucGF0aA0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgaWYgKCFpc0h0dHAocm91dGVyLmNoaWxkcmVuW2l0ZW1dLnBhdGgpKSB7DQogICAgICAgICAgICAgICAgcm91dGVyLmNoaWxkcmVuW2l0ZW1dLnBhdGggPSByb3V0ZXIucGF0aCArICIvIiArIHJvdXRlci5jaGlsZHJlbltpdGVtXS5wYXRoDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJvdXRlci5jaGlsZHJlbltpdGVtXS5wYXJlbnRQYXRoID0gcm91dGVyLnBhdGgNCiAgICAgICAgICB9DQogICAgICAgICAgY2hpbGRyZW5NZW51cy5wdXNoKHJvdXRlci5jaGlsZHJlbltpdGVtXSkNCiAgICAgICAgfQ0KICAgICAgfSkNCiAgICAgIHJldHVybiBjb25zdGFudFJvdXRlcy5jb25jYXQoY2hpbGRyZW5NZW51cykNCiAgICB9LA0KICAgIC8vIOm7mOiupOa/gOa0u+eahOiPnOWNlQ0KICAgIGFjdGl2ZU1lbnUoKSB7DQogICAgICBjb25zdCBwYXRoID0gdGhpcy4kcm91dGUucGF0aA0KICAgICAgbGV0IGFjdGl2ZVBhdGggPSBwYXRoDQogICAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkICYmIHBhdGgubGFzdEluZGV4T2YoIi8iKSA+IDAgJiYgaGlkZUxpc3QuaW5kZXhPZihwYXRoKSA9PT0gLTEpIHsNCiAgICAgICAgY29uc3QgdG1wUGF0aCA9IHBhdGguc3Vic3RyaW5nKDEsIHBhdGgubGVuZ3RoKQ0KICAgICAgICBpZiAoIXRoaXMuJHJvdXRlLm1ldGEubGluaykgew0KICAgICAgICAgIGFjdGl2ZVBhdGggPSAiLyIgKyB0bXBQYXRoLnN1YnN0cmluZygwLCB0bXBQYXRoLmluZGV4T2YoIi8iKSkNCiAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnYXBwL3RvZ2dsZVNpZGVCYXJIaWRlJywgZmFsc2UpDQogICAgICAgIH0NCiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuJHJvdXRlLmNoaWxkcmVuKSB7DQogICAgICAgIGFjdGl2ZVBhdGggPSBwYXRoDQogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdhcHAvdG9nZ2xlU2lkZUJhckhpZGUnLCB0cnVlKQ0KICAgICAgfQ0KICAgICAgdGhpcy5hY3RpdmVSb3V0ZXMoYWN0aXZlUGF0aCkNCiAgICAgIHJldHVybiBhY3RpdmVQYXRoDQogICAgfSwNCiAgfSwNCiAgYmVmb3JlTW91bnQoKSB7DQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuc2V0VmlzaWJsZU51bWJlcikNCiAgfSwNCiAgYmVmb3JlRGVzdHJveSgpIHsNCiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5zZXRWaXNpYmxlTnVtYmVyKQ0KICB9LA0KICBtb3VudGVkKCkgew0KICAgIHRoaXMuc2V0VmlzaWJsZU51bWJlcigpDQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvLyDmoLnmja7lrr3luqborqHnrpforr7nva7mmL7npLrmoI/mlbANCiAgICBzZXRWaXNpYmxlTnVtYmVyKCkgew0KICAgICAgY29uc3Qgd2lkdGggPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC8gMw0KICAgICAgdGhpcy52aXNpYmxlTnVtYmVyID0gcGFyc2VJbnQod2lkdGggLyA4NSkNCiAgICB9LA0KICAgIC8vIOiPnOWNlemAieaLqeS6i+S7tg0KICAgIGhhbmRsZVNlbGVjdChrZXksIGtleVBhdGgpIHsNCiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0ga2V5DQogICAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGVycy5maW5kKGl0ZW0gPT4gaXRlbS5wYXRoID09PSBrZXkpDQogICAgICBpZiAoaXNIdHRwKGtleSkpIHsNCiAgICAgICAgLy8gaHR0cChzKTovLyDot6/lvoTmlrDnqpflj6PmiZPlvIANCiAgICAgICAgd2luZG93Lm9wZW4oa2V5LCAiX2JsYW5rIikNCiAgICAgIH0gZWxzZSBpZiAoIXJvdXRlIHx8ICFyb3V0ZS5jaGlsZHJlbikgew0KICAgICAgICAvLyDmsqHmnInlrZDot6/nlLHot6/lvoTlhoXpg6jmiZPlvIANCiAgICAgICAgY29uc3Qgcm91dGVNZW51ID0gdGhpcy5jaGlsZHJlbk1lbnVzLmZpbmQoaXRlbSA9PiBpdGVtLnBhdGggPT09IGtleSkNCiAgICAgICAgaWYgKHJvdXRlTWVudSAmJiByb3V0ZU1lbnUucXVlcnkpIHsNCiAgICAgICAgICBsZXQgcXVlcnkgPSBKU09OLnBhcnNlKHJvdXRlTWVudS5xdWVyeSkNCiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6IGtleSwgcXVlcnk6IHF1ZXJ5IH0pDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiBrZXkgfSkNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnYXBwL3RvZ2dsZVNpZGVCYXJIaWRlJywgdHJ1ZSkNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIC8vIOaYvuekuuW3puS+p+iBlOWKqOiPnOWNlQ0KICAgICAgICB0aGlzLmFjdGl2ZVJvdXRlcyhrZXkpDQogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdhcHAvdG9nZ2xlU2lkZUJhckhpZGUnLCBmYWxzZSkNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOW9k+WJjea/gOa0u+eahOi3r+eUsQ0KICAgIGFjdGl2ZVJvdXRlcyhrZXkpIHsNCiAgICAgIHZhciByb3V0ZXMgPSBbXQ0KICAgICAgaWYgKHRoaXMuY2hpbGRyZW5NZW51cyAmJiB0aGlzLmNoaWxkcmVuTWVudXMubGVuZ3RoID4gMCkgew0KICAgICAgICB0aGlzLmNoaWxkcmVuTWVudXMubWFwKChpdGVtKSA9PiB7DQogICAgICAgICAgaWYgKGtleSA9PSBpdGVtLnBhcmVudFBhdGggfHwgKGtleSA9PSAiaW5kZXgiICYmICIiID09IGl0ZW0ucGF0aCkpIHsNCiAgICAgICAgICAgIHJvdXRlcy5wdXNoKGl0ZW0pDQogICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgICAgfQ0KICAgICAgaWYgKHJvdXRlcy5sZW5ndGggPiAwKSB7DQogICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgiU0VUX1NJREVCQVJfUk9VVEVSUyIsIHJvdXRlcykNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdhcHAvdG9nZ2xlU2lkZUJhckhpZGUnLCB0cnVlKQ0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/layout/components/TopNav","sourcesContent":["<template>\r\n <el-menu\r\n :default-active=\"activeMenu\"\r\n mode=\"horizontal\"\r\n @select=\"handleSelect\"\r\n >\r\n <template v-for=\"(item, index) in topMenus\">\r\n <el-menu-item :style=\"{'--theme': theme}\" :index=\"item.path\" :key=\"index\" v-if=\"index < visibleNumber\">\r\n <svg-icon\r\n v-if=\"item.meta && item.meta.icon && item.meta.icon !== '#'\"\r\n :icon-class=\"item.meta.icon\"/>\r\n {{ item.meta.title }}\r\n </el-menu-item>\r\n </template>\r\n\r\n <!-- 顶部菜单超出数量折叠 -->\r\n <el-submenu :style=\"{'--theme': theme}\" index=\"more\" :key=\"visibleNumber\" v-if=\"topMenus.length > visibleNumber\">\r\n <template slot=\"title\">更多菜单</template>\r\n <template v-for=\"(item, index) in topMenus\">\r\n <el-menu-item\r\n :index=\"item.path\"\r\n :key=\"index\"\r\n v-if=\"index >= visibleNumber\">\r\n <svg-icon\r\n v-if=\"item.meta && item.meta.icon && item.meta.icon !== '#'\"\r\n :icon-class=\"item.meta.icon\"/>\r\n {{ item.meta.title }}\r\n </el-menu-item>\r\n </template>\r\n </el-submenu>\r\n </el-menu>\r\n</template>\r\n\r\n<script>\r\nimport { constantRoutes } from \"@/router\"\r\nimport { isHttp } from \"@/utils/validate\"\r\n\r\n// 隐藏侧边栏路由\r\nconst hideList = ['/index', '/user/profile']\r\n\r\nexport default {\r\n data() {\r\n return {\r\n // 顶部栏初始数\r\n visibleNumber: 5,\r\n // 当前激活菜单的 index\r\n currentIndex: undefined\r\n }\r\n },\r\n computed: {\r\n theme() {\r\n return this.$store.state.settings.theme\r\n },\r\n // 顶部显示菜单\r\n topMenus() {\r\n let topMenus = []\r\n this.routers.map((menu) => {\r\n if (menu.hidden !== true) {\r\n // 兼容顶部栏一级菜单内部跳转\r\n if (menu.path === '/' && menu.children) {\r\n topMenus.push(menu.children[0])\r\n } else {\r\n topMenus.push(menu)\r\n }\r\n }\r\n })\r\n return topMenus\r\n },\r\n // 所有的路由信息\r\n routers() {\r\n return this.$store.state.permission.topbarRouters\r\n },\r\n // 设置子路由\r\n childrenMenus() {\r\n var childrenMenus = []\r\n this.routers.map((router) => {\r\n for (var item in router.children) {\r\n if (router.children[item].parentPath === undefined) {\r\n if (router.path === \"/\") {\r\n router.children[item].path = \"/\" + router.children[item].path\r\n } else {\r\n if (!isHttp(router.children[item].path)) {\r\n router.children[item].path = router.path + \"/\" + router.children[item].path\r\n }\r\n }\r\n router.children[item].parentPath = router.path\r\n }\r\n childrenMenus.push(router.children[item])\r\n }\r\n })\r\n return constantRoutes.concat(childrenMenus)\r\n },\r\n // 默认激活的菜单\r\n activeMenu() {\r\n const path = this.$route.path\r\n let activePath = path\r\n if (path !== undefined && path.lastIndexOf(\"/\") > 0 && hideList.indexOf(path) === -1) {\r\n const tmpPath = path.substring(1, path.length)\r\n if (!this.$route.meta.link) {\r\n activePath = \"/\" + tmpPath.substring(0, tmpPath.indexOf(\"/\"))\r\n this.$store.dispatch('app/toggleSideBarHide', false)\r\n }\r\n } else if (!this.$route.children) {\r\n activePath = path\r\n this.$store.dispatch('app/toggleSideBarHide', true)\r\n }\r\n this.activeRoutes(activePath)\r\n return activePath\r\n },\r\n },\r\n beforeMount() {\r\n window.addEventListener('resize', this.setVisibleNumber)\r\n },\r\n beforeDestroy() {\r\n window.removeEventListener('resize', this.setVisibleNumber)\r\n },\r\n mounted() {\r\n this.setVisibleNumber()\r\n },\r\n methods: {\r\n // 根据宽度计算设置显示栏数\r\n setVisibleNumber() {\r\n const width = document.body.getBoundingClientRect().width / 3\r\n this.visibleNumber = parseInt(width / 85)\r\n },\r\n // 菜单选择事件\r\n handleSelect(key, keyPath) {\r\n this.currentIndex = key\r\n const route = this.routers.find(item => item.path === key)\r\n if (isHttp(key)) {\r\n // http(s):// 路径新窗口打开\r\n window.open(key, \"_blank\")\r\n } else if (!route || !route.children) {\r\n // 没有子路由路径内部打开\r\n const routeMenu = this.childrenMenus.find(item => item.path === key)\r\n if (routeMenu && routeMenu.query) {\r\n let query = JSON.parse(routeMenu.query)\r\n this.$router.push({ path: key, query: query })\r\n } else {\r\n this.$router.push({ path: key })\r\n }\r\n this.$store.dispatch('app/toggleSideBarHide', true)\r\n } else {\r\n // 显示左侧联动菜单\r\n this.activeRoutes(key)\r\n this.$store.dispatch('app/toggleSideBarHide', false)\r\n }\r\n },\r\n // 当前激活的路由\r\n activeRoutes(key) {\r\n var routes = []\r\n if (this.childrenMenus && this.childrenMenus.length > 0) {\r\n this.childrenMenus.map((item) => {\r\n if (key == item.parentPath || (key == \"index\" && \"\" == item.path)) {\r\n routes.push(item)\r\n }\r\n })\r\n }\r\n if (routes.length > 0) {\r\n this.$store.commit(\"SET_SIDEBAR_ROUTERS\", routes)\r\n } else {\r\n this.$store.dispatch('app/toggleSideBarHide', true)\r\n }\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.topmenu-container.el-menu--horizontal > .el-menu-item {\r\n float: left;\r\n height: 50px !important;\r\n line-height: 50px !important;\r\n color: #303133 !important;\r\n padding: 0 5px !important;\r\n margin: 0 10px !important;\r\n}\r\n\r\n.topmenu-container.el-menu--horizontal > .el-menu-item.is-active, .el-menu--horizontal > .el-submenu.is-active .el-submenu__title {\r\n border-bottom: 2px solid #{'var(--theme)'} !important;\r\n color: #303133;\r\n}\r\n\r\n/* submenu item */\r\n.topmenu-container.el-menu--horizontal > .el-submenu .el-submenu__title {\r\n float: left;\r\n height: 50px !important;\r\n line-height: 50px !important;\r\n color: #303133 !important;\r\n padding: 0 5px !important;\r\n margin: 0 10px !important;\r\n}\r\n</style>\r\n"]}]} |