Browse Source

feat 静态页面无缓存

pull/3/head
Wangwei 2 years ago
parent
commit
112ba13326
  1. 275
      public/index.html
  2. 304
      src/views/class/play.vue
  3. 2
      src/views/studypath/jiandaoyun.vue
  4. 354
      src/views/video/play.vue

275
public/index.html

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

304
src/views/class/play.vue

@ -1,17 +1,14 @@
<template> <template>
<div v-wechat-title="'正在播放' +play_title"></div> <div v-wechat-title="'正在播放' + play_title"></div>
<appHeader /> <appHeader />
<div v-if="!com_user_token"> <div v-if="!com_user_token">
<el-empty :image-size="200" description=" ">无权限查看当前页面需要 <a <el-empty :image-size="200" description=" ">无权限查看当前页面需要 <a :href="com_login_url" class="col008">登录</a></el-empty>
:href="com_login_url" class="col008">登录</a></el-empty>
</div> </div>
<div v-if="isAuth"> <div v-if="isAuth">
<div class="main"> <div class="main">
<div class="videoBox flex-2"> <div class="videoBox flex-2">
<div class="viewtil" style="min-height:8%"> <div class="viewtil" style="min-height:8%">
<el-page-header @back="goBack" title="返回班级" :content="video.title"> <el-page-header @back="goBack" title="返回班级" :content="video.title"> </el-page-header>
</el-page-header>
</div> </div>
<div id="VideoPlay" style=" width:100%; height: 92%; margin-top: auto;"></div> <div id="VideoPlay" style=" width:100%; height: 92%; margin-top: auto;"></div>
@ -21,31 +18,29 @@
<div class="txt">本节视频已看完</div> <div class="txt">本节视频已看完</div>
<div v-if="playThisId != playNextId && playNextId != 0"> <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="sel_btn_box flex-3">
<div class="btn_sty" @click="getvideo_click(playThisId,1);">重播</div> <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(playNextId)">播放下一节</div>
</div> </div>
</div> </div>
<div v-else> <div v-else>
<div class="txt_next">已是最后一节</div> <div class="txt_next">已是最后一节</div>
<div class="sel_btn_box flex-3"> <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> </div>
</div> </div>
</div> </div>
<div class="navbox" id="videoList"> <div class="navbox" id="videoList">
<div class="classtil"> <div class="classtil">
<router-link :to="'/class/'+classid">{{video.className}}</router-link> <router-link :to="'/class/' + classid">{{ video.className }}</router-link>
</div> </div>
<div class="cate"> <div class="cate">
@ -54,60 +49,50 @@
</div> </div>
<el-scrollbar style="height: 86%; overflow: hidden;" ref="myscroll"> <el-scrollbar style="height: 86%; overflow: hidden;" ref="myscroll">
<div style="padding-bottom: 40px;"> <div style="padding-bottom: 40px;">
<div class="looplist" v-for="(item, i) in lessonList" :key="i"> <div class="looplist" v-for="(item, i) in lessonList" :key="i">
<div class="otile hide-txt">{{item.title}}</div> <div class="otile hide-txt">{{ item.title }}</div>
<div v-if="item.video.length===0" class="novideo col617">等待老师发布...</div> <div v-if="item.video.length === 0" class="novideo col617">等待老师发布...</div>
<ul class="vlist"> <ul class="vlist">
<li class="item" v-for="(item, i) in item.video" :key="i"> <li class="item" v-for="(item, i) in item.video" :key="i">
<!-- <el-tooltip :content="item.title" placement="left" effect="light"> --> <!-- <el-tooltip :content="item.title" placement="left" effect="light"> -->
<a class="a-play flex-1" href="javascript:;" @click="getvideo_click(item.id)" <a class="a-play flex-1" href="javascript:;" @click="getvideo_click(item.id)" :class="{ playcur: playcur == item.id }">
:class="{playcur : playcur == item.id}"> <img src="@/assets/img/playing.gif" width="18" v-if="playcur == item.id" />
<img src="@/assets/img/playing.gif" width="18" v-if="playcur == item.id">
<i class="iconfont icon-bofang2" v-else></i> <i class="iconfont icon-bofang2" v-else></i>
<div class="title hide-txt">{{item.title}}</div> <div class="title hide-txt">{{ item.title }}</div>
<div class="time">{{item.videoTime}}</div> <div class="time">{{ item.videoTime }}</div>
</a> </a>
<!-- </el-tooltip> --> <!-- </el-tooltip> -->
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
</div> </div>
</div> </div>
<div v-else> <div v-else>
<el-empty :image-size="200" :description="msg" v-if="empty"></el-empty> <el-empty :image-size="200" :description="msg" v-if="empty"></el-empty>
</div> </div>
</template> </template>
<script> <script>
import appHeader from "@/components/Header"; 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 { getVideo, getPlayList, classlog } from "@/api/study";
import { toRefs, reactive, onMounted, ref, onUnmounted } from 'vue'; import { toRefs, reactive, onMounted, ref, onUnmounted } from "vue";
export default { export default {
name: "classPlay", name: "classPlay",
components: { components: {
appHeader, appHeader,
}, },
setup() { setup() {
const route = useRoute() const route = useRoute();
const router = useRouter() const router = useRouter();
const classid = route.params.classid; const classid = route.params.classid;
const videoid = route.params.videoid; const videoid = route.params.videoid;
@ -122,22 +107,22 @@
lessonList: [], lessonList: [],
videoObject: { videoObject: {
container: '#VideoPlay', container: "#VideoPlay",
variable: 'player', variable: "player",
autoplay: false, autoplay: false,
html5m3u8: true, html5m3u8: true,
subtitle: false, subtitle: false,
loop: false, loop: false,
//loaded: 'loadHandler',// //loaded: 'loadHandler',//
video: '', video: "",
seek: '0', seek: "0",
//debug:true, //debug:true,
}, },
playcur: 0, playcur: 0,
logid: 0, logid: 0,
videoid: 0, videoid: 0,
videopid: 0, videopid: 0,
play_title: '', play_title: "",
ckPlayer: null, ckPlayer: null,
playIndex: 0, playIndex: 0,
playNextId: 0, playNextId: 0,
@ -148,8 +133,8 @@
timerPrss: null, timerPrss: null,
showAutoBox: false, showAutoBox: false,
is_duration: true, is_duration: true,
playThisId:route.params.videoid playThisId: route.params.videoid,
}) });
// MARKET-4168 // MARKET-4168
// const resVideoData = async () => { // const resVideoData = async () => {
@ -178,20 +163,18 @@
// }; // };
// resVideoData(); // resVideoData();
const goBack = () => { const goBack = () => {
router.push('/class/'+classid); router.push("/class/" + classid);
} };
// //
const postlogData = async (logData) => { 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); await classlog(logData, getLogdata[0].logdata);
} };
// //
const getvideo_click = async (id, replay=0) => { const getvideo_click = async (id, replay = 0) => {
state.playThisId = id; state.playThisId = id;
state.is_duration = false; state.is_duration = false;
clearInterval(state.timerTxt); clearInterval(state.timerTxt);
@ -201,23 +184,20 @@
state.ckPlayer = null; state.ckPlayer = null;
document.getElementById("VideoPlay").innerHTML = ""; document.getElementById("VideoPlay").innerHTML = "";
setTimeout(function () { setTimeout(function() {
getvideoDom(id, replay); getvideoDom(id, replay);
getNextId(id); getNextId(id);
state.videoObject.autoplay = true; state.videoObject.autoplay = true;
state.videoObject.seek = 0; state.videoObject.seek = 0;
}, 500); }, 500);
};
}
/** /**
* 封装视频渲染 * 封装视频渲染
* @replay 1=重播 * @replay 1=重播
* @resOne 1=第一次进入页面播放 * @resOne 1=第一次进入页面播放
**/ **/
const getvideoDom = async (id, replay=0, resOne=0) => { const getvideoDom = async (id, replay = 0, resOne = 0) => {
// //
const res = await getVideo(classid, id); const res = await getVideo(classid, id);
if (res.code === 200) { if (res.code === 200) {
@ -249,26 +229,26 @@
state.is_duration = true; state.is_duration = true;
// //
state.ckPlayer.addListener('time', timeHandler); state.ckPlayer.addListener("time", timeHandler);
function timeHandler(t) { function timeHandler(t) {
let tm = parseInt(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() { function playHandler() {
myCounter.startCount(); myCounter.startCount();
} }
// //
state.ckPlayer.addListener('pause', pauseHandler); state.ckPlayer.addListener("pause", pauseHandler);
function pauseHandler() { function pauseHandler() {
myCounter.stopCount(); myCounter.stopCount();
} }
// //
state.ckPlayer.addListener('ended', endedHandler); state.ckPlayer.addListener("ended", endedHandler);
function endedHandler() { function endedHandler() {
myCounter.stopCount(); myCounter.stopCount();
// funAutoPlay(); // funAutoPlay();
@ -276,11 +256,11 @@
} }
// //
const myCounter = (function () { const myCounter = (function() {
var step = 0; var step = 0;
var intervalId = null; var intervalId = null;
function count() { function count() {
localStorage.setItem(id + '_duration', parseInt(step)); localStorage.setItem(id + "_duration", parseInt(step));
step = step + 1; step = step + 1;
// //
@ -301,9 +281,8 @@
clearInterval(intervalId); clearInterval(intervalId);
intervalId = null; intervalId = null;
} }
return { startCount: start, stopCount: stop } return { startCount: start, stopCount: stop };
})() })();
// //
if (state.isAuth === false) { 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){ if (resOne != 1 && get_duration) {
let logData = { let logData = {
logid: state.logid, logid: state.logid,
pytime: localStorage.getItem(state.videoid + '_playTime'), pytime: localStorage.getItem(state.videoid + "_playTime"),
duration: localStorage.getItem(state.videoid + '_duration'), duration: localStorage.getItem(state.videoid + "_duration"),
videoid: state.videoid, videoid: state.videoid,
} };
postlogData(logData); postlogData(logData);
} }
// id // id
state.logid = res.data.logid; state.logid = res.data.logid;
state.videoid = res.data.id; state.videoid = res.data.id;
console.log('log_videoid',state.videoid); console.log("log_videoid", state.videoid);
// //
let winState = { url: id }; let winState = { url: id };
window.history.pushState(winState, '', id); window.history.pushState(winState, "", id);
return state; return state;
} };
// //
const resLessonList = async () => { const resLessonList = async () => {
@ -364,14 +343,13 @@
state.lessonList[parent].video.forEach((item, child) => { state.lessonList[parent].video.forEach((item, child) => {
if (item.id == id) { if (item.id == id) {
if (state.lessonList[parent].video.length == child + 1) { if (state.lessonList[parent].video.length == child + 1) {
getNextIdarr(parent + 1, 0) getNextIdarr(parent + 1, 0);
} else { } else {
getNextIdarr(parent, child + 1) getNextIdarr(parent, child + 1);
} }
} }
}); });
}); });
}; };
// //
@ -390,7 +368,6 @@
}); });
}; };
const myscroll = ref(null); const myscroll = ref(null);
onMounted(() => { onMounted(() => {
@ -402,67 +379,63 @@
// //
getvideoDom(videoid, 0, 1); getvideoDom(videoid, 0, 1);
setTimeout(function () { setTimeout(function() {
// //
let playcur = document.getElementsByClassName("playcur")[0] || 0; let playcur = document.getElementsByClassName("playcur")[0] || 0;
let gettop = playcur.offsetTop; let gettop = playcur.offsetTop;
myscroll.value.wrap.scrollTop = gettop - 200; myscroll.value.wrap.scrollTop = gettop - 200;
}, 1000); }, 1000);
window.onbeforeunload = function() {
window.onbeforeunload = function () {
// //
let logData = { let logData = {
logid: state.video.logid, logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime'), pytime: localStorage.getItem(state.videoid + "_playTime"),
duration: localStorage.getItem(state.videoid + '_duration'), duration: localStorage.getItem(state.videoid + "_duration"),
videoid: state.videoid, videoid: state.videoid,
} };
postlogData(logData); postlogData(logData);
} };
// a // a
var tbody = document.getElementById("myheader"); var tbody = document.getElementById("myheader");
tbody.onclick = function (e) { tbody.onclick = function(e) {
myaddEvent(e); myaddEvent(e);
} };
var videolista = document.getElementById("videoList"); var videolista = document.getElementById("videoList");
videolista.onclick = function (e) { videolista.onclick = function(e) {
myaddEvent(e); myaddEvent(e);
} };
function myaddEvent(e) { function myaddEvent(e) {
e = e || event; e = e || event;
var target = e.target || e.srcElement.href; var target = e.target || e.srcElement.href;
e.preventDefault(); e.preventDefault();
if (target.tagName == 'A') { if (target.tagName == "A") {
//console.log(target.href); //console.log(target.href);
// //
let logData = { let logData = {
logid: state.video.logid, logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime'), pytime: localStorage.getItem(state.videoid + "_playTime"),
duration: localStorage.getItem(state.videoid + '_duration'), duration: localStorage.getItem(state.videoid + "_duration"),
videoid: state.videoid, videoid: state.videoid,
} };
// //
postlogData(logData); postlogData(logData);
setTimeout("top.location.href = '" + target.href + "'", 100); setTimeout("top.location.href = '" + target.href + "'", 100);
} }
} }
});
})
onUnmounted(() => { onUnmounted(() => {
// //
let logData = { let logData = {
logid: state.video.logid, logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime'), pytime: localStorage.getItem(state.videoid + "_playTime"),
duration: localStorage.getItem(state.videoid + '_duration'), duration: localStorage.getItem(state.videoid + "_duration"),
videoid: state.videoid, videoid: state.videoid,
} };
postlogData(logData); postlogData(logData);
}) });
return { return {
...toRefs(state), ...toRefs(state),
@ -472,30 +445,30 @@
getvideo_click, getvideo_click,
myscroll, myscroll,
goBack, goBack,
} };
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
html, html,
body { body {
overflow-y: hidden; overflow-y: hidden;
} }
.autotime { .autotime {
position: absolute; position: absolute;
z-index: 82; z-index: 82;
width: 100%; width: 100%;
height: 100%; height: 100%;
text-align: center; text-align: center;
background-color: rgb(0, 0, 0, .7); background-color: rgb(0, 0, 0, 0.7);
backdrop-filter: saturate(180%) blur(20px); backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: saturate(180%) blur(20px); -webkit-backdrop-filter: saturate(180%) blur(20px);
z-index: 900; z-index: 900;
} }
.pssbox { .pssbox {
height: 100%; height: 100%;
.pos-box { .pos-box {
@ -508,16 +481,16 @@
padding-bottom: 24px; padding-bottom: 24px;
} }
.txt_next{ .txt_next {
color: #fff; color: #fff;
font-size: 16px; font-size: 16px;
margin-bottom: 36px; margin-bottom: 36px;
} }
.sel_btn_box{ .sel_btn_box {
width: 310px; width: 310px;
margin: 0 auto; margin: 0 auto;
.btn_sty{ .btn_sty {
width: 46%; width: 46%;
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
@ -543,87 +516,84 @@
.clbtn:hover { .clbtn:hover {
color: #0082fc; color: #0082fc;
} }
} }
.autotime-value { .autotime-value {
width: 70px; width: 70px;
height: 70px; height: 70px;
border-radius: 100px; border-radius: 100px;
margin-left: 5px; margin-left: 5px;
font-size: 22px; font-size: 22px;
color: #fff; color: #fff;
} }
.nullData { .nullData {
position: absolute; position: absolute;
z-index: 82; z-index: 82;
color: #b3c1d3; color: #b3c1d3;
font-size: 24px; font-size: 24px;
width: 100%; width: 100%;
text-align: center; text-align: center;
} }
.status_1, .status_1,
.status_2, .status_2,
.status_3 { .status_3 {
padding: 0 10px 0 4px; padding: 0 10px 0 4px;
} }
.status_1 { .status_1 {
color: #FF3C23; color: #ff3c23;
} }
.status_2 { .status_2 {
color: #67C23A; color: #67c23a;
} }
.status_3 { .status_3 {
color: #0082fc; color: #0082fc;
} }
.main { .main {
position: absolute; position: absolute;
top: 118px; top: 118px;
left: 0; left: 0;
bottom: 0; bottom: 0;
right: 0; right: 0;
background-color: #000; background-color: #000;
} }
.mbox { .mbox {
position: relative; position: relative;
width: 1200px; width: 1200px;
height: 100%; height: 100%;
margin: 0 auto; margin: 0 auto;
overflow: hidden; overflow: hidden;
} }
.videoBox { .videoBox {
position: absolute; position: absolute;
left: 0; left: 0;
width: 80%; width: 80%;
height: 100%; height: 100%;
} }
.viewtil { .viewtil {
color: #fff; color: #fff;
font-size: 18px; font-size: 18px;
padding: 16px 20px; padding: 16px 20px;
} }
.navbox { .navbox {
position: absolute; position: absolute;
right: 0; right: 0;
width: 20%; width: 20%;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
background-color: #0f0f0f; background-color: #0f0f0f;
} }
.classtil {
.classtil {
font-size: 22px; font-size: 22px;
color: #eee; color: #eee;
background-color: #000; background-color: #000;
@ -637,9 +607,9 @@
a:hover { a:hover {
color: #0082fc; color: #0082fc;
} }
} }
.cate { .cate {
color: #eee; color: #eee;
padding: 14px 20px; padding: 14px 20px;
border-bottom: 1px solid #333; border-bottom: 1px solid #333;
@ -648,9 +618,9 @@
span { span {
padding-left: 6px; padding-left: 6px;
} }
} }
.looplist { .looplist {
padding: 0 20px; padding: 0 20px;
.otile { .otile {
@ -660,8 +630,6 @@
color: #8496ab; color: #8496ab;
} }
.item { .item {
font-size: 14px; font-size: 14px;
color: #617288; color: #617288;
@ -693,12 +661,10 @@
width: 16px; width: 16px;
height: 16px; height: 16px;
} }
}
} }
}
.goback { .goback {
display: inline-block; display: inline-block;
font-size: 15px; font-size: 15px;
color: #b3c1d3; color: #b3c1d3;
@ -706,27 +672,27 @@
border-radius: 100px; border-radius: 100px;
background-color: #465266; background-color: #465266;
color: #fff; color: #fff;
} }
.goback:hover { .goback:hover {
background-color: #617288; background-color: #617288;
} }
</style> </style>
<style> <style>
.el-scrollbar__bar.is-vertical { .el-scrollbar__bar.is-vertical {
width: 8px; width: 8px;
} }
.el-scrollbar__thumb { .el-scrollbar__thumb {
background-color: #617288; background-color: #617288;
} }
.el-page-header__content { .el-page-header__content {
color: #fff; color: #fff;
} }
.el-page-header__left:hover { .el-page-header__left:hover {
color: #0082fc; color: #0082fc;
} }
</style> </style>

2
src/views/studypath/jiandaoyun.vue

@ -77,7 +77,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="/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> <a class="btn-jdy f14 newbtn3" href="https://www.jiandaoyun.com/signin" target="_blank">简道云登录或注册</a>
</div> </div>

354
src/views/video/play.vue

@ -1,19 +1,17 @@
<template> <template>
<div v-wechat-title="'正在播放' +play_title"></div> <div v-wechat-title="'正在播放' + play_title"></div>
<div class="main"> <div class="main">
<div class="videoBox flex-2"> <div class="videoBox flex-2">
<div class="viewtil" style="min-height:8%"> <div class="viewtil" style="min-height:8%">
<el-page-header @back="goBack(videopid)" title="返回课程" :content="video.it618_name"> <el-page-header @back="goBack(videopid)" title="返回课程" :content="video.it618_name"> </el-page-header>
</el-page-header>
</div> </div>
<div :class="{affix:is_scroll}"></div> <div :class="{ affix: is_scroll }"></div>
<div id="VideoPlay" style=" width:100%; height: 92%; margin-top: auto;" :class="{affixcss:is_scroll}"></div> <div id="VideoPlay" style=" width:100%; height: 92%; margin-top: auto;" :class="{ affixcss: is_scroll }"></div>
<div class="nullData flex-4" v-if="!isAuth"> <div class="nullData flex-4" v-if="!isAuth">
<span>抱歉购买后或成为vip会员可以看课程</span> <span>抱歉购买后或成为vip会员可以看课程</span>
<router-link class="el-btn medium ff18" :to="'/video/'+videopid">购买课程</router-link> <router-link class="el-btn medium ff18" :to="'/video/' + videopid">购买课程</router-link>
</div> </div>
<div class="nullData flex-4" v-if="!com_user_token"> <div class="nullData flex-4" v-if="!com_user_token">
@ -27,90 +25,73 @@
<div class="txt">本节视频已看完</div> <div class="txt">本节视频已看完</div>
<div v-if="playThisId != playNextId && playNextId != 0"> <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="sel_btn_box flex-3">
<div class="btn_sty" @click="getvideo_click(playThisId,1);">重播</div> <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(playNextId)">播放下一节</div>
</div> </div>
</div> </div>
<div v-else> <div v-else>
<div class="txt_next">已是最后一节</div> <div class="txt_next">已是最后一节</div>
<div class="sel_btn_box flex-3"> <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> </div>
</div> </div>
</div> </div>
<div class="navbox" id="videoList"> <div class="navbox" id="videoList">
<div class="cate"> <div class="cate">
<i class="iconfont icon-mulu"></i> <i class="iconfont icon-mulu"></i>
<span>课程章节</span> <span>课程章节</span>
</div> </div>
<el-scrollbar style="height: 90%; overflow: hidden;" ref="myscroll"> <el-scrollbar style="height: 90%; overflow: hidden;" ref="myscroll">
<div style="padding-bottom: 40px;"> <div style="padding-bottom: 40px;">
<div class="looplist" v-for="(item, i) in lessonList" :key="i"> <div class="looplist" v-for="(item, i) in lessonList" :key="i">
<div class="otile hide-txt">{{item.it618_name}}</div> <div class="otile hide-txt">{{ item.it618_name }}</div>
<ul class="vlist"> <ul class="vlist">
<li class="item" v-for="(item, i) in item.video" :key="i"> <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)" <a class="a-play flex-1" href="javascript:;" @click="getvideo_click(item.id)" :class="{ playcur: playcur == item.id }">
:class="{playcur : playcur == item.id}"> <img class="playing" src="@/assets/img/playing.gif" v-if="playcur == item.id" />
<img class="playing" src="@/assets/img/playing.gif" v-if="playcur == item.id">
<i class="iconfont icon-bofang2" v-else></i> <i class="iconfont icon-bofang2" v-else></i>
<div class="title hide-txt"><span <div class="title hide-txt">
:class="'status_'+item.video_status">{{item.video_state}}</span>{{item.it618_name}}</div> <span :class="'status_' + item.video_status">{{ item.video_state }}</span
<div class="time">{{item.videoTime}}</div> >{{ item.it618_name }}
</div>
<div class="time">{{ item.videoTime }}</div>
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from "vue-router";
import { import { getVideo, getPlayList, classlog, maLookVideoTracking, sourceDeviceLog, updateVideoCountLog, updateVideoPlayEnd } from "@/api/video";
getVideo, import { toRefs, reactive, onMounted, ref, onUnmounted } from "vue";
getPlayList, import { isMobileValue } from "@/utils/isMobile";
classlog,
maLookVideoTracking, export default {
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", name: "video_course_play",
setup() { setup() {
const route = useRoute() const route = useRoute();
const router = useRouter() const router = useRouter();
const videoid = route.params.playid; const videoid = route.params.playid;
const state = reactive({ const state = reactive({
pointTimer:0, pointTimer: 0,
isAuth: true, isAuth: true,
msg: 0, msg: 0,
empty: false, empty: false,
@ -119,22 +100,22 @@
lessonList: [], lessonList: [],
videoObject: { videoObject: {
container: '#VideoPlay', container: "#VideoPlay",
variable: 'player', variable: "player",
autoplay: false, autoplay: false,
html5m3u8: true, html5m3u8: true,
subtitle: false, subtitle: false,
loop: false, loop: false,
//loaded: 'loadHandler',// //loaded: 'loadHandler',//
video: '', video: "",
seek: '0', seek: "0",
//debug:true, //debug:true,
}, },
playcur: 0, playcur: 0,
logid: 0, logid: 0,
videoid: 0, videoid: 0,
videopid: 0, videopid: 0,
play_title: '', play_title: "",
ckPlayer: null, ckPlayer: null,
playIndex: 0, playIndex: 0,
playNextId: 0, playNextId: 0,
@ -146,32 +127,31 @@
showAutoBox: false, showAutoBox: false,
is_duration: true, is_duration: true,
is_scroll: false, is_scroll: false,
playThisId: route.params.playid playThisId: route.params.playid,
}) });
const goBack = (pid) => { const goBack = (pid) => {
router.push('/video/' + pid); router.push("/video/" + pid);
} };
// //
const postSourceDeviceLog = async () => { const postSourceDeviceLog = async () => {
let get_from = route.query.from || null; let get_from = route.query.from || null;
const params = { const params = {
source: get_from, source: get_from,
device: isMobileValue() device: isMobileValue(),
} };
await sourceDeviceLog(params); await sourceDeviceLog(params);
} };
// //
const postlogData = async (logData) => { const postlogData = async (logData) => {
let logParams = { let logParams = {
...logData, ...logData,
vid: state.videoid vid: state.videoid,
} };
await classlog(logParams); await classlog(logParams);
} };
// //
const getvideo_click = async (id, replay = 0) => { const getvideo_click = async (id, replay = 0) => {
@ -184,14 +164,13 @@
state.ckPlayer = null; state.ckPlayer = null;
document.getElementById("VideoPlay").innerHTML = ""; document.getElementById("VideoPlay").innerHTML = "";
setTimeout(function () { setTimeout(function() {
getvideoDom(id, replay); getvideoDom(id, replay);
getNextId(id); getNextId(id);
state.videoObject.autoplay = true; state.videoObject.autoplay = true;
state.videoObject.seek = 0; state.videoObject.seek = 0;
}, 500); }, 500);
};
}
// ma // ma
const resmaLookVideoTracking = async (id) => { const resmaLookVideoTracking = async (id) => {
@ -211,7 +190,6 @@
* @param resOne 1=第一次进入页面播放 * @param resOne 1=第一次进入页面播放
**/ **/
const getvideoDom = async (id, replay = 0, resOne = 0) => { const getvideoDom = async (id, replay = 0, resOne = 0) => {
// //
if (resOne === 1) { if (resOne === 1) {
postSourceDeviceLog(); postSourceDeviceLog();
@ -225,7 +203,7 @@
state.play_title = res.data.it618_name; state.play_title = res.data.it618_name;
state.videoObject.video = res.data.it618_videourl; state.videoObject.video = res.data.it618_videourl;
console.log('res.data', res.data); console.log("res.data", res.data);
if (res.data.playtime > 0) { if (res.data.playtime > 0) {
state.videoObject.seek = res.data.playtime; state.videoObject.seek = res.data.playtime;
@ -252,44 +230,43 @@
state.is_duration = true; state.is_duration = true;
// //
state.ckPlayer.addListener('time', timeHandler); state.ckPlayer.addListener("time", timeHandler);
function timeHandler(t) { function timeHandler(t) {
let tm = parseInt(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() { function playHandler() {
myCounter.startCount(); myCounter.startCount();
} }
// //
state.ckPlayer.addListener('pause', pauseHandler); state.ckPlayer.addListener("pause", pauseHandler);
function pauseHandler() { function pauseHandler() {
myCounter.stopCount(); myCounter.stopCount();
} }
// //
state.ckPlayer.addListener('ended', endedHandler); state.ckPlayer.addListener("ended", endedHandler);
function endedHandler() { function endedHandler() {
myCounter.stopCount(); myCounter.stopCount();
// funAutoPlay(); // funAutoPlay();
state.showAutoBox = true; state.showAutoBox = true;
// //
let log2Param = { let log2Param = {
id:state.video.logid2 id: state.video.logid2,
} };
updateVideoPlayEnd(log2Param); updateVideoPlayEnd(log2Param);
} }
// //
const myCounter = (function () { const myCounter = (function() {
var step = 0; var step = 0;
var intervalId = null; var intervalId = null;
function count() { function count() {
localStorage.setItem(id + '_duration_video', parseInt(step)); localStorage.setItem(id + "_duration_video", parseInt(step));
if (parseInt(step) === 10) { if (parseInt(step) === 10) {
resmaLookVideoTracking(id); resmaLookVideoTracking(id);
} }
@ -305,15 +282,14 @@
// //
state.pointTimer++; state.pointTimer++;
console.log(state.pointTimer); console.log(state.pointTimer);
if(state.pointTimer == 5){ if (state.pointTimer == 5) {
state.pointTimer = 0; state.pointTimer = 0;
let log2Param = { let log2Param = {
id:state.video.logid2 id: state.video.logid2,
} };
updateVideoCountLog(log2Param); updateVideoCountLog(log2Param);
// console.log("",state.video.logid2); // console.log("",state.video.logid2);
} }
} }
function start() { function start() {
if (intervalId == null) { if (intervalId == null) {
@ -326,9 +302,8 @@
clearInterval(intervalId); clearInterval(intervalId);
intervalId = null; intervalId = null;
} }
return { startCount: start, stopCount: stop } return { startCount: start, stopCount: stop };
})() })();
// //
if (state.isAuth === false) { 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) { if (resOne != 1 && get_duration) {
let logData = { let logData = {
logid: state.logid, logid: state.logid,
pytime: localStorage.getItem(state.videoid + '_playTime_video'), pytime: localStorage.getItem(state.videoid + "_playTime_video"),
duration: localStorage.getItem(state.videoid + '_duration_video'), duration: localStorage.getItem(state.videoid + "_duration_video"),
} };
postlogData(logData); postlogData(logData);
} }
// id // id
state.logid = res.data.logid; state.logid = res.data.logid;
state.videoid = res.data.id; state.videoid = res.data.id;
console.log('log_videoid', state.videoid); console.log("log_videoid", state.videoid);
// //
let winState = { url: id }; let winState = { url: id };
window.history.pushState(winState, '', id); window.history.pushState(winState, "", id);
return state; return state;
} };
// //
const resLessonList = async () => { const resLessonList = async () => {
@ -388,14 +363,13 @@
state.lessonList[parent].video.forEach((item, child) => { state.lessonList[parent].video.forEach((item, child) => {
if (item.id == id) { if (item.id == id) {
if (state.lessonList[parent].video.length == child + 1) { if (state.lessonList[parent].video.length == child + 1) {
getNextIdarr(parent + 1, 0) getNextIdarr(parent + 1, 0);
} else { } else {
getNextIdarr(parent, child + 1) getNextIdarr(parent, child + 1);
} }
} }
}); });
}); });
}; };
// //
@ -414,7 +388,6 @@
}); });
}; };
const myscroll = ref(null); const myscroll = ref(null);
onMounted(() => { onMounted(() => {
@ -426,73 +399,69 @@
// //
getvideoDom(videoid, 0, 1); getvideoDom(videoid, 0, 1);
setTimeout(function () { setTimeout(function() {
// //
let playcur = document.getElementsByClassName("playcur")[0] || 0; let playcur = document.getElementsByClassName("playcur")[0] || 0;
let gettop = playcur.offsetTop; let gettop = playcur.offsetTop;
myscroll.value.wrap.scrollTop = gettop - 200; myscroll.value.wrap.scrollTop = gettop - 200;
}, 1000); }, 1000);
window.onbeforeunload = function() {
window.onbeforeunload = function () {
// //
let logData = { let logData = {
logid: state.video.logid, logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime_video'), pytime: localStorage.getItem(state.videoid + "_playTime_video"),
duration: localStorage.getItem(state.videoid + '_duration_video'), duration: localStorage.getItem(state.videoid + "_duration_video"),
} };
postlogData(logData); postlogData(logData);
} };
// a // a
var tbody = document.getElementById("myheader"); var tbody = document.getElementById("myheader");
tbody.onclick = function (e) { tbody.onclick = function(e) {
myaddEvent(e); myaddEvent(e);
} };
var videolista = document.getElementById("videoList"); var videolista = document.getElementById("videoList");
videolista.onclick = function (e) { videolista.onclick = function(e) {
myaddEvent(e); myaddEvent(e);
} };
function myaddEvent(e) { function myaddEvent(e) {
e = e || event; e = e || event;
var target = e.target || e.srcElement.href; var target = e.target || e.srcElement.href;
e.preventDefault(); e.preventDefault();
if (target.tagName == 'A') { if (target.tagName == "A") {
//console.log(target.href); //console.log(target.href);
// //
let logData = { let logData = {
logid: state.video.logid, logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime_video'), pytime: localStorage.getItem(state.videoid + "_playTime_video"),
duration: localStorage.getItem(state.videoid + '_duration_video'), duration: localStorage.getItem(state.videoid + "_duration_video"),
} };
// //
postlogData(logData); postlogData(logData);
setTimeout("top.location.href = '" + target.href + "'", 100); setTimeout("top.location.href = '" + target.href + "'", 100);
} }
} }
window.addEventListener('scroll', function () { window.addEventListener("scroll", function() {
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
if (scrollTop > 50) { if (scrollTop > 50) {
state.is_scroll = true; state.is_scroll = true;
} else { } else {
state.is_scroll = false; state.is_scroll = false;
} }
}) });
});
})
onUnmounted(() => { onUnmounted(() => {
// //
let logData = { let logData = {
logid: state.video.logid, logid: state.video.logid,
pytime: localStorage.getItem(state.videoid + '_playTime_video'), pytime: localStorage.getItem(state.videoid + "_playTime_video"),
duration: localStorage.getItem(state.videoid + '_duration_video'), duration: localStorage.getItem(state.videoid + "_duration_video"),
} };
postlogData(logData); postlogData(logData);
}) });
return { return {
...toRefs(state), ...toRefs(state),
@ -501,30 +470,30 @@
getvideo_click, getvideo_click,
myscroll, myscroll,
goBack, goBack,
} };
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
html, html,
body { body {
overflow-y: hidden; overflow-y: hidden;
} }
.autotime { .autotime {
position: absolute; position: absolute;
z-index: 82; z-index: 82;
width: 100%; width: 100%;
height: 100%; height: 100%;
text-align: center; text-align: center;
background-color: rgb(0, 0, 0, .7); background-color: rgb(0, 0, 0, 0.7);
backdrop-filter: saturate(180%) blur(20px); backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: saturate(180%) blur(20px); -webkit-backdrop-filter: saturate(180%) blur(20px);
z-index: 900; z-index: 900;
} }
.pssbox { .pssbox {
height: 100%; height: 100%;
.pos-box { .pos-box {
@ -574,87 +543,85 @@
.clbtn:hover { .clbtn:hover {
color: #0082fc; color: #0082fc;
} }
} }
.autotime-value { .autotime-value {
width: 70px; width: 70px;
height: 70px; height: 70px;
border-radius: 100px; border-radius: 100px;
margin-left: 5px; margin-left: 5px;
font-size: 22px; font-size: 22px;
color: #fff; color: #fff;
} }
.nullData { .nullData {
position: absolute; position: absolute;
z-index: 82; z-index: 82;
color: #b3c1d3; color: #b3c1d3;
font-size: 24px; font-size: 24px;
width: 100%; width: 100%;
text-align: center; text-align: center;
} }
.status_1, .status_1,
.status_2, .status_2,
.status_3 { .status_3 {
padding: 0 10px 0 4px; padding: 0 10px 0 4px;
} }
.status_1 { .status_1 {
color: #FF3C23; color: #ff3c23;
} }
.status_2 { .status_2 {
color: #67C23A; color: #67c23a;
} }
.status_3 { .status_3 {
color: #0082fc; color: #0082fc;
} }
.main { .main {
position: absolute; position: absolute;
top: 118px; top: 118px;
left: 0; left: 0;
bottom: 0; bottom: 0;
right: 0; right: 0;
background-color: #000; background-color: #000;
} z-index: 2;
}
.mbox { .mbox {
position: relative; position: relative;
width: 1200px; width: 1200px;
height: 100%; height: 100%;
margin: 0 auto; margin: 0 auto;
overflow: hidden; overflow: hidden;
} }
.videoBox { .videoBox {
position: absolute; position: absolute;
left: 0; left: 0;
width: 80%; width: 80%;
height: 100%; height: 100%;
} }
.viewtil { .viewtil {
color: #fff; color: #fff;
font-size: 18px; font-size: 18px;
padding: 16px 20px; padding: 16px 20px;
} }
.navbox { .navbox {
position: absolute; position: absolute;
right: 0; right: 0;
width: 20%; width: 20%;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
background-color: #0f0f0f; background-color: #0f0f0f;
} }
.classtil {
.classtil {
font-size: 22px; font-size: 22px;
color: #eee; color: #eee;
background-color: #000; background-color: #000;
@ -668,9 +635,9 @@
a:hover { a:hover {
color: #0082fc; color: #0082fc;
} }
} }
.cate { .cate {
color: #eee; color: #eee;
padding: 14px 20px; padding: 14px 20px;
border-bottom: 1px solid #333; border-bottom: 1px solid #333;
@ -679,9 +646,9 @@
span { span {
padding-left: 6px; padding-left: 6px;
} }
} }
.looplist { .looplist {
padding: 0 20px; padding: 0 20px;
.otile { .otile {
@ -691,8 +658,6 @@
color: #8496ab; color: #8496ab;
} }
.item { .item {
font-size: 14px; font-size: 14px;
color: #617288; color: #617288;
@ -724,12 +689,10 @@
width: 16px; width: 16px;
height: 16px; height: 16px;
} }
}
} }
}
.goback { .goback {
display: inline-block; display: inline-block;
font-size: 15px; font-size: 15px;
color: #b3c1d3; color: #b3c1d3;
@ -737,40 +700,36 @@
border-radius: 100px; border-radius: 100px;
background-color: #465266; background-color: #465266;
color: #fff; color: #fff;
} }
.goback:hover { .goback:hover {
background-color: #617288; background-color: #617288;
} }
</style> </style>
<style> <style>
.el-scrollbar__bar.is-vertical { .el-scrollbar__bar.is-vertical {
width: 8px; width: 8px;
} }
.el-scrollbar__thumb { .el-scrollbar__thumb {
background-color: #617288; background-color: #617288;
} }
.el-page-header__content { .el-page-header__content {
color: #fff; color: #fff;
} }
.el-page-header__left:hover { .el-page-header__left:hover {
color: #0082fc; color: #0082fc;
} }
</style> </style>
<style lang="scss"> <style lang="scss">
/*响应式-移动端*/ /*响应式-移动端*/
@import '~@/assets/css/m.css'; @import "~@/assets/css/m.css";
@media screen and (max-width: 1200px) {
@media screen and (max-width: 1200px) {
.affix { .affix {
height: 35vh; height: 35vh;
background-color: #fff; background-color: #fff;
@ -837,13 +796,13 @@
.cate { .cate {
background-color: #fff; background-color: #fff;
color: #333; color: #333;
border-bottom: solid 1px #CEDDF2; border-bottom: solid 1px #ceddf2;
} }
} }
.looplist { .looplist {
.otile { .otile {
border-bottom: solid 1px #CEDDF2; border-bottom: solid 1px #ceddf2;
padding-bottom: 12px; padding-bottom: 12px;
color: #333; color: #333;
} }
@ -851,11 +810,11 @@
.vlist { .vlist {
.item { .item {
margin-left: 24px; margin-left: 24px;
border-bottom: solid 1px #CEDDF2; border-bottom: solid 1px #ceddf2;
color: #333; color: #333;
.icon-bofang2 { .icon-bofang2 {
color: #B3C1D3 !important; color: #b3c1d3 !important;
} }
} }
} }
@ -880,12 +839,11 @@
.m-footr { .m-footr {
margin-top: 0; margin-top: 0;
} }
}
}
</style> </style>
<style lang="scss"> <style lang="scss">
@media screen and (max-width: 700px) { @media screen and (max-width: 700px) {
.main { .main {
.videoBox { .videoBox {
.viewtil { .viewtil {
@ -893,5 +851,5 @@
} }
} }
} }
} }
</style> </style>
Loading…
Cancel
Save