|
|
|
@ -59,40 +59,50 @@ const router = new Router({ |
|
|
|
routes: globalRoutes.concat(mainRoutes) |
|
|
|
}) |
|
|
|
|
|
|
|
router.beforeEach((to, from, next) => {console.log(Vue.prototype.$store) |
|
|
|
// 添加动态(菜单)路由
|
|
|
|
// 1. 已经添加 or 全局路由, 直接访问
|
|
|
|
// 2. 获取菜单列表, 添加并保存本地存储
|
|
|
|
router.beforeEach((to, from, next) => { |
|
|
|
const token = localStorage.getItem('token'); |
|
|
|
const isLogin = to.name === 'login'; // 判断是否是登录页
|
|
|
|
|
|
|
|
// 保存原始路径(仅在未登录状态下保存)
|
|
|
|
if (!token && !isLogin) { |
|
|
|
console.log('保存重定向路径:', to.fullPath); |
|
|
|
localStorage.setItem('redirectPath', to.fullPath); |
|
|
|
} |
|
|
|
|
|
|
|
// 动态路由逻辑处理
|
|
|
|
if (router.options.isAddDynamicMenuRoutes || fnCurrentRouteType(to, globalRoutes) === 'global') { |
|
|
|
next() |
|
|
|
next(); |
|
|
|
} else { |
|
|
|
let menuType = localStorage.getItem('menuType') |
|
|
|
http({ |
|
|
|
url: http.adornUrl('/sys/menu/nav'), |
|
|
|
method: 'get', |
|
|
|
params: { |
|
|
|
'l': i18n.locale, //i18n.locale
|
|
|
|
l: i18n.locale, // 当前语言
|
|
|
|
menuType: 'pc' |
|
|
|
} |
|
|
|
}).then(({data}) => { |
|
|
|
if (data && data.code === 0) { |
|
|
|
fnAddDynamicMenuRoutes(data.menuList) |
|
|
|
router.options.isAddDynamicMenuRoutes = true |
|
|
|
sessionStorage.setItem('menuList', JSON.stringify(data.menuList || '[]')) |
|
|
|
sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]')) |
|
|
|
sessionStorage.setItem('userConfig', JSON.stringify(data.userConfig || '[]')) |
|
|
|
next({ ...to, replace: true }) |
|
|
|
} else { |
|
|
|
sessionStorage.setItem('menuList', '[]') |
|
|
|
sessionStorage.setItem('permissions', '[]') |
|
|
|
next() |
|
|
|
} |
|
|
|
}).catch((e) => { |
|
|
|
console.log(`%c${e} 请求菜单列表和权限失败,跳转至登录页!!`, 'color:blue') |
|
|
|
router.push({ name: 'login' }) |
|
|
|
}) |
|
|
|
.then(({ data }) => { |
|
|
|
if (data && data.code === 0) { |
|
|
|
fnAddDynamicMenuRoutes(data.menuList); // 添加动态菜单路由
|
|
|
|
router.options.isAddDynamicMenuRoutes = true; |
|
|
|
sessionStorage.setItem('menuList', JSON.stringify(data.menuList || '[]')); |
|
|
|
sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]')); |
|
|
|
sessionStorage.setItem('userConfig', JSON.stringify(data.userConfig || '[]')); |
|
|
|
next({ ...to, replace: true }); |
|
|
|
} else { |
|
|
|
console.error('菜单数据获取失败:', data.msg); |
|
|
|
sessionStorage.setItem('menuList', '[]'); |
|
|
|
sessionStorage.setItem('permissions', '[]'); |
|
|
|
next(); |
|
|
|
} |
|
|
|
}) |
|
|
|
.catch((e) => { |
|
|
|
console.error(`%c${e} 请求菜单列表和权限失败,跳转至登录页!!`, 'color:blue'); |
|
|
|
router.push({ name: 'login' }); // 跳转到登录页
|
|
|
|
}); |
|
|
|
} |
|
|
|
}) |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 判断当前路由类型, global: 全局路由, main: 主入口路由 |
|
|
|
|