{"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","duration","video_auth","practice","qid","react_router_dom","to","pathname","is_tested","search","title","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","href","url","closeShareModal","Video","previousPlaybackRate","currentPlaybackRate","reconnect","videoList","currentVideoSrc","isAuth","course","salePrice","isLoading","isShowShareModal","shareData","singleBox","singMess","singleType","nowPrice","laterPrice","tobuy","_this2$state$course","errno","simple","toSingleset","console","log","window","localStorage","setItem","JSON","stringify","boxHide","val","payCallback","assertThisInitialized","getParam","parse","getItem","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","setupRecord","recordSocket","io","record","transports","forceNew","time","currentTime","recordTimer","sendRecord","emit","recordUserInfo","uid","user","courseID","video_id","video_time","parseInt","plat","setupWS","ws","WebSocket","setTimeout","timer","e","sendMessage","message","send","getShareProgressInfo","countSchedule","mtype","token","platform","sendWatchTime","sec","rate","_this2$state","v_course_id","setupTimer","count","watchSec","paused","initializePlayer","HELP_IMPROVE_VIDEOJS","video","controls","preload","bigPlayButton","textTrackDisplay","posterImage","errorDisplay","playbackRates","controlBar","pictureInPictureToggle","addChild","playbackRate","sendLastRecord","post","hasAuth","setPlayerSrc","playVideo","getCoursePrice","getLastVideoIndex","lastIndex","findIndex","getVideoList","_res$data","_res$data$data","playSetup","_this2$state$course2","is_aist","last_video_id","lessonAvailable","Promise","resolve","playWithAuth","text","onPress","src","_this2$state$course3","_this2$state2","location","protocol","_this$props$location$","browser","isWeixin","jsCookie","getDatumCatalog","replace","slice","dispose","close","_this3","_this4","match","_this$state","HeaderBar","arrow","common","ref","el","activeClassName","single","vcourseId","videoId","course_tile","singleSuccess","react_router","exact","from","path","render","video_video_catalog","assign","video_datum_catalog","video_recommendation","VList","react__WEBPACK_IMPORTED_MODULE_0___default","status","alt","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_6__","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":"static/js/video.087b46c9.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\">{item.name}</span>\n <span className='duration'>{item.duration}</span>\n <i className={classnames(`iconfont`,\n [item.video_auth === 0\n ? 'iconiconfront-74'\n : 'iconplay_hovericon'],\n )}/>\n </div>\n {\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 }}>\n <div className=\"exercise\">\n 课后练习:{item.practice.title}\n <i className={classnames('iconfont',!item.video_auth ? 'iconiconfront-74' : item.practice.is_tested ? 'iconiconfront-3' : '')}/>\n </div>\n </Link>\n : null\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)","import React, { Component } from 'react'\nimport HeaderBar from '@/common/HeaderBar'\nimport './video.scss'\nimport {NavLink, Route, Redirect, Switch, Link} 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 io from 'socket.io-client'\nimport Single from \"@/components/detail/single\";\nimport SingleSuccess from \"../detail/single/singleSuccess\";\nimport './CustomPlayButton'\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\n recordSocket\n recordTimer\n\n\n state = {\n title: '',\n courseId: null,\n videoList: [],\n datum: [],\n currentVideoSrc: '',\n activeIndex: 0,\n isAuth: true,\n course: {},\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 }\n\n\n componentDidMount() {\n const location = window.location;\n if (location.protocol === 'https:') {\n location.replace('http' + 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: { 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 this.setupRecord()\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 console.log(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 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 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 setupRecord = () => {\n this.recordSocket = io(API.record, {\n transports: ['websocket'],\n forceNew: true\n })\n // this.recordSocket = io(API.record)\n this.recordSocket.on('seek', time => {\n this.player.currentTime(time)\n })\n\n this.recordTimer = setInterval(() => {\n this.sendRecord()\n }, 5000)\n }\n\n sendRecord = () => {\n if (this.recordSocket && this.player) {\n this.recordSocket.emit('addRecord', this.recordUserInfo())\n }\n }\n\n recordUserInfo = () => {\n let {uid} = this.props.user.data\n return {\n uid,\n course_id: this.courseID,\n video_id: this.state.videoList[this.state.activeIndex]['id'],\n video_time: parseInt(this.player.currentTime()),\n plat: 5\n }\n }\n\n setupWS = () => {\n this.ws = new WebSocket(API[\"process-api\"]);\n this.ws.addEventListener('error', () => {\n this.ws = null\n /*setTimeout(() => {\n this.setupWS();\n }, 1000)*/\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 })\n this.ws.addEventListener('message', e => {\n const data = JSON.parse(e.data);\n data.code == 4040 && (this.reconnect = false)\n })\n }\n\n sendMessage = message => {\n this.ws && this.ws.send(JSON.stringify(message))\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 this.sendMessage({\n mtype: 'count_schedule',\n uid: this.props.user.data.uid,\n token: this.token,\n platform: 5\n })\n }\n\n sendWatchTime = (sec, rate) => {\n const {videoList, activeIndex, vCourseId} = this.state\n\n this.sendMessage({\n mtype: 'watch_time',\n rate,\n time: sec,\n video_id: videoList[activeIndex]['id'],\n course_id: this.courseID,\n v_course_id: vCourseId,\n uid: this.props.user.data.uid,\n token: this.token,\n platform: 0\n })\n }\n\n setupTimer = () => {\n this.count = 0\n this.watchSec = 0\n clearInterval(this.timer)\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.count++\n }\n }\n }, 1000)\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('ready', () => {\n this.recordSocket.emit('load', this.recordUserInfo())\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.getShareProgressInfo()\n clearInterval(this.timer)\n })\n this.player.on('seeked', () => {\n this.sendRecord()\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.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 selectVideo = index => {\n if (index === this.state.activeIndex) {\n return\n }\n\n this.countSchedule()\n\n this.setState(\n {\n activeIndex: index\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 } 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 } else {\n Toast.info(data.msg)\n }\n }\n )\n }\n\n playSetup = () => {\n // is_aist,是否AI特训营\n const { course={} } = this.state;\n if (course.is_aist) {\n this.setupWS();\n this.setupTimer();\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.play()\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\n render() {\n let {match, location} = this.props\n const {videoList, activeIndex, isAuth, salePrice, course, singleBox, singleType} = this.state;\n return (\n <div className='play'>\n <HeaderBar title={this.state.title} arrow={true}/>\n <Loading isLoading={this.state.isLoading}>\n <div className=\"video\">\n <video className={'video-js'} ref={el => this.video = el}>\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 {...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 </div>\n );\n }\n}\n\n\nexport default connect(\n state => ({user: state.user}),\n null\n)(Video);","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)}>\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;","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 {\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 <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 </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":""}