Browse Source

feat:积攒多个任务提交

pull/2/head
Wangwei 2 years ago
parent
commit
173a6a4f44
  1. 8
      fanruan-edu-cas.code-workspace
  2. 18
      src/api/video.js
  3. BIN
      src/assets/guide/finebi-old/bg.png
  4. BIN
      src/assets/guide/finebi-old/biaoji.png
  5. BIN
      src/assets/guide/finebi-old/btn.png
  6. BIN
      src/assets/guide/finebi-old/duihao.png
  7. BIN
      src/assets/guide/finebi-old/eight.png
  8. BIN
      src/assets/guide/finebi-old/eight1.png
  9. BIN
      src/assets/guide/finebi-old/five.png
  10. BIN
      src/assets/guide/finebi-old/five1.png
  11. BIN
      src/assets/guide/finebi-old/four.png
  12. BIN
      src/assets/guide/finebi-old/four1.png
  13. BIN
      src/assets/guide/finebi-old/ftj.png
  14. BIN
      src/assets/guide/finebi-old/gift.png
  15. BIN
      src/assets/guide/finebi-old/gift1.png
  16. BIN
      src/assets/guide/finebi-old/hongbao1.png
  17. BIN
      src/assets/guide/finebi-old/hongbao111.png
  18. BIN
      src/assets/guide/finebi-old/hongbao_kai.png
  19. BIN
      src/assets/guide/finebi-old/hongbao_suo.png
  20. BIN
      src/assets/guide/finebi-old/ico-FCBA.png
  21. BIN
      src/assets/guide/finebi-old/jiangbei.png
  22. BIN
      src/assets/guide/finebi-old/jiayou.png
  23. BIN
      src/assets/guide/finebi-old/msgpic.png
  24. BIN
      src/assets/guide/finebi-old/one.png
  25. BIN
      src/assets/guide/finebi-old/one1.png
  26. BIN
      src/assets/guide/finebi-old/qun.png
  27. BIN
      src/assets/guide/finebi-old/road-lf.png
  28. BIN
      src/assets/guide/finebi-old/road-lf1.png
  29. BIN
      src/assets/guide/finebi-old/road-rt.png
  30. BIN
      src/assets/guide/finebi-old/road-rt1.png
  31. BIN
      src/assets/guide/finebi-old/seven.png
  32. BIN
      src/assets/guide/finebi-old/seven1.png
  33. BIN
      src/assets/guide/finebi-old/six.png
  34. BIN
      src/assets/guide/finebi-old/six1.png
  35. BIN
      src/assets/guide/finebi-old/three.png
  36. BIN
      src/assets/guide/finebi-old/three1.png
  37. BIN
      src/assets/guide/finebi-old/two.png
  38. BIN
      src/assets/guide/finebi-old/two1.png
  39. BIN
      src/assets/guide/finebi-old/wf_lf.png
  40. BIN
      src/assets/guide/finebi-old/wf_rt.png
  41. BIN
      src/assets/guide/finebi/five.png
  42. BIN
      src/assets/guide/finebi/four.png
  43. BIN
      src/assets/guide/finebi/four1.png
  44. BIN
      src/assets/guide/finebi/one.png
  45. BIN
      src/assets/guide/finebi/one1.png
  46. BIN
      src/assets/guide/finebi/qun.png
  47. BIN
      src/assets/guide/finebi/seven.png
  48. BIN
      src/assets/guide/finebi/seven1.png
  49. BIN
      src/assets/guide/finebi/six.png
  50. BIN
      src/assets/guide/finebi/six1.png
  51. BIN
      src/assets/guide/finebi/three.png
  52. BIN
      src/assets/guide/finebi/three1.png
  53. BIN
      src/assets/guide/finebi/two.png
  54. BIN
      src/assets/guide/finebi/two1.png
  55. BIN
      src/assets/guide/finereport/qun.png
  56. BIN
      src/assets/studypath/finebi/qun.png
  57. BIN
      src/assets/studypath/finereport/qun.png
  58. 24
      src/components/Header.vue
  59. 419
      src/router-not-302.js
  60. 6
      src/views/class/indexClass.vue
  61. 2
      src/views/more.vue
  62. 2
      src/views/studypath/finebi.vue
  63. 2
      src/views/studypath/jiandaoyun.vue
  64. 86
      src/views/video/guide/finebi.vue
  65. 62
      src/views/video/play.vue
  66. 18
      src/views/video/video_course.vue

