Browse Source

addL初始提交

master
Wangwei-王伟 2 years ago
commit
0df83b5bee
  1. 14
      .env.development
  2. 12
      .env.production
  3. 12
      .env.test
  4. 24
      .gitignore
  5. 29
      README.md
  6. 5
      babel.config.js
  7. 11
      docker/Dockerfile
  8. 15
      docker/nginx.conf
  9. 10
      docker_build.sh
  10. 13
      docker_build_prod.sh
  11. 13
      jsconfig.json
  12. 26532
      package-lock.json
  13. 65
      package.json
  14. 12
      public/api/countclass.json
  15. BIN
      public/favicon.ico
  16. 290
      public/index.html
  17. 9012
      public/js/ckplayerX2/ckplayer.js
  18. 105
      public/js/ckplayerX2/ckplayer.json
  19. 16
      public/js/ckplayerX2/ckplayer.min.js
  20. 105
      public/js/ckplayerX2/ckplayer.mobile.json
  21. 28
      public/js/ckplayerX2/hls/LICENSE
  22. 15403
      public/js/ckplayerX2/hls/hls.js
  23. 7
      public/js/ckplayerX2/hls/hls.min.js
  24. 42
      public/js/ckplayerX2/language.json
  25. 861
      public/js/ckplayerX2/style.json
  26. 861
      public/js/ckplayerX2/style.mobile.json
  27. 19
      src/App.vue
  28. 10
      src/api/ad.js
  29. 89
      src/api/auth.js
  30. 27
      src/api/coupon.js
  31. 35
      src/api/guide.js
  32. 35
      src/api/index.js
  33. 63
      src/api/live.js
  34. 27
      src/api/map.js
  35. 16
      src/api/nav.js
  36. 138
      src/api/study.js
  37. 135
      src/api/study_admin.js
  38. 21
      src/api/teacher.js
  39. 40
      src/api/user.js
  40. 259
      src/api/video.js
  41. BIN
      src/assets/b1.png
  42. BIN
      src/assets/banenr.jpg
  43. BIN
      src/assets/citybg.png
  44. BIN
      src/assets/class/classtop.png
  45. BIN
      src/assets/class/zip.png
  46. 1
      src/assets/class/zip.svg
  47. 569
      src/assets/css/base.css
  48. 36
      src/assets/css/m.css
  49. 142
      src/assets/css/style.css
  50. 46
      src/assets/geo/china.js
  51. 1
      src/assets/geo/chinaMap.json
  52. 41
      src/assets/geo/country.json
  53. 223
      src/assets/geo/effectScatter-bmap.html
  54. 41
      src/assets/geo/jiuduanMap.json
  55. 1
      src/assets/geo/newmap.json
  56. BIN
      src/assets/guide/finebi/bg.png
  57. BIN
      src/assets/guide/finebi/biaoji.png
  58. BIN
      src/assets/guide/finebi/btn.png
  59. BIN
      src/assets/guide/finebi/duihao.png
  60. BIN
      src/assets/guide/finebi/eight.png
  61. BIN
      src/assets/guide/finebi/eight1.png
  62. BIN
      src/assets/guide/finebi/five.png
  63. BIN
      src/assets/guide/finebi/five1.png
  64. BIN
      src/assets/guide/finebi/four.png
  65. BIN
      src/assets/guide/finebi/four1.png
  66. BIN
      src/assets/guide/finebi/ftj.png
  67. BIN
      src/assets/guide/finebi/gift.png
  68. BIN
      src/assets/guide/finebi/gift1.png
  69. BIN
      src/assets/guide/finebi/hongbao1.png
  70. BIN
      src/assets/guide/finebi/hongbao111.png
  71. BIN
      src/assets/guide/finebi/hongbao_kai.png
  72. BIN
      src/assets/guide/finebi/hongbao_suo.png
  73. BIN
      src/assets/guide/finebi/ico-FCBA.png
  74. BIN
      src/assets/guide/finebi/jiangbei.png
  75. BIN
      src/assets/guide/finebi/jiayou.png
  76. BIN
      src/assets/guide/finebi/msgpic.png
  77. BIN
      src/assets/guide/finebi/one.png
  78. BIN
      src/assets/guide/finebi/one1.png
  79. BIN
      src/assets/guide/finebi/qun.png
  80. BIN
      src/assets/guide/finebi/road-lf.png
  81. BIN
      src/assets/guide/finebi/road-lf1.png
  82. BIN
      src/assets/guide/finebi/road-rt.png
  83. BIN
      src/assets/guide/finebi/road-rt1.png
  84. BIN
      src/assets/guide/finebi/seven.png
  85. BIN
      src/assets/guide/finebi/seven1.png
  86. BIN
      src/assets/guide/finebi/six.png
  87. BIN
      src/assets/guide/finebi/six1.png
  88. BIN
      src/assets/guide/finebi/three.png
  89. BIN
      src/assets/guide/finebi/three1.png
  90. BIN
      src/assets/guide/finebi/two.png
  91. BIN
      src/assets/guide/finebi/two1.png
  92. BIN
      src/assets/guide/finebi/wf_lf.png
  93. BIN
      src/assets/guide/finebi/wf_rt.png
  94. BIN
      src/assets/guide/finereport/bg.png
  95. BIN
      src/assets/guide/finereport/biaoji.png
  96. BIN
      src/assets/guide/finereport/btn.png
  97. BIN
      src/assets/guide/finereport/duihao.png
  98. BIN
      src/assets/guide/finereport/eight.png
  99. BIN
      src/assets/guide/finereport/eight1.png
  100. BIN
      src/assets/guide/finereport/five.png
  101. Some files were not shown because too many files have changed in this diff Show More

14
.env.development

@ -0,0 +1,14 @@
VUE_APP_ENV = 'development'
VUE_APP_NAME = 学院
VUE_APP_API_URL = https://testapi
#VUE_APP_API_URL = https://api.shequ.fanruan.com
NEW_VUE_APP_API_URL = http://47.103.147.140:9094
VUE_APP_EDU_URL = http://localhost:8084
VUE_APP_TOKEN_URL = http://localhost
VUE_APP_SHEQU_URL = https://frbbs
VUE_APP_ID_URL = https://id
#VUE_APP_ID_URL = https://passport.fanruan.com
#VUE_APP_CIDAPI_URL = https://cid.fanruan.com/api
VUE_APP_CIDAPI_URL = https://test-cid/api
VUE_APP_PASS_URL = http://localhost:8080
VUE_APP_CERT_URL = https://admin.shequ.fanruan.com

12
.env.production

@ -0,0 +1,12 @@
NODE_ENV = production
VUE_APP_ENV = dist
outputDir = dist
VUE_APP_NAME = 学院
VUE_APP_API_URL = https://api.shequ.fanruan.com
VUE_APP_EDU_URL = https://edu.fanruan.com
VUE_APP_TOKEN_URL = https://edu.fanruan.com
VUE_APP_SHEQU_URL = https://bbs.fanruan.com
VUE_APP_ID_URL = https://fanruanclub.com
VUE_APP_CIDAPI_URL = https://cid.fanruan.com/api
VUE_APP_PASS_URL = https://fanruanclub.com
VUE_APP_CERT_URL = https://cert.fanruan.com/

12
.env.test

@ -0,0 +1,12 @@
NODE_ENV = 'production'
VUE_APP_ENV = 'test'
outputDir = 'test'
VUE_APP_NAME = 学院
VUE_APP_API_URL = https://testapi.shequ.fanruan.com
VUE_APP_EDU_URL = https://testedu.fanruan.com
VUE_APP_TOKEN_URL = https://testedu.fanruan.com
VUE_APP_SHEQU_URL = https://cu.fanruan.com
VUE_APP_ID_URL = https://passport.fanruan.com
VUE_APP_CIDAPI_URL = https://testcid.fanruan.com/api
VUE_APP_PASS_URL = https://passport.fanruan.com
VUE_APP_CERT_URL = https://admin.shequ.fanruan.com

