18 changed files with 2906 additions and 1101 deletions
			
			
		| 
		 Before Width: | Height: | Size: 248 KiB After Width: | Height: | Size: 335 KiB  | 
| 
		 Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 187 KiB  | 
@ -1,63 +1,87 @@
					 | 
				
			||||
import router from './router' | 
				
			||||
import store from './store' | 
				
			||||
import { Message } from 'element-ui' | 
				
			||||
import NProgress from 'nprogress' | 
				
			||||
import 'nprogress/nprogress.css' | 
				
			||||
import { getToken } from '@/utils/auth' | 
				
			||||
import { isPathMatch } from '@/utils/validate' | 
				
			||||
import { isRelogin } from '@/utils/request' | 
				
			||||
import router from "./router"; | 
				
			||||
import store from "./store"; | 
				
			||||
import { Message } from "element-ui"; | 
				
			||||
import NProgress from "nprogress"; | 
				
			||||
import "nprogress/nprogress.css"; | 
				
			||||
import { getToken } from "@/utils/auth"; | 
				
			||||
import { isPathMatch } from "@/utils/validate"; | 
				
			||||
import { isRelogin } from "@/utils/request"; | 
				
			||||
import { | 
				
			||||
  isFullscreenSupported, | 
				
			||||
  requestFullscreen, | 
				
			||||
  isFullscreen, | 
				
			||||
} from "@/utils/fullscreen"; | 
				
			||||
NProgress.configure({ showSpinner: false }); | 
				
			||||
 | 
				
			||||
NProgress.configure({ showSpinner: false }) | 
				
			||||
 | 
				
			||||
const whiteList = ['/login', '/register'] | 
				
			||||
const whiteList = ["/login", "/register"]; | 
				
			||||
 | 
				
			||||
const isWhiteList = (path) => { | 
				
			||||
  return whiteList.some(pattern => isPathMatch(pattern, path)) | 
				
			||||
} | 
				
			||||
  return whiteList.some((pattern) => isPathMatch(pattern, path)); | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
let userManuallyExitedFullscreen = false; | 
				
			||||
 | 
				
			||||
// 监听全屏状态变化事件
 | 
				
			||||
document.addEventListener("fullscreenchange", () => { | 
				
			||||
  if (!isFullscreen()) { | 
				
			||||
    userManuallyExitedFullscreen = true; | 
				
			||||
  } | 
				
			||||
}); | 
				
			||||
 | 
				
			||||
