|
|
@@ -1,5 +1,7 @@
|
|
|
-import { createRouter, createWebHashHistory } from 'vue-router'
|
|
|
-import App from '../App.vue'
|
|
|
+import {createRouter, createWebHashHistory} from 'vue-router'
|
|
|
+import {CONFIG} from "@/utils/roleUtils.js";
|
|
|
+import {Message} from "@/utils/message/Message.js";
|
|
|
+
|
|
|
|
|
|
const routes = [
|
|
|
{ path: '/', component: () => import('../views/Login.vue') },
|
|
|
@@ -102,12 +104,12 @@ const routes = [
|
|
|
{ path: '/programming02', component: () => import('../views/gamepage/GameIndex.vue') },
|
|
|
// 编程课列表
|
|
|
{
|
|
|
- path: '/programminglist',
|
|
|
+ path: '/programmingList',
|
|
|
component: () => import('../views/programming/ProgrammingList.vue')
|
|
|
},
|
|
|
// 编程课列表内容
|
|
|
{
|
|
|
- path: '/programmingcourset',
|
|
|
+ path: '/programmingCourset',
|
|
|
component: () => import('../views/programming/ProgrammingCourset.vue')
|
|
|
},
|
|
|
// 编程课视频
|
|
|
@@ -141,7 +143,9 @@ const routes = [
|
|
|
|
|
|
// 定义主页及其子路由映射
|
|
|
const homeRoutes = {
|
|
|
- main: '/home',
|
|
|
+ home: '/home',
|
|
|
+ login: '/login',
|
|
|
+ role: 'course',
|
|
|
children: [
|
|
|
'/ai-general-course',
|
|
|
'/ai-laboratory',
|
|
|
@@ -161,20 +165,24 @@ const homeRoutes = {
|
|
|
}
|
|
|
|
|
|
const blocklyRoutes = {
|
|
|
- main: '/blocklyHome',
|
|
|
+ home: '/blocklyHome',
|
|
|
+ login: '/blockly-login',
|
|
|
+ role: 'blockly',
|
|
|
children: [
|
|
|
'/blockly',
|
|
|
'/blockly2',
|
|
|
'/mapGame',
|
|
|
'/programming02',
|
|
|
- '/programminglist',
|
|
|
- '/programmingcourset',
|
|
|
+ '/programmingList',
|
|
|
+ '/programmingCourset',
|
|
|
'/interface'
|
|
|
]
|
|
|
}
|
|
|
|
|
|
const aiCourseRoutes = {
|
|
|
- main: '/aiCourseHome',
|
|
|
+ home: '/aiCourseHome',
|
|
|
+ login: '/ai-login',
|
|
|
+ role: 'aiCourse',
|
|
|
children: [
|
|
|
'/experiment-type',
|
|
|
'/experimental-course',
|
|
|
@@ -184,13 +192,17 @@ const aiCourseRoutes = {
|
|
|
|
|
|
// 定义登录页面与主页的映射关系
|
|
|
const loginToHomeMap = {
|
|
|
- '/login': homeRoutes.main,
|
|
|
- '/quick-login': homeRoutes.main,
|
|
|
- '/promotion-login': homeRoutes.main,
|
|
|
- '/blockly-login': blocklyRoutes.main,
|
|
|
- '/ai-login': aiCourseRoutes.main
|
|
|
+ '/login': homeRoutes.home,
|
|
|
+ '/quick-login': homeRoutes.home,
|
|
|
+ '/promotion-login': homeRoutes.home,
|
|
|
+ '/blockly-login': blocklyRoutes.home,
|
|
|
+ '/ai-login': aiCourseRoutes.home
|
|
|
}
|
|
|
|
|
|
+// 从localStorage获取角色路由数据
|
|
|
+const roleRouteStr = localStorage.getItem(CONFIG.USER_ROLE_ROUTE_KEY)
|
|
|
+const roleRouteSet = roleRouteStr ? JSON.parse(roleRouteStr) : []
|
|
|
+
|
|
|
const router = createRouter({
|
|
|
history: createWebHashHistory(),
|
|
|
routes
|
|
|
@@ -209,7 +221,7 @@ router.beforeEach((to, from, next) => {
|
|
|
const loginPath = localStorage.getItem('loginPath')
|
|
|
|
|
|
// 获取当前登录类型对应的主页
|
|
|
- const allowedHome = loginToHomeMap[loginPath]
|
|
|
+ let allowedHome = loginToHomeMap[loginPath]
|
|
|
|
|
|
// 如果没有登录信息,允许访问所有页面(或根据实际需求处理)
|
|
|
if (!loginPath || !allowedHome) {
|
|
|
@@ -220,23 +232,46 @@ router.beforeEach((to, from, next) => {
|
|
|
// 检查目标路由是否在允许的路由范围内
|
|
|
let isAllowed = false
|
|
|
|
|
|
- if (allowedHome === homeRoutes.main) {
|
|
|
- // home主页允许访问所有页面
|
|
|
+ // 首先检查用户是否有权限访问对应的主页
|
|
|
+ const hasHomePermission = roleRouteSet.includes(homeRoutes.role)
|
|
|
+ const hasBlocklyPermission = roleRouteSet.includes(blocklyRoutes.role)
|
|
|
+ const hasAiCoursePermission = roleRouteSet.includes(aiCourseRoutes.role)
|
|
|
+
|
|
|
+ // 如果用户没有当前登录类型对应的权限,切换到用户有权限的主页
|
|
|
+ if (!((allowedHome === homeRoutes.home && hasHomePermission) ||
|
|
|
+ (allowedHome === blocklyRoutes.home && hasBlocklyPermission) ||
|
|
|
+ (allowedHome === aiCourseRoutes.home && hasAiCoursePermission))) {
|
|
|
+ // 找到用户有权限的主页
|
|
|
+ if (hasAiCoursePermission) {
|
|
|
+ allowedHome = aiCourseRoutes.home
|
|
|
+ } else if (hasBlocklyPermission) {
|
|
|
+ allowedHome = blocklyRoutes.home
|
|
|
+ } else if (hasHomePermission) {
|
|
|
+ allowedHome = homeRoutes.home
|
|
|
+ } else {
|
|
|
+ // 如果没有任何权限,可以考虑重定向到登录页面或其他公共页面
|
|
|
+ next(loginPath)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查目标路由是否在允许的范围内
|
|
|
+ if ((to.path === homeRoutes.home || homeRoutes.children.includes(to.path)) && hasHomePermission) {
|
|
|
+ isAllowed = true
|
|
|
+ } else if ((to.path === blocklyRoutes.home || blocklyRoutes.children.includes(to.path)) && hasBlocklyPermission) {
|
|
|
+ isAllowed = true
|
|
|
+ } else if ((to.path === aiCourseRoutes.home || aiCourseRoutes.children.includes(to.path)) && hasAiCoursePermission) {
|
|
|
isAllowed = true
|
|
|
- } else if (allowedHome === blocklyRoutes.main) {
|
|
|
- // blocklyHome主页只允许访问自己和子路由
|
|
|
- isAllowed = to.path === blocklyRoutes.main || blocklyRoutes.children.includes(to.path)
|
|
|
- } else if (allowedHome === aiCourseRoutes.main) {
|
|
|
- // aiCourseHome主页只允许访问自己和子路由
|
|
|
- isAllowed = to.path === aiCourseRoutes.main || aiCourseRoutes.children.includes(to.path)
|
|
|
}
|
|
|
|
|
|
if (isAllowed) {
|
|
|
next()
|
|
|
} else {
|
|
|
- // 不允许访问时,重定向到对应主页
|
|
|
+ // 不允许访问时,重定向到用户有权限的主页
|
|
|
+ Message().warning('您没有权限访问该页面,已自动切换到您有权限的主页!', true);
|
|
|
next(allowedHome)
|
|
|
}
|
|
|
})
|
|
|
+export default router;
|
|
|
|
|
|
-export default router
|
|
|
+export { homeRoutes, blocklyRoutes, aiCourseRoutes };
|