Browse Source

Merge pull request 'develop' (#3) from develop into master

Reviewed-on: #3
master
myxiaowei 2 years ago
parent
commit
bcac567aae
  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" "parser": "babel-eslint"
}, },
"rules": { "rules": {
"no-undef": "off" "no-undef": "off",
"no-unused-vars": "off"
} }
}, },
"browserslist": [ "browserslist": [

265
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"> <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"> -->
<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>
@ -281,11 +268,11 @@
<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>

87
src/components/banner.vue

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

6
src/router.js

@ -2,7 +2,7 @@ import { createRouter, createWebHistory } from 'vue-router';
import Layout from '@/layout/index.vue'; import Layout from '@/layout/index.vue';
import store from '@/store'; import store from '@/store';
import { refreshToken } from '@/api/auth'; import { refreshToken } from '@/api/auth';
// import '@/utils/fineClubSDK'; import '@/utils/advertisementSDK';
import { getUid, getExpiresTime } from '@/utils/cookie'; import { getUid, getExpiresTime } from '@/utils/cookie';
import { delUrlParams } from '@/utils/urlQuery'; 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 // 通过导航守卫 判断并刷新token
let accessToken = store.getters.get_token; let accessToken = store.getters.get_token;
let expires = getExpiresTime(); 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> <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,29 +18,27 @@
<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>
@ -54,7 +49,6 @@
</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>
@ -63,42 +57,33 @@
<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",
@ -106,8 +91,8 @@
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);
@ -207,9 +190,7 @@
state.videoObject.autoplay = true; state.videoObject.autoplay = true;
state.videoObject.seek = 0; state.videoObject.seek = 0;
}, 500); }, 500);
};
}
/** /**
* 封装视频渲染 * 封装视频渲染
@ -217,7 +198,6 @@
* @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();
@ -280,7 +260,7 @@
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(() => {
@ -409,60 +386,56 @@
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,9 +445,9 @@
getvideo_click, getvideo_click,
myscroll, myscroll,
goBack, goBack,
} };
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -489,7 +462,7 @@
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;
@ -570,11 +543,11 @@
} }
.status_1 { .status_1 {
color: #FF3C23; color: #ff3c23;
} }
.status_2 { .status_2 {
color: #67C23A; color: #67c23a;
} }
.status_3 { .status_3 {
@ -598,7 +571,6 @@
overflow: hidden; overflow: hidden;
} }
.videoBox { .videoBox {
position: absolute; position: absolute;
left: 0; left: 0;
@ -621,9 +593,7 @@
background-color: #0f0f0f; background-color: #0f0f0f;
} }
.classtil { .classtil {
font-size: 22px; font-size: 22px;
color: #eee; color: #eee;
background-color: #000; background-color: #000;
@ -660,8 +630,6 @@
color: #8496ab; color: #8496ab;
} }
.item { .item {
font-size: 14px; font-size: 14px;
color: #617288; color: #617288;
@ -693,8 +661,6 @@
width: 16px; width: 16px;
height: 16px; height: 16px;
} }
} }
} }

19
src/views/studypath/finebi.vue

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

21
src/views/studypath/finereportStudyPath2023.vue

@ -198,12 +198,7 @@
</div> </div>
</div> </div>
</el-scrollbar> </el-scrollbar>
<div id="AD-bfb30c067e5e449aac8ea667205fcfc3" class="m-dn"></div>
<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> </div>
</div> </div>
@ -654,7 +649,6 @@
<script> <script>
import { reactive, toRefs } from "vue"; import { reactive, toRefs } from "vue";
import { getCourseNum } from "@/api/study"; import { getCourseNum } from "@/api/study";
import { adurl } from "@/api/ad";
import downMenu from "@/views/studypath/downMenu"; import downMenu from "@/views/studypath/downMenu";
import { scrollToElementAnchor } from "@/utils/scrollTo"; import { scrollToElementAnchor } from "@/utils/scrollTo";
import pathMenu from "@/views/studypath/pathMenu"; import pathMenu from "@/views/studypath/pathMenu";
@ -691,18 +685,7 @@ export default {
cate_list: [], cate_list: [],
}); });
// 广 window.fineAd.getAdvertisement({ adId: "bfb30c067e5e449aac8ea667205fcfc3", top: 24 });
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();
// //
const resCourseNum = async () => { const resCourseNum = async () => {

21
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>
@ -203,11 +203,7 @@
</div> </div>
</el-scrollbar> </el-scrollbar>
<div style="display:float;width: 100%;height:80px;overflow: hidden;margin:20px 0;" class="m-dn" v-if="is_ad"> <div id="AD-ec2bf821df994fa5aa3cc950377a812e" class="m-dn"></div>
<a :href="ad_clickurl" target="_blank">
<img :src="ad_imgurl" alt="简道云学习路径banner" />
</a>
</div>
</div> </div>
</div> </div>
@ -679,7 +675,6 @@
import { reactive, toRefs } from "vue"; import { reactive, toRefs } from "vue";
import { studentCount } from "@/api/guide"; import { studentCount } from "@/api/guide";
import { getCourseNum } from "@/api/study"; import { getCourseNum } from "@/api/study";
import { adurl } from "@/api/ad";
import downMenu from "@/views/studypath/downMenu"; import downMenu from "@/views/studypath/downMenu";
import pathMenu from "@/views/studypath/pathMenu"; import pathMenu from "@/views/studypath/pathMenu";
export default { export default {
@ -726,17 +721,7 @@ export default {
resgetNode(); resgetNode();
// 广 // 广
const adgetNode = async () => { window.fineAd.getAdvertisement({ adId: "ec2bf821df994fa5aa3cc950377a812e", top: 24 });
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();
// //
const resCourseNum = async () => { const resCourseNum = async () => {

3
src/views/video/indexVideo.vue

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

212
src/views/video/play.vue

@ -1,11 +1,9 @@
<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>
@ -27,86 +25,69 @@
<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
>{{ item.it618_name }}
</div>
<div class="time">{{ item.videoTime }}</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,
classlog,
maLookVideoTracking,
sourceDeviceLog,
updateVideoCountLog,
updateVideoPlayEnd
} from "@/api/video";
import { toRefs, reactive, onMounted, ref, onUnmounted } from 'vue';
import { isMobileValue } from "@/utils/isMobile"; import { isMobileValue } from "@/utils/isMobile";
export default { 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({
@ -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) => {
@ -190,8 +170,7 @@
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);
} }
@ -308,12 +285,11 @@
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(() => {
@ -433,66 +406,62 @@
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,9 +470,9 @@
getvideo_click, getvideo_click,
myscroll, myscroll,
goBack, goBack,
} };
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -518,7 +487,7 @@
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;
@ -601,11 +570,11 @@
} }
.status_1 { .status_1 {
color: #FF3C23; color: #ff3c23;
} }
.status_2 { .status_2 {
color: #67C23A; color: #67c23a;
} }
.status_3 { .status_3 {
@ -619,6 +588,7 @@
bottom: 0; bottom: 0;
right: 0; right: 0;
background-color: #000; background-color: #000;
z-index: 2;
} }
.mbox { .mbox {
@ -629,7 +599,6 @@
overflow: hidden; overflow: hidden;
} }
.videoBox { .videoBox {
position: absolute; position: absolute;
left: 0; left: 0;
@ -652,9 +621,7 @@
background-color: #0f0f0f; background-color: #0f0f0f;
} }
.classtil { .classtil {
font-size: 22px; font-size: 22px;
color: #eee; color: #eee;
background-color: #000; background-color: #000;
@ -691,8 +658,6 @@
color: #8496ab; color: #8496ab;
} }
.item { .item {
font-size: 14px; font-size: 14px;
color: #617288; color: #617288;
@ -724,8 +689,6 @@
width: 16px; width: 16px;
height: 16px; height: 16px;
} }
} }
} }
@ -762,15 +725,11 @@
} }
</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,7 +839,6 @@
.m-footr { .m-footr {
margin-top: 0; margin-top: 0;
} }
} }
</style> </style>

Loading…
Cancel
Save