24
.gitignore vendored

@ -0,0 +1,24 @@
.DS_Store
node_modules
/dist
/test
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

29
README.md

@ -0,0 +1,29 @@
# map-demo
## Project setup
```
yarn install
```
### Compiles and hot-reloads for development
```
yarn serve
```
### Compiles and minifies for production
```
yarn build
```
### Lints and fixes files
```
yarn lint
```
### 本地运行测试环境
```
yarn serve:test
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

5
babel.config.js

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

11
docker/Dockerfile

@ -0,0 +1,11 @@
FROM nginx:1.21.6-alpine
ARG DIST_DIR
WORKDIR /data
COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY $DIST_DIR /data
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

15
docker/nginx.conf

@ -0,0 +1,15 @@
server {
listen 80;
location / {
root /data;
try_files $uri /index.html;
}
}
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;

10
docker_build.sh

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# fine-digit-edu-webui-old
set -ex \
&& yarn build:test \
&& docker build -f docker/Dockerfile \
-t registry.cn-shanghai.aliyuncs.com/frbbs/fine-digit-edu-webui-old:latest-snapshot \
--build-arg DIST_DIR=test \
. \
&& docker push registry.cn-shanghai.aliyuncs.com/frbbs/fine-digit-edu-webui-old:latest-snapshot

13
docker_build_prod.sh

@ -0,0 +1,13 @@
#!/usr/bin/env bash
# fine-digit-edu-webui-old
VERSION=$(date "+%Y%m%d")
set -ex \
&& yarn build \
&& docker build -f docker/Dockerfile \
-t registry.cn-shanghai.aliyuncs.com/frbbs/fine-digit-edu-webui-old:latest \
-t registry.cn-shanghai.aliyuncs.com/frbbs/fine-digit-edu-webui-old:"$VERSION" \
--build-arg DIST_DIR=dist \
. \
&& docker push registry.cn-shanghai.aliyuncs.com/frbbs/fine-digit-edu-webui-old:latest \
&& docker push registry.cn-shanghai.aliyuncs.com/frbbs/fine-digit-edu-webui-old:"$VERSION"

13
jsconfig.json

@ -0,0 +1,13 @@
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": [
"src/*"
]
}
},
"exclude": [
"node_modules"
]
}

26532
package-lock.json generated

File diff suppressed because it is too large Load Diff

65
package.json

@ -0,0 +1,65 @@
{
"name": "edu.fanruan.com",
"version": "1.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"serve:test": "vue-cli-service serve --mode test",
"build:prod": "vue-cli-service build --mode prod",
"build:test": "vue-cli-service build --mode test",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"axios": "^0.21.1",
"bezier-easing": "^2.1.0",
"clipboard": "^2.0.8",
"core-js": "^3.6.5",
"echarts": "^4.8.0",
"element-plus": "^1.0.2-beta.70",
"js-base64": "^3.6.0",
"js-cookie": "^2.2.1",
"jsonp": "^0.2.1",
"jsonp-promise": "^0.1.2",
"qrcode": "^1.4.4",
"svg-sprite-loader": "^6.0.11",
"vant": "^3.4.9",
"vue": "^3.0.0",
"vue-router": "4",
"vue-wechat-title": "^2.0.7",
"vue3-seamless-scroll": "^1.0.6",
"vuex": "^4.0.0-rc.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"@vue/compiler-sfc": "^3.0.0",
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^7.0.0-0",
"sass": "^1.32.4",
"sass-loader": "^10.1.1"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {
"no-undef": "off"
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

12
public/api/countclass.json

@ -0,0 +1,12 @@
{
"code": 200,
"message": "success",
"data": [
{
"city": 56,
"class": 444,
"student": 17352
}
],
"status": 0
}

BIN
public/favicon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

290
public/index.html

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

9012
public/js/ckplayerX2/ckplayer.js

File diff suppressed because it is too large Load Diff

105
public/js/ckplayerX2/ckplayer.json

@ -0,0 +1,105 @@
{
"config": {
"fullInteractive": true,
"delay": 30,
"timeFrequency": 100,
"autoLoad": true,
"loadNext": 0,
"definition": false,
"subtitle": false,
"playbackRate": true,
"smartRemove": true,
"bufferTime": 200,
"rtmpBufferTime": 0,
"click": true,
"doubleClick": true,
"doubleClickInterval": 200,
"keyDown": {
"space": true,
"left": true,
"right": true,
"up": true,
"down": true
},
"timeJump": 10,
"volumeJump": 0.1,
"timeScheduleAdjust": 1,
"previewDefaultLoad": true,
"promptSpotTime": true,
"buttonMode": {
"player": false,
"controlBar": false,
"timeSchedule": true,
"volumeSchedule": true
},
"liveAndVod": {
"open": false,
"vodTime": 2,
"start": "start"
},
"usehardwareeecoder": false,
"errorNum": 1,
"playCorrect": false,
"timeCorrect": true,
"m3u8Definition": {},
"m3u8MaxBufferLength": 30,
"split": ",",
"timeStamp": "",
"videoDrawImage": false,
"errorTime": 10,
"addCallback": "adPlay,adPause,playOrPause,videoPlay,videoPause,videoMute,videoEscMute,videoClear,changeVolume,fastBack,fastNext,videoSeek,newVideo,getMetaDate,videoRotation,videoBrightness,videoContrast,videoSaturation,videoHue,videoZoom,videoProportion,videoError,addListener,removeListener,addElement,getElement,deleteElement,elementShow,animate,animateResume,animatePause,deleteAnimate,changeConfig,getConfig,openUrl,fullScreen,quitFullScreen,switchFull,screenshot,custom,changeControlBarShow,getCurrentSrc,changeDefinition,changeSubtitles,changeSubtitlesSize"
},
"menu": {
"ckkey": "97b6a7181e0bdbe69e692383e1071ba1",
"name": "ckplayer",
"link": "http://www.ckplayer.com",
"domain": "",
"version": "version:X2",
"more":[]
},
"languagePath": "",
"stylePath": "",
"style": {
"loading": {
"file": "data:image/gif;base64,R0lGODlhPAAeALMIAPRqMPRmK/RqMfNkKPRyPPV+TPRpL/NfIf///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg3OTQ3RDUzRTEwMTExRUFCNkQxRDI3Mzc1NTY5OUQ3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg3OTQ3RDU0RTEwMTExRUFCNkQxRDI3Mzc1NTY5OUQ3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODc5NDdENTFFMTAxMTFFQUI2RDFEMjczNzU1Njk5RDciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODc5NDdENTJFMTAxMTFFQUI2RDFEMjczNzU1Njk5RDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr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",
"fileH5": "data:image/gif;base64,R0lGODlhPAAeALMIAPRqMPRmK/RqMfNkKPRyPPV+TPRpL/NfIf///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg3OTQ3RDUzRTEwMTExRUFCNkQxRDI3Mzc1NTY5OUQ3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg3OTQ3RDU0RTEwMTExRUFCNkQxRDI3Mzc1NTY5OUQ3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODc5NDdENTFFMTAxMTFFQUI2RDFEMjczNzU1Njk5RDciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODc5NDdENTJFMTAxMTFFQUI2RDFEMjczNzU1Njk5RDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr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",
"align": "center",
"vAlign": "middle",
"width": 60,
"height": 30,
"offsetX": -30,
"offsetY": -15
},
"logo": {
"file": "",
"align": "right",
"vAlign": "top",
"width": 87,
"height": 30,
"offsetX": -100,
"offsetY": 10
},
"advertisement": {
"time": 5,
"method": "get",
"videoForce": false,
"videoVolume": 0.8,
"skipButtonShow": true,
"linkButtonShow": true,
"muteButtonShow": true,
"closeButtonShow": true,
"closeOtherButtonShow": true,
"frontSkipButtonDelay": 2,
"insertSkipButtonDelay": 0,
"endSkipButtonDelay": 0,
"frontStretched": 1,
"insertStretched": 2,
"pauseStretched": 2,
"endStretched": 2
},
"videoDefault": {
"defaultWidth": 4,
"defaultHeight": 3
}
}
}

16
public/js/ckplayerX2/ckplayer.min.js vendored

File diff suppressed because one or more lines are too long

105
public/js/ckplayerX2/ckplayer.mobile.json

@ -0,0 +1,105 @@
{
"config": {
"fullInteractive": true,
"delay": 30,
"timeFrequency": 100,
"autoLoad": true,
"loadNext": 0,
"definition": false,
"subtitle": false,
"playbackRate": true,
"smartRemove": true,
"bufferTime": 200,
"rtmpBufferTime": 0,
"click": true,
"doubleClick": true,
"doubleClickInterval": 200,
"keyDown": {
"space": true,
"left": true,
"right": true,
"up": true,
"down": true
},
"timeJump": 10,
"volumeJump": 0.1,
"timeScheduleAdjust": "1",
"previewDefaultLoad": true,
"promptSpotTime": true,
"buttonMode": {
"player": false,
"controlBar": false,
"timeSchedule": true,
"volumeSchedule": true
},
"liveAndVod": {
"open": false,
"vodTime": 2,
"start": "start"
},
"usehardwareeecoder": false,
"errorNum": 1,
"playCorrect": false,
"timeCorrect": true,
"m3u8Definition": {},
"m3u8MaxBufferLength": 30,
"split": ",",
"timeStamp": "",
"videoDrawImage": false,
"errorTime": 10,
"addCallback": "adPlay,adPause,playOrPause,videoPlay,videoPause,videoMute,videoEscMute,videoClear,changeVolume,fastBack,fastNext,videoSeek,newVideo,getMetaDate,videoRotation,videoBrightness,videoContrast,videoSaturation,videoHue,videoZoom,videoProportion,videoError,addListener,removeListener,addElement,getElement,deleteElement,elementShow,animate,animateResume,animatePause,deleteAnimate,changeConfig,getConfig,openUrl,fullScreen,quitFullScreen,switchFull,screenshot,custom,changeControlBarShow,getCurrentSrc,changeDefinition,changeSubtitles,changeSubtitlesSize"
},
"menu": {
"ckkey": "97b6a7181e0bdbe69e692383e1071ba1",
"name": "ckplayer",
"link": "http://www.ckplayer.com",
"domain": "",
"version": "version:X2",
"more":[]
},
"languagePath": "",
"stylePath": "",
"style": {
"loading": {
"file": "data:image/gif;base64,R0lGODlhPAAeALMIAPRqMPRmK/RqMfNkKPRyPPV+TPRpL/NfIf///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg3OTQ3RDUzRTEwMTExRUFCNkQxRDI3Mzc1NTY5OUQ3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg3OTQ3RDU0RTEwMTExRUFCNkQxRDI3Mzc1NTY5OUQ3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODc5NDdENTFFMTAxMTFFQUI2RDFEMjczNzU1Njk5RDciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODc5NDdENTJFMTAxMTFFQUI2RDFEMjczNzU1Njk5RDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr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",
"fileH5": "data:image/gif;base64,R0lGODlhPAAeALMIAPRqMPRmK/RqMfNkKPRyPPV+TPRpL/NfIf///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg3OTQ3RDUzRTEwMTExRUFCNkQxRDI3Mzc1NTY5OUQ3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg3OTQ3RDU0RTEwMTExRUFCNkQxRDI3Mzc1NTY5OUQ3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODc5NDdENTFFMTAxMTFFQUI2RDFEMjczNzU1Njk5RDciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODc5NDdENTJFMTAxMTFFQUI2RDFEMjczNzU1Njk5RDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr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",
"align": "center",
"vAlign": "middle",
"width": 60,
"height": 30,
"offsetX": -30,
"offsetY": -15
},
"logo": {
"file": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAUCAYAAAD4BKGuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAVTSURBVHja1Fl/aJVVGP4cw/mH5tUWi3I53cA0WbeIzMgaq6lQoVawm0S6glHhIKM/TELICotqCxMSGWQRdFfRLEhc9mMxqA0rbdS2wsV0GkZXuaKUWlHvgeeNh7f3u1du3Ft74eGcnXu+c873vD/Pt0nZbDZyZL2gWZAQTBH8IjggeEjgPZASPIB+g/P7EsGT6J/BfHfjHFIv2Jpjj/+dlDskvCm42Jk7X3C7YJOgw/z2oOBGwdEYRW0RVAjOCZ4ugNggqwU3CTLRBJFyQ+xuwVRY14igB78tE9QKpgmeEHwkGKRnq9AeMesHRWwEsYGUxwSdBZ51ecweE4Lct0DsOVjaZvptA8jfC4JfghWpXIJ2jMY+EDShf1pwh6DvX5x1GtpDE43cNFlfhyFWpQ9xd5FgFo3fRi++C+2nCBNBRgU3O6RsEyyEQv4QLMb4CcE9RlFBLqS1WZ6BZ83A35ofVhuvfE5QJrjWebdgCJOx51qM1QgewbMzsO57MDQrB9DeC8ObHd5Xyb2eiNiQQxmtgkZBr+OuZwV7BIcF1RgbF1wTE2MbEccX48VY9sMzBilhTke/m+b1Q9lefpgruI7OsYhIGzPJuAnn3+6EM7vu1YKl5vkrYRSfCGZivCxoMklk7M5j6eFlXyRNRSAvAoFf0Fo/CC7LkbwuQjsZsf0qwbuI9wlYgIqGl6NEzDYibJ/gbmAfxpKoMDRcaSK8xZzjZbK+NMhSYoNSngV5e+ksKXp+JdqZwDDmdpSbsqa9gNAyi5JalSGv3iQ+dtNK9HvI+sNBh2AhvNYVaH+msRtAdsa4ehoKCuQsoP2PY8+kCSkJ5IRWjD2FZ4/BOFSWYv9KhI40eUKQ31CqdnLM1c1OOnHufKSS+iEZvgHNhji8g1yT5VZKdCnHO+ajvrYK/I7GkuSWjwvq8Mzl5M79NF89aCHaBNXmWv0sQVUUZEDwsDnbr2i9s31lKyGuFs7kITEBC+snJaToRYIFrRN0CeYgoSUxJ23WUm85eB41b4IUuIvGtyIMVMY8lzHGMoYworF7J/onKYk10/wVQL6zXYr+Zq9aOEhuXZPDel8Q3If+HMzTeHPKlForEK+mws3SMfH2UMxNLIJbasKsoIQZwVLbKFkN4T1C3HxUMM+EkCAfgjwNV40Y304KriOP+jIHqa+jvYsqnH/kqzKaGCFZxWnoTqooxky8+dHUsOGwr6Jfi9jmlVVTHGLnot9L3qGWqCToWYYRF5fDa96mtb93yI2g8B0IWxlTHWmi/hOG00D4mEJfJ5WhQX7ySCsDUaNkJeud6+sgXCgs3OLEG2/xdZSh10JBeiB1zQU0HuQdSib60rOdm9kFToIL8hmFiRHzm1YM0ylet5k579OFpcUk4I0oD0/QuJ7tcBy5ERY6ixdrh5uNwN3bUV7pd4E+J958HmPxbRRydqK/in6vxj5aH9din/udEPKtuU1GqBL24xJwBInQWiHLcbQVKBXTzkVpHP0tWHsIpZUqPeWcrScXuX2ImRkqlufBhdQl15ig3WLKH0/SeAmtD+uprBqGx1ThhlWN5LKG4lcNKbDblFDjVDU0wWK7yLLqnPNk6cKzKsfXt1GQmQQXSuwymhd3tr9lkvPJMUV152kc2PsmUEMxtzdPRk2SNX2DQ3Vhr02Is18LXjHVAz/bG0NEK8johus3UBiwyfkYlDkQUyLaWrwZBrbHMaB8Z3PJLaYk8IIVKKPSJdxbv3ecynNzLNr33GKLV1YVW4IyfycXfq0UxP4X5HJdXCqX4Wv0AKqYkkipw4LG6WxMNi+GhAtH+M/K8wVe7wuWvwQYAFT+UsGCXmX3AAAAAElFTkSuQmCC",
"align": "right",
"vAlign": "top",
"width": 87,
"height": 30,
"offsetX": -100,
"offsetY": 10
},
"advertisement": {
"time": 5,
"method": "get",
"videoForce": false,
"videoVolume": 0.8,
"skipButtonShow": true,
"linkButtonShow": true,
"muteButtonShow": true,
"closeButtonShow": true,
"closeOtherButtonShow": true,
"frontSkipButtonDelay": 2,
"insertSkipButtonDelay": 0,
"endSkipButtonDelay": 0,
"frontStretched": 1,
"insertStretched": 2,
"pauseStretched": 2,
"endStretched": 2
},
"videoDefault": {
"defaultWidth": 4,
"defaultHeight": 3
}
}
}

28
public/js/ckplayerX2/hls/LICENSE

@ -0,0 +1,28 @@
Copyright (c) 2017 Dailymotion (http://www.dailymotion.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
src/remux/mp4-generator.js and src/demux/exp-golomb.js implementation in this project
are derived from the HLS library for video.js (https://github.com/videojs/videojs-contrib-hls)
That work is also covered by the Apache 2 License, following copyright:
Copyright (c) 2013-2015 Brightcove
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

15403
public/js/ckplayerX2/hls/hls.js

File diff suppressed because it is too large Load Diff

7
public/js/ckplayerX2/hls/hls.min.js vendored

File diff suppressed because one or more lines are too long

42
public/js/ckplayerX2/language.json

@ -0,0 +1,42 @@
{
"adCountdown": "[$Second]",
"skipDelay": "[$Second]",
"buttonOver": {
"play": "点击播放",
"pause": "暂停播放",
"mute": "静音",
"escMute": "恢复音量",
"full": "全屏",
"escFull": "退出全屏",
"previousPage": "上一集",
"nextPage": "下一集",
"definition": "选择清晰度",
"subtitles": "选择字幕",
"playbackrate": "倍速播放"
},
"volumeSliderOver": "音量:[$volume]%",
"buffer": "[$percentage]%",
"timeSliderOver": "[$timeh]:[$timei]:[$times]",
"liveAndVod": "[$timeh]:[$timei]:[$times]",
"vod":"[$timeh]:[$timei]:[$times] / [$durationh]:[$durationi]:[$durations]",
"live": "直播中 [$liveTimeY]-[$liveTimem]-[$liveTimed] [$liveTimeh]:[$liveTimei]:[$liveTimes]",
"m3u8Definition": {
"name": [
"流畅",
"低清",
"标清",
"高清",
"超清",
"蓝光",
"未知"
]
},
"error": {
"cannotFindUrl": "视频地址不存在",
"streamNotFound": "加载失败",
"formatError": "视频格式错误"
},
"definition": "自动",
"subtitle": "默认",
"playbackrate": "默认"
}

861
public/js/ckplayerX2/style.json

File diff suppressed because one or more lines are too long

861
public/js/ckplayerX2/style.mobile.json

File diff suppressed because one or more lines are too long

19
src/App.vue

@ -0,0 +1,19 @@
<template>
<router-view />
</template>
<script>
</script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
a.active {
color: #0082fc;
}
</style>

10
src/api/ad.js

@ -0,0 +1,10 @@
import request from "@/utils/request";
// 意向调查
export function adurl(adid) {
return request({
url: `/v1/help/getComAds/${adid}/`,
method: "get",
})
}

89
src/api/auth.js

@ -0,0 +1,89 @@
/*
* @Author: xiaowei
* @Date: 2021-01-21 10:28:41
* @LastEditTime: 2021-02-02 19:26:01
* @Description: 认证
*/
import request from "@/utils/request";
import { getUid, getRefreshToken, getAppId } from '@/utils/cookie';
/**
* @description: 获取token
* @param {*} params
*/
export function getNewToken() {
return request({
url:"/idapi/token/",
method: "get"
})
}
/**
* @description: 获取token
* @param {*} params
*/
export function getToken() {
return request({
url:"/idapi/accesstoken/",
method: "get"
})
}
/**
* @description: 刷新token
* @param {*} params
*/
export function refreshToken() {
return request({
url:`/v1/token/new/refresh/?appid=${getAppId()}&uid=${getUid()}&refresh_token=${getRefreshToken()}`,
method: "get"
})
}
/**
* @description: 获取用户信息
* @param {*} params
*/
export function getInfo() {
// return Promise.resolve(
// {"code":200,"message":"success","data":{"avatar":"https://bbs.fanruan.com/uc_server/avatar.php?uid=55549","fr_uid":55549,"username":null,"regdate":null,"position":null,"location":"","signature":null,"fr_expires_time":1661313258}}
// )
return request({
url:"/idapi/userinfo/",
method: "get"
})
}
/**
* @description: 通过sid获取code
* @param {*} params
*/
export function getUserCode(sid) {
return request({
url:`/idapi/sid/?sid=${sid}`,
method: "get"
})
}
/**
* @description: 通过sid获取code
* @param {*} params
*/
export function getWxjssdk() {
return request({
url:'/idapi/wxjssdk/',
method: "get"
})
}
/**
* @description: cas登录注册
* @param {*} params
*/
export function casLogin(ticket) {
return request({
url:`/v1/user/cas/login/?ticket=${ticket}&service=${process.env.VUE_APP_EDU_URL}/`,
method: "get"
})
}

27
src/api/coupon.js

@ -0,0 +1,27 @@
/*
* @Author: XiaoWei
* @Date: 2021-01-19 18:16:45
* @LastEditors: xiaowei
* @LastEditTime: 2021-03-30 01:39:59
* @Description: 视频相关接口
*/
import request from "@/utils/request";
// 获取优惠券
export function getCoupon(params) {
return request({
url: '/v1/user/coupon/getCoupon',
method: "get",
params
})
}
// 兑换优惠券
export function exchCoupon(params) {
return request({
url: '/v1/user/coupon/exchCoupon',
method: "get",
params
})
}

35
src/api/guide.js

@ -0,0 +1,35 @@
import request from "@/utils/request";
// 意向调查
export function intention(type) {
return request({
url: `/v1/edu/guide/index/intention?type=${type}`,
method: "get",
})
}
// 获取意向调查数量
export function getIntentionCount(type) {
return request({
url: `/v1/edu/guide/index/getIntentionCount?type=${type}`,
method: "get",
})
}
// 来源埋点
export function addUrlFrom(params) {
return request({
url: '/v1/edu/guide/index/addUrlFrom/',
method: "post",
params
})
}
// 获取学习人数
export function studentCount(type) {
return request({
url: `/v1/edu/guide/index/studentCount/?type=${type}`,
method: "get"
})
}

35
src/api/index.js

@ -0,0 +1,35 @@
import request from "@/utils/request";
// 最新直播
export function getNewlive() {
return request({
url:"/v1/edu/live/getNewlive/",
method: "get",
})
}
// 各种视频
export function getvideo(params) {
return request({
url:"/v1/edu/index/video/",
method: "get",
params
})
}
// 指定分类热门推荐
export function getcateHot(class1) {
return request({
url:`/v1/edu/index/cateHot/?class1=${class1}`,
method: "get",
})
}
// 获取图片
export function getCover() {
return request({
url:"/v1/edu/index/getCover/",
method: "get",
})
}

63
src/api/live.js

@ -0,0 +1,63 @@
import request from "@/utils/request";
/**
* @description: 获取直播焦点
*/
export function getLiveFocus(params) {
return request({
url:"/v1/edu/live/liveFocus/",
method: "get",
params
})
}
/**
* @description: 获取直播列表
*/
export function getLiveList(params) {
return request({
url:"/v1/edu/live/liveList/",
method: "get",
params
})
}
/**
* 直播详情页
*/
// 基础信息
export function liveBasic(liveid,params) {
return request({
url:`/v1/edu/live/liveBasic/${liveid}/`,
method: "get",
params
})
}
// 获取学员
export function getStudent(liveid) {
return request({
url:`/v1/edu/live/getStudent/${liveid}/`,
method: "get",
})
}
// 直播报名
export function addLiveApply(liveid,params) {
return request({
url:`/v1/edu/live/addLiveApply/${liveid}/`,
method: "post",
params
})
}
// 观看直播
export function livePlay(liveid) {
return request({
url:`/v1/edu/live/livePlay/${liveid}/`,
method: "get",
})
}

27
src/api/map.js

@ -0,0 +1,27 @@
/*
* @Author: xiaowei
* @Date: 2021-02-04 16:51:01
* @LastEditTime: 2021-02-04 16:53:25
* @Description: 地图相关接口
*/
import request from "@/utils/request";
/**
* @description: 获取地图列表
*/
export function getMapList(days) {
return request({
url:"/v1/edu/edulist/cityclasslist/",
method: "get",
params: {
days
}
})
}
export function geoCoding(v,city) {
return request({
url:`https://bird.ioliu.cn/${v}?url=https://api.map.baidu.com/geocoding/v3/?address=${city}&output=json&ak=FvIYykqgB0i9dbTXWGf79nlyKT996zmj`,
method: "get"
})
}

