jiangping
2025-07-02 ec7cc88fca8de4b3c56f8ebee074fb7ce71ebf1e
admin/src/router/index.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
import AppLayout from '@/layouts/AppLayout'
import { getUserInfo } from '@/api/system/common'
const Login = () => import('@/views/login')
const ErrorNoPermissions = () => import('@/views/no-permissions')
const Error404 = () => import('@/views/not-found')
Vue.use(VueRouter)
const router = new VueRouter({
  base: process.env.VUE_APP_CONTEXT_PATH + (process.env.VUE_APP_ROUTER_MODE === 'hash' ? '#' : ''),
  mode: process.env.VUE_APP_ROUTER_MODE,
  routes: [
    // ç™»å½•
    {
      name: 'login',
      path: '/login',
      component: Login
    },
    // æ— æƒé™
    {
      name: 'no-permissions',
      path: '/no-permissions',
      component: ErrorNoPermissions
    },
    // 404
    {
      name: 'not-found',
      path: '/not-found',
      component: Error404
    },
    // å†…容页(动态加载)
    {
      name: 'layout',
      path: '',
      component: AppLayout,
      children: []
    }
  ]
})
router.beforeEach((to, from, next) => {
  // æ— æƒè®¿é—®&404页面可直接访问
  if (to.name === 'no-permissions' || to.name === 'not-found') {
    next()
    return
  }
  // å¦‚果访问的是layout(回退时可能存在该情况),直奔index
  if (to.name === 'layout') {
    next({ name: 'index' })
    return
  }
  // éªŒè¯ç”¨æˆ·æ˜¯å¦ç™»å½•
  const userInfo = router.app.$options.store.state.userInfo
  if (userInfo != null) {
    // å¦‚果用户不存在权限
    if (userInfo.permissions.length === 0) {
      next({ name: 'no-permissions' })
      return
    }
    // å¦‚果访问的是登录页面,则直接跳转至首页
    if (to.name === 'login') {
      next({ name: 'index' })
      return
    }
    next()
    return
  }
  getUserInfo()
    .then(userInfo => {
      // å¦‚果用户不存在权限
      if (userInfo.permissions.length === 0) {
        next({ name: 'no-permissions' })
        return
      }
      // å·²ç™»å½•,存储userInfo
      router.app.$store.commit('setUserInfo', userInfo)
      // å¦‚果访问的是登录页面,则直接跳转至首页
      if (to.name === 'login') {
        next({ name: 'index' })
        return
      }
      next()
    })
    .catch(e => {
      // å¦‚果访问的是登录页面,则直接放行
      if (to.name === 'login') {
        next()
        return
      }
      // æœªç™»å½•,跳转至登录页
      next({ name: 'login' })
    })
})
router.afterEach((to, from, failure) => {
  setTimeout(function () {
    computeTableHeightIndex()
    window.addEventListener('resize', function(){
      computeTableHeightIndex()}
    )
  }, 1000)
})
function computeTableHeightIndex () {
  const height = window.innerHeight
  // console.log('beforeEach========================:' + height)
  const height13 = getEleHeghtByClassName('common-header', 0)
  const height4 = getEleHeghtByClassName('table-pagination', 0,-20)
  const height5 = document.getElementsByTagName('thead') && document.getElementsByTagName('thead')[0] ? document.getElementsByTagName('thead')[0].clientHeight : 0
    // console.log('tableLayout========================')
    const height1 = getEleHeghtByClassName('table-search-form', 40, 16)
    const height3 = getEleHeghtByClassName('main-header', 0)
    // const height4 = getEleHeghtByClassName('table-pagination', 0,-20)
    const height2 = getEleHeghtByClassName('toolbar', 0)
    // console.log('defualtlength', document.getElementsByClassName('table-search-form').length)
    router.app.$store.commit('setTableHeightNew', height - height4 - height3 - height2 - height1 - height5 - height13)
    // console.log('gableHeightNew', router.app.$store.state.tableHeightNew)
}
function getEleHeghtByClassName (name, dv, margin) {
  if ((document.getElementsByClassName(name) && document.getElementsByClassName(name)[0])) {
    let t = 0
    document.getElementsByClassName(name).forEach(e => {
      // console.log(name + '========================' + t + ':' + e.clientHeight)
      t++
    })
    return document.getElementsByClassName(name)[document.getElementsByClassName(name).length - 1].clientHeight + (margin || 0)
  }
  return dv || 0
}
export default router