router.beforeEach((to, from, next) => { | 
				
			||||
  NProgress.start() | 
				
			||||
  NProgress.start(); | 
				
			||||
  if (getToken()) { | 
				
			||||
    to.meta.title && store.dispatch('settings/setTitle', to.meta.title) | 
				
			||||
    to.meta.title && store.dispatch("settings/setTitle", to.meta.title); | 
				
			||||
    /* has token*/ | 
				
			||||
    if (to.path === '/login') { | 
				
			||||
      next({ path: '/' }) | 
				
			||||
      NProgress.done() | 
				
			||||
    if (to.path === "/login") { | 
				
			||||
      next({ path: "/" }); | 
				
			||||
      NProgress.done(); | 
				
			||||
    } else if (isWhiteList(to.path)) { | 
				
			||||
      next() | 
				
			||||
      if (isFullscreenSupported() && !userManuallyExitedFullscreen) { | 
				
			||||
        const element = document.documentElement; | 
				
			||||
        requestFullscreen(element); | 
				
			||||
      } | 
				
			||||
      next(); | 
				
			||||
    } else { | 
				
			||||
      if (store.getters.roles.length === 0) { | 
				
			||||
        isRelogin.show = true | 
				
			||||
        isRelogin.show = true; | 
				
			||||
        // 判断当前用户是否已拉取完user_info信息
 | 
				
			||||
        store.dispatch('GetInfo').then(() => { | 
				
			||||
          isRelogin.show = false | 
				
			||||
          store.dispatch('GenerateRoutes').then(accessRoutes => { | 
				
			||||
            // 根据roles权限生成可访问的路由表
 | 
				
			||||
            router.addRoutes(accessRoutes) // 动态添加可访问路由表
 | 
				
			||||
            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
 | 
				
			||||
          }) | 
				
			||||
        }).catch(err => { | 
				
			||||
            store.dispatch('LogOut').then(() => { | 
				
			||||
              Message.error(err) | 
				
			||||
              next({ path: '/' }) | 
				
			||||
            }) | 
				
			||||
        store | 
				
			||||
          .dispatch("GetInfo") | 
				
			||||
          .then(() => { | 
				
			||||
            isRelogin.show = false; | 
				
			||||
            store.dispatch("GenerateRoutes").then((accessRoutes) => { | 
				
			||||
              // 根据roles权限生成可访问的路由表
 | 
				
			||||
              router.addRoutes(accessRoutes); // 动态添加可访问路由表
 | 
				
			||||
              next({ ...to, replace: true }); // hack方法 确保addRoutes已完成
 | 
				
			||||
            }); | 
				
			||||
          }) | 
				
			||||
          .catch((err) => { | 
				
			||||
            store.dispatch("LogOut").then(() => { | 
				
			||||
              Message.error(err); | 
				
			||||
              next({ path: "/" }); | 
				
			||||
            }); | 
				
			||||
          }); | 
				
			||||
      } else { | 
				
			||||
        next() | 
				
			||||
        if (isFullscreenSupported() && !userManuallyExitedFullscreen) { | 
				
			||||
          const element = document.documentElement; | 
				
			||||
          requestFullscreen(element); | 
				
			||||
        } | 
				
			||||
        next(); | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } else { | 
				
			||||
    // 没有token
 | 
				
			||||
    if (isWhiteList(to.path)) { | 
				
			||||
      // 在免登录白名单,直接进入
 | 
				
			||||
      next() | 
				
			||||
      next(); | 
				
			||||
    } else { | 
				
			||||
      next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页
 | 
				
			||||
      NProgress.done() | 
				
			||||
      next(`/login?redirect=${encodeURIComponent(to.fullPath)}`); // 否则全部重定向到登录页
 | 
				
			||||
      NProgress.done(); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
}) | 
				
			||||
}); | 
				
			||||
 | 
				
			||||
router.afterEach(() => { | 
				
			||||
  NProgress.done() | 
				
			||||
}) | 
				
			||||
  NProgress.done(); | 
				
			||||
}); | 
				
			||||
					 | 
				
			||||
@ -0,0 +1,53 @@
					 | 
				
			||||
// 检查浏览器是否支持全屏 API
 | 
				
			||||
function isFullscreenSupported() { | 
				
			||||
  return ( | 
				
			||||
    document.fullscreenEnabled || | 
				
			||||
    document.webkitFullscreenEnabled || | 
				
			||||
    document.mozFullScreenEnabled || | 
				
			||||
    document.msFullscreenEnabled | 
				
			||||
  ); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// 进入全屏模式
 | 
				
			||||
function requestFullscreen(element) { | 
				
			||||
  if (element.requestFullscreen) { | 
				
			||||
    element.requestFullscreen(); | 
				
			||||
  } else if (element.webkitRequestFullscreen) { | 
				
			||||
    element.webkitRequestFullscreen(); | 
				
			||||
  } else if (element.mozRequestFullScreen) { | 
				
			||||
    element.mozRequestFullScreen(); | 
				
			||||
  } else if (element.msRequestFullscreen) { | 
				
			||||
    element.msRequestFullscreen(); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// 退出全屏模式
 | 
				
			||||
function exitFullscreen() { | 
				
			||||
  if (document.exitFullscreen) { | 
				
			||||
    document.exitFullscreen(); | 
				
			||||
  } else if (document.webkitExitFullscreen) { | 
				
			||||
    document.webkitExitFullscreen(); | 
				
			||||
  } else if (document.mozCancelFullScreen) { | 
				
			||||
    document.mozCancelFullScreen(); | 
				
			||||
  } else if (document.msExitFullscreen) { | 
				
			||||
    document.msExitFullscreen(); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// 检查当前是否处于全屏状态
 | 
				
			||||
function isFullscreen() { | 
				
			||||
  return ( | 
				
			||||
    document.fullscreenElement || | 
				
			||||
    document.webkitFullscreenElement || | 
				
			||||
    document.mozFullScreenElement || | 
				
			||||
    document.msFullscreenElement | 
				
			||||
  ); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
export { | 
				
			||||
  isFullscreenSupported, | 
				
			||||
  requestFullscreen, | 
				
			||||
  exitFullscreen, | 
				
			||||
  isFullscreen, | 
				
			||||
}; | 
				
			||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
					Loading…
					
					
				
		Reference in new issue