{"version":3,"sources":["components/video/recommendation/index.js","components/video/video-catalog/index.js","components/video/datum-catalog/index.js","components/video/CustomPlayButton/index.js","components/video/index.js","common/v-list-base/index.js","components/detail/single/index.js","components/detail/single/singleSuccess.js"],"names":["Bottom","_ref","item","react_default","a","createElement","className","price1","price0","Recommendation","connect","state","num","list","courseId","getRecommendation","http","get","concat","API","home","_this","props","vCourseId","then","res","data","code","setState","Array","isArray","toast_default","info","msg","toCourseDetail","id","_this$props","dispatch","history","push","this","_this2","length","map","Info","course_title","simpledescription","recommendation_Bottom","v_list_base","key","course_id","img","image_name","handleClick","PureComponent","VideoCatalog","i","selectVideo","videoCatalog","index","classnames","active","activeIndex","onClick","bind","name","video_auth","isAist","practice","qid","react_router_dom","to","pathname","is_tested","search","from","window","location","title","href","practice_common","commonItem","Component","DatumCatalog","datum","accordion_default","Panel","header","dir_name","files","file_id","file_name","defaultProps","videojs","getComponent","Button","CustomPlayButtonCover","Object","getPrototypeOf","prototype","call","el_","CustomPlayButton","player","options","classCallCheck","possibleConstructorReturn","on","tap","type","player_","play","off","registerComponent","options_","children","alert","modal_default","ProgressShareModal","isShow","learn_day_count","parseFloat","action_power","style","display","url","closeShareModal","Video","previousPlaybackRate","currentPlaybackRate","reconnect","isCurrentVideoFirstPlay","RECENTLEARN","videoList","currentVideoSrc","isAuth","course","salePrice","isLoading","isShowShareModal","shareData","singleBox","singMess","singleType","nowPrice","laterPrice","limitFreeNoPromptChecked","showLimitFreePopup","limitFreePopup","isShowNeverShowPopupOption","limitFreePopupVideos","JSON","parse","localStorage","getItem","tobuy","_this2$state$course","errno","simple","toSingleset","setItem","stringify","boxHide","val","payCallback","assertThisInitialized","getParam","intervalPayStatus","setInterval","clearInterval","Number","now_price","three_day_later_price","isweixinPay","weixin_code","onBridgeReady","WeixinJSBridge","invoke","appId","timeStamp","nonceStr","package","signType","paySign","err_msg","document","addEventListener","attachEvent","check","oid","setupWS","ws","WebSocket","setTimeout","timer","e","position","currentTime","sendMessage","message","readyState","send","close","clearTimeout","PROCESS_URL","getShareProgressInfo","courseID","countSchedule","_this2$state","_this2$state$course2","ctype","is_aist","mtype","uid","user","token","platform","video_id","v_course_id","sendWatchTime","sec","rate","_this2$state2","_this2$state2$course","time","parseInt","setupTimer","count","watchSec","paused","initializePlayer","HELP_IMPROVE_VIDEOJS","video","controls","preload","bigPlayButton","textTrackDisplay","posterImage","errorDisplay","playbackRates","controlBar","pictureInPictureToggle","addChild","_this2$state3","is_live","playbackRate","is_free","sendLastRecord","post","hasAuth","setPlayerSrc","playVideo","getCoursePrice","getLastVideoIndex","lastIndex","findIndex","getVideoList","_res$data","_res$data$data","playSetup","getLimitFreePopup","_this2$state$course3","scheduleTime","last_video_id","lessonAvailable","Promise","resolve","playWithAuth","text","onPress","src","ready","_this2$state$course4","_this2$state4","_res$data2","_this2$state5","includes","checkNeverShowLimitFreePopup","_res$data3","objectSpread","protocol","_this$props$location$","browser","isWeixin","jsCookie","getDatumCatalog","replace","slice","dispose","recordTimer","recordSocket","_this3","_this4","_this$props2","match","_this$state","toHref","HeaderBar","arrow","go","common","ref","el","webkit-playsinline","playsInline","x-webkit-airplay","x5-video-player-type","activeClassName","single","vcourseId","videoId","course_tile","singleSuccess","react_router","exact","path","render","video_video_catalog","assign","video_datum_catalog","video_recommendation","pop_descbition","wechat_img","alt","htmlFor","onChange","target","checked","_this4$state","toConsumableArray","VList","react__WEBPACK_IMPORTED_MODULE_0___default","status","tab","Single","_Users_xzh_dnmp_www_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__","_Users_xzh_dnmp_www_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__","_Users_xzh_dnmp_www_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__","payType","toBuy","videoID","orderId","order_id","alipayPay","weixinPay","antd_mobile_lib_toast__WEBPACK_IMPORTED_MODULE_1___default","encodeURIComponent","toLowerCase","_Users_xzh_dnmp_www_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7__","showSingleBox","toBuyAll","zerobuyReceive","success","colse","zerogroupBuy","getOrderId","groupOrderId","getOrderStatus","getTime","pdd_order_id","endTime","end_time","toGroup","hour","min","nextProps","nextContext","_this5","date","now","Date","s","differenceInSeconds","m","differenceInMinutes","h","differenceInHours","react__WEBPACK_IMPORTED_MODULE_8___default","class_price","compose","withRouter","isPdd","group","cidArr","toLearn","react__WEBPACK_IMPORTED_MODULE_7___default","avatar","String","padStart"],"mappings":"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","file":"mrstatic/js/video.67818aae.chunk.js","sourcesContent":["import React, { PureComponent } from 'react';\nimport {connect} from 'react-redux';\nimport {getCourses} from './../../detail/actions';\nimport './recommendation.scss'\nimport { http } from '@/utils'\nimport { Toast } from \"antd-mobile\";\nimport VList from '@/common/v-list-base';\n\n\nconst Bottom = ({item}) => {\n return (\n <div className='bottom'>\n <span className='price'>¥{item.price1}</span>\n <span className='stale-price'>¥{item.price0}</span>\n </div>\n )\n}\n\n@connect()\nclass Recommendation extends PureComponent {\n state = {\n num: 10,\n list: [],\n courseId: null\n }\n\n componentDidMount() {\n this.getRecommendation()\n }\n\n getRecommendation = () => {\n http.get(`${API.home}/m/play/recommend_course/${this.props.vCourseId}?num=${this.state.num}`)\n .then(res => {\n const data = res.data\n if(data.code === 200){\n\n this.setState({\n list: Array.isArray(data.data) ? data.data : []\n })\n\n }else {\n Toast.info(data.msg)\n }\n })\n }\n\n toCourseDetail = (id) => {\n const { dispatch, history } = this.props;\n // dispatch(getCourses(id, () => {\n history.push(`/detail?id=${id}`)\n // }));\n }\n\n render() {\n return (\n this.state.list.length\n ?\n <div className='recommendation'>\n <div className={'title'}>相关推荐</div>\n <ul>\n {\n this.state.list.map(item => {\n const Info = (\n <div className=\"info\">\n <p className='title text-overflow-1'>{item.course_title}</p>\n <p className='des text-overflow-2'>{item.simpledescription}</p>\n <Bottom\n item={item}\n />\n </div>\n )\n\n return (\n <VList\n key={item.course_id}\n img={item.image_name}\n handleClick={this.toCourseDetail}\n info={Info}\n id={item.course_id}\n />\n )\n })\n }\n </ul>\n </div>\n : null\n );\n }\n}\n\nexport default Recommendation;","import React, { Component } from 'react'\nimport './video-catalog.scss'\nimport { Link } from \"react-router-dom\";\nimport classnames from 'classnames'\n\n\nclass VideoCatalog extends Component {\n\n handleClick = (i) => {\n this.props.selectVideo(i)\n }\n\n render() {\n return (\n <div className='video-catalog'>\n <ul>\n {\n this.props.videoCatalog.map((item, index) => {\n return (\n <li\n key={item.id}\n className={classnames({active: this.props.activeIndex === index})}\n >\n <div\n className=\"video-title\"\n onClick={this.handleClick.bind(this, index)}\n >\n <span className=\"title text-overflow-2\">{item.name}</span>\n {/*<span className='duration'>{item.duration}</span>*/}\n <i className={classnames(`iconfont`,\n [item.video_auth === 0 ? 'iconRectangleCopy1' : this.props.activeIndex === index ? 'iconcelluar':'icontimeout'],\n )}/>\n </div>\n {\n this.props.isAist ? (\n item.video_auth ? (\n (item.practice && item.practice.qid)\n ? <Link to={{\n pathname: item.practice.is_tested ? '/campResolve' : '/campTest',\n search: `?keshi_id=${item.id}&qid=${item.practice.qid}`,\n state: {from: `/play/video${window.location.search}`}\n }}>\n <div className=\"exercise\">\n <span className={'text-overflow-one'}>课后练习:{item.practice.title}</span>\n <i className={classnames('iconfont', item.practice.is_tested ? 'iconRectangleCopy' : '')}/>\n </div>\n </Link>\n : null\n ) : (\n <a href=\"javascript:void(0)\">\n <div className=\"exercise\">\n <span className={'text-overflow-one'}>课后练习:{item.practice.title}</span>\n <i className={classnames('iconfont','iconRectangleCopy1')}/>\n </div>\n </a>\n )\n ) : (\n item.practice_common.map((commonItem, index) => {\n return (\n item.video_auth ? (\n <Link to={{\n pathname: commonItem.is_tested ? '/campResolve' : '/campTest',\n search: `?keshi_id=${item.id}&qid=${commonItem.qid}`,\n state: {from: `/play/video${window.location.search}`}\n }} key={index}>\n <div className=\"exercise\">\n <span className={'text-overflow-one'}>课后练习:{commonItem.title}</span>\n <i className={classnames('iconfont',commonItem.is_tested ? 'iconRectangleCopy' : '')}/>\n </div>\n </Link>\n ) : (\n <a href=\"javascript:void(0)\">\n <div className=\"exercise\">\n <span className={'text-overflow-one'}>课后练习:{commonItem.title}</span>\n <i className={classnames('iconfont','iconRectangleCopy1')}/>\n </div>\n </a>\n )\n )\n })\n )\n }\n </li>\n )\n })\n }\n </ul>\n </div>\n );\n }\n}\n\nexport default VideoCatalog;","import React, { Component } from 'react';\nimport './datum-catalog.scss'\nimport { Accordion } from \"antd-mobile\";\n\n\nclass DatumCatalog extends Component {\n\n static defaultProps = {\n datum: [{\n dir_name: '',\n files: [{\n file_name: '',\n file_id: 0\n }]\n }]\n }\n\n render() {\n const {datum} = this.props\n return (\n <div className='datum-catalog'>\n <p className='prompt'>课程资料请到PC端播放页下载</p>\n <Accordion>\n {\n datum && datum.length && datum.map((item, index) => {\n return (\n <Accordion.Panel header={item.dir_name} key={index}>\n {\n item.files.map(item => {\n return (\n <div key={item.file_id} className='file-name'>\n {item.file_name}\n </div>\n )\n })\n }\n </Accordion.Panel>\n )\n })\n }\n </Accordion>\n </div>\n );\n }\n}\n\nexport default DatumCatalog;","import videojs from 'video.js'\n\nconst Component = videojs.getComponent('Component')\nconst Button = videojs.getComponent('Button')\n\nclass CustomPlayButtonCover extends Component {\n createEl() {\n return super.createEl('div', {\n className: 'vjs-custom-play-button-cover'\n })\n }\n\n dispose() {\n this.el_ && (this.el_ = null)\n }\n}\n\nclass CustomPlayButton extends Button {\n constructor(player, options) {\n super(player, options)\n this.on('tap', this.tap)\n }\n\n createEl() {\n return super.createEl('button', {\n className: 'vjs-custom-play-button'\n }, {\n type: 'button'\n })\n }\n\n tap() {\n this.player_.play()\n }\n\n dispose() {\n if (this.el_) {\n this.off('tap', this.tap)\n this.el_ = null\n }\n }\n}\n\n\nComponent.registerComponent('CustomPlayButton', CustomPlayButton)\n\nCustomPlayButtonCover.prototype.options_ = {\n children: [\n 'CustomPlayButton'\n ]\n}\n\nComponent.registerComponent('CustomPlayButtonCover', CustomPlayButtonCover)\n","import React, { Component } from 'react'\nimport HeaderBar from '@/common/HeaderBar'\nimport './video.scss'\nimport { NavLink, Route, Redirect, Switch } from 'react-router-dom'\nimport { http, getParam, browser } from '@/utils'\nimport Recommendation from './recommendation'\nimport VideoCatalog from './video-catalog'\nimport DatumCatalog from './datum-catalog'\nimport { Toast } from 'antd-mobile'\nimport videojs from 'video.js'\nimport 'video.js/dist/video-js.min.css'\nimport { Modal } from \"antd-mobile\"\nimport { Loading } from '@/common'\nimport { connect } from \"react-redux\"\nimport jsCookie from 'js-cookie'\nimport Single from \"@/components/detail/single\";\nimport SingleSuccess from \"../detail/single/singleSuccess\";\nimport './CustomPlayButton'\n\n\nlet alert = Modal.alert\n\nfunction ProgressShareModal(props) {\n return (\n props.isShow &&\n <div className='progress-share-modal-wrapper'>\n <div className=\"progress-share-modal\">\n <div className=\"title\">每日打卡</div>\n <ul className=\"progress-container\">\n <li>\n <div className=\"title\">累计学习</div>\n <div className=\"number\"><span className='num'>{props.data.learn_day_count}</span>天</div>\n </li>\n <li>\n <div className=\"title\">行动力超过</div>\n <div className=\"number\"><span className='num'>{parseFloat(props.data.action_power)}</span>%\n </div>\n </li>\n </ul>\n <div className=\"share-container\">\n <div className=\"title\">分享到</div>\n <ul>\n <li className='share-icon'>\n <a style={{display: 'block'}} href={props.data.url}>\n <div className=\"icon\"><i className='iconfont iconweixinzhifu'/></div>\n <div className='text'>微信好友</div>\n </a>\n </li>\n <li className='share-icon'>\n <a style={{display: 'block'}} href={props.data.url}>\n <div className=\"icon\"><i className='iconfont iconpengyouquaniconx'/></div>\n <div className='text'>朋友圈</div>\n </a>\n </li>\n </ul>\n </div>\n <i className=\"iconfont iconiconfront-2 close\" onClick={props.closeShareModal}/>\n </div>\n </div>\n )\n}\n\nclass Video extends Component {\n\n video //video element\n player //video player instance\n\n courseID\n\n ws //websocket instance\n timer\n token\n count\n watchSec\n previousPlaybackRate = 1\n currentPlaybackRate = 1\n reconnect = true\n // timeEnough = false\n\n recordSocket\n recordTimer\n\n isCurrentVideoFirstPlay = true\n\n RECENTLEARN = \"recent_learn\"\n\n state = {\n title: '',\n courseId: null,\n videoList: [],\n datum: [],\n currentVideoSrc: '',\n activeIndex: 0,\n isAuth: true,\n course: {}, // course.course_id 为 0 或 '' 时 为免费课程\n salePrice: null,\n vCourseId: null,\n isLoading: true,\n isShowShareModal: false,\n shareData: {},\n singleBox: false,\n singMess: '',\n singleType: 1,// 单集购买需要\n nowPrice: 0,// 单集购买需要\n laterPrice: 0,// 单集购买需要\n limitFreeNoPromptChecked: false,//是否勾选\"不再显示此弹框\"选项\n showLimitFreePopup: false,\n limitFreePopup: {},\n isShowNeverShowPopupOption: false, //限时免费课程 播放结束后是否显示\"不再显示此弹框\"选项\n limitFreePopupVideos: JSON.parse(localStorage.getItem('limit-free-popup-videos'))\n }\n\n\n componentDidMount() {\n if (window.location.protocol === 'https:') {\n window.location.replace('http' + window.location.href.slice(5))\n return\n }\n\n this.courseID = getParam('id')\n if (!this.courseID) {\n this.props.history.replace('/')\n return\n }\n this.setState({\n courseId: this.courseID\n })\n const {location, location: {state = {}}} = this.props;\n if (state.oid) {\n this.check(state.oid);\n }\n if (getParam('is_class') === 1 || getParam('weixinpay')) {\n this.payCallback()\n }\n if (browser.isWeixin) {\n this.isweixinPay()\n }\n this.token = jsCookie.get('token')\n this.getVideoList()\n this.getDatumCatalog()\n }\n\n // 直接购买\n tobuy = () => {\n // 详情页单集购买到该页面,url中的id不是课程id\n const {course = {}} = this.state;\n http.get(`${API['base-api']}/m/cart/addtopreorder/[${course.course_id}]`).then((res) => {\n if (res.data.errno === 0) {\n this.props.history.push(`/order?id=${course.course_id}`, {simple: 1})\n } else {\n Toast.info(res.data.msg, 2);\n }\n })\n }\n // 购买单集\n toSingleset = (item) => {\n this.setState({\n singleBox: true,\n singleType: 1,\n singMess: item\n })\n window.localStorage.setItem('singMess', JSON.stringify(item))\n }\n\n // 自组件传给父组件的boxHide\n boxHide = (val) => {\n this.setState({singleBox: val, singleType: 1})\n }\n\n // 单集购买 H5支付成功后回调\n payCallback = () => {\n const _this = this;\n if (!getParam('oid')) {\n return;\n } else {\n this.setState({\n singMess: JSON.parse(window.localStorage.getItem('singMess'))\n })\n _this.intervalPayStatus = setInterval(function () {\n http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {\n if (res.data.errno === 401) {\n clearInterval(_this.intervalPayStatus);\n _this.intervalPayStatus = null;\n // 获取课程类型\n http.get(`${API['base-api']}/class_order_status/${getParam('oid')}`).then((res) => {\n if (Number(res.data.data.errno) === 200) {\n // 正常购买单集成功\n _this.setState({\n singleType: 6,\n })\n } else if (Number(res.data.data.errno) === 201) {\n // 0元参团\n _this.setState({\n singleType: 4,\n })\n } else if (Number(res.data.data.errno) === 202) {\n // 0元购\n _this.setState({\n singleType: 3,\n })\n } else if (Number(res.data.data.errno) === 203) {\n // 三天内特价\n _this.setState({\n nowPrice: res.data.data.data.now_price,\n laterPrice: res.data.data.data.three_day_later_price,\n singleType: 2,\n })\n } else {\n Toast.info(res.data.data.msg, 2)\n }\n })\n }\n })\n }, 1000)\n }\n };\n // 单集购买 微信内支付成功后回调\n isweixinPay = () => {\n let _this = this;\n let weixin_code = getParam('code');\n if (weixin_code) {\n if (!getParam('oid')) {\n return\n } else {\n this.setState({\n singMess: JSON.parse(window.localStorage.getItem('singMess'))\n })\n // this.props.weixinPay(weixin_code)\n http.get(`${API['base-api']}/pay/wxpay/pub_charge/oid/${getParam('oid')}/code/${weixin_code}`).then((res) => {\n if (res.data.errno === 0) {\n const data = res.data.data;\n\n function onBridgeReady() {\n WeixinJSBridge.invoke(\n 'getBrandWCPayRequest', {\n \"appId\": data.appId, //公众号名称,由商户传入\n \"timeStamp\": data.timeStamp, //时间戳,自1970年以来的秒数\n \"nonceStr\": data.nonceStr, //随机串\n \"package\": data.package,\n \"signType\": data.signType, //微信签名方式:\n \"paySign\": data.paySign //微信签名\n },\n function (res) {\n if (res.err_msg == \"get_brand_wcpay_request:ok\") {\n Toast.info('支付成功', 2);\n _this.intervalPayStatus = setInterval(function () {\n http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {\n if (res.data.errno === 401) {\n clearInterval(_this.intervalPayStatus);\n _this.intervalPayStatus = null;\n // 获取课程类型\n http.get(`${API['base-api']}/class_order_status/${getParam('oid')}`).then((res) => {\n if (Number(res.data.data.errno) === 200) {\n // 正常购买单集成功\n _this.setState({\n singleType: 6,\n })\n } else if (Number(res.data.data.errno) === 201) {\n // 0元参团\n _this.setState({\n singleType: 4,\n })\n } else if (Number(res.data.data.errno) === 202) {\n // 0元购\n _this.setState({\n singleType: 3,\n })\n } else if (Number(res.data.data.errno) === 203) {\n // 三天内特价\n _this.setState({\n nowPrice: res.data.data.data.now_price,\n laterPrice: res.data.data.data.three_day_later_price,\n singleType: 2,\n })\n } else {\n Toast.info(res.data.data.msg, 2)\n }\n })\n }\n })\n }, 1000)\n } else {\n alert('支付失败')\n }\n }\n )\n }\n\n if (typeof WeixinJSBridge == \"undefined\") {\n if (document.addEventListener) {\n document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false)\n } else if (document.attachEvent) {\n document.attachEvent('WeixinJSBridgeReady', onBridgeReady)\n document.attachEvent('onWeixinJSBridgeReady', onBridgeReady)\n }\n } else {\n onBridgeReady()\n }\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n }\n };\n // 判断支付是否成功\n check = (oid) => {\n this.setState({\n singMess: JSON.parse(window.localStorage.getItem('singMess'))\n })\n http.get(`${API['base-api']}/class_order_status/${oid}`).then((res) => {\n if (Number(res.data.data.errno) === 200) {\n // 正常购买单集成功\n this.setState({\n singleType: 6,\n\n })\n } else if (Number(res.data.data.errno) === 201) {\n // 0元参团\n this.setState({\n singleType: 4,\n\n })\n } else if (Number(res.data.data.errno) === 202) {\n // 0元购\n this.setState({\n singleType: 3,\n\n })\n } else if (Number(res.data.data.errno) === 203) {\n // 三天内特价\n this.setState({\n nowPrice: res.data.data.data.now_price,\n laterPrice: res.data.data.data.three_day_later_price,\n singleType: 2,\n\n })\n } else {\n Toast.info(res.data.data.msg, 2)\n }\n })\n }\n\n // 9502 初始化 监听事件\n setupWS = () => {\n this.ws = new WebSocket(API[\"process-api\"]);\n this.ws.addEventListener('error', () => {\n this.ws = null\n })\n this.ws.addEventListener('close', () => {\n if (this.reconnect) {\n this.ws = null\n setTimeout(() => {\n this.setupWS();\n }, 1000)\n }\n clearInterval(this.timer)\n this.timer = null;\n })\n this.ws.addEventListener('message', e => {\n const data = JSON.parse(e.data);\n data.code == 4040 && (this.reconnect = false);\n if (data.code === 0) {\n if (data.data && data.data.position) {\n this.player.currentTime(data.data.position);\n }\n }\n })\n }\n\n sendMessage = message => {\n let readyState = this.ws.readyState, _this = this;\n if (readyState === 1) {\n this.ws && this.ws.send(JSON.stringify(message))\n } else if (readyState === 3) {\n this.ws.close();\n this.ws = null;\n let reconnect = setTimeout(function () {\n clearTimeout(reconnect);\n reconnect = null;\n _this.ws = new WebSocket(PROCESS_URL);\n }, 500);\n }\n }\n\n //视频结束请求接口\n getShareProgressInfo = () => {\n http.get(`${API['base-api']}/m/aist/share_data/${this.courseID}/${this.state.videoList[this.state.activeIndex]['id']}`)\n .then(res => {\n const {data} = res\n if (data.errno == 200) {\n this.setState({shareData: data.data, isShowShareModal: true})\n }\n })\n }\n\n //告诉服务端计算进度\n countSchedule = () => {\n const {videoList, activeIndex, vCourseId, course = {}} = this.state\n if (Number(course.course_id) === 0 || course.course_id === '') {\n return;\n }\n let ctype = 0;\n if (course.is_aist) {\n ctype = 2;\n }\n // 计算进度 根据ctype判断 课程类型 0-视频 1-直播 2-AI特训营\n this.sendMessage({\n mtype: 'count_schedule',\n uid: this.props.user.data.uid,\n token: this.token,\n platform: 5,\n video_id: videoList[activeIndex]['id'],\n course_id: this.state.courseId,\n v_course_id: vCourseId,\n ctype: ctype,\n })\n\n }\n // 发送时间消息\n sendWatchTime = (sec, rate) => {\n const {videoList, activeIndex, vCourseId, course = {}} = this.state\n // 免费课程不发送\n // if (Number(course.course_id) === 0 || course.course_id === '') {\n // return;\n // }\n // 时间为0 不发送消息\n if (Number(sec) === 0) {\n return;\n }\n let ctype = 0;\n if (course.is_aist) {\n ctype = 2;\n }\n // 时间足够不发送\n // if(this.timeEnough) {\n // return;\n // }\n this.sendMessage({\n mtype: 'watch_time',\n rate,\n time: sec,\n video_id: videoList[activeIndex]['id'],\n course_id: this.state.courseId,\n v_course_id: vCourseId,\n uid: this.props.user.data.uid,\n token: this.token,\n platform: 5,\n position: parseInt(this.player.currentTime()),\n ctype: ctype,\n })\n }\n\n setupTimer = () => {\n this.count = 0\n this.watchSec = 0\n clearInterval(this.timer)\n this.timer = null;\n this.timer = setInterval(() => {\n if (this.player && this.player.player()) {\n if (this.count === 5) {\n this.sendWatchTime(this.watchSec, this.currentPlaybackRate)\n this.count = this.watchSec = 0\n } else {\n !this.player.paused() && this.watchSec++\n !this.player.paused() && this.count++\n }\n }\n }, 1000)\n\n }\n\n // 初始化视频播放器\n initializePlayer = () => {\n window.HELP_IMPROVE_VIDEOJS = false;\n this.player = videojs(this.video, {\n controls: true,\n preload: 'auto',\n bigPlayButton: false,\n textTrackDisplay: false,\n posterImage: false,\n errorDisplay: false,\n playbackRates: ['0.75', '1', '1.5', '2'],\n controlBar: {\n pictureInPictureToggle: false\n }\n })\n this.player.addChild('CustomPlayButtonCover')\n this.player.on('play', () => {\n const {videoList, activeIndex, vCourseId, course = {}} = this.state\n // 当视频播放时 看是否是第一次播放(初次进入页面 刷新页面 切换视频 都是第一次播放 需要获取上次的播放时间)\n if (this.isCurrentVideoFirstPlay) {\n // 当某些原因导致视频暂停时(用户暂停 网络不好等) 再播放时不需要发送\n this.isCurrentVideoFirstPlay = false;\n // 发送消息 recent_learn\n this.ws.send(JSON.stringify({\n mtype: this.RECENTLEARN,\n uid: this.props.user.data.uid,\n token: this.token,\n platform: 5,\n video_id: videoList[activeIndex]['id'],\n course_id: this.state.courseId,\n v_course_id: vCourseId,\n is_live: 0,\n }))\n }\n if (!this.timer) {\n this.setupTimer();\n }\n })\n this.player.on('ratechange', () => {\n this.currentPlaybackRate = this.player.playbackRate()\n this.sendWatchTime(this.watchSec, this.previousPlaybackRate)\n this.count = this.watchSec = 0\n this.previousPlaybackRate = this.currentPlaybackRate\n })\n this.player.on('ended', () => {\n this.sendWatchTime(this.watchSec, this.currentPlaybackRate);\n this.count = this.watchSec = 0;\n this.countSchedule(); // 计算进度 -- 播放完毕\n // 返现课程才出现打卡记录\n if (this.state.course.is_aist) {\n this.getShareProgressInfo()\n }\n clearInterval(this.timer);\n this.timer = null;\n if (this.state.limitFreePopup.is_free) {\n this.setState({\n showLimitFreePopup: true\n })\n }\n })\n }\n\n sendLastRecord = () => {\n http.post(`${API.home}/m/course/record_last_video`, {\n v_course_id: this.state.course['v_course_id'],\n video_id: this.state.videoList[this.state.activeIndex].id\n })\n }\n\n componentWillUnmount() {\n this.player && this.player.dispose()\n\n clearInterval(this.timer)\n this.timer = null;\n this.ws && this.ws.close()\n this.ws = null\n\n clearInterval(this.recordTimer)\n this.recordSocket && this.recordSocket.close()\n this.recordSocket = null\n }\n\n // 选择新的视频\n selectVideo = index => {\n if (index === this.state.activeIndex) {\n return\n }\n this.isCurrentVideoFirstPlay = true; // 切换视频则重置这个变量 因为新视频肯定是首次播放\n this.sendWatchTime(this.watchSec, this.currentPlaybackRate)\n this.countSchedule(); // 计算进度 -- 选择新视频(可能是M端特有的)\n this.setupTimer();\n\n this.setState(\n {\n activeIndex: index\n },\n () => {\n\n if (this.hasAuth(this.state.activeIndex)) {\n this.setPlayerSrc(this.state.videoList[index]['play_url'])\n this.sendLastRecord()\n this.playVideo()\n } else {\n this.getCoursePrice();\n }\n }\n );\n }\n\n getLastVideoIndex = lastIndex => {\n return this.state.videoList.findIndex(item => item.id == lastIndex)\n }\n\n getVideoList = () => {\n let url = '';\n if (getParam('video_id')) {\n url = `${API.home}/m/course/play/${this.courseID + '?video_id=' + getParam('video_id')}`\n http.post(`${API['base-api']}/sys/get_class_audition`, {\n video_id: getParam('video_id')\n })\n } else {\n url = `${API.home}/m/course/play/${this.courseID}`\n }\n http.get(url).then(res => {\n const {data = {}, code} = res.data;\n if (code === 200) {\n this.setState(\n state => ({\n videoList: data['lessons'],\n currentVideoSrc: data['lessons'][state.activeIndex]['play_url'],\n course: data.course,\n courseId: data.course['course_id'],\n vCourseId: data.course['v_course_id'],\n title: data.course['course_title'],\n isLoading: false\n }),\n this.playSetup\n )\n data.course.course_id && this.getLimitFreePopup(data.course.course_id)\n } else {\n Toast.info(data.msg)\n }\n }\n )\n }\n\n playSetup = () => {\n // is_aist,是否AI特训营\n const {course = {}} = this.state;\n // if (Number(course.course_id) === 0 || course.course_id === '') {\n // }else{\n let _this = this;\n this.setupWS();\n this.setupTimer();\n let scheduleTime = setTimeout(function () {\n clearTimeout(scheduleTime);\n scheduleTime = null;\n _this.countSchedule(); // 刚进入页面的时候 就计算进度 先获取视频列表getVideoList 获取列表后 播放选择的视频 然后计算进度\n }, 1000);\n // }\n let index = this.getLastVideoIndex(course.last_video_id);\n index = index >= 0 ? index : 0;\n this.setState(\n {\n activeIndex: index\n },\n () => {\n if (this.lessonAvailable(index)) {\n if (this.hasAuth(index)) {\n Promise.resolve().then(() => {\n this.initializePlayer()\n this.playWithAuth()\n })\n } else {\n this.getCoursePrice();\n }\n } else {\n alert('暂无视频', '', [{\n text: 'OK',\n onPress: () => {\n this.props.history.push('/')\n }\n }])\n }\n }\n );\n\n }\n\n setPlayerSrc = src => {\n if (!this.player) {\n this.initializePlayer()\n }\n this.player.src({\n src,\n type: 'application/x-mpegURL'\n })\n }\n\n playVideo = () => {\n this.player.ready(() => {\n this.player.play()\n })\n\n }\n\n\n getDatumCatalog() {\n http.get(`${API.home}/m/course/data/${this.courseID}`)\n .then(res => {\n const data = res.data\n if (data.code === 200) {\n\n this.setState({\n datum: data.data\n })\n\n } else {\n Toast.info(data.msg)\n }\n })\n }\n\n lessonAvailable = index => {\n return this.state.videoList[index]['video_size'] !== 0\n }\n\n getCoursePrice = () => {\n const {course = {}} = this.state;\n http.get(`${API.home}/sys/course/price/${course.course_id}`)\n .then(res => {\n const {data} = res\n if (data.code === 200) {\n this.setState({\n salePrice: data.data['sale_price']\n })\n }\n })\n }\n\n playWithAuth = () => {\n const {videoList, activeIndex} = this.state\n\n if (this.hasAuth(activeIndex)) {\n this.setPlayerSrc(videoList[activeIndex]['play_url'])\n }\n }\n\n hasAuth = index => {\n const {videoList} = this.state\n\n let lesson = videoList[index]\n\n if (lesson['video_auth']) {\n this.setState({\n isAuth: true\n })\n return true\n } else {\n this.setState({\n isAuth: false\n })\n return false\n\n }\n }\n\n getLimitFreePopup = id => {\n http.post(`${API.home}/sys/popup`, {\n course_id: id\n })\n .then(res => {\n const {code, msg, data} = res.data\n if (code === 200) {\n\n const {courseId, limitFreePopupVideos} = this.state\n this.setState({\n limitFreePopup: data,\n isShowNeverShowPopupOption: limitFreePopupVideos ? limitFreePopupVideos.includes(courseId) : false\n })\n\n } else {\n Toast.info(msg, 2, null, false)\n }\n })\n }\n checkNeverShowLimitFreePopup = () => {\n if (!this.state.limitFreeNoPromptChecked) {\n return\n }\n http.post(`${API.home}/sys/checklist`, {\n course_id: this.state.course.course_id\n })\n .then(res => {\n const {code, msg} = res.data\n if (code === 200) {\n this.setState({\n limitFreePopup: {...this.state.limitFreePopup, is_free: 0}\n })\n\n } else {\n Toast.info(msg, 2, null, false)\n\n }\n })\n }\n\n render() {\n let {match, location, history} = this.props\n const {\n videoList,\n activeIndex,\n isAuth,\n salePrice,\n course,\n singleBox,\n singleType,\n showLimitFreePopup,\n limitFreePopup,\n isShowNeverShowPopupOption\n } = this.state;\n let toHref = '';\n if (location.state && location.state.to && location.state.to === 'detail') {\n toHref = `/detail?id=${course.course_id}`\n }\n return (\n <div className='play'>\n <HeaderBar title={this.state.title} arrow={true} toHref={() => {\n toHref ? history.push(\n toHref,\n {\n to: 'classify'\n }\n ) : history.go(-1)\n }}/>\n <Loading isLoading={this.state.isLoading}>\n <div className=\"video\">\n <video className={'video-js'} ref={el => this.video = el}\n webkit-playsinline=\"true\"\n playsInline={true}\n x-webkit-airplay=\"allow\"\n x5-video-player-type=\"h5\">\n <source src={'/'} type='application/x-mpegURL'/>\n </video>\n {\n !isAuth && !!videoList[activeIndex]['is_class'] && (\n <div className=\"purchase-box\">\n <div className='hint'>您尚未购买该课时,请购买后学习。</div>\n <div className='btns'>\n <button\n type='button'\n onClick={this.tobuy}\n className='purchase-class'\n >\n ¥{salePrice} 购买课程\n </button>\n <button\n type='button'\n onClick={this.toSingleset.bind(this, videoList[activeIndex])}\n className='purchase-episode'\n >\n ¥{videoList.length && videoList[activeIndex]['class_price']} 购买单集\n </button>\n </div>\n </div>\n )\n }\n {\n !isAuth && !!course.is_aist && (\n <div className=\"is-aist-box\">\n <i className={'iconfont iconiconfront-21'}></i>\n <p className={'time'}>{videoList[activeIndex]['aist_start_time']}</p>\n <p className={'time'}>请耐心等待...</p>\n </div>\n )\n }\n </div>\n <div className='tab'>\n <div>\n <NavLink to={{pathname: `${match.url}/video`, search: `?id=${this.courseID}`}}\n replace\n activeClassName='active'\n >视频</NavLink>\n </div>\n <div>\n <NavLink to={{pathname: `${match.url}/datum`, search: `?id=${this.courseID}`}}\n replace\n activeClassName='active'\n >资料</NavLink>\n </div>\n </div>\n\n {/*单集购买*/}\n {\n singleBox &&\n <Single\n courseId={course.course_id}\n singleBox={this.state.singleBox}\n boxHide={this.boxHide}\n data={this.state.singMess}\n singleType={this.state.singleType}\n vcourseId={course.v_course_id}\n videoId={this.state.singMess.video_id}\n check={this.check}\n title={this.state.singMess.course_tile}/>\n }\n {/* 单集购买成功 */}\n {\n singleType !== 1 &&\n <SingleSuccess\n courseId={course.course_id}\n boxHide={this.boxHide}\n data={this.state.singMess}\n singleType={singleType}\n vcourseId={course.v_course_id}\n videoId={this.state.singMess.video_id}\n nowPrice={this.state.nowPrice}\n laterPrice={this.state.laterPrice}\n />\n }\n\n </Loading>\n <Switch>\n <Redirect exact from={'/play'} to={{\n pathname: '/play/video',\n search: location.search\n }}/>\n <Route\n path={`${match.path}/video`}\n render={props => {\n return (\n <VideoCatalog\n activeIndex={this.state.activeIndex}\n selectVideo={this.selectVideo}\n videoCatalog={videoList}\n isAist={course.is_aist}\n {...props}\n />\n );\n }}\n />\n <Route path={`${match.path}/datum`} render={props => {\n return <DatumCatalog {...props} datum={this.state.datum}/>\n }}/>\n </Switch>\n <Route render={props => {\n return this.state.vCourseId ? <Recommendation {...props} vCourseId={this.state.vCourseId}/>\n : null\n }}/>\n <ProgressShareModal isShow={this.state.isShowShareModal}\n closeShareModal={() => this.setState({isShowShareModal: false})}\n data={this.state.shareData}\n />\n {\n showLimitFreePopup &&\n <div className={'limit-free-cover'}>\n <div className=\"free-popup\">\n <div className=\"title\">\n <span>{limitFreePopup.pop_descbition}</span>\n </div>\n <div className={'des'}>\n <img className=\"qrcode\"\n src={limitFreePopup.wechat_img} alt=''/>\n <span>长按/扫码识别</span>\n <span>添加时请备注<span>{course.course_id}</span>哦</span>\n <div className=\"no-prompt\">\n {\n isShowNeverShowPopupOption &&\n <label htmlFor=\"no-prompt\">\n <span\n className={`checkbox-label ${this.state.limitFreeNoPromptChecked ? 'checked' : 'unchecked'}`}>\n <i className={'iconfont iconiconfront-73'}/>\n </span>\n <input type=\"checkbox\" id={'no-prompt'} onChange={(e) => {\n this.setState({\n limitFreeNoPromptChecked: e.target.checked\n })\n }}/>\n <span>本课程不再提示</span>\n </label>\n }\n </div>\n </div>\n <i className={'close-btn iconfont iconiconfront-2'} onClick={() => {\n this.setState({\n showLimitFreePopup: false,\n isShowNeverShowPopupOption: true\n })\n const {courseId, limitFreePopupVideos} = this.state\n localStorage.setItem('limit-free-popup-videos', JSON.stringify(\n limitFreePopupVideos ? [...limitFreePopupVideos, courseId] : [courseId]\n ))\n this.checkNeverShowLimitFreePopup()\n }}/>\n </div>\n </div>\n }\n </div>\n );\n }\n}\n\n\nexport default connect(\n state => ({user: state.user}),\n null\n)(Video);\n","import React from 'react';\nimport './index.scss'\n\nconst VList = (props) => {\n return (\n <li className='v-list-base-item' onClick={props.handleClick.bind(this, props.id, props.item)}>\n <div className=\"content\">\n <div className=\"cover\">\n {props.status}\n <img src={props.img} alt=\"\"/>\n </div>\n {props.info}\n </div>\n {props.tab}\n </li>\n );\n};\n\nexport default VList;\n","import React, { Component } from 'react'\nimport './index.scss'\nimport { getParam, http, browser } from \"@/utils\";\nimport { Toast } from 'antd-mobile';\nimport { Link, withRouter } from \"react-router-dom\";\nimport { compose } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { differenceInHours, differenceInMinutes, differenceInSeconds } from \"date-fns\";\n\n\nclass Single extends Component {\n constructor(props) {\n super(props)\n this.state = {\n // status: 1,\n orderId: '',\n nowPrice: '',\n laterPrice: '',\n hour: '',\n min: '',\n sec: '',\n endTime: '',\n groupOrderId: '',\n payType: '0', // 1支付宝 0微信\n // singleBox: false,\n showSingleBox: false,\n }\n }\n\n componentDidMount() {\n // if (getParam('is_class') === 1 || getParam('weixinpay')) {\n // console.log(0);\n // this.payCallback()\n // }\n // if (browser.isWeixin) {\n // this.isweixinPay()\n // }\n }\n\n componentWillReceiveProps(nextProps, nextContext) {\n // console.log(nextProps);\n // this.setState({\n // singleBox: nextProps.singleBox\n // })\n }\n\n // 选择支付方式\n check = (type) => {\n this.setState({\n payType: type\n })\n }\n\n // 确定购买\n toBuy = () => {\n const { courseId } = this.props;\n const videoID = this.props.data.video_id || this.props.data.id;\n http.get(`${API.home}/sys/createClassOrder/${videoID}`).then((res) => {\n if (res.data.code === 200) {\n this.setState({\n orderId: res.data.data.order_id\n })\n this.state.payType === '1' ? this.alipayPay(res.data.data.order_id, courseId) : this.weixinPay(res.data.data.order_id)\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n // 微信支付\n weixinPay = (orderId) => {\n // 微信内部-支付\n if (browser.isWeixin) {\n window.location.href = \"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=\" + encodeURIComponent(window.location.href + \"&aa=bb&oid=\" + orderId).toLowerCase() + \"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect\";\n } else {\n // 微信外部-支付\n http.get(`${API['base-api']}/pay/wxpay/wap_charge/oid/${orderId}`).then((res) => {\n if (res.data.errno === 0) {\n window.location.href = res.data.data.url + \"&redirect_url=\" + encodeURIComponent(window.location.href + \"&weixinpay=1&oid=\" + orderId).toLowerCase();\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n }\n // 支付宝支付\n alipayPay = (orderId, courseId) => {\n http.get(`${API['base-api']}/pay/alipay/wap_charge_new/oid/${orderId}`).then((res) => {\n if (res.data.errno === 0) {\n window.location = res.data.data.url;\n courseId && window.localStorage.setItem('payCourse', courseId);\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n\n // 微信内部支付\n isweixinPay = () => {\n let _this = this;\n let weixin_code = getParam('code')\n if (weixin_code) {\n if (!getParam('oid')) {\n return\n } else {\n http.get(`${API['base-api']}/pay/wxpay/pub_charge/oid/${getParam('oid')}/code/${weixin_code}`).then((res) => {\n if (res.data.errno === 0) {\n const data = res.data.data;\n\n function onBridgeReady() {\n WeixinJSBridge.invoke(\n 'getBrandWCPayRequest', {\n \"appId\": data.appId, //公众号名称,由商户传入\n \"timeStamp\": data.timeStamp, //时间戳,自1970年以来的秒数\n \"nonceStr\": data.nonceStr, //随机串\n \"package\": data.package,\n \"signType\": data.signType, //微信签名方式:\n \"paySign\": data.paySign //微信签名\n },\n function (res) {\n if (res.err_msg == \"get_brand_wcpay_request:ok\") {\n Toast.info('支付成功', 2);\n _this.intervalPayStatus = setInterval(function () {\n http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {\n if (res.data.errno === 401) {\n clearInterval(_this.intervalPayStatus);\n _this.intervalPayStatus = null;\n // 获取课程类型\n http.get(`${API['base-api']}/class_order_status/${getParam('oid')}`).then((res) => {\n if (Number(res.data.data.errno) === 200) {\n // 正常购买单集成功\n this.setState({\n status: 6,\n showSingleBox: true,\n })\n } else if (Number(res.data.data.errno) === 201) {\n // 0元参团\n this.setState({\n status: 4,\n showSingleBox: true,\n })\n } else if (Number(res.data.data.errno) === 202) {\n // 0元购\n this.setState({\n status: 3,\n showSingleBox: true,\n })\n } else if (Number(res.data.data.errno) === 203) {\n // 三天内特价\n this.setState({\n nowPrice: res.data.data.data.now_price,\n laterPrice: res.data.data.data.three_day_later_price,\n status: 2,\n showSingleBox: true,\n })\n } else {\n Toast.info(res.data.data.msg, 2)\n }\n })\n }\n })\n }, 1000)\n } else {\n alert('支付失败')\n }\n }\n )\n }\n\n if (typeof WeixinJSBridge == \"undefined\") {\n if (document.addEventListener) {\n document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false)\n } else if (document.attachEvent) {\n document.attachEvent('WeixinJSBridgeReady', onBridgeReady)\n document.attachEvent('onWeixinJSBridgeReady', onBridgeReady)\n }\n } else {\n onBridgeReady()\n }\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n }\n }\n\n // 支付完成之后获取状态\n payCallback = () => {\n const _this = this;\n if (!getParam('oid')) {\n return;\n } else {\n _this.intervalPayStatus = setInterval(function () {\n http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {\n if (res.data.errno === 401) {\n clearInterval(_this.intervalPayStatus);\n _this.intervalPayStatus = null;\n // 获取课程类型\n http.get(`${API['base-api']}/class_order_status/${getParam('oid')}`).then((res) => {\n if (Number(res.data.data.errno) === 200) {\n // 正常购买单集成功\n this.setState({\n status: 6,\n showSingleBox: true,\n })\n } else if (Number(res.data.data.errno) === 201) {\n // 0元参团\n this.setState({\n status: 4,\n showSingleBox: true,\n })\n } else if (Number(res.data.data.errno) === 202) {\n // 0元购\n this.setState({\n status: 3,\n showSingleBox: true,\n })\n } else if (Number(res.data.data.errno) === 203) {\n // 三天内特价\n this.setState({\n nowPrice: res.data.data.data.now_price,\n laterPrice: res.data.data.data.three_day_later_price,\n status: 2,\n showSingleBox: true,\n })\n } else {\n Toast.info(res.data.data.msg, 2)\n }\n })\n }\n })\n }, 1000)\n }\n\n }\n\n\n // 特价购买全集\n toBuyAll = () => {\n\n }\n // 0元购买全集\n zerobuyReceive = () => {\n Toast.success('购买全集成功', 3)\n this.colse()\n }\n // 0元参团\n zerogroupBuy = () => {\n this.getOrderId()\n }\n\n // 获取订单号-0元参团\n getOrderId = () => {\n let data = {\n course_id: getParam('id')\n }\n http.post(`${API['base-api']}/pdd/sys`, data).then((res) => {\n if (res.data.errno === 0) {\n this.setState({\n groupOrderId: res.data.data.order_id\n })\n this.getOrderStatus(res.data.data.order_id)\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n\n // 获取订单状态-0元参团\n getOrderStatus = (id) => {\n http.get(`${API.home}/m/pdd/order_status/${id}`).then((res) => {\n if (res.data.code === 200) {\n this.getTime(res.data.data.pdd_order_id)\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n // 获取倒计时-0元参团\n getTime = (id) => {\n http.get(`${API.home}/m/pdd_order_end_time/${id}`).then((res) => {\n if (res.data.code === 200) {\n this.setState({\n endTime: res.data.data.end_time,\n status: 7\n })\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n\n // 邀请好友参团\n toGroup = () => {\n this.props.history.push(`/togroup?id=${this.state.groupOrderId}`)\n }\n\n // 关闭弹窗\n colse = () => {\n this.props.boxHide(false);\n this.setState({\n status: 1\n })\n }\n\n render() {\n const {showSingleBox} = this.state;\n if (this.state.endTime) {\n let date = this.state.endTime * 1000\n let now = Date.now()\n setInterval(() => {\n date -= 1000\n let s = differenceInSeconds(new Date(date), now) % 60,\n m = differenceInMinutes(new Date(date), now) % 60,\n h = differenceInHours(new Date(date), now) % 24\n this.setState({\n hour: h,\n min: m,\n sec: s,\n })\n }, 1000)\n }\n const {singleType} = this.props;\n return (\n singleType === 1 &&\n <div>\n <div className='popup-box'>\n <div className='content singleset-payment'>\n <div className='price-box'>\n <span>实付款:</span>\n <p>{this.props.data.class_price}元</p>\n </div>\n <div className='course-info'>\n <p className='text-overflow-1'><span>课程:</span>\n {this.props.title}\n </p>\n <p className='text-overflow-1'><span>课时:</span>\n {this.props.data.name}\n </p>\n </div>\n <div className='payment-type'>\n <label>支付方式:</label>\n <p onClick={this.check.bind(this, '0')}>\n <i className='iconfont iconweixinzhifu buy'></i>\n <span>微信支付</span>\n <i className={`iconfont icondanseshixintubiao-5 redio ${this.state.payType === '0' ? 'redioed' : ''}`}></i>\n </p>\n {\n !browser.isWeixin &&\n <p onClick={this.check.bind(this, '1')}>\n <i className='iconfont iconalipay'></i>\n <span>支付宝</span>\n <i className={`iconfont icondanseshixintubiao-5 redio ${this.state.payType === '1' ? 'redioed' : ''}`}></i>\n </p>\n }\n\n </div>\n <div className='btn btn-18B4ED' onClick={this.toBuy}>确认购买</div>\n </div>\n <i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i>\n </div>\n\n </div>\n\n );\n }\n\n}\n\nexport default compose(\n connect(\n state => ({user: state.user}),\n null\n ),\n withRouter\n)(Single)\n","import React, { Component } from 'react'\nimport './index.scss'\nimport { getParam, http, browser } from \"@/utils\";\nimport { Toast } from 'antd-mobile';\nimport { Link, withRouter } from \"react-router-dom\";\nimport { compose } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { differenceInHours, differenceInMinutes, differenceInSeconds } from \"date-fns\";\n\n\nclass Single extends Component {\n constructor(props) {\n super(props)\n this.state = {\n // status: 1,\n orderId: '',\n nowPrice: '',\n laterPrice: '',\n hour: '',\n min: '',\n sec: '',\n endTime: '',\n groupOrderId: '',\n payType: '0', // 1支付宝 0微信\n // singleBox: false,\n }\n }\n\n componentDidMount() {\n\n }\n\n componentWillReceiveProps(nextProps, nextContext) {\n // console.log(nextProps);\n // this.setState({\n // singleBox: nextProps.singleBox\n // })\n }\n\n // 选择支付方式\n check = (type) => {\n this.setState({\n payType: type\n })\n }\n\n // 确定购买\n toBuy = () => {\n const videoID = this.props.data.video_id || this.props.data.id;\n http.get(`${API.home}/sys/createClassOrder/${videoID}`).then((res) => {\n if (res.data.code === 200) {\n this.setState({\n orderId: res.data.data.order_id\n })\n this.state.payType === '1' ? this.alipayPay(res.data.data.order_id) : this.weixinPay(res.data.data.order_id)\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n // 微信支付\n weixinPay = (orderId) => {\n // 微信内部-支付\n if (browser.isWeixin) {\n window.location.href = \"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=\" + encodeURIComponent(window.location.href + \"&aa=bb&oid=\" + orderId).toLowerCase() + \"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect\";\n } else {\n // 微信外部-支付\n http.get(`${API['base-api']}/pay/wxpay/wap_charge/oid/${orderId}`).then((res) => {\n if (res.data.errno === 0) {\n window.location.href = res.data.data.url + \"&redirect_url=\" + encodeURIComponent(window.location.href + \"&weixinpay=1&oid=\" + orderId).toLowerCase();\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n }\n // 支付宝支付\n alipayPay = (orderId) => {\n const courseId = getParam('id');\n http.get(`${API['base-api']}/pay/alipay/wap_charge_new/oid/${orderId}`).then((res) => {\n if (res.data.errno === 0) {\n window.location = res.data.data.url;\n courseId && window.localStorage.setItem('payCourse', courseId);\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n\n // 特价购买全集\n toBuyAll = (vcourseId) => {\n if(Number(this.props.isPdd) === 1) {\n this.props.history.push(`/order?id=${this.props.courseId}`, {group: 1})\n }else{\n let cidArr = JSON.stringify([Number(vcourseId)]);\n http.get(`${API['base-api']}/m/cart/addtopreorder/${cidArr}`).then((res) => {\n if (res.data.errno === 0) {\n this.props.history.push(\"/order?id=\" + res.data.data[0], {simple: 1});\n } else {\n Toast.info(res.data.msg, 2);\n }\n })\n }\n }\n // 0元购买全集\n zerobuyReceive = () => {\n Toast.success('购买全集成功', 3)\n this.colse()\n }\n // 0元参团\n zerogroupBuy = () => {\n this.getOrderId()\n }\n\n // 获取订单号-0元参团\n getOrderId = () => {\n let data = {\n course_id: getParam('id')\n }\n http.post(`${API['base-api']}/pdd/sys`, data).then((res) => {\n if (res.data.errno === 0) {\n this.setState({\n groupOrderId: res.data.data.order_id\n })\n this.getOrderStatus(res.data.data.order_id)\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n\n // 获取订单状态-0元参团\n getOrderStatus = (id) => {\n http.get(`${API.home}/m/pdd/order_status/${id}`).then((res) => {\n if (res.data.code === 200) {\n this.getTime(res.data.data.pdd_order_id)\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n // 获取倒计时-0元参团\n getTime = (id) => {\n http.get(`${API.home}/m/pdd_order_end_time/${id}`).then((res) => {\n if (res.data.code === 200) {\n this.setState({\n endTime: res.data.data.end_time,\n status: 7\n })\n } else {\n Toast.info(res.data.msg, 2)\n }\n })\n }\n\n // 邀请好友参团\n toGroup = () => {\n this.props.history.push(`/togroup?id=${this.state.groupOrderId}`)\n }\n\n toLearn = (vcourseId, videoID) => {\n this.props.boxHide(false);\n this.props.history.push(`/play/video?id=${vcourseId}&video_id=${videoID}`);\n }\n\n\n // 关闭弹窗\n colse = () => {\n this.props.boxHide(false);\n this.setState({\n status: 1\n })\n }\n\n render() {\n let {singleBox} = this.state;\n if (this.state.endTime) {\n let date = this.state.endTime * 1000\n let now = Date.now()\n setInterval(() => {\n date -= 1000\n let s = differenceInSeconds(new Date(date), now) % 60,\n m = differenceInMinutes(new Date(date), now) % 60,\n h = differenceInHours(new Date(date), now) % 24\n this.setState({\n hour: h,\n min: m,\n sec: s,\n })\n }, 1000)\n }\n const { singleType } = this.props;\n // console.log(this.props);\n const videoID = this.props.data.video_id || this.props.data.id;\n return (\n <div className='popup-box'>\n {\n singleType === 2 &&\n <div className='content payment-success'>\n <div className=\"header\">\n <i className='iconfont icondanseshixintubiao-5'></i>\n <span>购买成功</span>\n </div>\n <div className=\"dec\">· 3天内购买全集,可直接抵扣该集费用,{this.props.nowPrice}元购买。</div>\n <div className=\"dec\">· 超过3天,按照未购集数/全部集数等比例计费,{this.props.laterPrice}元购买全集。</div>\n <span onClick={()=>this.toLearn(this.props.vcourseId,videoID)} className='btn btn-18B4ED'>开始学习</span>\n <div className='btn btn-FF4000' onClick={()=>{this.toBuyAll(this.props.courseId)}}>¥{this.props.nowPrice}购买全集\n </div>\n </div>\n }\n {\n singleType === 3 &&\n <div className='content zero'>\n <div className=\"header\">\n <i className='iconfont icondanseshixintubiao-5'></i>\n <span>购买成功</span>\n </div>\n <div className=\"dec\">· 恭喜您获得0元拼团购买剩余课时的机会。</div>\n <div className='btn btn-FF4000' onClick={this.zerogroupBuy}>0元参团</div>\n </div>\n }\n {\n singleType === 4 &&\n <div className='content zero'>\n <div className=\"header\">\n <i className='iconfont icondanseshixintubiao-5'></i>\n <span>购买成功</span>\n </div>\n <div className=\"dec\">· 恭喜您获得0元购买剩余课时的机会。</div>\n <div className='btn btn-FF4000' onClick={this.zerobuyReceive}>0元购</div>\n </div>\n }\n {\n singleType === 6 &&\n <div className='content zero'>\n <div className=\"header\">\n <i className='iconfont icondanseshixintubiao-5'></i>\n <span>购买成功</span>\n </div>\n {/*<Link to={`/play/video?id=${this.props.vcourseId}&video_id=${videoID}`} className='btn btn-18B4ED'>去学习</Link>*/}\n <span onClick={()=>this.toLearn(this.props.vcourseId,videoID)} className='btn btn-18B4ED'>去学习</span>\n </div>\n }\n {\n singleType === 7 &&\n <div className='content group'>\n <div className=\"header\">\n <i className='iconfont icondanseshixintubiao-5'></i>\n <span>参团成功</span>\n </div>\n <div className='group-img'>\n <img src={this.props.user.data.avatar} alt=\"\"/>\n <img\n src=\"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/images/weekend/train7/ellipsis.png\"\n alt=\"\"/>\n <img\n src=\"https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/images/weekend/train7/ellipsis.png\"\n alt=\"\"/>\n\n </div>\n <div className='btn-l btn-FF4000' onClick={this.toGroup}>\n 剩余{String(this.state.hour).padStart(2, 0)}:{String(this.state.min).padStart(2, 0)}:{String(this.state.sec).padStart(2, 0)}\n 邀请好友参团\n </div>\n </div>\n }\n <i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i>\n </div>\n\n );\n }\n\n}\n\nexport default compose(\n connect(\n state => ({user: state.user}),\n null\n ),\n withRouter\n)(Single)\n"],"sourceRoot":""}