develop #3

Merged
myxiaowei merged 3 commits from develop into master 2 years ago
  1. 3
      package.json
  2. 265
      public/index.html
  3. 87
      src/components/banner.vue
  4. 6
      src/router.js
  5. 151
      src/utils/advertisementSDK.js
  6. 162
      src/views/class/play.vue
  7. 19
      src/views/studypath/finebi.vue
  8. 21
      src/views/studypath/finereportStudyPath2023.vue
  9. 21
      src/views/studypath/jiandaoyun.vue
  10. 3
      src/views/video/indexVideo.vue
  11. 212
      src/views/video/play.vue

3
package.json

@ -54,7 +54,8 @@
"parser": "babel-eslint"
},
"rules": {
"no-undef": "off"
"no-undef": "off",
"no-unused-vars": "off"
}
},
"browserslist": [

265
public/index.html

@ -1,67 +1,65 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- <meta name="viewport" content="width=device-width,initial-scale=1.0"> -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<title>帆软学院-培养企业亟需的数据人才</title>
<meta name="keywords" content="帆软学院,帆软培训,帆软视频,帆软教程,帆软课程,数据分析培训,大数据培训" />
<meta name="description"
content="帆软学院专注于培养企业亟需的数据人才。课程方向包括FineReport、FineBI、简道云、FineDataLink、数知鸟、阿米巴、数据分析、python、Linux、数据库、java、JavaScript等。" />
<link rel="stylesheet" href="//at.alicdn.com/t/font_2400577_ckl19e6hyau.css">
<meta name="description" content="帆软学院专注于培养企业亟需的数据人才。课程方向包括FineReport、FineBI、简道云、FineDataLink、数知鸟、阿米巴、数据分析、python、Linux、数据库、java、JavaScript等。" />
<link rel="stylesheet" href="//at.alicdn.com/t/font_2400577_ckl19e6hyau.css" />
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<script type="text/javascript" src="https://cdn.fanruanclub.com/prod/dist/js/fineClubSDK.js"></script>
<!-- <script type="text/javascript" src="<%= BASE_URL %>js/ckplayer/ckplayer.min.js"></script> -->
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<!-- seo -->
<ul class="left-wrapper" style="display: none;">
<li><a href="https://edu.fanruan.com/video?class1=16"
target="_blank"><span>FineReport</span><i class="arrow el-icon-arrow-right"></i></a>
<li>
<a href="https://edu.fanruan.com/video?class1=16" target="_blank"><span>FineReport</span><i class="arrow el-icon-arrow-right"></i></a>
<div class="child-nav">
<div class="child-wrapper">
<ul>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=7" class="c2a"
target="_blank">报表制作</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=89" class="c2a"
target="_blank">数据大屏</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=56" class="c2a"
target="_blank">移动端</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=92" class="c2a"
target="_blank">二次开发</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=113" class="c2a"
target="_blank">部署集群</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=104" class="c2a"
target="_blank">行业案例</a></li>
<div class="amore"><a href="https://edu.fanruan.com/video?class1=16" class="mra flex-1"
target="_blank"><span>查看FineReport全部课程</span><i class="arrow el-icon-arrow-right"></i></a></div>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=7" class="c2a" target="_blank">报表制作</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=89" class="c2a" target="_blank">数据大屏</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=56" class="c2a" target="_blank">移动端</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=92" class="c2a" target="_blank">二次开发</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=113" class="c2a" target="_blank">部署集群</a></li>
<li><a href="https://edu.fanruan.com/video?class1=16&amp;class2=104" class="c2a" target="_blank">行业案例</a></li>
<div class="amore">
<a href="https://edu.fanruan.com/video?class1=16" class="mra flex-1" target="_blank"><span>查看FineReport全部课程</span><i class="arrow el-icon-arrow-right"></i></a>
</div>
</ul>
<div class="hot">
<h2 class="col617">热门推荐</h2>
<ul>
<li><a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<p><span>共24课时</span><em>3642人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA
基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA 基础入门</a>
<p><span>共16课时</span><em>1785人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/106" class="lk hide-txt"
target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<li>
<a href="https://edu.fanruan.com/video/106" class="lk hide-txt" target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<p><span>共2课时</span><em>1476人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/166" class="lk hide-txt"
target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<li>
<a href="https://edu.fanruan.com/video/166" class="lk hide-txt" target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<p><span>共112课时</span><em>1人学习</em></p>
</li>
</ul>
@ -69,36 +67,35 @@
</div>
</div>
</li>
<li><a href="https://edu.fanruan.com/video?class1=17"
target="_blank"><span>FineBI</span><i class="arrow el-icon-arrow-right"></i></a>
<li>
<a href="https://edu.fanruan.com/video?class1=17" target="_blank"><span>FineBI</span><i class="arrow el-icon-arrow-right"></i></a>
<div class="child-nav">
<div class="child-wrapper">
<ul>
<li><a href="https://edu.fanruan.com/video?class1=17&amp;class2=8" class="c2a"
target="_blank">基础操作</a></li>
<li><a href="https://edu.fanruan.com/video?class1=17&amp;class2=90" class="c2a"
target="_blank">数据分析</a></li>
<li><a href="https://edu.fanruan.com/video?class1=17&amp;class2=103" class="c2a"
target="_blank">数据可视化</a></li>
<div class="amore"><a href="https://edu.fanruan.com/video?class1=17" class="mra flex-1"
target="_blank"><span>查看FineBI全部课程</span><i class="arrow el-icon-arrow-right"></i></a></div>
<li><a href="https://edu.fanruan.com/video?class1=17&amp;class2=8" class="c2a" target="_blank">基础操作</a></li>
<li><a href="https://edu.fanruan.com/video?class1=17&amp;class2=90" class="c2a" target="_blank">数据分析</a></li>
<li><a href="https://edu.fanruan.com/video?class1=17&amp;class2=103" class="c2a" target="_blank">数据可视化</a></li>
<div class="amore">
<a href="https://edu.fanruan.com/video?class1=17" class="mra flex-1" target="_blank"><span>查看FineBI全部课程</span><i class="arrow el-icon-arrow-right"></i></a>
</div>
</ul>
<div class="hot">
<h2 class="col617">热门推荐</h2>
<ul>
<li><a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<p><span>共24课时</span><em>3642人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA
基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA 基础入门</a>
<p><span>共16课时</span><em>1785人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/106" class="lk hide-txt"
target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<li>
<a href="https://edu.fanruan.com/video/106" class="lk hide-txt" target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<p><span>共2课时</span><em>1476人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/166" class="lk hide-txt"
target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<li>
<a href="https://edu.fanruan.com/video/166" class="lk hide-txt" target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<p><span>共112课时</span><em>1人学习</em></p>
</li>
</ul>
@ -106,38 +103,36 @@
</div>
</div>
</li>
<li><a href="https://edu.fanruan.com/video?class1=18" target="_blank"><span>简道云</span><i
class="arrow el-icon-arrow-right"></i></a>
<li>
<a href="https://edu.fanruan.com/video?class1=18" target="_blank"><span>简道云</span><i class="arrow el-icon-arrow-right"></i></a>
<div class="child-nav">
<div class="child-wrapper">
<ul>
<li><a href="https://edu.fanruan.com/video?class1=18&amp;class2=102" class="c2a"
target="_blank">基础操作</a></li>
<li><a href="https://edu.fanruan.com/video?class1=18&amp;class2=98" class="c2a"
target="_blank">业务场景</a></li>
<li><a href="https://edu.fanruan.com/video?class1=18&amp;class2=109" class="c2a"
target="_blank">专题教学</a></li>
<li><a href="https://edu.fanruan.com/video?class1=18&amp;class2=110" class="c2a"
target="_blank">直播分享</a></li>
<div class="amore"><a href="https://edu.fanruan.com/video?class1=18" class="mra flex-1"
target="_blank"><span>查看简道云全部课程</span><i class="arrow el-icon-arrow-right"></i></a></div>
<li><a href="https://edu.fanruan.com/video?class1=18&amp;class2=102" class="c2a" target="_blank">基础操作</a></li>
<li><a href="https://edu.fanruan.com/video?class1=18&amp;class2=98" class="c2a" target="_blank">业务场景</a></li>
<li><a href="https://edu.fanruan.com/video?class1=18&amp;class2=109" class="c2a" target="_blank">专题教学</a></li>
<li><a href="https://edu.fanruan.com/video?class1=18&amp;class2=110" class="c2a" target="_blank">直播分享</a></li>
<div class="amore">
<a href="https://edu.fanruan.com/video?class1=18" class="mra flex-1" target="_blank"><span>查看简道云全部课程</span><i class="arrow el-icon-arrow-right"></i></a>
</div>
</ul>
<div class="hot">
<h2 class="col617">热门推荐</h2>
<ul>
<li><a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<p><span>共24课时</span><em>3642人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA
基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA 基础入门</a>
<p><span>共16课时</span><em>1785人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/106" class="lk hide-txt"
target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<li>
<a href="https://edu.fanruan.com/video/106" class="lk hide-txt" target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<p><span>共2课时</span><em>1476人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/166" class="lk hide-txt"
target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<li>
<a href="https://edu.fanruan.com/video/166" class="lk hide-txt" target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<p><span>共112课时</span><em>1人学习</em></p>
</li>
</ul>
@ -145,36 +140,35 @@
</div>
</div>
</li>
<li><a href="https://edu.fanruan.com/video?class1=19" target="_blank"><span>数知鸟</span><i
class="arrow el-icon-arrow-right"></i></a>
<li>
<a href="https://edu.fanruan.com/video?class1=19" target="_blank"><span>数知鸟</span><i class="arrow el-icon-arrow-right"></i></a>
<div class="child-nav">
<div class="child-wrapper">
<ul>
<li><a href="https://edu.fanruan.com/video?class1=19&amp;class2=111" class="c2a"
target="_blank">基础操作</a></li>
<li><a href="https://edu.fanruan.com/video?class1=19&amp;class2=112" class="c2a"
target="_blank">大咖分享</a></li>
<li><a href="https://edu.fanruan.com/video?class1=19&amp;class2=91" class="c2a"
target="_blank">解决方案</a></li>
<div class="amore"><a href="https://edu.fanruan.com/video?class1=19" class="mra flex-1"
target="_blank"><span>查看数知鸟全部课程</span><i class="arrow el-icon-arrow-right"></i></a></div>
<li><a href="https://edu.fanruan.com/video?class1=19&amp;class2=111" class="c2a" target="_blank">基础操作</a></li>
<li><a href="https://edu.fanruan.com/video?class1=19&amp;class2=112" class="c2a" target="_blank">大咖分享</a></li>
<li><a href="https://edu.fanruan.com/video?class1=19&amp;class2=91" class="c2a" target="_blank">解决方案</a></li>
<div class="amore">
<a href="https://edu.fanruan.com/video?class1=19" class="mra flex-1" target="_blank"><span>查看数知鸟全部课程</span><i class="arrow el-icon-arrow-right"></i></a>
</div>
</ul>
<div class="hot">
<h2 class="col617">热门推荐</h2>
<ul>
<li><a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<p><span>共24课时</span><em>3642人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA
基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA 基础入门</a>
<p><span>共16课时</span><em>1785人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/106" class="lk hide-txt"
target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<li>
<a href="https://edu.fanruan.com/video/106" class="lk hide-txt" target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<p><span>共2课时</span><em>1476人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/166" class="lk hide-txt"
target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<li>
<a href="https://edu.fanruan.com/video/166" class="lk hide-txt" target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<p><span>共112课时</span><em>1人学习</em></p>
</li>
</ul>
@ -182,34 +176,34 @@
</div>
</div>
</li>
<li><a href="https://edu.fanruan.com/video?class1=20" target="_blank"><span>阿米巴</span><i
class="arrow el-icon-arrow-right"></i></a>
<li>
<a href="https://edu.fanruan.com/video?class1=20" target="_blank"><span>阿米巴</span><i class="arrow el-icon-arrow-right"></i></a>
<div class="child-nav">
<div class="child-wrapper">
<ul>
<li><a href="https://edu.fanruan.com/video?class1=20&amp;class2=96" class="c2a"
target="_blank">解决方案</a></li>
<li><a href="https://edu.fanruan.com/video?class1=20&amp;class2=105" class="c2a"
target="_blank">大咖分享</a></li>
<div class="amore"><a href="https://edu.fanruan.com/video?class1=20" class="mra flex-1"
target="_blank"><span>查看阿米巴全部课程</span><i class="arrow el-icon-arrow-right"></i></a></div>
<li><a href="https://edu.fanruan.com/video?class1=20&amp;class2=96" class="c2a" target="_blank">解决方案</a></li>
<li><a href="https://edu.fanruan.com/video?class1=20&amp;class2=105" class="c2a" target="_blank">大咖分享</a></li>
<div class="amore">
<a href="https://edu.fanruan.com/video?class1=20" class="mra flex-1" target="_blank"><span>查看阿米巴全部课程</span><i class="arrow el-icon-arrow-right"></i></a>
</div>
</ul>
<div class="hot">
<h2 class="col617">热门推荐</h2>
<ul>
<li><a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<p><span>共24课时</span><em>3642人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA
基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA 基础入门</a>
<p><span>共16课时</span><em>1785人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/106" class="lk hide-txt"
target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<li>
<a href="https://edu.fanruan.com/video/106" class="lk hide-txt" target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<p><span>共2课时</span><em>1476人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/166" class="lk hide-txt"
target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<li>
<a href="https://edu.fanruan.com/video/166" class="lk hide-txt" target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<p><span>共112课时</span><em>1人学习</em></p>
</li>
</ul>
@ -217,40 +211,37 @@
</div>
</div>
</li>
<li><a href="https://edu.fanruan.com/video?class1=21" target="_blank"><span>热门技术</span><i
class="arrow el-icon-arrow-right"></i></a>
<li>
<a href="https://edu.fanruan.com/video?class1=21" target="_blank"><span>热门技术</span><i class="arrow el-icon-arrow-right"></i></a>
<div class="child-nav">
<div class="child-wrapper">
<ul>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=100" class="c2a"
target="_blank">Python</a></li>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=101" class="c2a"
target="_blank">Linux</a></li>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=94" class="c2a"
target="_blank">数据库</a></li>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=108" class="c2a"
target="_blank">Java</a></li>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=97" class="c2a"
target="_blank">JavaScript</a></li>
<div class="amore"><a href="https://edu.fanruan.com/video?class1=21" class="mra flex-1"
target="_blank"><span>查看热门技术全部课程</span><i class="arrow el-icon-arrow-right"></i></a></div>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=100" class="c2a" target="_blank">Python</a></li>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=101" class="c2a" target="_blank">Linux</a></li>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=94" class="c2a" target="_blank">数据库</a></li>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=108" class="c2a" target="_blank">Java</a></li>
<li><a href="https://edu.fanruan.com/video?class1=21&amp;class2=97" class="c2a" target="_blank">JavaScript</a></li>
<div class="amore">
<a href="https://edu.fanruan.com/video?class1=21" class="mra flex-1" target="_blank"><span>查看热门技术全部课程</span><i class="arrow el-icon-arrow-right"></i></a>
</div>
</ul>
<div class="hot">
<h2 class="col617">热门推荐</h2>
<ul>
<li><a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/85" class="lk hide-txt" target="_blank">JavaScript 基础入门</a>
<p><span>共24课时</span><em>3642人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA
基础入门</a>
<li>
<a href="https://edu.fanruan.com/video/98" class="lk hide-txt" target="_blank">JAVA 基础入门</a>
<p><span>共16课时</span><em>1785人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/106" class="lk hide-txt"
target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<li>
<a href="https://edu.fanruan.com/video/106" class="lk hide-txt" target="_blank">Python基础入门-给零基础小白的Python入门课</a>
<p><span>共2课时</span><em>1476人学习</em></p>
</li>
<li><a href="https://edu.fanruan.com/video/166" class="lk hide-txt"
target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<li>
<a href="https://edu.fanruan.com/video/166" class="lk hide-txt" target="_blank">Linux7.6基础入门课程(CentOS7.6)</a>
<p><span>共112课时</span><em>1人学习</em></p>
</li>
</ul>
@ -258,20 +249,16 @@
</div>
</div>
</li>
<li><a href="javascript:;" ><span>学习路径</span><i class="arrow el-icon-arrow-right"></i></a>
<li>
<a href="javascript:;"><span>学习路径</span><i class="arrow el-icon-arrow-right"></i></a>
<div class="child-nav">
<div class="child-wrapper">
<ul>
<li><a href="https://bbs.fanruan.com/edu/guide/finereport" target="_blank">
FR新手入门 </a></li>
<li><a href="https://bbs.fanruan.com/thread-77147-1-1.html" target="_blank">
FR学习计划 </a></li>
<li><a href="https://bbs.fanruan.com/edu/guide/finebi" target="_blank">
FineBI新手入门 </a></li>
<li><a href="https://bbs.fanruan.com/thread-123036-1-1.html" target="_blank">
FineBI学习计划 </a></li>
<li><a href="https://bbs.fanruan.com/thread-133123-1-1.html" target="_blank">
简道云学习计划 </a></li>
<li><a href="https://bbs.fanruan.com/edu/guide/finereport" target="_blank"> FR新手入门 </a></li>
<li><a href="https://bbs.fanruan.com/thread-77147-1-1.html" target="_blank"> FR学习计划 </a></li>
<li><a href="https://bbs.fanruan.com/edu/guide/finebi" target="_blank"> FineBI新手入门 </a></li>
<li><a href="https://bbs.fanruan.com/thread-123036-1-1.html" target="_blank"> FineBI学习计划 </a></li>
<li><a href="https://bbs.fanruan.com/thread-133123-1-1.html" target="_blank"> 简道云学习计划 </a></li>
</ul>
</div>
</div>
@ -281,11 +268,11 @@
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f4d7d83c565e698bd7cedfe9c6297055";
var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);
}
)();
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?f4d7d83c565e698bd7cedfe9c6297055";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body>
</html>

