diff --git a/src/router/index.ts b/src/router/index.ts index 751f96b..4a214f5 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -98,42 +98,46 @@ router.beforeEach(async (to, from, next) => { if (to.meta.title) NProgress.start() const storesUseUserInfo = useUserInfo(pinia) const token = storesUseUserInfo.getToken() - if (to.meta.isPublic && !token) { + + // 如果是公共页面,直接通过,不需要检查token和路由列表 + if (to.meta.isPublic) { next() NProgress.done() + return + } + + if (!token) { + next(`/login?redirect=${to.path}¶ms=${JSON.stringify(to.query ? to.query : to.params)}`) + storesUseUserInfo.removeTokenInfo() + Session.clear() + NProgress.done() + } else if (token && to.path === '/login') { + console.log('🔄 [路由守卫] 已登录用户访问登录页面,重定向到系统入口页面') + next('/system-entrance') + NProgress.done() } else { - if (!token) { - next(`/login?redirect=${to.path}¶ms=${JSON.stringify(to.query ? to.query : to.params)}`) - storesUseUserInfo.removeTokenInfo() - Session.clear() - NProgress.done() - } else if (token && to.path === '/login') { - next('/') - NProgress.done() - } else { - const storesRoute = useRoute(pinia) - storesRoute.setRouteTo({ to: { path: to.path, params: JSON.stringify(to.query ? to.query : to.params) } }) - const storesRoutesList = useRoutesList(pinia) - const { routesList } = storeToRefs(storesRoutesList) - if (routesList.value.length === 0) { - if (isRequestRoutes) { - // 后端控制路由:路由数据初始化,防止刷新时丢失 - const isNoPower = await initBackEndControlRoutes() - if (isNoPower) { - ElMessage.warning('抱歉,您没有分配权限,请联系管理员') - storesUseUserInfo.removeTokenInfo() - Session.clear() - } - // 解决刷新时,一直跳 404 页面问题,关联问题 No match found for location with path 'xxx' - // to.query 防止页面刷新时,普通路由带参数时,参数丢失。动态路由(xxx/:id/:name")isDynamic 无需处理 - next({ path: to.path, query: to.query }) - } else { - await initFrontEndControlRoutes() - next({ path: to.path, query: to.query }) + const storesRoute = useRoute(pinia) + storesRoute.setRouteTo({ to: { path: to.path, params: JSON.stringify(to.query ? to.query : to.params) } }) + const storesRoutesList = useRoutesList(pinia) + const { routesList } = storeToRefs(storesRoutesList) + if (routesList.value.length === 0) { + if (isRequestRoutes) { + // 后端控制路由:路由数据初始化,防止刷新时丢失 + const isNoPower = await initBackEndControlRoutes() + if (isNoPower) { + ElMessage.warning('抱歉,您没有分配权限,请联系管理员') + storesUseUserInfo.removeTokenInfo() + Session.clear() } + // 解决刷新时,一直跳 404 页面问题,关联问题 No match found for location with path 'xxx' + // to.query 防止页面刷新时,普通路由带参数时,参数丢失。动态路由(xxx/:id/:name")isDynamic 无需处理 + next({ path: to.path, query: to.query }) } else { - next() + await initFrontEndControlRoutes() + next({ path: to.path, query: to.query }) } + } else { + next() } } }) diff --git a/src/router/route.ts b/src/router/route.ts index 6f8c374..7eb80a7 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -143,6 +143,15 @@ export const staticRoutes: Array = [ isPublic: true, }, }, + { + path: '/system-entrance', + name: 'system-entrance', + component: () => import('/@/views/system-entrance/index.vue'), + meta: { + title: '系统入口', + isPublic: true, + }, + }, /** * 提示:写在这里的为全屏界面,不建议写在这里 * 请写在 `dynamicRoutes` 路由数组中 diff --git a/src/views/admin/login/component/account.vue b/src/views/admin/login/component/account.vue index 4ea70e7..c56ea42 100644 --- a/src/views/admin/login/component/account.vue +++ b/src/views/admin/login/component/account.vue @@ -217,6 +217,10 @@ const onSignIn = async () => { } // 登录成功后的跳转 const signInSuccess = (isNoPower: boolean | undefined) => { + console.log('🚀 [登录成功] signInSuccess 被调用') + console.log('🚀 [登录成功] isNoPower:', isNoPower) + console.log('🚀 [登录成功] route.query:', route.query) + if (isNoPower) { ElMessage.warning('抱歉,您没有分配权限,请联系管理员') useUserInfo().removeTokenInfo() @@ -224,15 +228,17 @@ const signInSuccess = (isNoPower: boolean | undefined) => { } else { // 初始化登录成功时间问候语 let currentTimeInfo = currentTime.value - // 登录成功,跳到转首页 + // 登录成功,跳到系统入口页面 // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 - if (route.query?.redirect) { + if (route.query?.redirect && route.query.redirect !== '/') { + console.log('🚀 [登录成功] 有redirect参数且不是首页,跳转到:', route.query.redirect) router.push({ path: route.query?.redirect, query: Object.keys(route.query?.params).length > 0 ? JSON.parse(route.query?.params) : '', }) } else { - router.push('/') + console.log('🚀 [登录成功] 无redirect参数或redirect是首页,跳转到系统入口页面: /system-entrance') + router.push('/system-entrance') } // 登录成功提示 const signInText = t('message.signInText') diff --git a/src/views/admin/login/component/email.vue b/src/views/admin/login/component/email.vue index 8d9d7d9..32a1f17 100644 --- a/src/views/admin/login/component/email.vue +++ b/src/views/admin/login/component/email.vue @@ -135,15 +135,15 @@ const signInSuccess = (isNoPower: boolean | undefined) => { } else { // 初始化登录成功时间问候语 let currentTimeInfo = currentTime.value - // 登录成功,跳到转首页 + // 登录成功,跳到系统入口页面 // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 - if (route.query?.redirect) { + if (route.query?.redirect && route.query.redirect !== '/') { router.push({ path: route.query?.redirect, query: Object.keys(route.query?.params).length > 0 ? JSON.parse(route.query?.params) : '', }) } else { - router.push('/') + router.push('/system-entrance') } // 登录成功提示 const signInText = t('message.signInText') diff --git a/src/views/admin/login/component/mobile.vue b/src/views/admin/login/component/mobile.vue index 87f6927..058f874 100644 --- a/src/views/admin/login/component/mobile.vue +++ b/src/views/admin/login/component/mobile.vue @@ -138,15 +138,15 @@ const signInSuccess = (isNoPower: boolean | undefined) => { } else { // 初始化登录成功时间问候语 let currentTimeInfo = currentTime.value - // 登录成功,跳到转首页 + // 登录成功,跳到系统入口页面 // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 - if (route.query?.redirect) { + if (route.query?.redirect && route.query.redirect !== '/') { router.push({ path: route.query?.redirect, query: Object.keys(route.query?.params).length > 0 ? JSON.parse(route.query?.params) : '', }) } else { - router.push('/') + router.push('/system-entrance') } // 登录成功提示 const signInText = t('message.signInText') diff --git a/src/views/example/login/component/account.vue b/src/views/example/login/component/account.vue index 2490391..17d8d69 100644 --- a/src/views/example/login/component/account.vue +++ b/src/views/example/login/component/account.vue @@ -114,20 +114,21 @@ const onSignIn = async () => { // 登录成功后的跳转 const signInSuccess = (isNoPower: boolean | undefined) => { if (isNoPower) { - ElMessage.warning('抱歉,您没有登录权限') + ElMessage.warning('抱歉,您没有分配权限,请联系管理员') + useUserInfo().removeTokenInfo() Session.clear() } else { // 初始化登录成功时间问候语 let currentTimeInfo = currentTime.value - // 登录成功,跳到转首页 + // 登录成功,跳到系统入口页面 // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 - if (route.query?.redirect) { + if (route.query?.redirect && route.query.redirect !== '/') { router.push({ path: route.query?.redirect, query: Object.keys(route.query?.params).length > 0 ? JSON.parse(route.query?.params) : '', }) } else { - router.push('/') + router.push('/system-entrance') } // 登录成功提示 const signInText = t('message.signInText') diff --git a/src/views/system-entrance/index.vue b/src/views/system-entrance/index.vue new file mode 100644 index 0000000..37ac9b2 --- /dev/null +++ b/src/views/system-entrance/index.vue @@ -0,0 +1,481 @@ + + + + +