8
fanruan-edu-cas.code-workspace

@ -0,0 +1,8 @@
{
"folders": [
{
"path": "."
}
],
"settings": {}
}

18
src/api/video.js

@ -10,6 +10,24 @@ import request from "@/utils/request";
import {requestGet} from "@/utils/newrequest"; import {requestGet} from "@/utils/newrequest";
// 埋点每次进入和离开时间
export function updateVideoCountLog(params) {
return request({
url: '/v1/edu/video/update/count/log/',
method: "post",
params
})
}
// 埋点完播统计
export function updateVideoPlayEnd(params) {
return request({
url: '/v1/edu/video/update/play/end/',
method: "post",
params
})
}
// 渠道和设备埋点 // 渠道和设备埋点
export function sourceDeviceLog(params) { export function sourceDeviceLog(params) {
return request({ return request({

BIN
src/assets/guide/finebi-old/bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

BIN
src/assets/guide/finebi-old/biaoji.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
src/assets/guide/finebi-old/btn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
src/assets/guide/finebi-old/duihao.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/assets/guide/finebi-old/eight.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
src/assets/guide/finebi-old/eight1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
src/assets/guide/finebi-old/five.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
src/assets/guide/finebi-old/five1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
src/assets/guide/finebi-old/four.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
src/assets/guide/finebi-old/four1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
src/assets/guide/finebi-old/ftj.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

BIN
src/assets/guide/finebi-old/gift.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
src/assets/guide/finebi-old/gift1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
src/assets/guide/finebi-old/hongbao1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
src/assets/guide/finebi-old/hongbao111.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
src/assets/guide/finebi-old/hongbao_kai.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
src/assets/guide/finebi-old/hongbao_suo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
src/assets/guide/finebi-old/ico-FCBA.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
src/assets/guide/finebi-old/jiangbei.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/assets/guide/finebi-old/jiayou.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/assets/guide/finebi-old/msgpic.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
src/assets/guide/finebi-old/one.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
src/assets/guide/finebi-old/one1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
src/assets/guide/finebi-old/qun.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
src/assets/guide/finebi-old/road-lf.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
src/assets/guide/finebi-old/road-lf1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
src/assets/guide/finebi-old/road-rt.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
src/assets/guide/finebi-old/road-rt1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
src/assets/guide/finebi-old/seven.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
src/assets/guide/finebi-old/seven1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
src/assets/guide/finebi-old/six.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
src/assets/guide/finebi-old/six1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
src/assets/guide/finebi-old/three.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
src/assets/guide/finebi-old/three1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
src/assets/guide/finebi-old/two.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
src/assets/guide/finebi-old/two1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
src/assets/guide/finebi-old/wf_lf.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
src/assets/guide/finebi-old/wf_rt.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
src/assets/guide/finebi/five.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 82 KiB

BIN
src/assets/guide/finebi/four.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 79 KiB

BIN
src/assets/guide/finebi/four1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 69 KiB

BIN
src/assets/guide/finebi/one.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 66 KiB

BIN
src/assets/guide/finebi/one1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 59 KiB

BIN
src/assets/guide/finebi/qun.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
src/assets/guide/finebi/seven.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 86 KiB

BIN
src/assets/guide/finebi/seven1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 76 KiB

BIN
src/assets/guide/finebi/six.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 77 KiB

BIN
src/assets/guide/finebi/six1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 69 KiB

BIN
src/assets/guide/finebi/three.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 79 KiB

BIN
src/assets/guide/finebi/three1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 68 KiB

BIN
src/assets/guide/finebi/two.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 79 KiB

BIN
src/assets/guide/finebi/two1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 70 KiB

BIN
src/assets/guide/finereport/qun.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
src/assets/studypath/finebi/qun.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
src/assets/studypath/finereport/qun.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

24
src/components/Header.vue

@ -61,7 +61,7 @@
</template> </template>
</template> </template>
<div class="app_qrcode_box"> <!-- <div class="app_qrcode_box">
<el-dropdown trigger="hover"> <el-dropdown trigger="hover">
<div class="toptxt flex-1"> <div class="toptxt flex-1">
<i class="el-dropdown-link iconfont icon-M-phone"></i> <i class="el-dropdown-link iconfont icon-M-phone"></i>
@ -84,7 +84,7 @@
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
</div> </div> -->
<div class="notice_box"> <div class="notice_box">
@ -123,7 +123,7 @@
</el-dropdown-item> </el-dropdown-item>
<el-divider></el-divider> <el-divider></el-divider>
<el-dropdown> <el-dropdown>
<teacherApplyModal :uid="uid"/> <teacherApplyModal :uid="uid" />
</el-dropdown> </el-dropdown>
<el-divider></el-divider> <el-divider></el-divider>
<el-dropdown-item v-for="(item, i) in avatarMenu.adminMenu" :key="i" :icon="item.icon"> <el-dropdown-item v-for="(item, i) in avatarMenu.adminMenu" :key="i" :icon="item.icon">
@ -139,7 +139,8 @@
</template> </template>
</el-dropdown> </el-dropdown>
<div v-else class="loginReg flex-1"> <div v-else class="loginReg flex-1">
<a class="loginbtn" :href="com_id_url+'/cas/login?service='+com_edu_url+'/v1/user/cas/edu/login/?redirect='+$route.fullPath">登录</a> <a class="loginbtn"
:href="com_id_url+'/cas/login?service='+com_edu_url+'/v1/user/cas/edu/login/?redirect='+$route.fullPath">登录</a>
</div> </div>
</nav> </nav>
@ -234,7 +235,7 @@
</el-dropdown-item> </el-dropdown-item>
<el-divider></el-divider> <el-divider></el-divider>
<el-dropdown> <el-dropdown>
<teacherApplyModal :uid="uid"/> <teacherApplyModal :uid="uid" />
</el-dropdown> </el-dropdown>
<el-divider></el-divider> <el-divider></el-divider>
<el-dropdown-item v-for="(item, i) in avatarMenu.adminMenu" :key="i" :icon="item.icon"> <el-dropdown-item v-for="(item, i) in avatarMenu.adminMenu" :key="i" :icon="item.icon">
@ -253,8 +254,7 @@
<div v-else class="loginReg flex-1"> <div v-else class="loginReg flex-1">
<a class="loginbtn" :href="com_id_url+'/login/signin/'+'?referrer='+wwwUrl" <a class="loginbtn" :href="com_id_url+'/login/signin/'+'?referrer='+wwwUrl"
v-if="com_node_env==='dist'">登录</a> v-if="com_node_env==='dist'">登录</a>
<a class="loginbtn" <a class="loginbtn" :href="com_id_url+'/signin/'+'?isfridapp=inapp&referrer='+wwwUrl" v-else>登录</a>
:href="com_id_url+'/signin/'+'?isfridapp=inapp&referrer='+wwwUrl" v-else>登录</a>
</div> </div>
</div> </div>
@ -342,7 +342,7 @@
</template> </template>
<script> <script>
import { defineComponent, reactive, toRefs, ref,getCurrentInstance } from "vue"; import { defineComponent, reactive, toRefs, ref, getCurrentInstance } from "vue";
import teacherApplyModal from '@/components/TeacherApply/TeacherApplyModal'; import teacherApplyModal from '@/components/TeacherApply/TeacherApplyModal';
import { getMenuList } from "@/api/nav"; import { getMenuList } from "@/api/nav";
import { getNotice, avatarMenu } from "@/api/user"; import { getNotice, avatarMenu } from "@/api/user";
@ -377,9 +377,13 @@
state.wwwUrl = window.location.href; state.wwwUrl = window.location.href;
onBeforeRouteUpdate((to) => { onBeforeRouteUpdate((to) => {
state.wwwUrl = proxy.$root.com_edu_url+to.path; state.wwwUrl = proxy.$root.com_edu_url + to.path;
}) })
window.onresize = () => {
state.isPc = document.body.clientWidth > 1200;
}
const fetchMenuList = async () => { const fetchMenuList = async () => {
const res = await getMenuList(); const res = await getMenuList();
if (res.code === 1) { if (res.code === 1) {
@ -771,7 +775,7 @@
} }
.notice_box { .notice_box {
padding: 4px 0 0 24px; padding: 4px 0 0 0px;
.icon-icon_icon-66 { .icon-icon_icon-66 {
font-size: 26px; font-size: 26px;

419
src/router-not-302.js

@ -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;

6
src/views/class/indexClass.vue

@ -45,12 +45,12 @@
<div class="left-content"> <div class="left-content">
<h4 class="title">{{item.class_title}}</h4> <h4 class="title">{{item.class_title}}</h4>
<div class="meta flex-1"> <div class="meta flex-1">
<span class="one">已更新18节课(共192课时)</span> <span class="one">已更新{{item.class_update}}节课({{item.class_total}}课时)</span>
<span> <span>
<em>我的作业平均</em> <strong>99</strong> <em>我的作业平均</em> <strong>{{item.average}}</strong>
</span> </span>
<span> <span>
<em>班级排名</em> <strong>12</strong> <em>班级排名</em> <strong>{{item.class_rank}}</strong>
</span> </span>
</div> </div>
<div class="study-progress"> <div class="study-progress">

2
src/views/more.vue

@ -207,7 +207,7 @@
{ {
icon: "iconfont icon-chuansongmen_shuben zi", icon: "iconfont icon-chuansongmen_shuben zi",
txt: "FineBI白皮书", txt: "FineBI白皮书",
link: "https://src.fanruan.com/down/finebi-white-paper20200428.pdf", link: "https://src.fanruan.com/down/pdf/finebi/finebi6.0.pdf",
}, },
{ {
icon: "iconfont icon-chuansongmen_bofang lan", icon: "iconfont icon-chuansongmen_bofang lan",

2
src/views/studypath/finebi.vue

@ -70,7 +70,7 @@
<a class="itemlk" href="https://help.fanruan.com/finebi/doc-view-335.html" target="_blank">移动端</a> <a class="itemlk" href="https://help.fanruan.com/finebi/doc-view-335.html" target="_blank">移动端</a>
<a class="itemlk" href="https://help.fanruan.com/finebi/doc-view-1585.html" target="_blank">部署集成</a> <a class="itemlk" href="https://help.fanruan.com/finebi/doc-view-1585.html" target="_blank">部署集成</a>
<a class="itemlk" href="https://help.fanruan.com/finebi/doc-view-920.html" target="_blank">性能优化</a> <a class="itemlk" href="https://help.fanruan.com/finebi/doc-view-920.html" target="_blank">性能优化</a>
<a class="itemlk" href="https://edu.fanruan.com/video/99" target="_blank">企业FineBI推广建设指南</a> <a class="itemlk" href="https://edu.fanruan.com/video/400" target="_blank">企业FineBI推广建设指南</a>
</ul> </ul>
</div> </div>
</div> </div>

2
src/views/studypath/jiandaoyun.vue

@ -97,7 +97,7 @@
<div class="infobox"> <div class="infobox">
<div class="til">了解简道云并完成注册或登录</div> <div class="til">了解简道云并完成注册或登录</div>
<div class="flex-6" style="margin: 16px 0 28px;"> <div class="flex-6" style="margin: 16px 0 28px;">
<a class="btn-jdy f14 newbtn3" href="https://edu.fanruan.com/video/play/1160" target="_blank">简道云介绍</a> <a class="btn-jdy f14 newbtn3" href="/video/play/5206" target="_blank">简道云介绍</a>
<a class="btn-jdy f14 newbtn3" href="https://www.jiandaoyun.com/signin" target="_blank">简道云登录或注册</a> <a class="btn-jdy f14 newbtn3" href="https://www.jiandaoyun.com/signin" target="_blank">简道云登录或注册</a>
</div> </div>

86
src/views/video/guide/finebi.vue

@ -126,7 +126,8 @@
<div style="padding:30px 0 10px 0;"><img src="@/assets/guide/finebi/ico-FCBA.png" width="60"></div> <div style="padding:30px 0 10px 0;"><img src="@/assets/guide/finebi/ico-FCBA.png" width="60"></div>
<div class="f14">帆软认证BI工程师FCBA考试</div> <div class="f14">帆软认证BI工程师FCBA考试</div>
<div style=" width: 250px; margin: 0 auto; padding-top: 24px" class="flex-6"> <div style=" width: 250px; margin: 0 auto; padding-top: 24px" class="flex-6">
<a class="btn-008 rzbtn" href="https://cert.fanruan.com/detail/53ace60eb55311ecbf5b00163e0210ff" target="_blank">前往认证</a> <a class="btn-008 rzbtn" href="https://cert.fanruan.com/detail/53ace60eb55311ecbf5b00163e0210ff"
target="_blank">前往认证</a>
<a class="btn-fff rzbtn" href="https://cert.fanruan.com/verify" target="_blank">成绩查询</a> <a class="btn-fff rzbtn" href="https://cert.fanruan.com/verify" target="_blank">成绩查询</a>
</div> </div>
</div> </div>
@ -205,7 +206,7 @@
<span class="f12">入门视频全套资料与PPT</span> <span class="f12">入门视频全套资料与PPT</span>
<div class="xiazaiok"> <div class="xiazaiok">
<a class="f12 flex-1" <a class="f12 flex-1"
href="https://fanruanbbs.obs.cn-east-2.myhuaweicloud.com/BI%E5%9C%88%E5%B1%82-%E7%94%A8%E6%88%B7%E8%BF%90%E8%90%A5/BI%E5%BD%95%E6%92%AD/%E6%96%B0%E6%89%8B%E5%85%A5%E9%97%A811%E6%9C%88%EF%BC%88%E8%A1%A5%EF%BC%89/FineBI%E5%85%A5%E9%97%A8%E5%AD%A6%E4%B9%A0%E8%B7%AF%E5%BE%84-%E8%B5%84%E6%96%99%E5%8C%85.zip"> href="https://fanruanbbs.obs.cn-east-2.myhuaweicloud.com/BI%E5%9C%88%E5%B1%82-%E7%94%A8%E6%88%B7%E8%BF%90%E8%90%A5/BI%E5%BD%95%E6%92%AD/FineBI6.0%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/FineBI%E5%85%A5%E9%97%A8%E5%AD%A6%E4%B9%A0%E8%B7%AF%E5%BE%846.0.zip">
<img src="@/assets/class/zip.png" width="18"><span>立即下载</span></a> <img src="@/assets/class/zip.png" width="18"><span>立即下载</span></a>
</div> </div>
</div> </div>
@ -250,7 +251,7 @@
<span class="f12">入门视频全套资料与PPT</span> <span class="f12">入门视频全套资料与PPT</span>
<div class="xiazaiok"> <div class="xiazaiok">
<a class="f12 flex-1" <a class="f12 flex-1"
href="https://fanruanbbs.obs.cn-east-2.myhuaweicloud.com/BI%E5%9C%88%E5%B1%82-%E7%94%A8%E6%88%B7%E8%BF%90%E8%90%A5/BI%E5%BD%95%E6%92%AD/%E6%96%B0%E6%89%8B%E5%85%A5%E9%97%A811%E6%9C%88%EF%BC%88%E8%A1%A5%EF%BC%89/FineBI%E5%85%A5%E9%97%A8%E5%AD%A6%E4%B9%A0%E8%B7%AF%E5%BE%84-%E8%B5%84%E6%96%99%E5%8C%85.zip"> href="https://fanruanbbs.obs.cn-east-2.myhuaweicloud.com/BI%E5%9C%88%E5%B1%82-%E7%94%A8%E6%88%B7%E8%BF%90%E8%90%A5/BI%E5%BD%95%E6%92%AD/FineBI6.0%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/FineBI%E5%85%A5%E9%97%A8%E5%AD%A6%E4%B9%A0%E8%B7%AF%E5%BE%846.0.zip">
<img src="@/assets/class/zip.png" width="18"><span>立即下载</span></a> <img src="@/assets/class/zip.png" width="18"><span>立即下载</span></a>
</div> </div>
</div> </div>
@ -361,7 +362,7 @@
name: 'guide_finebi', name: 'guide_finebi',
setup() { setup() {
const courseid = 168;//id const courseid = 372;//id
const route = useRoute() const route = useRoute()
let get_from = route.query.from ? route.query.from : 0; let get_from = route.query.from ? route.query.from : 0;
@ -370,34 +371,35 @@
const state = reactive({ const state = reactive({
newplaytilArr: [ newplaytilArr: [
{ {
name: "第一章 FineBI基本介绍", name: "第一章 初识FineBI",
info: '本章将带你了解FineBI 产品定位、产品优势、产品架构、产品功能,文档速览>><a class="col008" href="https://help.fanruan.com/finebi/doc-view-1316.html" target="_blank">《FineBI基本介绍》</a>', info: '本章将带你了解FineBI 产品定位、产品优势、产品架构、产品功能,文档速览>><a class="col008 fw600" href="https://help.fanruan.com/finebi/doc-view-1316.html" target="_blank">《FineBI基本介绍》</a>',
}, },
{ {
name: "第二章 连接到数据", name: "第二章 创建分析主题并添加数据",
info: '本章将带你了解数据上传和数据更新的操作,通过案例演示掌握数据分析的第一步——数据准备,文档速览>><a class="col008" href="https://help.fanruan.com/finebi/doc-view-1622.html" target="_blank">连接到数据</a>', info: '本章将带你了解分析主题和如何添加分析数据,通过案例演示掌握数据分析的第一步,文档速览>><a class="col008 fw600" href="https://help.fanruan.com/finebi6.0/doc-view-1977.html?source=0&from=studypath" target="_blank">《创建分析主题并添加数据》</a>',
}, },
{ {
name: "第三章 使用自助数据集做数据处理", name: "第三章 在编辑数据中分析",
info: '本章将带你了解使用FineBI自助数据集来完成原始数据的预处理,以提升数据分析质量,文档速览>><a class="col008" href="https://help.fanruan.com/finebi/doc-view-1633.html" target="_blank">使用自助数据集做数据处理</a>', info: '本章将带你了解使用FineBI分析主题来完成原始数据的加工,以提升数据分析质量,文档速览>><a class="col008 fw600" href="https://help.fanruan.com/finebi6.0/doc-view-1978.html?source=0&from=studypath" target="_blank">《在编辑数据中分析》</a>',
}, },
{ {
name: "第四章 创建组件并分析数据", name: "第四章 在表格中分析",
info: '本章将带你了解FineBI多维分析,通过对数据进行调整、处理,使其更满足数据呈现的需求,文档速览>><a class="col008" href="https://help.fanruan.com/finebi/doc-view-1623.html" target="_blank">创建组件和分析数据</a>', info: '本章将带你了解FineBI多维分析,通过对数据进行调整、处理,使其更满足数据呈现的需求,文档速览>><a class="col008 fw600" href="https://help.fanruan.com/finebi6.0/doc-view-1979.html?source=0&from=studypath" target="_blank">《在表格中分析》</a>',
}, },
{ {
name: "第五章 可视化组件", name: "第五章 在图形中分析",
info: '本章将通过图表的选择和制作带你掌握可视化分析技巧,文档速览>><a class="col008" href="https://help.fanruan.com/finebi/doc-view-1626.html" target="_blank">可视化组件</a>', info: '本章将通过图表的选择和制作带你掌握可视化分析技巧,文档速览>><a class="col008 fw600" href="https://help.fanruan.com/finebi6.0/doc-view-1980.html?source=0&from=studypath" target="_blank">《在图形中分析》</a>',
}, },
{ {
name: "第六章 添加交互效果", name: "第六章 添加组件交互",
info: '本章将带你了解FineBI交互效果,通过多组件协同以满足实际复杂业务场景的分析需求,文档速览>><a class="col008" href="https://help.fanruan.com/finebi/doc-view-1629.html" target="_blank">添加交互效果</a>', info: '本章将带你了解FineBI交互效果,通过多组件协同以满足实际复杂业务场景的分析需求,文档速览>><a class="col008 fw600" href="https://help.fanruan.com/finebi6.0/doc-view-1982.html?source=0&from=studypath" target="_blank">《添加组件交互》</a>',
}, },
{ {
name: "第七章 仪表板分享", name: "第七章 仪表板布局&案例分享",
info: '本章将带你了解仪表板的整体布局和美化,以及仪表板分享的内容,文档速览>><a class="col008" href="https://help.fanruan.com/finebi/doc-view-1632.html" target="_blank">仪表板制作和分享</a>', info: '本章将带你了解仪表板的整体布局和美化,以及分析结果分享的内容,文档速览>><a class="col008 fw600" href="https://help.fanruan.com/finebi6.0/doc-view-1983.html?source=0&from=studypath" target="_blank">《仪表板布局美化》</a>'
+'、<a class="col008 fw600" href="https://help.fanruan.com/finebi6.0/doc-view-1984.html?source=0&from=studypath" target="_blank">《分享分析案例》</a>',
}, },
], ],
@ -406,13 +408,13 @@
newplayNum: '', newplayNum: '',
newplayCount: '', newplayCount: '',
arrNewId: [ arrNewId: [
[1711, 2167, 2168,], [4635, 4637, 4226,],
[1712, 1713,], [4227,],
[2176, 2177], [4228],
[2169, 2170, 2171], [4246],
[1714, 1757, 1758], [4230],
[1759, 2172, 2173], [4231],
[1719, 2174, 2175], [4232, 4233],
], ],
newVideoList: [], newVideoList: [],
// //
@ -1466,7 +1468,7 @@
width: 150px; width: 150px;
height: 158px; height: 158px;
left: 310px; left: 310px;
top: -6px; top: -2px;
&.yes { &.yes {
background-image: url("~@/assets/guide/finebi/two.png"); background-image: url("~@/assets/guide/finebi/two.png");
@ -1486,10 +1488,10 @@
} }
.ch_three { .ch_three {
width: 162px; width: 167px;
height: 170px; height: 175px;
left: 460px; left: 460px;
top: 86px; top: 76px;
&.yes { &.yes {
background-image: url("~@/assets/guide/finebi/three.png"); background-image: url("~@/assets/guide/finebi/three.png");
@ -1500,8 +1502,8 @@
} }
&:hover { &:hover {
width: 172px; width: 177px;
height: 180px; height: 185px;
margin-top: -10px; margin-top: -10px;
margin-left: -3px; margin-left: -3px;
opacity: 1; opacity: 1;
@ -1509,10 +1511,10 @@
} }
.ch_four { .ch_four {
width: 155px; width: 160px;
height: 174px; height: 179px;
left: 295px; left: 295px;
top: 178px; top: 188px;
&.yes { &.yes {
background-image: url("~@/assets/guide/finebi/four.png"); background-image: url("~@/assets/guide/finebi/four.png");
@ -1523,8 +1525,8 @@
} }
&:hover { &:hover {
width: 165px; width: 170px;
height: 184px; height: 189px;
margin-top: -10px; margin-top: -10px;
margin-left: -5px; margin-left: -5px;
opacity: 1; opacity: 1;
@ -1532,7 +1534,7 @@
} }
.ch_five { .ch_five {
width: 155px; width: 160px;
height: 180px; height: 180px;
left: 464px; left: 464px;
top: 290px; top: 290px;
@ -1546,7 +1548,7 @@
} }
&:hover { &:hover {
width: 165px; width: 170px;
height: 190px; height: 190px;
margin-top: -10px; margin-top: -10px;
margin-left: -5px; margin-left: -5px;
@ -1555,8 +1557,8 @@
} }
.ch_six { .ch_six {
width: 172px; width: 168px;
height: 166px; height: 178px;
left: 638px; left: 638px;
top: 196px; top: 196px;
@ -1569,8 +1571,8 @@
} }
&:hover { &:hover {
width: 182px; width: 178px;
height: 176px; height: 188px;
margin-top: -10px; margin-top: -10px;
margin-left: -5px; margin-left: -5px;
opacity: 1; opacity: 1;

62
src/views/video/play.vue

@ -90,7 +90,15 @@
<script> <script>
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { getVideo, getPlayList, classlog, maLookVideoTracking, sourceDeviceLog } from "@/api/video"; import {
getVideo,
getPlayList,
classlog,
maLookVideoTracking,
sourceDeviceLog,
updateVideoCountLog,
updateVideoPlayEnd
} from "@/api/video";
import { toRefs, reactive, onMounted, ref, onUnmounted } from 'vue'; import { toRefs, reactive, onMounted, ref, onUnmounted } from 'vue';
import { isMobileValue } from "@/utils/isMobile"; import { isMobileValue } from "@/utils/isMobile";
@ -102,6 +110,7 @@
const videoid = route.params.playid; const videoid = route.params.playid;
const state = reactive({ const state = reactive({
pointTimer:0,
isAuth: true, isAuth: true,
msg: 0, msg: 0,
empty: false, empty: false,
@ -140,35 +149,6 @@
playThisId: route.params.playid playThisId: route.params.playid
}) })
// MARKET-4168
// const resVideoData = async () => {
// const res = await getVideo(videoid);
// if (res.code === 200) {
// if (res.data.playtime > 0) {
// state.videoObject.seek = res.data.playtime;
// }
// state.msg = res.message;
// if (res.status === -1) {
// state.isAuth = false;
// state.empty = true;
// } else {
// state.isAuth = true;
// }
// state.video = res.data;
// state.play_title = res.data.it618_name;
// state.videoObject.video = res.data.it618_videourl;
// state.playcur = videoid;
// state.logid = res.data.logid;
// state.videoid = res.data.id;
// state.videopid = res.data.it618_pid;
// }
// };
// resVideoData();
const goBack = (pid) => { const goBack = (pid) => {
router.push('/video/' + pid); router.push('/video/' + pid);
} }
@ -227,8 +207,8 @@
/** /**
* 封装视频渲染 * 封装视频渲染
* @replay 1=重播 * @param replay 1=重播
* @resOne 1=第一次进入页面播放 * @param resOne 1=第一次进入页面播放
**/ **/
const getvideoDom = async (id, replay = 0, resOne = 0) => { const getvideoDom = async (id, replay = 0, resOne = 0) => {
@ -296,6 +276,11 @@
myCounter.stopCount(); myCounter.stopCount();
// funAutoPlay(); // funAutoPlay();
state.showAutoBox = true; state.showAutoBox = true;
//
let log2Param = {
id:state.video.logid2
}
updateVideoPlayEnd(log2Param);
} }
@ -316,6 +301,19 @@
intervalId = null; intervalId = null;
//console.log('count',state.is_duration); //console.log('count',state.is_duration);
} }
//
state.pointTimer++;
console.log(state.pointTimer);
if(state.pointTimer == 5){
state.pointTimer = 0;
let log2Param = {
id:state.video.logid2
}
updateVideoCountLog(log2Param);
// console.log("",state.video.logid2);
}
} }
function start() { function start() {
if (intervalId == null) { if (intervalId == null) {

18
src/views/video/video_course.vue

@ -328,14 +328,17 @@
<div id="tab-menu2_box" class="btile flex-1 tab_cur_box"> <div id="tab-menu2_box" class="btile flex-1 tab_cur_box">
<h2>学习资料</h2> <h2>学习资料</h2>
</div> </div>
<div class="datalist" v-if="countAtt"> <div class="datalist" v-if="countAtt">
<div class="dlist" v-for="(item, i) in looplist" :key="i"> <div class="dlist" v-for="(item, i) in looplist" :key="i">
<div v-for="(item, i) in item.video" :key="i"> <div v-for="(item, i) in item.video" :key="i">
<!-- <el-divider content-position="left" v-if="item.attachment.length>0" class="attachment_title">{{item.it618_name}}</el-divider> -->
<ul v-for="(item, i) in item.attachment" :key="i">
<li class="item flex-1 flex-3" v-if="item.data_name"> <li class="item flex-1 flex-3" v-if="item.it618_name">
<div class="til flex-1"> <div class="til flex-1">
<i class="zip"></i> <i class="zip"></i>
<span class="f_title">{{item.data_name}}</span> <span class="f_title">{{item.it618_name}}</span>
</div> </div>
<div v-if="basic.it618_saleprice > 0"> <div v-if="basic.it618_saleprice > 0">
@ -348,8 +351,10 @@
<div v-else> <div v-else>
<a class="el-btn" :href="item.it618_dataurl" target="_blank">下载</a> <a class="el-btn" :href="item.it618_dataurl" target="_blank">下载</a>
</div> </div>
</li> </li>
</ul>
</div> </div>
</div> </div>
</div> </div>
@ -1046,6 +1051,13 @@
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.attachment_title{
width: auto;
color: #617288;
margin-left: 24px;
margin-right: 24px;
}
.rt-box { .rt-box {
margin-top: 50px; margin-top: 50px;
} }

Loading…
Cancel
Save