87
src/components/banner.vue

@ -4,8 +4,7 @@
<div class="left-nav">
<ul class="left-wrapper">
<li v-for="(item, i) in menuList.slice(0, 6)" :key="i">
<router-link @mouseenter="gethot(item.id)" class="c1a flex-3 flex-1" :to="'/video?class1='+item.id"
target="_blank">
<router-link @mouseenter="gethot(item.id)" class="c1a flex-3 flex-1" :to="'/video?class1=' + item.id" target="_blank">
<span>{{ item.it618_classname }}</span>
<i class="arrow el-icon-arrow-right"></i>
</router-link>
@ -39,13 +38,11 @@
</li>
</ul>
</div>
</div>
</div>
</li>
<li>
<!-- <a href="/video?class1=37&class2=0" class="c1a flex-3 flex-1">
<span>FineDataLink</span>
<i class="arrow el-icon-arrow-right"></i>
@ -69,28 +66,16 @@
</router-link>
</div>
</ul>
</div>
</div>
</li>
</ul>
</div>
<div class="right-box flex-3">
<div class="ad">
<a :href="cover.click_url" target="_blank">
<!-- <img :src="cover.imgurl" width="1000" height="420"> -->
<el-image :src="cover.img_url" style=" width: 1000px; height: 375px; position: static">
<template #error>
<div style="width: 800px; height: 100%;" class="flex-5">
<i class="el-icon-loading f24 colb3c"></i>
</div>
</template>
</el-image>
</a>
<div id="AD-1d4b2f969fcd43a99205e88c53b05d8d"></div>
</div>
<div class="menu">
<ul>
<a href="https://bbs.fanruan.com/course/report/standard?sqtjBI" target="_blank">
<li>
@ -121,16 +106,11 @@
<i class="arrow el-icon-arrow-right"></i>
</a>
</ul>
</div>
</div>
</div>
</div>
<div class="mbg ad-m dn">
<a :href="cover.click_url" target="_blank">
<el-image :src="cover.img_url" style=" width: 100%; position: static">
@ -142,13 +122,12 @@
</el-image>
</a>
</div>
</template>
<script>
import { getCategories } from "@/api/video";
import { getcateHot, getCover } from "@/api/index";
import { toRefs, reactive } from 'vue';
import { getcateHot } from "@/api/index";
import { toRefs, reactive } from "vue";
export default {
setup() {
const state = reactive({
@ -166,13 +145,17 @@
};
fetchMenuList();
const fetchgetCover = async () => {
const res = await getCover();
if (res.code === 200) {
state.cover = res.data[0];
}
};
fetchgetCover();
// banner cid广
// const fetchgetCover = async () => {
// const res = await getCover();
// if (res.code === 200) {
// state.cover = res.data[0];
// }
// };
// fetchgetCover();
// banner 广
window.fineAd.getAdvertisement({ adId: "1d4b2f969fcd43a99205e88c53b05d8d" });
const fetchgetcateHot = async (class1) => {
const res = await getcateHot(class1);
@ -182,11 +165,9 @@
state.menuList.forEach((item, index) => {
if (item.id === class1) {
state.menuList[index]['hotdata'] = res.data;
state.menuList[index]["hotdata"] = res.data;
}
});
}
};
@ -194,13 +175,12 @@
//
state.menuList.forEach((item, index) => {
if (item.id === class1) {
if (!state.menuList[index]['hotdata']) {
if (!state.menuList[index]["hotdata"]) {
fetchgetcateHot(class1);
}
}
});
}
};
return {
...toRefs(state),
@ -212,7 +192,7 @@
<style lang="scss" scoped>
.mbg {
background: #F3F8FF;
background: #f3f8ff;
padding: 34px 0 0;
}
@ -252,8 +232,8 @@
}
.left-nav .left-wrapper > li:hover {
color: #0082FC;
background: #EEF3FA;
color: #0082fc;
background: #eef3fa;
}
.left-nav .left-wrapper li:hover .child-nav {
@ -261,7 +241,7 @@
}
.nav .right-box {
background-color: #EEF3FA;
background-color: #eef3fa;
border: none;
width: 1000px;
@ -273,7 +253,6 @@
width: 200px;
position: relative;
ul {
width: 216px;
height: 100%;
@ -288,10 +267,9 @@
height: 25%;
padding: 0 16px;
background-color: rgb(0, 0, 0, 0.19);
transition: all .3s;
transition: all 0.3s;
position: relative;
h5 {
font-size: 16px;
padding-bottom: 2px;
@ -302,7 +280,7 @@
}
i {
transition: all .3s;
transition: all 0.3s;
opacity: 0;
margin-left: 0;
}
@ -314,7 +292,6 @@
opacity: 1;
margin-left: 26px;
}
}
&::after {
@ -328,7 +305,6 @@
}
}
}
}
.child-nav {
@ -354,7 +330,7 @@
width: 320px;
height: 100%;
padding-top: 20px;
background-color: #EEF3FA;
background-color: #eef3fa;
padding: 20px 10px 0 10px;
.amore {
@ -365,8 +341,8 @@
.mra {
padding: 20px 0 20px 32px;
border-top: 1px solid #CEDDF2;
color: #0082FC;
border-top: 1px solid #ceddf2;
color: #0082fc;
font-size: 14px;
span {
@ -376,12 +352,11 @@
}
&:after {
content: ' ';
content: " ";
width: 42%;
}
}
.child-wrapper .child-item {
width: 42%;
border-radius: 20px;
@ -396,7 +371,6 @@
text-align: center;
padding: 4px 0;
font-size: 14px;
}
}
@ -409,9 +383,9 @@
}
.left-wrapper .hot {
border-left: 1px solid #CEDDF2;
border-left: 1px solid #ceddf2;
width: 240px;
background-color: #EEF3FA;
background-color: #eef3fa;
padding: 24px;
h2 {
@ -451,6 +425,5 @@
margin: 0 auto;
display: block;
}
}
</style>

