// pages/member/course/CourseDetail/CourseDetail.js import Dialog from "../../../dist/dialog/dialog"; import polyvLive from "../../../utils/polyvlive.js"; var CryptoJS = require("../../../utils/CryptoJS.js"); var yz_pay = require('../../../mycomponent/yz_pay/yz_pay'); var app = getApp(); Component({ behaviors: [yz_pay], properties: { // 属性值可以在组件使用时指定 prop_goods_info: { type: Object, //父组件的商品详情数据 value: {}, }, goodsId: { type: Number, }, goodsType: { type: String, }, mark: { type: String, }, mark_id: { type: String, }, ipnonexbol: { type: null, }, is_open: { type: null, }, }, observers: { is_open: function (num) { this.setData({ questionnaire_is_open: num == "close" ? false : "", }); }, }, /** * 页面的初始数据 */ data: { is_try_time: null, is_questionnaire_time: null, // 问卷调查 questionnaire_is_open: false, language: "", goods_id: "", is_show: true, is_vshow: false, isVideo: true, isLook: true, is_update: false, is_buy: false, showPopup: false, rewardMoneyBtn: false, actionSheetShow: false, rewardBtnShow: false, // 打赏金额 rewardMoney: "", goodTit: "", goodPrice: "", chapterNum: "", teacherImg: "", teacherName: "", goodsContent: "", chapterList: [], article_content: "", courseShare: {}, courseData: {}, codeUrl: "", vedioSrc: "", coverImg: "", active: "", // 章节id chapter_id: "", // 课程id courseId: "", pushGoodList: [], // pushGoodList: [{ // "id": 93, // "goods_id": 206, // "lecturer_id": 3, // "title": "3333", // "thumb": "https://dev5.yunzshop.com/attachment/images/2/2018/08/L8Ia553RrZH83rEiLocYIY3L9o5885.jpg", // "price": "100.00", // "has_one_lecturer": { // "id": 3, // "real_name": "\u6d4b\u8bd5", // "mobile": "13800138000" // }, // "course_chapter_num": 1 // }], actionSheetItems: [], isLoding: false, activeNames: ["1"], //章节列表 chapterdigList: [], // 价格权限 vip_level_status: {}, islive: false, video_err: false, is_playLive: false, live: false, videoErr: true, // islive:false, ios_virtual_pay: false, point_goods: "", integral: "积分", show1: false, posterShow: false, styleSetOptions: {}, //后台基础设置-样式设置 countDownTime: null, timeData: {}, iscCountDownFinish: false, //课程有效期是否到了 HasBuyPermissions: false //是否有购买权限,true则不可以下单 }, lifetimes: { attached(e) { let language = wx.getStorageSync("langIndex"); this.setData({ language: language.en }); // 在组件实例进入页面节点树时执行 this.setData({ goods_id: this.data.goodsId, }); // this.getQrCode() this._getData(); this.footSet(); try { var value = wx.getStorageSync("ios_virtual_pay"); if (value) { this.setData({ ios_virtual_pay: value, }); } } catch (e) { console.log(e); } try { let name = wx.getStorageSync("yz_basic_info"); this.setData({ shopName: name.home.mailInfo.name, }); } catch (err) { console.log(err); } if (this.data.prop_goods_info.plugin && this.data.prop_goods_info.plugin.point_goods) { this.setData({ point_goods: this.data.prop_goods_info.plugin.point_goods, }); } // console.log(this.data.point_goods, "point_goods"); wx.setStorageSync("GoddsShareImg", this.data.prop_goods_info.get_goods.thumb); const integral = wx.getStorageSync("integral"); if (integral) { this.setData({ integral: integral, }); } }, detached() { this.data.is_try_time = null; this.data.is_questionnaire_time = null; clearTimeout(this.data.is_try_time); clearTimeout(this.data.is_questionnaire_time); // 在组件实例被从页面节点树移除时执行 }, }, pageLifetimes: { hide: function () { this.data.is_try_time = null; this.data.is_questionnaire_time = null; clearTimeout(this.data.is_try_time); clearTimeout(this.data.is_questionnaire_time); }, }, methods: { handleContact(e){ let _url = e.currentTarget.dataset.url; if(_url){ wx.navigateTo({ url: _url, fail:function(err){ app.tips('客服路径错误'); } }); } }, tapkefu() { this.setData({ show1: true, }); }, callPhone() { wx.makePhoneCall({ phoneNumber: this.data.service_mobile, }); }, closePop() { this.setData({ show1: false, }); }, changeLoading() { this.setData({ isLoding: true, }); }, setPosterShow() { this.setData({ posterShow: !this.data.posterShow }); }, videoErr() { wx.showToast({ title: "视频加载出错了!", icon: "none", duration: 2000, }); this.setData({ videoErr: false, // is_vshow:false, }); }, getQrCode() { var that = this; app._getNetWork({ url: app.getNetAddresss("member.member.getArticleQr"), success: function (res) { if (res.data.result == 1 && !app._isTextEmpty(res.data.data)) { let _data = res.data.data; that.setData({ codeUrl: _data, }); } else { console.error(res); } }, fail: function (res) { console.error(res); }, }); }, secret(string, code, operation) { code = CryptoJS.MD5(code).toString(); var iv = CryptoJS.enc.Utf8.parse(code.substring(0, 16)); var key = CryptoJS.enc.Utf8.parse(code.substring(16)); if (operation) { return CryptoJS.AES.decrypt(string, key, { iv: iv, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8); } return CryptoJS.AES.encrypt(string, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString(); }, // 点击直播请求 addzhibo() { var that = this; app._getNetWork({ url: app.getNetAddresss("plugin.video-demand.api.video-course-goods.get-live-info"), data: { goods_id: that.data.goods_id, }, success: function (res) { if (res.data.result == 1) { if (that.data.islive == true) { wx.showToast({ title: "正在直播", icon: "none", duration: 1000, }); return; } let info = JSON.parse(that.secret(res.data.data, "zoQUA@257ggflNmMppKzcU7QgYyp!tU&h54VNN3u!PAU$8FxBW", true)); that.is_onlive(info.userId, info.channelId); that.setData({ islive: true, }); } else { wx.showToast({ title: res.data.msg, icon: "none", duration: 1000, }); that.setData({ is_update: true, is_buy: true, }); } }, fail: function (res) { console.error(res); }, }); }, // 唤起直播 is_onlive(liveUid, liveVid) { wx.showLoading({ title: "加载直播中", icon: "none", }); const liveVideoContext = wx.createLivePlayerContext("polyvLiveVideo"); this.setData({ islive: true, }); polyvLive.getVideo({ uid: liveUid, vid: liveVid, videoContext: liveVideoContext, success: (videoInfo) => { // set video src and poster console.log(videoInfo); this.setPlayerSrc(videoInfo); }, error: (res) => { console.log(res.error); }, onStartLive: () => { console.log("start live"); wx.hideLoading(); // set latest video src this.setNewPlayerSrc(); }, onApiStatus: (status) => { console.log(status); if (status == "end") { this.setData({ is_playLive: false, islive: false, videoErr: true, is_vshow: true, }); wx.hideLoading(); wx.showToast({ title: "当前无直播", icon: "none", duration: 1000, }); polyvLive.destroy(); } else if (status == "live") { this.setData({ is_playLive: true, }); } }, }); }, // 直播赋值 setPlayerSrc(videoInfo) { this.setData({ video: { src: videoInfo.src, // 如果播放组件为video,只能用videoInfo.src(m3u8地址),如果为live-player则用videoInfo.flvSrc poster: videoInfo.poster, }, is_bisrc: videoInfo.src, }); console.log(videoInfo.src); }, setNewPlayerSrc() { polyvLive.getNewVideo((videoInfo) => { this.setPlayerSrc(videoInfo); }); }, /** * 用户点击右上角分享 */ onShareAppMessage: function (res) { var value = wx.getStorageSync("yz_uid"); var path = ""; if (value) { path = value; } let _title = app._isTextEmpty(this.data.courseShare.share_title) ? this.data.goodTit : this.data.courseShare.share_title; let _link = "/packageA/detail_v2/detail_v2?id=" + this.data.chapter_id + "&mid=" + path; let _imgUrl = app._isTextEmpty(this.data.courseShare.share_thumb) ? this.data.courseData.has_one_goods.thumb : this.data.courseShare.share_thumb; let _desc = this.data.courseShare.share_desc; return { title: _title, desc: _desc, imageUrl: _imgUrl, path: _link, success: function (shareTickets) { console.info(shareTickets + "成功"); // 转发成功 }, fail: function (res) { console.log(res + "失败"); // 转发失败 }, complete: function (res) { // 不管成功失败都会执行 }, }; }, goSurvey() { wx.navigateTo({ url: "/packageE/questionnaire/questions/questions?goods_id=" + this.data.goods_id + "&tag=video", }); }, _getData() { var that = this; // 初次获取数据 app._getNetWork({ url: app.getNetAddresss("plugin.video-demand.api.video-course-goods.get-course-goods-detail"), data: { goods_id: that.data.goods_id, }, success: function (res) { if (res.data.result === 1) { let _data = res.data.data; if (app._isTextEmpty(_data.has_many_dig_chapter) || _data.has_many_dig_chapter.length == 0) { Dialog.alert({ title: "提示", message: "课程已下架!", context: that, }).then(() => { // on close wx.navigateBack({ delta: 1, }); }); return; } else { that.setData({ chapterdigList: _data.has_many_dig_chapter, }); } _data.has_one_goods.content = _data.has_one_goods.content.replace(/ 0 && that.data.chapter_id) { for (let i = 0; i < has_many_dig_chapter[j].has_many_chapter.length; i++) { if (has_many_dig_chapter[j].has_many_chapter[i].id === Number(that.data.chapter_id)) { playCourse = has_many_dig_chapter[j].has_many_chapter[i]; playActive = i; } } } else { playActive = 0; playCourse = has_many_dig_chapter[0].has_many_chapter[0]; } } let goodPrice = ""; if (that.data.point_goods) { goodPrice = that.data.point_goods.point; } else { goodPrice = _data.has_one_goods.price; } let countDownTime = _data.course_expiration_time?app.getTimeDifference(_data.course_expiration_time):null; that.setData({ courseData: _data, rewardBtnShow: _data.is_reward, goodTit: _data.has_one_goods.title, goodPrice: goodPrice, vip_level_status: _data.has_one_goods.vip_level_status, chapterNum: _data.course_chapter_num, teacherImg: _data.has_one_lecturer && _data.has_one_lecturer.has_one_member ? _data.has_one_lecturer.has_one_member.avatar : '', teacherName: _data.has_one_lecturer && _data.has_one_lecturer.real_name||'', goodsContent: _data.has_one_goods.content, chapter_id: playCourse && playCourse.id || 0, isLook: playCourse && playCourse.is_audition || true, courseId: _data.id, pushGoodList: _data.pushGoods, courseShare: _data.has_one_goods.has_one_share, live: _data.live, live_title: _data.live_title, questionnaire_time: _data.questionnaire_time, service_QRcode: _data.shopSet.service_QRcode, service_mobile: _data.shopSet.service_mobile, shopSet: _data.shopSet, plugin_point_name: _data.plugin_point_name ? _data.plugin_point_name : '', styleSetOptions: _data.styleSet, countDownTime: countDownTime, HasBuyPermissions: _data.buyPermissions||false }); let sec = _data.questionnaire_time * 1000; if (_data.questionnaire_is_open) { if (that.data.is_opens == "close") { console.log(that.data.is_opens); } else { that.data.is_questionnaire_time = setTimeout(() => { if (!that.data.is_questionnaire_time) { return; } that.setData({ questionnaire_is_open: _data.questionnaire_is_open, }); }, sec); } } switch (_data.watch) { case 0: // Dialog.alert({ // title: '提示', // message: '请升级会员或者购买课程', // context: that // }).then(() => { // // on close // }) that.setData({ is_update: false, is_buy: false, }); that.videoInit(playActive, playCourse); break; case 1: // 判断是否免费章节 if (playCourse.is_audition == 1) { that.setData({ is_update: false, is_buy: false, is_show: false, is_vshow: true, }); that.videoInit(playActive, playCourse); break; } else if (playCourse.is_audition == 0) { Dialog.alert({ title: "提示", message: "请升级会员或者购买课程", context: that, }).then(() => { // on close }); that.setData({ is_update: true, is_buy: true, }); break; } else { break; } case 2: that.setData({ is_update: false, is_buy: false, }); that.videoInit(playActive, playCourse); break; case 3: case 4: that.setData({ is_update: false, is_buy: false, }); that.videoInit(playActive, playCourse); break; default: break; } wx.setStorageSync("orderErrReturnUrl", _data.mini_not_permit_link);//无权限购买时,下单弹出框确认按钮跳转路径 } else { wx.showToast({ title: "视频加载出错", icon: "none", duration: 1500, }); console.error(res); } }, fail: function (res) { console.error(res); }, }); }, videoInit(index, item) { // if(!item) return; this.setData({ is_show: false, is_vshow: true, active: item.id, }); this.viewPermission(item.id, index, item.course_id, item.is_audition); this.isMp4(this.data.vedioSrc); }, viewPermissionBtn(e) { let dataset = e.currentTarget.dataset; let id = dataset.item.id; let index = dataset.index; let course_id = dataset.item.course_id; let audition = dataset.item.is_audition; this.viewPermission(id, index, course_id, audition); }, // 根据观看权限 viewPermission(id, index, course_id, audition) { // id, index, address, course_id, audition let that = this; this.setData({ is_show: true, is_vshow: false, islive: false, }); this.setData({ chapter_id: id, active: id, }); let param = { goods_id: this.data.goods_id, chapter_id: id, }; let url = app.getNetAddresss("plugin.video-demand.api.video-course-goods.get-video-address"); app._getNetWork({ url: url, data: param, success: function (res) { if (res.data.result == 1) { let _data = res.data.data; that.viewType(_data.watch, index, _data.video_address, course_id, id, audition, _data.video_cover_address, _data.is_try, _data.try_time); } else { console.error(res); } }, fail: function (res) { console.error(res); }, }); }, viewType(type, index, address, course_id, id, audition, coverSrc, is_try, try_time) { if (is_try == 1 && type == 1 && audition == 1) { console.log("执行1"); this.setData({ coverImg: coverSrc, is_update: false, is_buy: false, isLook: true, is_vshow: true, is_show: false, }); this.videoPlay(index, address, course_id, id, coverSrc); return; } else if (type != 2 && type != 3 && type != 4 && is_try == 1 && try_time > 0) { console.log("执行2"); this.setData({ is_update: false, is_buy: false, isLook: true, }); this.videoPlay(index, address, course_id, id, coverSrc); if (!this.data.is_try_time) { // 防止重复设置定时器 this.data.is_try_time = setTimeout(() => { this.setData({ islive: false, is_show: true, is_vshow: false }); this.isNoPlay(); }, try_time * 1000); } return; } else { console.log("执行3"); this.setData({ vedioSrc: address, coverImg: coverSrc, }); this.isMp4(this.data.vedioSrc); } switch (type) { case 0: this.setData({ is_vshow: false, is_show: true, }); this.isNoPlay(); break; case 1: if (audition == 1) { this.setData({ is_update: false, is_buy: false, isLook: true, is_vshow: true, is_show: false, }); this.videoPlay(index, address, course_id, id, coverSrc); break; } else if (audition == 0) { this.isNoPlay(); break; } else { break; } case 2: this.setData({ is_update: false, is_buy: false, isLook: true, }); this.videoPlay(index, address, course_id, id, coverSrc); break; case 3: case 4: this.setData({ is_update: false, is_buy: false, isLook: true, }); this.videoPlay(index, address, course_id, id, coverSrc); break; default: break; } }, isNoPlay() { this.setData({ is_update: true, is_buy: true, isLook: false, }); if (!this.data.styleSetOptions.buy_now_button) return; this.openBuyDialog(); }, openBuyDialog(){ Dialog.alert({ title: "提示", message: "请升级会员或者购买课程", context: this, }).then(() => { // on close }); }, // 观看视频 videoPlay(index, src, course_id, id, coverSrc) { this.setData({ is_show: false, is_vshow: true, active: id, vedioSrc: src, coverImg: coverSrc, }); // 判断当前路径 this.isMp4(this.data.vedioSrc); app._getNetWork({ url: app.getNetAddresss("plugin.video-demand.api.video-demand-member.set-watch-history"), data: { course_id: course_id, chapter_id: id, }, success: function (res) {}, }); }, // 判断是否MP4 isMp4(src) { if (src == "") return; if (src.endsWith(".mp4") || src.endsWith(".MP4")) { this.setData({ isVideo: true, is_show: false, }); } else { this.setData({ isVideo: false, is_show: false, }); } }, study() { this.setData({ is_show: false, is_vshow: true, }); }, // 升级会员 update() { if (this.data.ios_virtual_pay) { wx.showModal({ title: "提示", content: "十分抱歉,由于相关规定,你暂时无法在这里充值!", confirmText: "知道了", showCancel: false, success(res) { if (res.confirm) { console.log(res); } }, }); return false; } wx.navigateTo({ url: "/packageA/member/course/CourseMemberUpdate/CourseMemberUpdate?goods_id=" + this.data.goods_id, }); }, // 立即购买 buy() { if(this.data.HasBuyPermissions){ wx.showModal({ title: "提示", content: this.data.HasBuyPermissions, confirmText: "确定", showCancel: false, success(res) {}, }); return false; } if (this.data.ios_virtual_pay) { wx.showModal({ title: "提示", content: "十分抱歉,由于相关规定,你暂时无法在这里充值!", confirmText: "知道了", showCancel: false, success(res) { if (res.confirm) { console.log(res); } }, }); return false; } //价格权限 if (this.data.vip_level_status && this.data.vip_level_status.status == 1) { wx.showToast({ title: this.data.vip_level_status.tips, icon: "none", duration: 1500, }); return false; } wx.navigateTo({ url: "/packageD/buy/myOrder_v2/myOrder_v2?tag=-2&total=1&optionsId=&goodsId=" + this.data.goods_id, }); }, // 跳转至我的课程 toMyCourse() { wx.navigateTo({ url: "/packageA/member/course/CourseMy/CourseMy", }); }, // 推荐商品跳转 pushGoodGoto(val) { let item = val.currentTarget.dataset.item; wx.navigateTo({ url: "/packageA/detail_v2/detail_v2?id=" + item.id, }); }, // 选择打赏金额 chooseMoney(e) { let money = e.currentTarget.dataset.money; this.setData({ rewardMoney: money, }); }, moneyInput(e) { this.setData({ rewardMoney: e.detail, }); }, // 确定打赏 confirmReward() { console.log(this.data.rewardMoney); if (app._isTextEmpty(this.data.rewardMoney)) { wx.showToast({ title: "请输入或选择打赏金额", icon: "none", duration: 1500, }); return; } if (this.data.rewardMoney <= 0) { wx.showToast({ title: "打赏金额必须大于0", icon: "none", duration: 1500, }); return; } this.getPayData(); }, // 获取支付类型参数 getPayData() { var that = this; app._getNetWork({ url: app.getNetAddresss("plugin.video-demand.api.lecturer-reward.pay-type"), success: function (res) { if (res.data.result === 1) { let btnData = res.data.data.buttons; that.setData({ showPopup: false, btnData: btnData, rewardPayshow: true, }); } else { console.error(res); } }, fail: function (res) { console.error(res); }, }); }, // 支付 payPost(e) { this.setData({ rewardPayshow: false, }); let type, name, btn = null; if (e.currentTarget) { type = e.currentTarget.dataset.info.value; name = e.currentTarget.dataset.info.name; btn = e.currentTarget.dataset.info; } else { type = e.value; name = e.name; btn = e; } let dataJson = { pay_method: type, amount: this.data.rewardMoney, pay_name: name, goods_id: this.data.goodsId, trick_id: this.data.stickid, client_type: "2", }; app._getNetWork({ url: app.getNetAddresss("plugin.video-demand.api.lecturer-reward.run-reward-pay"), data: dataJson, success: (res) => { if (res.data.result === 1) { this.handleOtherPay(btn, type, res.data.data); this.onClose(); } else { Dialog.alert({ title: "提示", message: res.data.msg, context: this, }).then(() => { // on close }); } }, fail: (res) => { console.error(res); }, }); }, moneyShow() { this.setData({ showPopup: true, }); }, openInputReward() { this.setData({ showPopup: false, rewardMoneyBtn: true, }); }, onClose() { this.setData({ showPopup: false, rewardMoneyBtn: false, actionSheetShow: false, questionnaire_is_open: false, }); }, openActionSheet() { this.setData({ showPopup: false, actionSheetShow: true, }); }, previewImage: function (e) { var current = e.target.dataset.src; // 这里获取到的是一张本地的图片 wx.previewImage({ current: current, // 需要预览的图片链接列表 urls: [current], // 当前显示图片的链接 }); }, // 足迹记录 footSet() { if (!this.data.isGoods) { return; } let urlStr = app.getNetAddresss("member.member-history.store"); urlStr += "&goods_id=" + this.properties.goodsId + "&mark=" + this.properties.mark + "&mark_id=" + this.properties.mark_id; app._getNetWork({ showToastIn: false, url: urlStr, success: (resdata) => { var res = resdata.data; if (res.result == 1) { console.log(res); } else { wx.showToast({ icon: "none", title: res.msg, duration: 1500, }); } }, fail: function (res) {}, }); }, onChange(event) { this.setData({ activeNames: event.detail, }); }, rewardPayshowClose() { this.setData({ rewardPayshow: false, }); }, rewardPayCancelBtn() { this.setData({ rewardPayshow: false, }); }, onChangecountDown(e) { this.setData({ timeData: e.detail, }); }, countDownFinish(){ this.setData({ iscCountDownFinish: true }); } }, });