16
src/api/nav.js

@ -0,0 +1,16 @@
/*
* @Author: xiaowei
* @Description: 菜单相关接口
*/
import request from "@/utils/request";
/**
* @description: 获取菜单列表
*/
export function getMenuList() {
return request({
url:"/nav/topnav",
method: "get",
})
}

138
src/api/study.js

@ -0,0 +1,138 @@
/*
* @Author: XiaoWei
* @Date: 2021-01-27 14:20:05
* @LastEditors: XiaoWei
* @LastEditTime: 2021-03-25 23:38:53
* @Description: 学习班接口
*/
import request from "@/utils/request";
// 获取个人学习课程列表
export function getPersonalStudyList() {
return request({
url: "/v1/edu/studyclass/myStudyClass/",
method: "get",
// headers
})
}
// 获取学习课程列表
export function getStudyList(headers) {
return request({
url: "/v1/edu/studyclass/courselist/",
method: "get",
headers
})
}
// 列表公用头部
export function getPublicTop(classid) {
return request({
url: `/v1/edu/studyclass/getPublicTop/${classid}/`
})
}
// 列表公用右侧
export function getClassInfo(classid) {
return request({
url: `/v1/edu/studyclass/classInfo/${classid}/`,
method: "get"
})
}
// 课程章节列表
export function getLessonList(classid) {
return request({
url: `/v1/edu/studyclass/getLessonList/${classid}/`,
method: "get"
})
}
// 获取视频
export function getVideo(classid, videoid) {
return request({
url: `/v1/edu/studyclass/getVideo/${classid}/${videoid}/`,
method: "get"
})
}
// 获取视频播放列表
export function getPlayList(classid) {
return request({
url: `/v1/edu/studyclass/getPlayList/${classid}/`,
method: "get"
})
}
// 右侧招聘
export function getJobNew(classid) {
return request({
url: `/v1/edu/studyclass/getJobNew/?perpage=5&classid=${classid}`,
method: "get"
})
}
// 视频播放埋点
export function classlog(data,params) {
return request({
url: `/v1/edu/studyclass/classlog/?logid=${data.logid}&pytime=${data.pytime}&duration=${data.duration}&videoid=${data.videoid}`,
method: "post",
params
})
}
// 获取我的作业
export function myHomeWork(classid) {
return request({
url: `/v1/edu/studyclass/myHomeWork/${classid}/`,
method: "get"
})
}
// 获取班级论坛列表
export function bbsList(classid,params) {
return request({
url: `/v1/edu/studyclass/bbsList/${classid}/`,
method: "get",
params
})
}
// 获取班级论坛帖子详情
export function bbsView(classid,tid,params) {
return request({
url: `/v1/edu/studyclass/bbsView/${classid}/${tid}/`,
method: "get",
params
})
}
// 回复帖子
export function postComment(params) {
return request({
url: `/v1/edu/studyclass/bbsView/`,
method: "post",
params
})
}
// 提交作业-已废弃
export function fileUpload(params) {
return request({
url: `/v1/edu/studyclass/fileUpload/`,
method: "post",
headers: {
'Content-Type': 'multipart/form-data',
//'authentication':'c2hlcXVhcHAuTTJCQVN0dkQwRU43YjZDTHFKb0Y3M21QNmVZOXA4MmYuNzM4NTE='
},
params
})
}
// 获取学习班指定课程学习人数
export function getCourseNum(pid,tmp) {
return request({
url: `/v1/edu/studyclass/getCourseNum/?pid=${pid}&tmp=${tmp}`,
method: "get"
})
}