6
src/router.js

@ -2,7 +2,7 @@ import { createRouter, createWebHistory } from 'vue-router';
import Layout from '@/layout/index.vue';
import store from '@/store';
import { refreshToken } from '@/api/auth';
// import '@/utils/fineClubSDK';
import '@/utils/advertisementSDK';
import { getUid, getExpiresTime } from '@/utils/cookie';
import { delUrlParams } from '@/utils/urlQuery';
@ -350,6 +350,10 @@ const router = createRouter({
},
});
// 接入广告配置
let getAdEnv = process.env.VUE_APP_ENV == 'dist' ? false : true;
window.fineAd.config({debug:getAdEnv,dev:getAdEnv});
// 通过导航守卫 判断并刷新token
let accessToken = store.getters.get_token;
let expires = getExpiresTime();

151
src/utils/advertisementSDK.js

@ -0,0 +1,151 @@
/**
* 广告调用SDK
* 2023-04-11 by Wangwei
*/
import axios from "axios";
const fineAd = (window.fineAd = window.fineAd || {});
fineAd.options = fineAd.options || {};
/**
* 初始化SDK配置
* @param debug
* @param dev
* @param adApiUrl
*/
const config = ({ debug = false, dev = false, adApiUrl }) => {
fineAd.options = {
...fineAd.options,
debug,
dev,
adApiUrl: dev ? 'https://testjdy.fanruan.com/fcoin' : 'https://home.fanruan.com/fcoin',
};
if(debug){
console.log('adApiUrl', fineAd.options.adApiUrl);
}
};
/**
* 获取并展示指定广告id的广告位
* @param adId 广告位id
* @param adId2 如果adId没有匹配到则显示第二个广告位
* @param top 顶边距
* @param bottom 底边距
*/
const getAdvertisement = async ({adId, adId2, top, bottom}) => {
const { debug, dev } = fineAd.options;
const dataPath = dev ? 'test' : 'prod';
await axios.get("https://shequ-oss.obs.cn-east-2.myhuaweicloud.com/digit/ad/data/" + dataPath + "/advertisement.json?v=" + Date.now())
.then(function (res) {
var isAdId = false;
res.data.forEach((item) => {
if(item.adId === adId){
isAdId = true;
let getSize = splitPicSize(item.picSize);
if(debug){
console.group("advertisement " + adId);
console.log('item',item);
console.log('picSize',getSize);
console.log('top',top);
console.log('bottom',bottom);
console.groupEnd();
}
let adDomId = document.getElementById('AD-' + adId);
adDomId.innerHTML='';
window.fineAd.adMargin({ adId:adId, top:top });
// 无链接图片广告
if(!item.adLink && item.type===1){
adDomId.innerHTML+=`<img width="${getSize.w}" height="${getSize.h}" src="${item.picUrl}">`;
}
// 有链接图片广告
if(item.adLink && item.type===1){
adDomId.innerHTML+=`<a onClick="window.fineAd.advertisementHits('${adId}');" href="${item.adLink}" target="_blank"><img width="${getSize.w}" height="${getSize.h}" src="${item.picUrl}"></a>`;
}
// 有链接文本广告
if(item.adLink && item.type===2){
adDomId.innerHTML+=`<a onClick="window.fineAd.advertisementHits('${adId}');" href="${item.adLink}" target="_blank">${item.adText}</a>`;
}
window.fineAd.adMargin({ adId:adId, bottom:bottom });
}
});
// 找第二个广告位
if(adId2 && !isAdId){
res.data.forEach((item) => {
if(item.adId === adId2){
console.log('isAdId',isAdId);
let getSize = splitPicSize(item.picSize);
if(debug){
console.group("advertisement " + adId2);
console.log('item',item);
console.log('picSize',getSize);
console.log('top',top);
console.log('bottom',bottom);
console.groupEnd();
}
let adDomId = document.getElementById('AD-' + adId2);
adDomId.innerHTML='';
window.fineAd.adMargin({ adId:adId2, top:top });
// 有链接图片广告
if(item.adLink && item.type===1){
adDomId.innerHTML=`<a onClick="window.fineAd.advertisementHits('${adId2}');" href="${item.adLink}" target="_blank"><img width="${getSize.w}" height="${getSize.h}" src="${item.picUrl}"></a>`;
}
// 有链接文本广告
if(item.adLink && item.type===2){
adDomId.innerHTML=`<a onClick="window.fineAd.advertisementHits('${adId2}');" href="${item.adLink}" target="_blank">${item.adText}</a>`;
}
window.fineAd.adMargin({ adId:adId2, bottom:bottom });
}
});
}
})
.catch(function (error) {
console.log('ad error',error);
});
};
/**
* 广告边距
* @param top 顶边距
* @param bottom 底边距
*/
const adMargin = ({ adId, top = 0, bottom = 0 }) => {
let adDomId = document.getElementById('AD-' + adId);
if(top > 0){
adDomId.innerHTML+=`<div style="height:${top}px;"></div>`;
}else if(bottom > 0){
adDomId.innerHTML+=`<div style="height:${bottom}px;"></div>`;
}
}
/**
* 拆分广告位尺寸
* @param adSize 广告位尺寸
* @return Array[w,h] 宽和高
*/
const splitPicSize = (adSize) =>{
let {w,h} = {w:'',h:''};
if(adSize){
let {[0]:w,[1]:h} = adSize.replace(/\s/g,"").split('*');
return {w,h};
}else{
return {w,h};
}
}
/**
* 广告位埋点
* @param adId 广告位id
*/
const advertisementHits = (adId) =>{
const { adApiUrl } = fineAd.options;
axios.get(adApiUrl + "/api/advertisement/hits/" + adId);
}
fineAd.config = config;
fineAd.adMargin = adMargin;
fineAd.getAdvertisement = getAdvertisement;
fineAd.advertisementHits = advertisementHits;

