@ -0,0 +1,8 @@
|
||||
{ |
||||
"folders": [ |
||||
{ |
||||
"path": "." |
||||
} |
||||
], |
||||
"settings": {} |
||||
} |
After Width: | Height: | Size: 330 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 132 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 129 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,419 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'; |
||||
import Layout from '@/layout/index.vue'; |
||||
import store from '@/store'; |
||||
import { refreshToken, casLogin } from '@/api/auth'; |
||||
import '@/utils/fineClubSDK'; |
||||
import { getUid, getExpiresTime } from '@/utils/cookie'; |
||||
import { delUrlParams } from '@/utils/urlQuery'; |
||||
|
||||
const routes = [ |
||||
{ |
||||
path: '/', |
||||
name: 'index', |
||||
component: Layout, |
||||
children: [ |
||||
{ |
||||
path: '/', |
||||
name: 'index', |
||||
component: () => import('@/views/index.vue'), |
||||
meta: { |
||||
title: '帆软学院-培养企业亟需的数据人才', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
|
||||
{ |
||||
path: '/cityclass', |
||||
name: 'cityclass', |
||||
component: () => import('@/views/cityclass.vue'), |
||||
meta: { |
||||
title: '城市课堂 - 帆软学院', |
||||
active: 'cityclass', |
||||
}, |
||||
}, |
||||
|
||||
/** |
||||
* 视频课 |
||||
*/ |
||||
{ |
||||
path: '/video', |
||||
name: 'videoindex', |
||||
component: () => import('@/views/video/indexVideo.vue'), |
||||
meta: { |
||||
title: '视频课 - 帆软学院', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
{ |
||||
path: '/video/:courseid', |
||||
name: 'video_course', |
||||
component: () => import('@/views/video/video_course.vue'), |
||||
meta: { |
||||
title: '视频课 - 帆软学院', |
||||
active: 'video', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
{ |
||||
path: '/video/play/:playid', |
||||
name: 'video_course_play', |
||||
component: () => import('@/views/video/play.vue'), |
||||
meta: { |
||||
title: '播放课程 - 视频课', |
||||
active: 'video', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
/** |
||||
* 班级 |
||||
*/ |
||||
{ |
||||
path: '/class', |
||||
name: 'StudyClass', |
||||
component: () => import('@/views/class/indexClass.vue'), |
||||
meta: { |
||||
title: '学习班 - 帆软学院', |
||||
}, |
||||
}, |
||||
|
||||
/** |
||||
* 进入班级教室 |
||||
*/ |
||||
{ |
||||
path: '/class/:classid', |
||||
name: 'layoutClass', |
||||
component: () => import('@/views/class/class.vue'), |
||||
meta: { |
||||
title: '课程章节 - 学习班', |
||||
active: 'class', |
||||
}, |
||||
children: [ |
||||
{ |
||||
path: '/class/:classid', |
||||
name: 'class_lesson', |
||||
component: () => import('@/views/class/class_lesson.vue'), |
||||
meta: { |
||||
title: '课程章节 - 学习班', |
||||
active: 'class', |
||||
tab: 'class_lesson', |
||||
}, |
||||
}, |
||||
{ |
||||
path: '/class/homework/:classid', |
||||
name: 'class_homework', |
||||
component: () => import('@/views/class/class_homework.vue'), |
||||
meta: { |
||||
title: '我的作业 - 学习班', |
||||
active: 'class', |
||||
}, |
||||
}, |
||||
{ |
||||
path: '/class/forum/:classid', |
||||
name: 'class_forum', |
||||
component: () => import('@/views/class/class_forum.vue'), |
||||
meta: { |
||||
title: '班级论坛 - 学习班', |
||||
active: 'class', |
||||
tab: 'class_forum', |
||||
}, |
||||
}, |
||||
{ |
||||
path: '/class/forum/:classid/:tid', |
||||
name: 'class_forum_thread', |
||||
component: () => import('@/views/class/class_forum_thread.vue'), |
||||
meta: { |
||||
title: '班级论坛 - 学习班', |
||||
active: 'class', |
||||
tab: 'class_forum', |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
/** |
||||
* 老师后台管理 |
||||
*/ |
||||
{ |
||||
path: '/class/admin/:classid', |
||||
name: 'adminLayoutClass', |
||||
component: () => import('@/views/class/admin/index_admin_class.vue'), |
||||
meta: { |
||||
title: '学生管理 - 学习班', |
||||
active: 'class', |
||||
}, |
||||
children: [ |
||||
{ |
||||
path: '/class/admin/student/:classid', |
||||
name: 'student_admin_class', |
||||
component: () => |
||||
import('@/views/class/admin/student_admin_class.vue'), |
||||
meta: { |
||||
title: '学生管理 - 学习班', |
||||
active: 'class', |
||||
}, |
||||
}, |
||||
{ |
||||
path: '/class/admin/homework/:classid', |
||||
name: 'homework_admin_class', |
||||
component: () => |
||||
import('@/views/class/admin/homework_admin_class.vue'), |
||||
meta: { |
||||
title: '批改作业 - 学习班', |
||||
active: 'class', |
||||
}, |
||||
}, |
||||
{ |
||||
path: '/class/admin/schedule/:classid', |
||||
name: 'schedule_admin_class', |
||||
component: () => |
||||
import('@/views/class/admin/schedule_admin_class.vue'), |
||||
meta: { |
||||
title: '教学进度管理 - 学习班', |
||||
active: 'class', |
||||
}, |
||||
}, |
||||
{ |
||||
path: '/class/admin/notice/:classid', |
||||
name: 'notice_admin_class', |
||||
component: () => |
||||
import('@/views/class/admin/notice_admin_class.vue'), |
||||
meta: { |
||||
title: '公告栏管理 - 学习班', |
||||
active: 'class', |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
/** |
||||
* 直播 |
||||
*/ |
||||
{ |
||||
path: '/live', |
||||
name: 'live', |
||||
component: () => import('@/views/live/live.vue'), |
||||
meta: { |
||||
title: '直播 - 帆软学院', |
||||
}, |
||||
}, |
||||
|
||||
{ |
||||
path: '/live/:liveid', |
||||
name: 'live_view', |
||||
component: () => import('@/views/live/live_view.vue'), |
||||
meta: { |
||||
title: '直播 - 帆软学院', |
||||
active: 'live', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
// 资源导航
|
||||
{ |
||||
path: '/more', |
||||
name: 'more', |
||||
component: () => import('@/views/more.vue'), |
||||
meta: { |
||||
title: '资源导航 - 帆软学院', |
||||
active: 'more', |
||||
}, |
||||
}, |
||||
|
||||
// 新手入门-地图 finereport
|
||||
{ |
||||
path: '/guide/finereport', |
||||
name: 'guide_finereport', |
||||
component: () => import('@/views/video/guide/finereport.vue'), |
||||
meta: { |
||||
title: 'FineReport入门学习路径 - 帆软学院', |
||||
active: 'studypath', |
||||
}, |
||||
}, |
||||
|
||||
// 新手入门-地图 finebi
|
||||
{ |
||||
path: '/guide/finebi', |
||||
name: 'guide_finebi', |
||||
component: () => import('@/views/video/guide/finebi.vue'), |
||||
meta: { |
||||
title: 'FineBI入门学习路径 - 帆软学院', |
||||
active: 'studypath', |
||||
}, |
||||
}, |
||||
|
||||
// 新手入门-地图 jiandaoyun
|
||||
{ |
||||
path: '/guide/jiandaoyun', |
||||
name: 'guide_jiandaoyun', |
||||
component: () => import('@/views/video/guide/jiandaoyun.vue'), |
||||
meta: { |
||||
title: '简道云入门学习路径 - 帆软学院', |
||||
active: 'studypath', |
||||
}, |
||||
}, |
||||
|
||||
// fr-学习路径首页
|
||||
{ |
||||
path: '/studypath/finereport', |
||||
name: 'studypathfr', |
||||
component: () => import('@/views/studypath/finereport.vue'), |
||||
meta: { |
||||
title: '报表开发工程师 - 学习路径 - 帆软学院', |
||||
active: 'studypath', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
// bi-学习路径首页
|
||||
{ |
||||
path: '/studypath/finebi', |
||||
name: 'studypathbi', |
||||
component: () => import('@/views/studypath/finebi.vue'), |
||||
meta: { |
||||
title: 'BI分析师 - 学习路径 - 帆软学院', |
||||
active: 'studypath', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
// bi-学习路径首页
|
||||
{ |
||||
path: '/studypath/finebiAdmin', |
||||
name: 'studypathbiAdmin', |
||||
component: () => import('@/views/studypath/finebiAdmin.vue'), |
||||
meta: { |
||||
title: 'FineBI管理员 - 学习路径 - 帆软学院', |
||||
active: 'studypath', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
|
||||
// 简道云-学习路径首页
|
||||
{ |
||||
path: '/studypath/jiandaoyun', |
||||
name: 'studypath_page_jdy', |
||||
component: () => import('@/views/studypath/jiandaoyun.vue'), |
||||
meta: { |
||||
title: '零代码开发工程师 - 学习路径 - 帆软学院', |
||||
active: 'studypath', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
{ |
||||
path: '/class/play/:classid/:videoid', |
||||
name: 'classPlay', |
||||
component: () => import('@/views/class/play.vue'), |
||||
meta: { |
||||
title: '播放课程 - 学习班', |
||||
active: 'class', |
||||
}, |
||||
}, |
||||
|
||||
{ |
||||
path: '/live/play/:liveid', |
||||
name: 'live_play', |
||||
component: () => import('@/views/live/live_play.vue'), |
||||
meta: { |
||||
title: '进入直播 - 直播', |
||||
active: 'live', |
||||
isMobile: 1, |
||||
}, |
||||
}, |
||||
|
||||
// 404
|
||||
{ |
||||
path: '/:catchAll(.*)', |
||||
name: '请求错误', |
||||
component: () => import('@/components/404.vue'), |
||||
}, |
||||
]; |
||||
|
||||
const router = createRouter({ |
||||
history: createWebHistory(), |
||||
routes, |
||||
linkActiveClass: 'active', |
||||
linkExactActiveClass: 'active', |
||||
scrollBehavior() { |
||||
return { top: 0 }; |
||||
}, |
||||
}); |
||||
|
||||
// 通过导航守卫 判断并刷新token
|
||||
let accessToken = store.getters.get_token; |
||||
let expires = getExpiresTime(); |
||||
let getdate = parseInt(new Date().getTime() / 1000); |
||||
|
||||
router.beforeEach((to, from, next) => { |
||||
// const { title } = to.meta;
|
||||
// document.title = getPageTitle(title);
|
||||
|
||||
const get_ticket = to.query.ticket || 0; |
||||
const get_type = to.query.type ? to.query.type : '0'; |
||||
|
||||
// ticket空执行删除
|
||||
const is_ticket_null = new URL(window.location); |
||||
if(is_ticket_null.searchParams.has("ticket")){ |
||||
if(get_ticket===0 || get_ticket=='null'){ |
||||
console.log('ticket空'); |
||||
parent.window.location.replace(process.env.VUE_APP_ID_URL+'/login/token/logout?referrer='+encodeURIComponent(process.env.VUE_APP_EDU_URL)); |
||||
} |
||||
} |
||||
|
||||
// fineClubSDK接入
|
||||
let app = 'edu'; |
||||
let isDev = process.env.VUE_APP_ENV == 'dist' ? false : true; |
||||
function getLoginUid() { |
||||
return getUid() || 0; |
||||
} |
||||
window.fineClub.config({ app, getLoginUid, debug: isDev, dev: isDev }); |
||||
window.fineClub.autoReloadOnLoginChange({ loginUrl: process.env.VUE_APP_ID_URL + '/login/signin/?app=edu&protocol=cas&referrer=' + encodeURIComponent(window.location.href) }); |
||||
|
||||
if (to.meta.title) { |
||||
document.title = to.meta.title; |
||||
} |
||||
|
||||
// 如果有token和过期时间,然后快过期了执行刷新token
|
||||
if (!get_ticket && accessToken && expires && expires - getdate < 60 * 2) { |
||||
refreshToken().then((res) => { |
||||
if (res.code === 200 && res.message != -1) { |
||||
store.commit('set_token', res.data); |
||||
} else { |
||||
// 如果刷新失败,清空所有登录信息
|
||||
console.log('router刷新token', 'del_token'); |
||||
store.commit('del_token'); |
||||
} |
||||
}); |
||||
// 刷新完毕后,延时进度页面
|
||||
setTimeout(function () { |
||||
next(); |
||||
}, 500); |
||||
} else if (get_ticket) { |
||||
casLogin(get_ticket).then((res) => {
|
||||
if (res.code === 200 && res.status != -1) { |
||||
console.log('casLogin', res); |
||||
store.commit('set_token', res.data); |
||||
setTimeout(function () { |
||||
// parent.window.location.replace(process.env.VUE_APP_EDU_URL + to.path);
|
||||
// parent.location.reload();
|
||||
let jumpUrl = delUrlParams(location.href,['ticket','sid']); |
||||
console.log('jumpUrl',jumpUrl); |
||||
parent.window.location.replace(jumpUrl); |
||||
}, 250); |
||||
} else { |
||||
next(); |
||||
} |
||||
}); |
||||
|
||||
} else if (get_type === 'logout') { |
||||
console.log('logout', 'del_token'); |
||||
store.commit('del_token'); |
||||
setTimeout(function () { |
||||
let jumpUrl = delUrlParams(location.href,['type']); |
||||
window.location.replace(jumpUrl); |
||||
// next();
|
||||
}, 500); |
||||
} else { |
||||
next(); |
||||
} |
||||
}); |
||||
|
||||
export default router; |