135
src/api/study_admin.js

@ -0,0 +1,135 @@
/*
* @Author: XiaoWei
* @Date: 2021-01-27 14:20:05
* @LastEditors: XiaoWei
* @LastEditTime: 2021-03-25 23:38:53
* @Description: 学习班接口
*/
import request from "@/utils/request";
// 公用鉴权
export function isAuth(classid) {
return request({
url: `/v1/edu/admin/classroom/isAuth/${classid}`,
method: "get",
})
}
// 获取学生列表
export function studentList(classid,params) {
return request({
url: `/v1/edu/admin/classroom/studentList/${classid}`,
method: "get",
params
})
}
// 添加学生
export function addStudent(classid,params) {
return request({
url: `/v1/edu/admin/classroom/addStudent/${classid}`,
method: "get",
params
})
}
// 获取某个学生
export function getStudent(classid,id) {
return request({
url: `/v1/edu/admin/classroom/getStudent/${classid}/?id=${id}`,
method: "get",
})
}
// 编辑
export function editStudent(classid,params) {
return request({
url: `/v1/edu/admin/classroom/editStudent/${classid}`,
method: "post",
params
})
}
// 删除
export function delStudent(classid,id) {
return request({
url: `/v1/edu/admin/classroom/delStudent/${classid}/?id=${id}`,
method: "get",
})
}
// 观看记录
export function studyLog(classid,uid) {
return request({
url: `/v1/edu/admin/classroom/studyLog/${classid}/?uid=${uid}`,
method: "get",
})
}
/**
* 批改作业
*/
// 作业列表
export function worklist(classid,params) {
return request({
url: `/v1/edu/admin/classroom/worklist/${classid}`,
method: "get",
params
})
}
// 批改作业
export function workUpdate(classid,params) {
return request({
url: `/v1/edu/admin/classroom/workUpdate/${classid}`,
method: "post",
params
})
}
/**
* 公告
*/
// 列表
export function notice(classid) {
return request({
url: `/v1/edu/admin/classroom/notice/${classid}`,
method: "get",
})
}
// add
export function noticeAdd(classid,params) {
return request({
url: `/v1/edu/admin/classroom/noticeAdd/${classid}`,
method: "post",
params
})
}
// del
export function noticeDel(classid,id) {
return request({
url: `/v1/edu/admin/classroom/noticeDel/${classid}/?id=${id}`,
method: "get",
})
}
// edit
export function noticeEdit(classid,params) {
return request({
url: `/v1/edu/admin/classroom/noticeEdit/${classid}`,
method: "post",
params
})
}
/**
* 进度
*/
export function scheduleList(classid) {
return request({
url: `/v1/edu/admin/classroom/scheduleList/${classid}`,
method: "get",
})
}
export function scheduleUpdate(classid,params) {
return request({
url: `/v1/edu/admin/classroom/scheduleUpdate/${classid}`,
method: "get",
params
})
}