162
src/views/class/play.vue

@ -2,16 +2,13 @@
<div v-wechat-title="'正在播放' + play_title"></div>
<appHeader />
<div v-if="!com_user_token">
<el-empty :image-size="200" description=" ">无权限查看当前页面需要 <a
:href="com_login_url" class="col008">登录</a></el-empty>
<el-empty :image-size="200" description=" ">无权限查看当前页面需要 <a :href="com_login_url" class="col008">登录</a></el-empty>
</div>
<div v-if="isAuth">
<div class="main">
<div class="videoBox flex-2">
<div class="viewtil" style="min-height:8%">
<el-page-header @back="goBack" title="返回班级" :content="video.title">
</el-page-header>
<el-page-header @back="goBack" title="返回班级" :content="video.title"> </el-page-header>
</div>
<div id="VideoPlay" style=" width:100%; height: 92%; margin-top: auto;"></div>
@ -21,29 +18,27 @@
<div class="txt">本节视频已看完</div>
<div v-if="playThisId != playNextId && playNextId != 0">
<div class="txt_next">下一节<span class="fw600">{{playNextTitle}}</span></div>
<div class="txt_next">
下一节<span class="fw600">{{ playNextTitle }}</span>
</div>
<div class="sel_btn_box flex-3">
<div class="btn_sty" @click="getvideo_click(playThisId,1);">重播</div>
<div class="btn_sty" @click="getvideo_click(playNextId);">播放下一节</div>
<div class="btn_sty" @click="getvideo_click(playThisId, 1)">重播</div>
<div class="btn_sty" @click="getvideo_click(playNextId)">播放下一节</div>
</div>
</div>
<div v-else>
<div class="txt_next">已是最后一节</div>
<div class="sel_btn_box flex-3">
<div class="btn_sty" style="margin: 0 auto;" @click="getvideo_click(playThisId,1);">重播</div>
<div class="btn_sty" style="margin: 0 auto;" @click="getvideo_click(playThisId, 1)">重播</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="navbox" id="videoList">
<div class="classtil">
<router-link :to="'/class/' + classid">{{ video.className }}</router-link>
</div>
@ -54,7 +49,6 @@
</div>
<el-scrollbar style="height: 86%; overflow: hidden;" ref="myscroll">
<div style="padding-bottom: 40px;">
<div class="looplist" v-for="(item, i) in lessonList" :key="i">
<div class="otile hide-txt">{{ item.title }}</div>
@ -63,42 +57,33 @@
<ul class="vlist">
<li class="item" v-for="(item, i) in item.video" :key="i">
<!-- <el-tooltip :content="item.title" placement="left" effect="light"> -->
<a class="a-play flex-1" href="javascript:;" @click="getvideo_click(item.id)"
:class="{playcur : playcur == item.id}">
<img src="@/assets/img/playing.gif" width="18" v-if="playcur == item.id">
<a class="a-play flex-1" href="javascript:;" @click="getvideo_click(item.id)" :class="{ playcur: playcur == item.id }">
<img src="@/assets/img/playing.gif" width="18" v-if="playcur == item.id" />
<i class="iconfont icon-bofang2" v-else></i>
<div class="title hide-txt">{{ item.title }}</div>
<div class="time">{{ item.videoTime }}</div>
</a>
<!-- </el-tooltip> -->
</li>
</ul>
</div>
</div>
</el-scrollbar>
</div>
</div>
</div>
<div v-else>
<el-empty :image-size="200" :description="msg" v-if="empty"></el-empty>
</div>
</template>
<script>
import appHeader from "@/components/Header";
import { useRoute,useRouter } from 'vue-router'
import { useRoute, useRouter } from "vue-router";
import { getVideo, getPlayList, classlog } from "@/api/study";
import { toRefs, reactive, onMounted, ref, onUnmounted } from 'vue';
import { toRefs, reactive, onMounted, ref, onUnmounted } from "vue";
export default {
name: "classPlay",
@ -106,8 +91,8 @@
appHeader,
},
setup() {
const route = useRoute()
const router = useRouter()
const route = useRoute();
const router = useRouter();
const classid = route.params.classid;
const videoid = route.params.videoid;
@ -122,22 +107,22 @@
lessonList: [],
videoObject: {
container: '#VideoPlay',
variable: 'player',
container: "#VideoPlay",
variable: "player",
autoplay: false,
html5m3u8: true,
subtitle: false,
loop: false,
//loaded: 'loadHandler',//
video: '',
seek: '0',
video: "",
seek: "0",
//debug:true,
},
playcur: 0,
logid: 0,
videoid: 0,
videopid: 0,
play_title: '',
play_title: "",
ckPlayer: null,
playIndex: 0,
playNextId: 0,
@ -148,8 +133,8 @@
timerPrss: null,
showAutoBox: false,
is_duration: true,
playThisId:route.params.videoid
})
playThisId: route.params.videoid,
});
// MARKET-4168
// const resVideoData = async () => {
@ -178,20 +163,18 @@
// };
// resVideoData();
const goBack = () => {
router.push('/class/'+classid);
}
router.push("/class/" + classid);
};
//
const postlogData = async (logData) => {
const getLogdata = state.arrVideo.filter( t=> t.id==state.videoid);
const getLogdata = state.arrVideo.filter((t) => t.id == state.videoid);
await classlog(logData, getLogdata[0].logdata);
}
};
//
const getvideo_click = async (id, replay = 0) => {
state.playThisId = id;
state.is_duration = false;
clearInterval(state.timerTxt);
@ -207,9 +190,7 @@
state.videoObject.autoplay = true;
state.videoObject.seek = 0;
}, 500);
}
};
/**
* 封装视频渲染
@ -217,7 +198,6 @@
* @resOne 1=第一次进入页面播放
**/
const getvideoDom = async (id, replay = 0, resOne = 0) => {
//
const res = await getVideo(classid, id);
if (res.code === 200) {
@ -249,26 +229,26 @@
state.is_duration = true;
//
state.ckPlayer.addListener('time', timeHandler);
state.ckPlayer.addListener("time", timeHandler);
function timeHandler(t) {
let tm = parseInt(t);
localStorage.setItem(id + '_playTime', tm);
localStorage.setItem(id + "_playTime", tm);
}
//
state.ckPlayer.addListener('play', playHandler);
state.ckPlayer.addListener("play", playHandler);
function playHandler() {
myCounter.startCount();
}
//
state.ckPlayer.addListener('pause', pauseHandler);
state.ckPlayer.addListener("pause", pauseHandler);
function pauseHandler() {
myCounter.stopCount();
}
//
state.ckPlayer.addListener('ended', endedHandler);
state.ckPlayer.addListener("ended", endedHandler);
function endedHandler() {
myCounter.stopCount();
// funAutoPlay();
@ -280,7 +260,7 @@
var step = 0;
var intervalId = null;
function count() {
localStorage.setItem(id + '_duration', parseInt(step));
localStorage.setItem(id + "_duration", parseInt(step));
step = step + 1;
//
@ -301,9 +281,8 @@
clearInterval(intervalId);
intervalId = null;
}
return { startCount: start, stopCount: stop }
})()
return { startCount: start, stopCount: stop };
})();
//
if (state.isAuth === false) {
@ -313,27 +292,27 @@
}
//
let get_duration = localStorage.getItem(state.videoid + '_duration');
let get_duration = localStorage.getItem(state.videoid + "_duration");
if (resOne != 1 && get_duration) {
let logData = {
logid: state.logid,
pytime: localStorage.getItem(state.videoid + '_playTime'),
duration: localStorage.getItem(state.videoid + '_duration'),
pytime: localStorage.getItem(state.videoid + "_playTime"),
duration: localStorage.getItem(state.videoid + "_duration"),
videoid: state.videoid,
}
};
postlogData(logData);
}
// id
state.logid = res.data.logid;
state.videoid = res.data.id;
console.log('log_videoid',state.videoid);
console.log("log_videoid", state.videoid);
//
let winState = { url: id };
window.history.pushState(winState, '', id);
window.history.pushState(winState, "", id);
return state;
}
};
//
const resLessonList = async () => {
@ -364,14 +343,13 @@
state.lessonList[parent].video.forEach((item, child) => {
if (item.id == id) {
if (state.lessonList[parent].video.length == child + 1) {
getNextIdarr(parent + 1, 0)
getNextIdarr(parent + 1, 0);
} else {
getNextIdarr(parent, child + 1)
getNextIdarr(parent, child + 1);
}
}
});
});
};
//
@ -390,7 +368,6 @@
});
};
const myscroll = ref(null);
onMounted(() => {
@ -409,60 +386,56 @@
myscroll.value.wrap.scrollTop = gettop - 200;
}, 1000);
window.onbeforeunload = function() {
//
let logData = {
logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime'),
duration: localStorage.getItem(state.videoid + '_duration'),
pytime: localStorage.getItem(state.videoid + "_playTime"),
duration: localStorage.getItem(state.videoid + "_duration"),
videoid: state.videoid,
}
};
postlogData(logData);
}
};
// a
var tbody = document.getElementById("myheader");
tbody.onclick = function(e) {
myaddEvent(e);
}
};
var videolista = document.getElementById("videoList");
videolista.onclick = function(e) {
myaddEvent(e);
}
};
function myaddEvent(e) {
e = e || event;
var target = e.target || e.srcElement.href;
e.preventDefault();
if (target.tagName == 'A') {
if (target.tagName == "A") {
//console.log(target.href);
//
let logData = {
logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime'),
duration: localStorage.getItem(state.videoid + '_duration'),
pytime: localStorage.getItem(state.videoid + "_playTime"),
duration: localStorage.getItem(state.videoid + "_duration"),
videoid: state.videoid,
}
};
//
postlogData(logData);
setTimeout("top.location.href = '" + target.href + "'", 100);
}
}
})
});
onUnmounted(() => {
//
let logData = {
logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime'),
duration: localStorage.getItem(state.videoid + '_duration'),
pytime: localStorage.getItem(state.videoid + "_playTime"),
duration: localStorage.getItem(state.videoid + "_duration"),
videoid: state.videoid,
}
};
postlogData(logData);
})
});
return {
...toRefs(state),
@ -472,9 +445,9 @@
getvideo_click,
myscroll,
goBack,
}
}
}
};
},
};
</script>
<style lang="scss" scoped>
@ -489,7 +462,7 @@
width: 100%;
height: 100%;
text-align: center;
background-color: rgb(0, 0, 0, .7);
background-color: rgb(0, 0, 0, 0.7);
backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: saturate(180%) blur(20px);
z-index: 900;
@ -570,11 +543,11 @@
}
.status_1 {
color: #FF3C23;
color: #ff3c23;
}
.status_2 {
color: #67C23A;
color: #67c23a;
}
.status_3 {
@ -598,7 +571,6 @@
overflow: hidden;
}
.videoBox {
position: absolute;
left: 0;
@ -621,9 +593,7 @@
background-color: #0f0f0f;
}
.classtil {
font-size: 22px;
color: #eee;
background-color: #000;
@ -660,8 +630,6 @@
color: #8496ab;
}
.item {
font-size: 14px;
color: #617288;
@ -693,8 +661,6 @@
width: 16px;
height: 16px;
}
}
}

