123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- <template>
- <el-menu :default-active="activeMenu" mode="horizontal">
- <template v-for="(item, index) in menuList">
- <template v-if="!item.hidden">
- <el-popover :key="item.path" trigger="hover" :visible-arrow="false" popper-class="zero-padding-popover">
- <div slot="reference" style="display: inline-block; line-height: 50px !important">
- <el-menu-item
- :style="{ '--theme': theme }"
- @click="handleClick(item)"
- :index="item.path"
- :key="item.path"
- v-if="index < visibleNumber && item.path && item.meta.title"
- >
- <svg-icon :icon-class="item.meta.icon"/>
- {{ item.meta.title }}
- </el-menu-item>
- <el-menu-item
- v-if="!(menuList.length > visibleNumber) && !three && user && false"
- @click="handleOpen('http://8.134.76.179/index.php?m=login&token='+user.code)"
- index="http://8.134.76.179/index"
- style="color: #999093"
- >
- <svg-icon icon-class="guide"/>
- 学习园地
- </el-menu-item>
- </div>
- </el-popover>
- </template>
- </template>
- <template></template>
- <!-- <template v-if="!(menuList.length > visibleNumber)">-->
- <!-- <el-button v-if="firstNav" style="margin-top:10px;margin-left:10px" size="small" @click.stop="backFirstMenu()" round>返回</el-button>-->
- <!-- </template>-->
- <!-- 顶部菜单超出数量折叠 -->
- <el-submenu index="more" v-if="menuList.length > visibleNumber">
- <template slot="title">更多菜单</template>
- <template v-for="(item, index) in menuList">
- <template v-if="!item.hidden">
- <el-menu-item :index="item.path" :key="index" v-if="index >= visibleNumber && item.path && item.meta.title"
- @click="handleClick(item)">
- <svg-icon :icon-class="item.meta.icon"/>
- {{ item.meta.title }}
- </el-menu-item>
- </template>
- </template>
- <el-menu-item
- v-if=" !three && user && false"
- @click="handleOpen('http://8.134.76.179/index.php?m=login&token='+user.code)"
- index="http://8.134.76.179/index"
- >
- <svg-icon icon-class="guide"/>
- 学习园地
- </el-menu-item>
- </el-submenu>
- <!-- <el-button v-if="three" style="margin-top:10px;margin-left:10px" size="small" @click.stop="backMenu()" round>-->
- <!-- 返回-->
- <!-- </el-button>-->
- <!-- <el-button v-if="firstNav" style="margin-top:10px;margin-left:10px" size="small" @click.stop="backFirstMenu()" round>返回首页</el-button> -->
- </el-menu>
- </template>
- <script>
- import { constantRoutes } from '@/router'
- import path from 'path'
- import auth from '@/utils/auth'
- import Cookies from 'js-cookie'
- import { mapGetters } from 'vuex'
- import RouterHelpMixin from '@/router/router-help-mixin'
- export default {
- mixins: [RouterHelpMixin],
- data() {
- return {
- // 顶部栏初始数
- visibleNumber: 10,
- // 是否为首次加载
- isFrist: false,
- // 当前激活菜单的 index
- currentIndex: undefined,
- menuList: [],
- three: false,
- firstNav: true,
- activeMenu: '',
- time: null,
- list1: [
- { name: '生涯测评', id: 'CareerEva' },
- { name: '院校库', id: 'UniversitiesColleges' },
- { name: '专业库', id: 'ProfessLib' },
- { name: '职业库', id: 'Vocation' },
- { name: '选科查询', id: 'Subject' },
- { name: '选科报名', id: 'SubjectSign' },
- { name: '生涯课程', id: '7' }
- ],
- list2: [
- { name: '高考政策', id: 'gkzc' },
- { name: '特殊类招生', id: 'tslzs' },
- { name: '强基计划', id: 'qjjh' },
- { name: '填报技巧', id: 'tbjq' }
- ],
- list3: [
- { name: '关注的院校', id: '0' },
- { name: '关注的专业', id: '1' },
- { name: '生涯测评报告', id: '2' },
- { name: '我的志愿表', id: '3' }
- ],
- list4: [
- { name: '模拟志愿', id: 'SimulatedVolunteer' },
- { name: '批次控制线', id: 'batch' },
- { name: '一分一段', id: 'yfyd' },
- { name: '投档线', id: 'ShiftLine' },
- { name: '高考名词', id: 'gkmc' }
- ],
- listActive: ''
- }
- },
- computed: {
- ...mapGetters(['currentUser']),
- user() {
- return this.currentUser
- },
- theme() {
- return this.$store.state.settings.theme
- },
- // 所有的路由信息
- routers() {
- return this.$store.state.permission.topbarRouters
- }
- },
- beforeMount() {
- window.addEventListener('resize', this.setVisibleNumber)
- },
- beforeDestroy() {
- window.removeEventListener('resize', this.setVisibleNumber)
- },
- mounted() {
- console.log(new Date().getTime())
- this.setVisibleNumber()
- this.menuList = this.topMenus()
- let menuList = []
- let routes = []
- menuList = auth.getMenuTab()
- routes = auth.getMenuList()
- console.log(menuList, routes)
- if (menuList && menuList.length > 0) {
- this.menuList = menuList
- this.$store.commit('SET_SIDEBAR_ROUTERS', routes)
- if (menuList[0].level == 2) {
- this.three = true
- }
- this.activeMenu = auth.getActiveMenu()
- } else {
- this.$store.commit('SET_SIDEBAR_ROUTERS', routes)
- this.gouTo()
- }
- console.log(new Date().getTime())
- if (menuList && menuList[0] && menuList[0].level == 2) {
- this.firstNav = false
- }
- console.log(menuList)
- },
- watch: {
- activeMenu: function(value) {
- console.log(value)
- if (value) {
- auth.setActiveMenu(value)
- }
- },
- $route: function() {
- this.menuList = auth.getMenuTab()
- this.activeMenu = auth.getActiveMenu()
- }
- },
- methods: {
- toSecondary(data, item) {
- auth.setActiveMenu(item.path)
- this.$router.push({ path: item.path, query: data })
- },
- clickEv(data, item) {
- this.listActive = data.id
- auth.setActiveMenu(item.path)
- // this.$router.push({ path: `/career/plan/${data.id}` }).catch(() => { })
- switch (data.id) {
- case 'CareerEva':
- auth.setActiveMenu(item.path)
- this.$router.push({ path: '/career/plan/CareerEva' }).catch(() => {
- })
- break
- case 'UniversitiesColleges':
- auth.setActiveMenu(item.path)
- this.$router
- .push({ path: '/career/plan/UniversitiesColleges' })
- .catch(() => {
- })
- break
- case 'ProfessLib':
- auth.setActiveMenu(item.path)
- this.$router
- .push({ path: '/career/plan/MajorLib' })
- .catch(() => {
- })
- break
- case 'Subject':
- this.$router.push({ path: '/career/subject/index' }).catch(() => {
- })
- break
- case 'SubjectSign':
- this.$router
- .push({ path: '/career/subjectSign/index' })
- .catch(() => {
- })
- break
- case 'Vocation':
- this.$router.push({ path: '/career/vocation/index' }).catch(() => {
- })
- break
- case 'batch':
- this.$router.push({ path: '/career/batch' }).catch(() => {
- })
- break
- case 'yfyd':
- this.$router.push({ path: '/career/yfyd' }).catch(() => {
- })
- break
- case 'gkmc':
- this.$router.push({ path: '/career/gkmc/index' }).catch(() => {
- })
- break
- case 'ShiftLine':
- this.$router.push({ path: '/career/ShiftLine' }).catch(() => {
- })
- break
- case 'SimulatedVolunteer':
- this.$router
- .push({ path: '/career/SimulatedVolunteer' })
- .catch(() => {
- })
- break
- default:
- this.toSecondary(data, item)
- break
- }
- },
- gouTo() {
- let menuList = this.topMenus()
- let actionMenu = ''
- menuList.forEach((item, index) => {
- if (this.$route.query.type == item.path) {
- this.handleClick(this.menuList[index] || {})
- if (item.children && item.children.length > 0) {
- actionMenu = item.path + '/' + item.children[0].path
- } else {
- actionMenu = item.path
- }
- }
- })
- console.log('actionMenu==', actionMenu)
- let routes = auth.getMenuList()
- if (routes.length == 0) {
- this.$router.push({ path: actionMenu })
- auth.setMenuListAction(actionMenu)
- } else {
- console.log('routes', routes)
- let path = this.findLeafDescendantPath(routes)
- if (path) {
- this.$router.push({ path: path })
- auth.setMenuListAction(path)
- console.log(new Date().getTime())
- }
- }
- },
- gouAction(data) {
- // 22.6.7 hht 作废此方法,只处理了有限级跳转
- if (data && data.length > 0) {
- if (data[0].children && data[0].children.length > 0) {
- if (
- data[0].children[0].children &&
- data[0].children[0].children.length > 0
- ) {
- return data[0].children[0].children.path
- } else {
- return data[0].path + '/' + data[0].children[0].path
- }
- } else {
- return data[0].path
- }
- } else {
- return ''
- }
- },
- backFirstMenu() {
- this.$router.push('/login')
- },
- backMenu() {
- this.menuList = this.topMenus()
- auth.setMenuTab(this.menuList)
- this.firstNav = true
- this.three = false
- },
- handleOpen(url) {
- window.open(url)
- },
- handleClick(data) {
- this.listActive = ''
- let item = JSON.parse(JSON.stringify(data))
- let routes = [] //三级菜单
- let second = [] //二级
- if (item.level == 1) {
- debugger
- //点击一级菜单
- if (item.children) {
- //有二级菜单
- item.children.forEach((item2) => {
- if (item2.children) {
- item2.children.forEach((item3) => {
- item3.path = item.path + '/' + item2.path + '/' + item3.path
- })
- if (routes.length == 0 && item2.children.length) {
- //一级菜单下面第一个有3个菜单的二级菜单
- routes = item2.children
- this.activeMenu = item.path + '/' + item2.path //默认值高亮
- }
- }
- item2.path = item.path + '/' + item2.path
- item2.level = 2
- second.push(item2)
- })
- this.menuList = second
- auth.setMenuTab(second)
- this.three = true
- this.$store.commit('SET_SIDEBAR_ROUTERS', routes)
- } else {
- //没有二级菜单
- this.$store.commit('SET_SIDEBAR_ROUTERS', [])
- this.$router.push({ path: item.path })
- }
- } else {
- auth.setActiveMenu(item.path)
- if (item.children) {
- //有三级菜单
- routes = item.children
- this.$store.commit('SET_SIDEBAR_ROUTERS', routes)
- let path = this.toPath(routes, '', '')
- auth.setMenuListAction(path)
- this.$router.push({ path: path })
- } else {
- routes = []
- this.$store.commit('SET_SIDEBAR_ROUTERS', [])
- this.$router.push({ path: item.path })
- }
- }
- auth.setMenuList(routes)
- this.firstNav = false
- this.$forceUpdate()
- },
- toPath(data, path, url) {
- data.forEach((item) => {
- if (!path && item.children && item.children.length > 0) {
- let ac = url ? url + '/' : ''
- path = this.toPath(item.children, path, ac + item.path)
- } else if (!path) {
- let ac = url ? url + '/' : ''
- path = ac + item.path
- }
- })
- return path
- },
- // 顶部显示菜单
- topMenus() {
- let topMenus = []
- this.routers.map((menu) => {
- menu.level = 1
- if (menu.hidden !== true) {
- // 兼容顶部栏一级菜单内部跳转
- if (menu.path === '/') {
- if (menu.children) {
- topMenus.push(menu.children[0])
- }
- } else {
- topMenus.push(menu)
- }
- }
- })
- return topMenus
- },
- // 根据宽度计算设置显示栏数
- setVisibleNumber() {
- const width = document.body.getBoundingClientRect().width / 2
- this.visibleNumber = parseInt(width / 85)
- },
- ishttp(url) {
- return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- // .el-menu--horizontal > .el-menu-item {
- // float: left;
- // height: 50px;
- // line-height: 50px;
- // margin: 0;
- // border-bottom: 3px solid transparent;
- // color: #999093;
- // padding: 0 5px;
- // margin: 0 10px;
- // }
- // .el-menu--horizontal >.el-popover__reference-wrapper > .el-menu-item.is-active {
- // border-bottom: 3px solid #{'var(--theme)'};
- // color: #303133;
- // }
- .navbar {
- .el-menu {
- .el-menu-item {
- float: left;
- height: 50px;
- line-height: 50px;
- margin: 0;
- border-bottom: 3px solid transparent;
- color: #999093;
- padding: 0 5px;
- margin: 0 10px;
- }
- span {
- .el-popover__reference-wrapper {
- .el-popover__reference {
- .el-menu-item.is-active {
- border-bottom: 3px solid #{"var(--theme)"} !important;
- // border:1px solid red;
- color: #303133 !important;
- }
- }
- }
- }
- }
- }
- .dataList {
- cursor: pointer;
- line-height: 36px;
- padding-left: 20px;
- &:hover {
- background-color: #d9ffee;
- }
- }
- /* submenu item */
- .el-menu--horizontal > .el-submenu .el-submenu__title {
- height: 50px !important;
- line-height: 50px !important;
- }
- </style>
- <style>
- .zero-padding-popover.el-popover {
- padding: 0px !important;
- }
- </style>
|