21
src/api/teacher.js

@ -0,0 +1,21 @@
import {requestPost, requestGet, requestPut} from "@/utils/newrequest";
// 获取用户信息
export function getUserInfo(){
return requestGet('/api/user/info');
}
// 获取讲师资料
export function getTeacherInfo() {
return requestGet('/api/lecturer/self');
}
// 讲师申请
export function addTeacher(params) {
return requestPost('/api/lecturer/apply',params);
}
// 修改讲师申请
export function editTeacher(id, params) {
return requestPut(`/api/lecturer/${id}`,params);
}

40
src/api/user.js

@ -0,0 +1,40 @@
import request from "@/utils/request";
// 获取用户的f豆,f币,信用积分
export function getCredit() {
return request({
url: "/v1/user/credit/",
method: "get"
})
}
// 获取获取通知数量
export function getNotice() {
return request({
url: "/v1/user/notice/getNoticeNum/",
method: "get"
})
}
// 头像下拉
export function avatarMenu() {
return request({
url: "/v1/user/menu/avatarMenu/",
method: "get"
})
}
// 收藏
export function addCollection(params) {
return request({
url: "/v1/user/Collection/addCollection",
method: "get",
params
})
}
// 是否收藏
export function isCollection(params) {
return request({
url: "/v1/user/Collection/isCollection",
method: "get",
params
})
}