19
src/views/studypath/finebi.vue

@ -216,11 +216,7 @@
</div>
</el-scrollbar>
<div style="display:float;width: 100%;height:80px;overflow: hidden;margin:20px 0;" class="m-dn" v-if="is_ad">
<a :href="ad_clickurl" target="_blank">
<img :src="ad_imgurl" alt="BI学习路径banner" />
</a>
</div>
<div id="AD-83346c28538542f6b678220a47e6fee3" class="m-dn"></div>
</div>
</div>
@ -807,7 +803,6 @@
import { reactive, toRefs } from "vue";
import { studentCount } from "@/api/guide";
import { getCourseNum } from "@/api/study";
import { adurl } from "@/api/ad";
import downMenu from "@/views/studypath/downMenu";
import pathMenu from "@/views/studypath/pathMenu";
export default {
@ -860,17 +855,7 @@ export default {
resgetNode();
// 广
const adgetNode = async () => {
const res = await adurl(31);
if (res.code === 200) {
if (res.data.img_url != null) {
state.ad_imgurl = res.data.img_url;
state.ad_clickurl = res.data.click_url;
state.is_ad = true;
}
}
};
adgetNode();
window.fineAd.getAdvertisement({ adId: "83346c28538542f6b678220a47e6fee3", top: 24 });
//
const resCourseNum = async (pid, tmp) => {

21
src/views/studypath/finereportStudyPath2023.vue

@ -198,12 +198,7 @@
</div>
</div>
</el-scrollbar>
<div style="display:float;width: 100%;height:80px;overflow: hidden;margin:20px 0;" class="m-dn" v-if="is_ad">
<a :href="ad_clickurl" target="_blank">
<img :src="ad_imgurl" alt="FR学习路径banner" />
</a>
</div>
<div id="AD-bfb30c067e5e449aac8ea667205fcfc3" class="m-dn"></div>
</div>
</div>
@ -654,7 +649,6 @@
<script>
import { reactive, toRefs } from "vue";
import { getCourseNum } from "@/api/study";
import { adurl } from "@/api/ad";
import downMenu from "@/views/studypath/downMenu";
import { scrollToElementAnchor } from "@/utils/scrollTo";
import pathMenu from "@/views/studypath/pathMenu";
@ -691,18 +685,7 @@ export default {
cate_list: [],
});
// 广
const adgetNode = async () => {
const res = await adurl(30);
if (res.code === 200) {
if (res.data.img_url != null) {
state.ad_imgurl = res.data.img_url;
state.ad_clickurl = res.data.click_url;
state.is_ad = true;
}
}
};
adgetNode();
window.fineAd.getAdvertisement({ adId: "bfb30c067e5e449aac8ea667205fcfc3", top: 24 });
//
const resCourseNum = async () => {

21
src/views/studypath/jiandaoyun.vue

@ -77,7 +77,7 @@
<div class="infobox">
<div class="til">了解简道云并完成注册或登录</div>
<div class="flex-6" style="margin: 16px 0 28px;">
<a class="btn-jdy f14 newbtn3" href="/video/play/5206" target="_blank">简道云介绍</a>
<a class="btn-jdy f14 newbtn3" href="/video/play/5579" target="_blank">简道云介绍</a>
<a class="btn-jdy f14 newbtn3" href="https://www.jiandaoyun.com/signin" target="_blank">简道云登录或注册</a>
</div>
@ -203,11 +203,7 @@
</div>
</el-scrollbar>
<div style="display:float;width: 100%;height:80px;overflow: hidden;margin:20px 0;" class="m-dn" v-if="is_ad">
<a :href="ad_clickurl" target="_blank">
<img :src="ad_imgurl" alt="简道云学习路径banner" />
</a>
</div>
<div id="AD-ec2bf821df994fa5aa3cc950377a812e" class="m-dn"></div>
</div>
</div>
@ -679,7 +675,6 @@
import { reactive, toRefs } from "vue";
import { studentCount } from "@/api/guide";
import { getCourseNum } from "@/api/study";
import { adurl } from "@/api/ad";
import downMenu from "@/views/studypath/downMenu";
import pathMenu from "@/views/studypath/pathMenu";
export default {
@ -726,17 +721,7 @@ export default {
resgetNode();
// 广
const adgetNode = async () => {
const res = await adurl(32);
if (res.code === 200) {
if (res.data.img_url != null) {
state.ad_imgurl = res.data.img_url;
state.ad_clickurl = res.data.click_url;
state.is_ad = true;
}
}
};
adgetNode();
window.fineAd.getAdvertisement({ adId: "ec2bf821df994fa5aa3cc950377a812e", top: 24 });
//
const resCourseNum = async () => {

3
src/views/video/indexVideo.vue

@ -294,12 +294,11 @@
{ id: 6, name: "300元以上" },
],
sortList: [
{ id: 0, name: "默认排序", label: "按课程id从高到低", icon: "" },
{ id: 0, name: "最近更新", label: "发布时间倒序", icon: "" },
{ id: 1, name: "学习人数", label: "学习人数从高到底", icon: "el-icon-caret-bottom" },
{ id: 2, name: "销量", label: "销量从高到低", icon: "el-icon-caret-bottom" },
{ id: 3, name: "价格", label: "价格从高到低", icon: "el-icon-caret-bottom" },
{ id: 4, name: "价格", label: "价格从低到高", icon: "el-icon-caret-top" },
{ id: 5, name: "更新时间", label: "发布日期倒序", icon: "el-icon-caret-bottom" },
],
priceRangeList: [],
videoList: [],

212
src/views/video/play.vue

@ -1,11 +1,9 @@
<template>
<div v-wechat-title="'正在播放' + play_title"></div>
<div class="main">
<div class="videoBox flex-2">
<div class="viewtil" style="min-height:8%">
<el-page-header @back="goBack(videopid)" title="返回课程" :content="video.it618_name">
</el-page-header>
<el-page-header @back="goBack(videopid)" title="返回课程" :content="video.it618_name"> </el-page-header>
</div>
<div :class="{ affix: is_scroll }"></div>
@ -27,86 +25,69 @@
<div class="txt">本节视频已看完</div>
<div v-if="playThisId != playNextId && playNextId != 0">
<div class="txt_next">下一节<span class="fw600">{{playNextTitle}}</span></div>
<div class="txt_next">
下一节<span class="fw600">{{ playNextTitle }}</span>
</div>
<div class="sel_btn_box flex-3">
<div class="btn_sty" @click="getvideo_click(playThisId,1);">重播</div>
<div class="btn_sty" @click="getvideo_click(playNextId);">播放下一节</div>
<div class="btn_sty" @click="getvideo_click(playThisId, 1)">重播</div>
<div class="btn_sty" @click="getvideo_click(playNextId)">播放下一节</div>
</div>
</div>
<div v-else>
<div class="txt_next">已是最后一节</div>
<div class="sel_btn_box flex-3">
<div class="btn_sty" style="margin: 0 auto;" @click="getvideo_click(playThisId,1);">重播</div>
<div class="btn_sty" style="margin: 0 auto;" @click="getvideo_click(playThisId, 1)">重播</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="navbox" id="videoList">
<div class="cate">
<i class="iconfont icon-mulu"></i>
<span>课程章节</span>
</div>
<el-scrollbar style="height: 90%; overflow: hidden;" ref="myscroll">
<div style="padding-bottom: 40px;">
<div class="looplist" v-for="(item, i) in lessonList" :key="i">
<div class="otile hide-txt">{{ item.it618_name }}</div>
<ul class="vlist">
<li class="item" v-for="(item, i) in item.video" :key="i">
<a class="a-play flex-1" href="javascript:;" @click="getvideo_click(item.id)"
:class="{playcur : playcur == item.id}">
<img class="playing" src="@/assets/img/playing.gif" v-if="playcur == item.id">
<a class="a-play flex-1" href="javascript:;" @click="getvideo_click(item.id)" :class="{ playcur: playcur == item.id }">
<img class="playing" src="@/assets/img/playing.gif" v-if="playcur == item.id" />
<i class="iconfont icon-bofang2" v-else></i>
<div class="title hide-txt"><span
:class="'status_'+item.video_status">{{item.video_state}}</span>{{item.it618_name}}</div>
<div class="title hide-txt">
<span :class="'status_' + item.video_status">{{ item.video_state }}</span
>{{ item.it618_name }}
</div>
<div class="time">{{ item.videoTime }}</div>
</a>
</li>
</ul>
</div>
</div>
</el-scrollbar>
</div>
</div>
</template>
<script>
import { useRoute, useRouter } from 'vue-router'
import {
getVideo,
getPlayList,
classlog,
maLookVideoTracking,
sourceDeviceLog,
updateVideoCountLog,
updateVideoPlayEnd
} from "@/api/video";
import { toRefs, reactive, onMounted, ref, onUnmounted } from 'vue';
import { useRoute, useRouter } from "vue-router";
import { getVideo, getPlayList, classlog, maLookVideoTracking, sourceDeviceLog, updateVideoCountLog, updateVideoPlayEnd } from "@/api/video";
import { toRefs, reactive, onMounted, ref, onUnmounted } from "vue";
import { isMobileValue } from "@/utils/isMobile";
export default {
name: "video_course_play",
setup() {
const route = useRoute()
const router = useRouter()
const route = useRoute();
const router = useRouter();
const videoid = route.params.playid;
const state = reactive({
@ -119,22 +100,22 @@
lessonList: [],
videoObject: {
container: '#VideoPlay',
variable: 'player',
container: "#VideoPlay",
variable: "player",
autoplay: false,
html5m3u8: true,
subtitle: false,
loop: false,
//loaded: 'loadHandler',//
video: '',
seek: '0',
video: "",
seek: "0",
//debug:true,
},
playcur: 0,
logid: 0,
videoid: 0,
videopid: 0,
play_title: '',
play_title: "",
ckPlayer: null,
playIndex: 0,
playNextId: 0,
@ -146,32 +127,31 @@
showAutoBox: false,
is_duration: true,
is_scroll: false,
playThisId: route.params.playid
})
playThisId: route.params.playid,
});
const goBack = (pid) => {
router.push('/video/' + pid);
}
router.push("/video/" + pid);
};
//
const postSourceDeviceLog = async () => {
let get_from = route.query.from || null;
const params = {
source: get_from,
device: isMobileValue()
}
device: isMobileValue(),
};
await sourceDeviceLog(params);
}
};
//
const postlogData = async (logData) => {
let logParams = {
...logData,
vid: state.videoid
}
vid: state.videoid,
};
await classlog(logParams);
}
};
//
const getvideo_click = async (id, replay = 0) => {
@ -190,8 +170,7 @@
state.videoObject.autoplay = true;
state.videoObject.seek = 0;
}, 500);
}
};
// ma
const resmaLookVideoTracking = async (id) => {
@ -211,7 +190,6 @@
* @param resOne 1=第一次进入页面播放
**/
const getvideoDom = async (id, replay = 0, resOne = 0) => {
//
if (resOne === 1) {
postSourceDeviceLog();
@ -225,7 +203,7 @@
state.play_title = res.data.it618_name;
state.videoObject.video = res.data.it618_videourl;
console.log('res.data', res.data);
console.log("res.data", res.data);
if (res.data.playtime > 0) {
state.videoObject.seek = res.data.playtime;
@ -252,44 +230,43 @@
state.is_duration = true;
//
state.ckPlayer.addListener('time', timeHandler);
state.ckPlayer.addListener("time", timeHandler);
function timeHandler(t) {
let tm = parseInt(t);
localStorage.setItem(id + '_playTime_video', tm);
localStorage.setItem(id + "_playTime_video", tm);
}
//
state.ckPlayer.addListener('play', playHandler);
state.ckPlayer.addListener("play", playHandler);
function playHandler() {
myCounter.startCount();
}
//
state.ckPlayer.addListener('pause', pauseHandler);
state.ckPlayer.addListener("pause", pauseHandler);
function pauseHandler() {
myCounter.stopCount();
}
//
state.ckPlayer.addListener('ended', endedHandler);
state.ckPlayer.addListener("ended", endedHandler);
function endedHandler() {
myCounter.stopCount();
// funAutoPlay();
state.showAutoBox = true;
//
let log2Param = {
id:state.video.logid2
}
id: state.video.logid2,
};
updateVideoPlayEnd(log2Param);
}
//
const myCounter = (function() {
var step = 0;
var intervalId = null;
function count() {
localStorage.setItem(id + '_duration_video', parseInt(step));
localStorage.setItem(id + "_duration_video", parseInt(step));
if (parseInt(step) === 10) {
resmaLookVideoTracking(id);
}
@ -308,12 +285,11 @@
if (state.pointTimer == 5) {
state.pointTimer = 0;
let log2Param = {
id:state.video.logid2
}
id: state.video.logid2,
};
updateVideoCountLog(log2Param);
// console.log("",state.video.logid2);
}
}
function start() {
if (intervalId == null) {
@ -326,9 +302,8 @@
clearInterval(intervalId);
intervalId = null;
}
return { startCount: start, stopCount: stop }
})()
return { startCount: start, stopCount: stop };
})();
//
if (state.isAuth === false) {
@ -338,26 +313,26 @@
}
//
let get_duration = localStorage.getItem(state.videoid + '_duration_video');
let get_duration = localStorage.getItem(state.videoid + "_duration_video");
if (resOne != 1 && get_duration) {
let logData = {
logid: state.logid,
pytime: localStorage.getItem(state.videoid + '_playTime_video'),
duration: localStorage.getItem(state.videoid + '_duration_video'),
}
pytime: localStorage.getItem(state.videoid + "_playTime_video"),
duration: localStorage.getItem(state.videoid + "_duration_video"),
};
postlogData(logData);
}
// id
state.logid = res.data.logid;
state.videoid = res.data.id;
console.log('log_videoid', state.videoid);
console.log("log_videoid", state.videoid);
//
let winState = { url: id };
window.history.pushState(winState, '', id);
window.history.pushState(winState, "", id);
return state;
}
};
//
const resLessonList = async () => {
@ -388,14 +363,13 @@
state.lessonList[parent].video.forEach((item, child) => {
if (item.id == id) {
if (state.lessonList[parent].video.length == child + 1) {
getNextIdarr(parent + 1, 0)
getNextIdarr(parent + 1, 0);
} else {
getNextIdarr(parent, child + 1)
getNextIdarr(parent, child + 1);
}
}
});
});
};
//
@ -414,7 +388,6 @@
});
};
const myscroll = ref(null);
onMounted(() => {
@ -433,66 +406,62 @@
myscroll.value.wrap.scrollTop = gettop - 200;
}, 1000);
window.onbeforeunload = function() {
//
let logData = {
logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime_video'),
duration: localStorage.getItem(state.videoid + '_duration_video'),
}
pytime: localStorage.getItem(state.videoid + "_playTime_video"),
duration: localStorage.getItem(state.videoid + "_duration_video"),
};
postlogData(logData);
}
};
// a
var tbody = document.getElementById("myheader");
tbody.onclick = function(e) {
myaddEvent(e);
}
};
var videolista = document.getElementById("videoList");
videolista.onclick = function(e) {
myaddEvent(e);
}
};
function myaddEvent(e) {
e = e || event;
var target = e.target || e.srcElement.href;
e.preventDefault();
if (target.tagName == 'A') {
if (target.tagName == "A") {
//console.log(target.href);
//
let logData = {
logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime_video'),
duration: localStorage.getItem(state.videoid + '_duration_video'),
}
pytime: localStorage.getItem(state.videoid + "_playTime_video"),
duration: localStorage.getItem(state.videoid + "_duration_video"),
};
//
postlogData(logData);
setTimeout("top.location.href = '" + target.href + "'", 100);
}
}
window.addEventListener('scroll', function () {
window.addEventListener("scroll", function() {
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
if (scrollTop > 50) {
state.is_scroll = true;
} else {
state.is_scroll = false;
}
})
})
});
});
onUnmounted(() => {
//
let logData = {
logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime_video'),
duration: localStorage.getItem(state.videoid + '_duration_video'),
}
pytime: localStorage.getItem(state.videoid + "_playTime_video"),
duration: localStorage.getItem(state.videoid + "_duration_video"),
};
postlogData(logData);
})
});
return {
...toRefs(state),
@ -501,9 +470,9 @@
getvideo_click,
myscroll,
goBack,
}
}
}
};
},
};
</script>
<style lang="scss" scoped>
@ -518,7 +487,7 @@
width: 100%;
height: 100%;
text-align: center;
background-color: rgb(0, 0, 0, .7);
background-color: rgb(0, 0, 0, 0.7);
backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: saturate(180%) blur(20px);
z-index: 900;
@ -601,11 +570,11 @@
}
.status_1 {
color: #FF3C23;
color: #ff3c23;
}
.status_2 {
color: #67C23A;
color: #67c23a;
}
.status_3 {
@ -619,6 +588,7 @@
bottom: 0;
right: 0;
background-color: #000;
z-index: 2;
}
.mbox {
@ -629,7 +599,6 @@
overflow: hidden;
}
.videoBox {
position: absolute;
left: 0;
@ -652,9 +621,7 @@
background-color: #0f0f0f;
}
.classtil {
font-size: 22px;
color: #eee;
background-color: #000;
@ -691,8 +658,6 @@
color: #8496ab;
}
.item {
font-size: 14px;
color: #617288;
@ -724,8 +689,6 @@
width: 16px;
height: 16px;
}
}
}
@ -762,15 +725,11 @@
}
</style>
<style lang="scss">
/*响应式-移动端*/
@import '~@/assets/css/m.css';
@import "~@/assets/css/m.css";
@media screen and (max-width: 1200px) {
.affix {
height: 35vh;
background-color: #fff;
@ -837,13 +796,13 @@
.cate {
background-color: #fff;
color: #333;
border-bottom: solid 1px #CEDDF2;
border-bottom: solid 1px #ceddf2;
}
}
.looplist {
.otile {
border-bottom: solid 1px #CEDDF2;
border-bottom: solid 1px #ceddf2;
padding-bottom: 12px;
color: #333;
}
@ -851,11 +810,11 @@
.vlist {
.item {
margin-left: 24px;
border-bottom: solid 1px #CEDDF2;
border-bottom: solid 1px #ceddf2;
color: #333;
.icon-bofang2 {
color: #B3C1D3 !important;
color: #b3c1d3 !important;
}
}
}
@ -880,7 +839,6 @@
.m-footr {
margin-top: 0;
}
}
</style>

Loading…
Cancel
Save