index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. <template>
  2. <div class="client-platform-page client-resources-page">
  3. <!-- 题库资源页 banner栏 -->
  4. <div class="client-platform-banner">
  5. <div :style="{backgroundImage: `url(${require(`~/static/images/client/resources/resources-banner-background.jpg`)})`}" class="client-platform-banner"></div>
  6. </div>
  7. <!-- 企业通用岗位培训方案 -->
  8. <div class="client-container">
  9. <h4 class="client-title">企业通用岗位培训方案</h4>
  10. <ul class="train-scheme-list">
  11. <li><div><i></i><span>职业素养</span></div></li>
  12. <li><div><i></i><span>领导能力</span></div></li>
  13. <li><div><i></i><span>人力资源</span></div></li>
  14. <li><div><i></i><span>市场营销</span></div></li>
  15. <li><div><i></i><span>行政管理</span></div></li>
  16. <li><div><i></i><span>财务管理</span></div></li>
  17. <li><div><i></i><span>客服服务</span></div></li>
  18. <li><div><i></i><span>产品运营</span></div></li>
  19. </ul>
  20. </div>
  21. <div class="platform-products-services">
  22. <ul>
  23. <li>
  24. <div class="client-container">
  25. <div class="products-services-box products-contrary-box">
  26. <h4 class="client-title">为企业培训打造学习矩阵</h4>
  27. <img :src="trainAdvantagesImg1" alt="完善的课程学习体系" />
  28. <div class="products-services-content">
  29. <p>
  30. 课程总数近<span class="blue-big-size">5000门</span><br>
  31. 涵盖<span class="blue-big-size">2000个</span>知识要点<br>
  32. 提供<span class="blue-big-size">8大通用岗位</span>培训方案<br>
  33. 课程资源<span class="blue-big-size">每月持续更新</span><br>
  34. </p>
  35. <div>
  36. <a class="client-default-Btn" @click="applyFun" >申请方案</a>
  37. <span rel="nofollow" class="client-default-white-Btn" @click="goIntroductionPage">联系我们</span>
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. </li>
  43. </ul>
  44. </div>
  45. <!-- 情景动画 -->
  46. <div class="course-learn-box">
  47. <h4 class="client-title">课程内容形式多样</h4>
  48. <div class="client-container tc">
  49. <ul class="learn-box-list">
  50. <li>
  51. <a href="https://spdb.mtavip.com/sv/4f2e3958-17880e826df/4f2e3958-17880e826df.mp4"></a>
  52. <div>
  53. <span><img :src="courseVideoImg19" alt="FLASH动画课程"><i @click="playVideo(0)"></i></span>
  54. <p>FLASH动画课程</p>
  55. <p class="course-explain-black">主要以图文动画的形式表现教学者的作用和教与学之间的关系,从而改变学习的本质</p>
  56. </div>
  57. </li>
  58. <li>
  59. <a href="https://spdb.mtavip.com/65615d29a5da4478b8d4ebfd6810d2da/65ab43fa5fb942aab2af981c2f7ea5c7-da005714eae365940692db31fbf6e9b8-fd.mp4"></a>
  60. <div>
  61. <span><img :src="courseVideoImg8" alt="视频课程"><i @click="playVideo(1)"></i></span>
  62. <p>视频课程</p>
  63. <p class="course-explain-black">把教师视频与PowerPoint课件一并摄制下来,生成为视频课件</p>
  64. </div>
  65. </li>
  66. <li>
  67. <a href="https://1251882694.vod2.myqcloud.com/51d57535vodtransgzp1251882694/9ce0a1a35285890792886070899/v.f30.mp4"></a>
  68. <div><span><img :src="courseVideoImg6" alt="名师讲堂"><i @click="playVideo(2)"></i></span>
  69. <p>名师讲堂</p>
  70. <p class="course-explain-black">各行各业讲师汇聚一堂,为不同专属领域打造明星级课堂</p>
  71. </div>
  72. </li>
  73. </ul>
  74. <div class="platform-products-services">
  75. <a class="client-default-Btn" @click="applyFun" >申请方案</a>
  76. <span rel="nofollow" class="client-default-white-Btn" @click="goIntroductionPage">联系我们</span>
  77. </div>
  78. </div>
  79. </div>
  80. <!-- 新闻资讯 -->
  81. <div class="platform-news-information">
  82. <div class="client-container">
  83. <h4 class="client-title">新闻资讯</h4>
  84. <ul>
  85. <li style="font-size: 16px" v-for="(item, index) in topCarousels">
  86. <div>
  87. <img :src="item.pic" alt="新闻资讯" />
  88. <h4 @click="checkInfo(item)">{{ item.title }}</h4>
  89. <span>发布时间:{{item.yyyy }}-{{ item.mmdd }}</span>
  90. <p>{{ item.intro }}</p>
  91. </div>
  92. </li>
  93. </ul>
  94. </div>
  95. </div>
  96. <!-- 视频播放弹窗 -->
  97. <el-dialog
  98. :title="title"
  99. :visible.sync="videoDialogFlag"
  100. @close="closeVideoDialog"
  101. class="course-video-dialog"
  102. center>
  103. <video controls :src="source" class="course-video-box"></video>
  104. <p>{{footerText}}</p>
  105. </el-dialog>
  106. <!-- 申请方案弹窗 -->
  107. <el-dialog
  108. :close-on-click-modal="false"
  109. :visible.sync="telDl"
  110. @close="delDlClose"
  111. class="application-scheme-dialog"
  112. center>
  113. <i></i>
  114. <p>免费获得课程开发解决方案</p>
  115. <el-form :model="telChangeDate" status-icon :rules="telRules" ref="ruleTelForm" class="application-scheme-form">
  116. <el-form-item prop="tel">
  117. <el-input v-model="telChangeDate.tel" placeholder="请输入手机号" class="dialog-input-tel"></el-input>
  118. </el-form-item>
  119. <div id="your-dom-id" class="nc-container"></div>
  120. <el-form-item prop="verification">
  121. <div class="verification">
  122. <el-input v-model="telChangeDate.verification" placeholder="请输入验证码" class="dialog-input-code"></el-input>
  123. <el-button @click="checkVerification" :disabled="btnTextDisabled" class="dialog-code-btn">{{btnText}}</el-button>
  124. </div>
  125. </el-form-item>
  126. </el-form>
  127. <div class="application-scheme-btn" @click="dialogSave">申请方案</div>
  128. <span>免费热线:400-052-2130</span><a href="https://p.qiao.baidu.com/cps/chat?siteId=17930048&userId=40179606&siteToken=e767a987c8404575246ab0084fb2c9bd" target="_blank">在线客服</a>
  129. </el-dialog>
  130. </div>
  131. </template>
  132. <script>
  133. export default {
  134. name: 'resources',
  135. layout: 'templateB',
  136. async asyncData({ $axios,store }) {
  137. // 设置选中菜单
  138. store.commit('setActiveNav', '/resources');
  139. let [res1, res2] = await Promise.all([
  140. await $axios.$post(`/home/banner/list`, { 'code': 3 }).then(res => {
  141. return res;
  142. }),
  143. await $axios.$post(`/home/news/carousel`, { 'newsClassifyId': 0,'keyword':'培训' }).then(res => {
  144. return res;
  145. })
  146. ]);
  147. return {
  148. bannerList: res1.data.data||[],
  149. topCarousels: res2.data.data||[],
  150. };
  151. },
  152. data() {
  153. return {
  154. trainAdvantagesImg1: require(`~/static/images/client/resources/train-scheme-img.png`),
  155. courseVideoImg19: require(`~/static/images/client/course/course-video-img19.png`),
  156. courseVideoImg8: require(`~/static/images/client/course/course-video-img8.png`),
  157. courseVideoImg6: require(`~/static/images/client/course/course-video-img6.png`),
  158. videoArray:[
  159. {
  160. url:'https://spdb.mtavip.com/sv/4f2e3958-17880e826df/4f2e3958-17880e826df.mp4',
  161. fotterText:'主要以图文动画的形式表现教学者的作用和教与学之间的关系,从而改变学习的本质',
  162. title:'FLASH动画课程',
  163. },
  164. {
  165. url:'https://spdb.mtavip.com/65615d29a5da4478b8d4ebfd6810d2da/65ab43fa5fb942aab2af981c2f7ea5c7-da005714eae365940692db31fbf6e9b8-fd.mp4',
  166. fotterText:'把教师视频与PowerPoint课件一并摄制下来,生成为视频课件',
  167. title:'视频课程',
  168. },
  169. {
  170. url:'https://spdb.mtavip.com/customerTrans/87321d8a03805711940e85451d6bcb0a/359ee794-17470899bcf-0006-732a-c93-687b7.mp4',
  171. fotterText:'各行各业讲师汇聚一堂,为不同专属领域打造明星级课堂',
  172. title:'名师讲堂',
  173. },
  174. ],
  175. videoDialogFlag:false,
  176. source:'',
  177. footerText:'',
  178. title:'',
  179. btnTextDisabled: false,
  180. telDl: false,
  181. btnText: '获取验证码',
  182. countdown: 60, // 60秒倒计时
  183. sliderData: {},
  184. appKey: 'FFFF0N00000000007EC0',
  185. telChangeDate: {},
  186. telRules: {
  187. tel: [
  188. { trigger: 'blur', required: true, message: '请输入手机号' },
  189. ],
  190. verification: [
  191. { trigger: 'blur', required: true, message: '请输入验证码' },
  192. ],
  193. },
  194. };
  195. },
  196. head(){
  197. return {
  198. SystemWidthFlag:false,// 判断是否是手机端,默认为false,默认为PC端
  199. title: '课程资源_学习平台_精品课程资源开发建设_学习平台开发建设',
  200. meta: [
  201. {
  202. name: 'keywords',
  203. content: '学习平台开发,学习平台建设'
  204. },
  205. {
  206. name:'description',
  207. content:'大连麦塔软件服务有限公司凭借成熟的项目研发和管理经验,致力于为客户提供全方位的在线教育解决方案,实现移动化、平台化、知识化、智能化学习管理模式,让学习变得更轻松。“共同成长、相伴一生”是麦塔软件始终不渝的核心价值观。'
  208. }
  209. ],
  210. }
  211. },
  212. computed: {},
  213. methods: {
  214. // 判断是否为移动端
  215. getSystemWidth(){
  216. var browserWidth=document.documentElement.clientWidth;
  217. if(browserWidth <= 768){
  218. this.SystemWidthFlag = true;
  219. }else{
  220. this.SystemWidthFlag = false;
  221. }
  222. },
  223. // 滑块
  224. sliderFun() {
  225. const nc_token = [this.appKey, (new Date()).getTime(), Math.random()].join(':');
  226. console.log(nc_token);
  227. const NC_Opt = {
  228. //声明滑动验证需要渲染的目标元素ID。
  229. renderTo: '#your-dom-id',
  230. //应用类型标识。它和使用场景标识(scene字段)一起决定了滑动验证的业务场景与后端对应使用的策略模型。您可以在人机验证控制台的配置管理页签找到对应的appkey字段值,请务必正确填写。
  231. appkey: this.appKey,
  232. //使用场景标识。它和应用类型标识(appkey字段)一起决定了滑动验证的业务场景与后端对应使用的策略模型。您可以在人机验证控制台的配置管理页签找到对应的scene值,请务必正确填写。
  233. scene: 'nc_message',
  234. //滑动验证码的主键,请勿将该字段定义为固定值。确保每个用户每次打开页面时,其token值都是不同的。系统默认的格式为:”您的appkey”+”时间戳”+”随机数”。
  235. token: nc_token,
  236. //滑动条的宽度。
  237. customWidth: 300,
  238. //业务键字段,可为空。为便于线上问题的排查,建议您按照线上问题定位文档中推荐的方法配置该字段值。
  239. trans: { 'key1': 'code0' },
  240. //通过Dom的ID属性自动填写trans业务键,可为空。建议您按照线上问题定位文档中推荐的方法配置该字段值。
  241. elementID: ['usernameID'],
  242. //是否自定义配置底层采集组件。如无特殊场景,请使用默认值(0),即不自定义配置底层采集组件。
  243. is_Opt: 0,
  244. //语言。PC端Web页面场景默认支持18国语言,详细配置方法请参见自定义文案与多语言文档。
  245. language: 'cn',
  246. //是否启用。一般情况,保持默认值(true)即可。
  247. isEnabled: true,
  248. //内部网络请求的超时时间。一般情况建议保持默认值(3000ms)。
  249. timeout: 3000,
  250. //允许服务器超时重复次数,默认5次。超过重复次数后将触发报错。
  251. times: 5,
  252. //用于自定义滑动验证各项请求的接口地址。一般情况,请勿配置该参数。
  253. apimap: {
  254. // 'analyze': '//a.com/nocaptcha/analyze.jsonp',
  255. // 'get_captcha': '//b.com/get_captcha/ver3',
  256. // 'get_captcha': '//pin3.aliyun.com/get_captcha/ver3'
  257. // 'get_img': '//c.com/get_img',
  258. // 'checkcode': '//d.com/captcha/checkcode.jsonp',
  259. // 'umid_Url': '//e.com/security/umscript/3.2.1/um.js',
  260. // 'uab_Url': '//aeu.alicdn.com/js/uac/909.js',
  261. // 'umid_serUrl': 'https://g.com/service/um.json'
  262. },
  263. //前端滑动验证通过时会触发该回调参数。您可以在该回调参数中将请求标识(token)、会话ID(sessionid)、签名串(sig)字段记录下来,随业务请求一同发送至您的服务端调用验签。
  264. callback: (data) => {
  265. this.sliderData = Object.assign({}, data, {
  266. appkey: NC_Opt.appkey,
  267. scene: NC_Opt.scene,
  268. });
  269. console.log( this.sliderData);
  270. },
  271. };
  272. let date11 = () => {
  273. let _date = new Date();
  274. let year = _date.getFullYear().toString();
  275. let month = _date.getMonth().toString();
  276. let day = _date.getDate().toString();
  277. let a = _date.getHours().toString();
  278. let b = _date.getMinutes().toString();
  279. let c = _date.getSeconds().toString();
  280. return year + month + day + a + b + c;
  281. };
  282. let c = date11();
  283. const scripts = [
  284. `https://g.alicdn.com/sd/ncpc/nc.js?t=${c}`,
  285. ];
  286. this.seriesLoadScripts(scripts, function () {
  287. var nc = new noCaptcha(NC_Opt);
  288. nc.upLang('cn', {
  289. _startTEXT: '请按住滑块,拖动到最右边',
  290. _yesTEXT: '验证通过',
  291. _error300: '哎呀,出错了,点击<a href="javascript:__nc.reset()">刷新</a>再来一次',
  292. _errorNetwork: '网络不给力,请<a href="javascript:__nc.reset()">点击刷新</a>',
  293. });
  294. });
  295. },
  296. applyFun() {
  297. this.getSystemWidth();
  298. if(this.SystemWidthFlag){
  299. this.$router.push({ name: 'CourseDevelopPhone', query: {pageName: 'resources',} });
  300. }else {
  301. this.telDl = true;
  302. this.sliderFun();
  303. }
  304. },
  305. delDlClose(){
  306. this.telDl =false;
  307. this.countdown = -1;
  308. this.$refs.ruleTelForm.resetFields();
  309. __nc.reset();
  310. },
  311. /**
  312. * 串联加载指定的脚本
  313. * 串联加载[异步]逐个加载,每个加载完成后加载下一个
  314. * 全部加载完成后执行回调
  315. * @param array|string 指定的脚本们
  316. * @param function 成功后回调的函数
  317. * @return array 所有生成的脚本元素对象数组
  318. * 异步加载js后运行回调函数callback / scripts 为数组或字符串
  319. */
  320. seriesLoadScripts(scripts, callback) {
  321. if (typeof (scripts) != 'object') {
  322. var scripts = [scripts];
  323. }
  324. var HEAD = document.getElementsByTagName('head').item(0) || document.documentElement;
  325. var s = new Array(), last = scripts.length - 1, recursiveLoad = function (i) { //递归
  326. s[i] = document.createElement('script');
  327. s[i].setAttribute('type', 'text/javascript');
  328. s[i].onload = s[i].onreadystatechange = function () { //Attach handlers for all browsers
  329. if (!/*@cc_on!@*/0 || this.readyState == 'loaded' || this.readyState == 'complete') {
  330. this.onload = this.onreadystatechange = null;
  331. this.parentNode.removeChild(this);
  332. if (i != last) {
  333. recursiveLoad(i + 1);
  334. } else if (typeof (callback) == 'function') {
  335. callback();
  336. }
  337. }
  338. };
  339. s[i].setAttribute('src', scripts[i]);
  340. HEAD.appendChild(s[i]);
  341. };
  342. recursiveLoad(0);
  343. },
  344. dialogSave(){
  345. this.$refs.ruleTelForm.validate((valid) => {
  346. if (valid) {
  347. // 请求后台
  348. const options = {
  349. phone: this.telChangeDate.tel,
  350. code: this.telChangeDate.verification,
  351. };
  352. this.$axios.$post('/develop/add',options).then(res=>{
  353. if (res.code === 0 && res.data) {
  354. this.telDl = false;
  355. this.$message.success('申请成功');
  356. } else {
  357. this.$message.error('申请失败');
  358. }
  359. });
  360. }
  361. });
  362. },
  363. // 倒计时60秒
  364. setTime() {
  365. if (this.countdown === 0) {
  366. this.btnTextDisabled = false;
  367. this.btnText = '免费获取验证码';
  368. this.countdown = 60;
  369. }else if(this.countdown === -1){
  370. this.btnTextDisabled = false;
  371. this.btnText = '获取验证码';
  372. this.countdown = 60;
  373. } else {
  374. this.btnTextDisabled = true;
  375. this.btnText = '重新发送(' + this.countdown + 's)';
  376. this.countdown--;
  377. setTimeout(() => {
  378. this.setTime();
  379. }, 1000);
  380. }
  381. },
  382. // 验证码
  383. checkVerification() {
  384. if (this.sliderData.appkey === undefined) {
  385. this.$message.error('请先通过滑块校验');
  386. return;
  387. }
  388. this.$axios.$post(`/develop/exists`,{ phone: this.telChangeDate.tel}).then(res=>{
  389. if (res.code === 0 && res.data) {
  390. let req = {
  391. 'appkey': this.sliderData.appkey,
  392. 'phone': this.telChangeDate.tel,
  393. 'scene': this.sliderData.scene,
  394. 'sessionid': this.sliderData.csessionid,
  395. 'sig': this.sliderData.sig,
  396. 'token': this.sliderData.token,
  397. 'type': 0,
  398. }
  399. this.$axios.$post('/sendCode',req).then(res=>{
  400. if (res.code === 0 && res.data) {
  401. this.setTime();
  402. }else {
  403. this.$message.error(res.msg||'手机号已存在');
  404. }
  405. })
  406. } else {
  407. this.$message.error(res.msg||'手机号已存在');
  408. return false;
  409. }
  410. })
  411. },
  412. playVideo(index){
  413. this.videoDialogFlag = true
  414. this.source = this.videoArray[index].url
  415. this.footerText = this.videoArray[index].fotterText
  416. this.title = this.videoArray[index].title
  417. },
  418. closeVideoDialog(){
  419. this.videoDialogFlag = false;
  420. this.source = '';
  421. this.footerText = '';
  422. this.title = '';
  423. },
  424. goIntroductionPage(){
  425. this.$router.push({ name: 'introduction' });
  426. },
  427. checkInfo(data) {
  428. const opt = {
  429. id: data.code,
  430. };
  431. this.$router.push({ name: 'news-id', params: opt });
  432. },
  433. clickBanner(data){
  434. if(data){
  435. window.open(data)
  436. }
  437. },
  438. },
  439. created() {
  440. },
  441. mounted() {
  442. this.getSystemWidth();
  443. },
  444. beforeDestroy() {
  445. },
  446. };
  447. </script>
  448. <style>
  449. </style>