259
src/api/video.js

@ -0,0 +1,259 @@
/*
* @Author: XiaoWei
* @Date: 2021-01-19 18:16:45
* @LastEditors: xiaowei
* @LastEditTime: 2021-03-30 01:39:59
* @Description: 视频相关接口
*/
import request from "@/utils/request";
import {requestGet} from "@/utils/newrequest";
// 渠道和设备埋点
export function sourceDeviceLog(params) {
return request({
url: '/v1/edu/video/source/log/',
method: "post",
params
})
}
// 课程方向 v2
export function getCourseDirection() {
return requestGet('/api/tag/list?usage=0');
}
// 课程标签 v2
export function getCourseTag(params) {
return requestGet('/api/tag/list/by/direction', params);
}
// 视频分类
export function getCategories(params) {
return request({
url:"/v1/edu/video/getCategory/",
method: "get",
params
})
}
// 获取视频列表
export function getVideoList(params) {
return request({
url:"/v1/edu/video/getVideoList/",
method: "get",
params
})
}
// 顶部课程信息+课程介绍
export function videoBasic(courseid,params) {
return request({
url:`/v1/edu/video/videoBasic/${courseid}/`,
method: "get",
params
})
}
// 课程章节目录
export function getLessonList(courseid,params) {
return request({
url:`/v1/edu/video/getLessonList/${courseid}/`,
method: "get",
params
})
}
// 获取学员
export function getStudent(courseid) {
return request({
url:`/v1/edu/video/getStudent/${courseid}/`,
method: "get",
})
}
// 7天热门课程
export function gethotVideo() {
return request({
url:"/v1/edu/video/gethotVideo/",
method: "get",
})
}
// 讲师其他课程
export function getLecturerVideo(ltuid) {
return request({
url:`/v1/edu/video/getLecturerVideo/${ltuid}/`,
method: "get",
})
}
// 获取视频
export function getVideo(playid) {
return request({
url: `/v1/edu/video/getVideo/${playid}/`,
method: "get"
})
}
// 获取视频播放列表
export function getPlayList(videoid) {
return request({
url: `/v1/edu/video/getPlayList/${videoid}/`,
method: "get"
})
}
// 视频播放埋点
export function classlog(params) {
return request({
url: '/v1/edu/video/classlog/',
method: "post",
params
})
}
// 添加到订单
export function createOrder(params) {
return request({
url: `/v1/buy/order/createOrder/`,
method: "post",
params
})
}
// 获取评论
export function getComment(videoid,params) {
return request({
url: `/v1/edu/video/getComment/${videoid}/`,
method: "get",
params
})
}
// 添加评论
export function addComment(videoid,params) {
return request({
url: `/v1/edu/video/addComment/${videoid}/`,
method: "post",
params
})
}
/**
* finereport路径学习状态
*/
// 获取finereport路径学习状态
export function getNode() {
return request({
url: '/v1/edu/guide/finereport/getNode',
method: "get",
})
}
// 添加finereport路径学习状态
export function updateNode(params) {
return request({
url: '/v1/edu/guide/finereport/updateNode',
method: "post",
params
})
}
// 添加finereport路径学习状态
export function luckDraw() {
return request({
url: '/v1/edu/guide/finereport/luckDraw',
method: "get",
})
}
// 获取完成的学员
export function getStudentList() {
return request({
url: '/v1/edu/guide/finereport/getStudentList',
method: "get",
})
}
/**
* finebi路径学习状态
*/
// 获取finebi路径学习状态
export function getNode_bi() {
return request({
url: '/v1/edu/guide/finebi/getNode',
method: "get",
})
}
// 添加finebi路径学习状态
export function updateNode_bi(params) {
return request({
url: '/v1/edu/guide/finebi/updateNode',
method: "post",
params
})
}
// 添加finebi路径学习状态
export function luckDraw_bi() {
return request({
url: '/v1/edu/guide/finebi/luckDraw',
method: "get",
})
}
// 获取完成的学员
export function getStudentList_bi() {
return request({
url: '/v1/edu/guide/finebi/getStudentList',
method: "get",
})
}
// ma观看埋点
export function maLookVideoTracking(videoid) {
return request({
url: `/v1/edu/video/maLookVideoTracking/${videoid}`,
method: "get"
})
}
/**
* jiandaoyun路径学习状态
*/
// 获取jiandaoyun路径学习状态
export function getNode_jiandaoyun() {
return request({
url: '/v1/edu/guide/jiandaoyun/getNode',
method: "get",
})
}
// 添加jiandaoyun路径学习状态
export function updateNode_jiandaoyun(params) {
return request({
url: '/v1/edu/guide/jiandaoyun/updateNode',
method: "post",
params
})
}
// 添加jiandaoyun路径学习状态
export function luckDraw_jiandaoyun() {
return request({
url: '/v1/edu/guide/jiandaoyun/luckDraw',
method: "get",
})
}
// 获取完成的学员
export function getStudentList_jiandaoyun() {
return request({
url: '/v1/edu/guide/jiandaoyun/getStudentList',
method: "get",
})
}

BIN
src/assets/b1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
src/assets/banenr.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

BIN
src/assets/citybg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 KiB

BIN
src/assets/class/classtop.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

BIN
src/assets/class/zip.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

1
src/assets/class/zip.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1614861883820" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9339" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M73.222911 73.222911h877.554178c40.347318 0 73.222911 32.875593 73.222911 73.222912v219.295147H0V146.445823c0-40.720905 32.875593-73.222911 73.222911-73.222912z" fill="#00C9FC" p-id="9340"></path><path d="M0 365.74097h1024v292.51806H0V365.74097z" fill="#FF5056" p-id="9341"></path><path d="M0 658.25903h1024v219.295147c0 40.347318-32.875593 73.222911-73.222911 73.222912H73.222911C32.875593 950.777089 0 918.275082 0 877.554177v-219.295147z" fill="#5ED300" p-id="9342"></path><path d="M365.74097 73.222911h292.51806v877.554178H365.74097V73.222911z" fill="#FFAB00" p-id="9343"></path><path d="M621.647574 643.689165h-219.295148c-32.12842 0-58.27946-26.15104-58.27946-58.279461v-146.445822c0-32.12842 26.15104-58.27946 58.27946-58.27946h219.295148c32.12842 0 58.27946 26.15104 58.27946 58.27946v146.072236c0.373586 32.502007-25.777453 58.653046-58.27946 58.653047z m-219.295148-219.295148c-8.218898 0-14.569865 6.724553-14.569865 14.569865v146.072236c0 8.218898 6.724553 14.569865 14.569865 14.569865h219.295148c8.218898 0 14.569865-6.724553 14.569865-14.569865v-146.072236c0-8.218898-6.724553-14.569865-14.569865-14.569865h-219.295148z" fill="#FFFFFF" p-id="9344"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

