import * as VueRouter from 'vue-router';
|
|
export default function($store,$ui){
|
const routes = [
|
{ name: 'default', path: '/', component: () => import('@/pages/screen/Screen1.vue') },
|
{ name: 'screen1', path: '/1', component: () => import('@/pages/screen/Screen1.vue') },
|
{ name: 'screen3', path: '/2', component: () => import('@/pages/screen/Screen3.vue') }
|
]
|
|
const router = VueRouter.createRouter({
|
history: VueRouter.createWebHashHistory(),
|
routes
|
})
|
|
router.beforeEach((to, from) => {
|
/* 登录需求判断 */
|
if (to.meta.login) {
|
let token = $store.getters['user/getToken'];
|
if (!token) {
|
return {path:'/login'}
|
}
|
}
|
/* 数据出错,页面不在用户权限 */
|
if (to.fullPath.startsWith('/sub-')) {
|
let __menus = $store.getters['user/getMenusList'];
|
}
|
|
|
/* 获取路由的完整路径 */
|
const __getCurrentRoutePath = function(compareVar,isRoot=true) {
|
let res = {error:false,response:[]};
|
let _homeRoute = {
|
id:'-999999',
|
name:'首页',
|
path:'/sub-home'
|
}
|
if (compareVar==='/sub-home') {
|
res.response = [_homeRoute]
|
} else {
|
let menus = $store.getters['user/getMenusList'];
|
const parentFields = 'pid';
|
let compareFields = 'path';
|
if (!isRoot) {
|
compareFields = 'id';
|
}
|
for (let i=0;i<menus.length;i++) {
|
if (menus[i][compareFields] === compareVar) {
|
res.response.push(menus[i]);
|
if (menus[i][parentFields]) {
|
let childRes = __getCurrentRoutePath(menus[i][parentFields],false)
|
res.response = [...childRes.response,...res.response]
|
}
|
break;
|
}
|
}
|
/* 路由不在用户菜单权限中 */
|
if (isRoot && res.response.length<=0) {
|
res.response = [_homeRoute]
|
res.error = true
|
}
|
}
|
|
return res;
|
}
|
|
/* 设置菜单tab */
|
const __dealMenuTabs = function(isErr) {
|
let uobj = $store.getters['user/getUserInfo'];
|
if (isErr) {
|
$store.commit('system/setMenuTabs',{
|
uid:uobj['user_id'],
|
tabs:[]
|
})
|
return []
|
}
|
let oldTemp = $store.getters['system/getMenuTabs'];
|
if (to.fullPath==='/sub-home') {
|
if (oldTemp.uid !== uobj['user_id']) {
|
$store.commit('system/setMenuTabs',{
|
uid:uobj['user_id'],
|
tabs:[]
|
})
|
return []
|
} else {
|
return oldTemp.tabs
|
}
|
} else {
|
let menus = $store.getters['user/getMenusList'];
|
let currentMenu = {};
|
for (let i=0;i<menus.length;i++) {
|
if (menus[i].path === to.fullPath) {
|
currentMenu = menus[i];
|
break;
|
}
|
}
|
if (!currentMenu.id) {
|
return oldTemp.tabs;
|
}
|
|
if (oldTemp.uid === uobj['user_id']) {
|
let tempFlag = false, newTemp = {...oldTemp};
|
for (let j=0;j<newTemp.tabs.length;j++) {
|
if (newTemp.tabs[j].id === currentMenu.id) {
|
newTemp.tabs[j] = currentMenu;
|
tempFlag = true;
|
break;
|
}
|
}
|
if (!tempFlag) {
|
newTemp.tabs.push(currentMenu)
|
}
|
$store.commit('system/setMenuTabs',newTemp)
|
return newTemp.tabs;
|
} else {
|
$store.commit('system/setMenuTabs',{
|
uid:uobj['user_id'],
|
tabs:[currentMenu]
|
})
|
return [currentMenu]
|
}
|
}
|
}
|
|
/* 计算设置 需要加载的子页面的组件 */
|
const _setNewActiveSubpages = function(tabs,toPage) {
|
let temp = $store.getters['system/getActiveSubpages'];
|
let res = [...temp];
|
let refreshFlag = false, _count=0,doNew=true;
|
while(_count<res.length) {
|
if (doNew && res[_count]===toPage) {
|
doNew = false
|
}
|
/* 除home,不在tab中的页面不需要预加载和保存,如此方可保证再次打开这些页面的时候会刷新该页面 */
|
let needDel = true;
|
if (res[_count]==='home') {
|
needDel = false;
|
} else {
|
for (let i=0;i<tabs.length;i++) {
|
if (tabs[i].path === '/sub-'+ res[_count]) {
|
needDel = false;
|
break;
|
}
|
}
|
}
|
if (needDel) {
|
res.splice(_count,1);
|
refreshFlag = true;
|
} else {
|
_count++;
|
}
|
}
|
if (doNew) {
|
res.push(toPage)
|
refreshFlag = true;
|
}
|
if (refreshFlag) {
|
$store.commit('system/setActiveSubpages',res)
|
}
|
}
|
|
/* 子页面数据处理 */
|
const __dealSubpagesData = function(toObj){
|
let res = {flag:true,path:''}
|
if (toObj.fullPath.startsWith('/sub-')) {
|
/* 当前路由的子页面 */
|
let _changePage = toObj.params.pagePath;
|
/* 当前子页面的菜单路径 */
|
let fullCurPath = __getCurrentRoutePath(toObj.fullPath);
|
if (fullCurPath.error) {
|
res.flag = false
|
res.path = '/sub-home'
|
_changePage = 'home'
|
}
|
|
/* 保存当前需要显示的子页面的菜单路径 */
|
$store.commit('system/setCurrentFullMenuPath',fullCurPath.response)
|
/* 保存当前需要显示的子页面的后缀 */
|
$store.commit('system/setVisibleSubpage',_changePage);
|
|
/* 保存当前需要显示的菜单tab */
|
let newTabs = __dealMenuTabs(fullCurPath.error)
|
|
/* 保存当前需要加载的子页面的组件,需要确认新的菜单tabs之后再执行 */
|
_setNewActiveSubpages(newTabs,_changePage)
|
}
|
return res;
|
}
|
|
/* 最终页面跳转 */
|
let finalFlag = __dealSubpagesData(to);
|
if (!finalFlag.flag) {
|
$ui.ElMessage.error('页面无权访问!')
|
return {path:finalFlag.path}
|
}
|
|
return true
|
})
|
|
return router
|
}
|