569
src/assets/css/base.css

@ -0,0 +1,569 @@
body,
button,
html,
input,
select,
textarea {
font-family: 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',
'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
}
body {
margin: 0;
padding: 0;
}
img {
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
}
li,
ol,
ul {
list-style: none;
}
i {
font-style: normal;
}
blockquote,
q {
quotes: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
h1,
h2,
h3,
h4,
h5 {
font-weight: 500;
}
a:focus {
outline: none;
-moz-outline: none;
}
em {
font-style: normal;
}
a {
color: #333;
text-decoration: none;
}
a:hover {
color: #0082fc;
}
.w1200 {
width: 1200px;
margin: 0 auto;
}
.dn {
display: none;
}
/* 垂直居中 */
.flex-1 {
display: flex;
align-items: center;
}
/* 垂直平均分布 */
.flex-2 {
display: flex;
justify-content: space-around;
flex-direction: column;
}
/* 水平两端对齐 */
.flex-3 {
display: flex;
justify-content: space-between;
}
/* 水平居中 */
.flex-4 {
display: flex;
justify-content: center;
align-items: center;
}
/* 垂直、水平居中 */
.flex-5 {
display: flex;
justify-content: space-around;
flex-direction: column;
align-items: center;
}
/* 水平平均分布 */
.flex-6 {
display: flex;
justify-content: space-between;
align-items: center;
flex-direction: row;
}
/* 文字居中 */
.font-center {
text-align: center;
}
.half-width {
width: 47%;
}
.mlf12 {
margin-left: 12px;
}
.mt20 {
margin-top: 20px;
}
.mt12 {
margin-top: 12px;
}
.mb4 {
margin-bottom: 4px;
}
.mb10 {
margin-bottom: 10px;
}
.mb12 {
margin-bottom: 12px;
}
.mb16 {
margin-bottom: 16px;
}
.mb20 {
margin-bottom: 20px;
}
.btn-008 {
background: #0082fc;
border-radius: 8px;
color: #fff;
text-align: center;
cursor: pointer;
}
.btn-008-big {
padding: 15px 46px;
}
.btn-008:hover {
color: #fff;
background: #0075df;
}
.btn-fff {
background: #fff;
border-radius: 8px !important;
border: 1px solid #0082fc !important;
color: #0082fc !important;
text-align: center !important;
box-sizing: border-box !important;
cursor: pointer !important;
}
.btn-fff:hover {
background: #d5ebff;
}
.btn-jdy {
background: #fff;
border-radius: 8px;
border: 1px solid #0db3a6;
color: #0db3a6;
text-align: center;
box-sizing: border-box;
cursor: pointer;
}
.btn-jdy:hover {
color: #0db3a6;
background: #e7f7f6;
}
.btn-ddd {
background: #fff;
border-radius: 8px;
border: 1px solid #ddd;
color: #617288;
text-align: center;
box-sizing: border-box;
cursor: no-drop;
}
.br-3 {
border-radius: 3px;
}
.br-4 {
border-radius: 4px;
}
.br-5 {
border-radius: 5px;
}
.br-6 {
border-radius: 6px;
}
.br-8 {
border-radius: 8px;
}
.fr-btn {
background: #0082fc;
border-color: #0082fc;
color: #fff;
border-radius: 4px;
padding: 6px 20px;
font-size: 14px;
transition: all 0.3s;
}
.fr-btn:focus,
.fr-btn:hover {
color: #fff;
background: #0066ff;
border-color: #0066ff;
}
.fr-btn.big {
padding: 10px 30px;
font-size: 16px;
border-radius: 4px;
}
.fr-btn-jdy {
background: #0db3a6;
border-color: #0db3a6;
color: #fff;
border-radius: 4px;
padding: 6px 20px;
font-size: 14px;
transition: all 0.3s;
}
.fr-btn-jdy:focus,
.fr-btn-jdy:hover {
color: #fff;
background: #56cac1;
border-color: #56cac1;
}
.fw500 {
font-weight: 500;
}
.fw600 {
font-weight: 600;
}
.f12 {
font-size: 12px;
}
.f13 {
font-size: 13px;
}
.f14 {
font-size: 14px;
}
.f15 {
font-size: 15px;
}
.f16 {
font-size: 16px;
}
.f18 {
font-size: 18px;
}
.f20 {
font-size: 20px;
}
.f24 {
font-size: 24px;
}
.f32 {
font-size: 32px;
}
.ff12 {
font-size: 12px !important;
}
.ff13 {
font-size: 13px !important;
}
.ff14 {
font-size: 14px !important;
}
.ff15 {
font-size: 15px !important;
}
.ff16 {
font-size: 16px !important;
}
.ff18 {
font-size: 18px !important;
}
.ff20 {
font-size: 20px !important;
}
.ff36 {
font-size: 36px !important;
}
.lht17 {
lint-height: 17px;
}
.lht18 {
line-height: 18px;
}
.lht20 {
line-height: 20px;
}
.lht22 {
line-height: 22px;
}
.lht24 {
line-height: 24px;
}
.col008 {
color: #0082fc;
}
.col-jdy {
color: #0db3a6;
}
.col-jdy:hover {
text-decoration: underline;
color: #0db3a6;
}
.col849 {
color: #8496ab;
}
.col617 {
color: #617288;
}
.col7e8 {
color: #7e8fa3;
}
.colb3c {
color: #b3c1d3;
}
.colfff {
color: #fff;
}
.colff3 {
color: #ff3d23;
}
.colf26 {
color: #f26c4f;
}
.col28c {
color: #28c346;
}
.col27c {
color: #27c346;
}
.col333 {
color: #333;
}
.col000 {
color: #000;
}
.mt24 {
margin-top: 24px;
}
.mrt10 {
margin-right: 10px;
}
.mlf10 {
margin-left: 10px;
}
.mt10 {
margin-top: 10px;
}
.pt10 {
padding-top: 10px;
}
.col-war {
color: #e6a23c;
}
.col-err {
color: #f56c6c;
}
.frbtn {
border: 1px solid #0082fc;
color: #0082fc;
}
.frbtn:focus,
.frbtn:hover {
border: 1px solid #0082fc;
color: #fff;
background-color: #0082fc;
}
.ico-lf {
margin-right: 6px;
}
.ico-rt {
margin-left: 6px;
}
.txt-c {
text-align: center;
}
.txt-r {
text-align: right;
}
.txt-l {
text-align: left;
}
.cur-p {
cursor: pointer;
}
.hide-txt {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hide-txt2 {
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.hide-txt3 {
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}
.el-scrollbar__bar.is-vertical {
width: 8px;
}
.el-scrollbar__thumb {
background-color: #d2dce7;
}
.el-scrollbar__thumb:hover {
background-color: #adbfd3;
}
.el-dialog {
border-radius: 8px;
}
.el-dialog__headerbtn {
font-size: 20px;
color: #617288;
}
.msg-box {
width: 800px;
margin: 50px auto 0 auto;
}
/* el 分页样式优化 */
.el-pagination .btn-next .el-icon,
.el-pagination .btn-prev .el-icon {
display: inline-block;
}
.el-dialog__close {
font-size: 20px;
}
.btn-ff7-ff4 {
width: 100%;
height: 100%;
background: linear-gradient(270deg, #ff7c6b 0%, #ff4b72 100%);
border-radius: 8px;
color: #fff;
transition: all 0.2s;
border: none;
cursor: pointer;
}
.btn-ff7-ff4:hover {
background: linear-gradient(
-45deg,
#eb443e,
#f12f59,
#fc9550,
#ff4b72,
#eb443e
);
background-size: 400% 400%;
animation: cpgradientBG 4s ease infinite;
}
.btn-ff7-ff4:active {
width: 96% !important;
height: 96% !important;
}
@keyframes cpgradientBG {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}

36
src/assets/css/m.css

@ -0,0 +1,36 @@
@media screen and (max-width: 1200px) {
.mainbox {
width: 100%;
padding: 0 20px;
}
.w1200 {
width: 100%;
}
/* 头部 */
.header,
.edu-nav-box {
display: none !important;
}
.edu-nav-box-m,
.ad-m {
display: block;
}
/* end 头部 */
.m-dn {
display: none !important;
}
.m-db {
display: block !important;
}
}
@media screen and (max-width: 800px) {}
:root {
--van-red: #0082fc;
}

142
src/assets/css/style.css

@ -0,0 +1,142 @@
.mainbox {
width: 1200px;
margin: 0 auto;
}
.lf-box {
width: 800px;
}
.rt-box .rtbox {
width: 358px;
background: #fff;
border-radius: 8px;
border: 1px solid #ceddf2;
padding: 24px 32px;
}
.dateFormat {
text-align: center;
}
.dateFormat em {
font-style: normal;
padding: 0 14px 0 4px;
color: #617288;
}
.dateFormat em.pr-0 {
padding-right: 0;
}
.dateFormat i {
padding-right: 6px;
}
.dateFormat big {
color: #ff3c23;
}
.footer {
color: #8a9099;
font-size: 12px;
line-height: 18px;
background: #191e28;
padding: 24px 0;
margin-top: 40px;
}
.footer a {
color: #8a9099;
text-decoration: none;
}
.footer a:hover {
color: #fff;
}
.pipe {
margin: 0 6px;
color: #8a9099;
}
.myel-pg {
padding: 30px 0 10px;
text-align: center;
}
.myel-pg-lf {
padding: 30px 0 10px;
}
.el-btn {
background: #0082fc;
border-color: #0082fc;
color: #fff;
border-radius: 4px;
padding: 6px 20px;
font-size: 14px;
transition: all 0.3s;
}
.el-btn:focus,
.el-btn:hover {
background: #0066ff;
border-color: #0066ff;
color: #fff;
}
.el-btn.medium {
padding: 10px 20px;
font-size: 14px;
border-radius: 4px;
}
.el-button--primary {
color: #fff;
background-color: #0082fc;
border-color: #0082fc;
border-radius: 4px;
}
.el-button--primary:focus,
.el-button--primary:hover {
background: #0066ff;
border-color: #0066ff;
color: #fff;
}
/* dialog对话框- 垂直居中布局 */
/*
.el-overlay {
display: flex;
align-items: center;
justify-content: space-around;
}
.el-dialog{
margin: 0 !important;
}
*/
.el-overlay {
text-align: center;
}
.el-overlay::after {
content: "";
display: inline-block;
height: 100%;
width: 0;
vertical-align: middle;
}
.el-dialog {
margin: 0 !important;
display: inline-block;
vertical-align: middle;
}
.el-popconfirm__main {
padding: 10px 0;
}
.mybig-btn{
font-size: 16px;
padding: 10px 28px;
}

46
src/assets/geo/china.js

File diff suppressed because one or more lines are too long

1
src/assets/geo/chinaMap.json

File diff suppressed because one or more lines are too long

41
src/assets/geo/country.json

File diff suppressed because one or more lines are too long

223
src/assets/geo/effectScatter-bmap.html

@ -0,0 +1,223 @@
<!DOCTYPE html>
<html style="height: 100%">
<head>
<meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
<div id="container" style="height: 100%"></div>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/dist/echarts.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-gl@1/dist/echarts-gl.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-stat@1/dist/ecStat.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/dist/extension/dataTool.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/map/js/china.js"></script>
<!-- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/map/js/world.js"></script> -->
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=xfhhaTThl11qYVrqLZii6w8qE5ggnhrY&__ec_v__=20190126"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/dist/extension/bmap.min.js"></script>
<script type="text/javascript">
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
var app = {};
option = null;
var data = [
{name: '海门', value: 9},
{name: '鄂尔多斯', value: 12},
{name: '招远', value: 12}
];
var geoCoordMap = {
'海门':[121.15,31.89],
'鄂尔多斯':[109.781327,39.608266],
'招远':[120.38,37.35]
};
var convertData = function (data) {
var res = [];
for (var i = 0; i < data.length; i++) {
var geoCoord = geoCoordMap[data[i].name];
if (geoCoord) {
res.push({
name: data[i].name,
value: geoCoord.concat(data[i].value)
});
}
}
return res;
};
option = {
title: {
text: '全国主要城市空气质量 - 百度地图',
subtext: 'data from PM25.in',
sublink: 'http://www.pm25.in',
left: 'center'
},
tooltip : {
trigger: 'item'
},
bmap: {
center: [104.114129, 37.550339],
zoom: 5,
roam: true,
mapStyle: {
styleJson: [{
'featureType': 'water',
'elementType': 'all',
'stylers': {
'color': '#d1d1d1'
}
}, {
'featureType': 'land',
'elementType': 'all',
'stylers': {
'color': '#f3f3f3'
}
}, {
'featureType': 'railway',
'elementType': 'all',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'highway',
'elementType': 'all',
'stylers': {
'color': '#fdfdfd'
}
}, {
'featureType': 'highway',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'arterial',
'elementType': 'geometry',
'stylers': {
'color': '#fefefe'
}
}, {
'featureType': 'arterial',
'elementType': 'geometry.fill',
'stylers': {
'color': '#fefefe'
}
}, {
'featureType': 'poi',
'elementType': 'all',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'green',
'elementType': 'all',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'subway',
'elementType': 'all',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'manmade',
'elementType': 'all',
'stylers': {
'color': '#d1d1d1'
}
}, {
'featureType': 'local',
'elementType': 'all',
'stylers': {
'color': '#d1d1d1'
}
}, {
'featureType': 'arterial',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'boundary',
'elementType': 'all',
'stylers': {
'color': '#fefefe'
}
}, {
'featureType': 'building',
'elementType': 'all',
'stylers': {
'color': '#d1d1d1'
}
}, {
'featureType': 'label',
'elementType': 'labels.text.fill',
'stylers': {
'color': '#999999'
}
}]
}
},
series : [
{
name: 'pm2.5',
type: 'scatter',
coordinateSystem: 'bmap',
data: convertData(data),
symbolSize: function (val) {
return val[2] / 10;
},
encode: {
value: 2
},
label: {
formatter: '{b}',
position: 'right',
show: false
},
itemStyle: {
color: 'purple'
},
emphasis: {
label: {
show: true
}
}
},
{
name: 'Top 5',
type: 'effectScatter',
coordinateSystem: 'bmap',
data: convertData(data.sort(function (a, b) {
return b.value - a.value;
}).slice(0, 6)),
symbolSize: function (val) {
return val[2] / 10;
},
encode: {
value: 2
},
showEffectOn: 'render',
rippleEffect: {
brushType: 'stroke'
},
hoverAnimation: true,
label: {
formatter: '{b}',
position: 'right',
show: true
},
itemStyle: {
color: 'purple',
shadowBlur: 10,
shadowColor: '#333'
},
zlevel: 1
}
]
};;
if (option && typeof option === "object") {
myChart.setOption(option, true);
}
</script>
</body>
</html>

41
src/assets/geo/jiuduanMap.json

File diff suppressed because one or more lines are too long

1
src/assets/geo/newmap.json

File diff suppressed because one or more lines are too long

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save