{"version":3,"sources":["components/detail/bargain/image/kanjia_icon.png","components/detail/bargain/image/kanjia_cg_icon.png","components/detail/bargain/bargainInfo/index.js","components/detail/bargain/index.js","components/detail/group/index.js","components/detail/outline/index.js","components/detail/shareRank/index.js","components/detail/audition/index.js","components/detail/btnstatus/index.js","components/detail/carousel/index.js","components/detail/index.js","components/bargainMiddlePage/image/kanjia_icon.png","components/detail/overlay/index.js","components/detail/single/index.js","components/detail/single/singleSuccess.js","components/bargainMiddlePage/ranking/index.js"],"names":["module","exports","__webpack_require__","p","BargainInfo","state","mobile","code","isBargain","handleChange","e","_e$target","target","name","value","_this","setState","Object","defineProperty","sendCode","console","log","validateTel","http","post","concat","API","phone_num","then","res","data","toast_default","a","info","errno","msg","handleClick","home","objectSpread","props","iWantBargain","_this$state","this","react_default","createElement","className","list_default","type","onChange","placeholder","maxLength","htmlFor","id","onClick","react_router_dom","to","Component","Bargain","classCallCheck","possibleConstructorReturn","getPrototypeOf","call","getBargainRankList","courseId","list","outList","getBargainInfo","getParam","barInfo","bargain_status","getMore","isShowMore","boxHide","val","toArtifact","isShowOverlay","status","useArtifact","toKanjia","toCart","course_id","history","push","continueBargain","_this$state$barInfo","bargain_code","user","uid","parent_uid","_res$data","user_status","close","kanjiaIcon","require","limitPeople","bargainCode","time","BargainIntro","limit_people","BargainStatus","overlay","bargainInfo","Artifact","UseArtifact","ranking","icon","flex_default","direction","justify","Item","thirdRow","btn","_useState","useState","_useState2","slicedToArray","day","setDay","_useState3","_useState4","hour","setHour","_useState5","_useState6","min","setMin","_useState7","_useState8","sec","setSec","is_artifact","invit_num","date","end_time","now","Date","setInterval","differenceInSeconds","differenceInMinutes","differenceInHours","differenceInDays","bargain_price","String","padStart","assist_num","src","avatar_file","alt","user_name","amount","compose","connect","withRouter","Group","closeMore","toPay","pdd_order_id","_this$props","courseInfo","group_status","group","alreadyIn","invitedFriends","hideMbc","formatTimeByMillisecond","millisecond","hours","minutes","seconds","parseInt","pdd_price","number","countdown","now_groupon_list","nextProps","course_info","pdd_group_info","length","map","item","_this2","_this$props$courseInf","_this3","groupInfo","groupon_member","groupSuccessMbc","member","ary","num","groupTip","key","Math","random","avatar","user_type","now_groupon_total","index","person_num","Fragment","OutLine","htmlDecode","content","replace","tabchange","tab","getList","get","stageInfo","introduce","white_space_default","tabs_default","tabs","title","initialPage","teachers","course_hour","start_time","dangerouslySetInnerHTML","__html","intro","stage_name","lesson","is_aist","class_status","toAudition","toSingleset","class_price","video_auth","is_video","v_course_id","video_id","is_open","is_baoming","point","practice","is_tested","qid","ShareRank","getRankList","rankingslice","slice","getCode","share","dist_first","dist_first_level_ti","dist_code","openRanking","shareRank","colse","head_imgurl","align","bind","Audition","auditionBox","common","text","BtnStatus","signUpNow","hasError","cidArr","JSON","stringify","Number","simpleCourse","simple","formatDate","split","tobuy","bargainStatus","keyToGroup","bargainToOrder","bargain","cancel","isbuy","in_cart","_nextProps$data","_nextProps$user","is_bargain","_this$props2","_this$props2$user","_this$state$courseInf","price1","price","aist_start_time","CancelBargain","getCourses","Carouselw","timer","clearTimeout","wing_blank_default","carousel_default","vertical","dots","autoplay","infinite","live_msg","Detail","payCallback","assertThisInitialized","singMess","parse","window","localStorage","getItem","intervalPayStatus","clearInterval","singleType","nowPrice","now_price","laterPrice","three_day_later_price","isPdd","is_pdd","isweixinPay","weixin_code","onBridgeReady","WeixinJSBridge","invoke","appId","timeStamp","nonceStr","package","signType","paySign","err_msg","alert","document","addEventListener","attachEvent","check","oid","payCallBack","fetchCourseInfo","course","singleBox","setItem","_this2$props","addCourseToCart","ß","_this2$state$course$c","course_title","image_name","_this2$state$course$c2","browser","isWeixin","shareData","desc","link","location","origin","imgUrl","_res$data2","nonce_str","signature","timestamp","wx","config","debug","jsApiList","ready","hideAllNonBaseMenuItem","showMenuItems","menuList","updateAppMessageShareData","success","updateTimelineShareData","isvip","wxShare","logo","_this$props$location$","prevProps","_this$state$course$co","_this$state2","href","undefined","_this$props$location$2","arrow","cart","toHref","components_detail_carousel","simpledescription","price0","course_qq","vip_range","service","detail_audition","single","vcourseId","videoId","singleSuccess","is_dist","detail_shareRank","detail_group","detail_bargain","detail_outline","detail_btnstatus","dispatch","bindActionCreators","root","body","documentElement","events","Overlay","_Users_xzh_dnmp_www_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__","_Users_xzh_dnmp_www_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__","_Users_xzh_dnmp_www_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__","preventScroll","preventDefault","overlayBox","forEach","passive","removeEventListener","_this4","ReactDom","createPortal","react__WEBPACK_IMPORTED_MODULE_5___default","ref","el","style","top","scrollY","children","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","url","_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","zerogroupBuy","getOrderId","groupOrderId","getOrderStatus","getTime","endTime","toGroup","nextContext","_this5","s","m","h","react__WEBPACK_IMPORTED_MODULE_8___default","toLearn","react__WEBPACK_IMPORTED_MODULE_7___default","Ranking","MoreList","img"],"mappings":"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","file":"static/js/detail.a3063ba1.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAA51BMVEUAAAD3yyr4zCr60jD61DT4zSz4zi360C770jL93jn94UH3yin4yyz4ziz4zi34zS361TX50i/50jD61DP72Dj61jP+4kH+4ED4zCv3zCz4zSz4zS350jL61jb61jT6zir50DH83Dz71DP83Dj+5ET2zDD50C77zyj93j/930H82zv3yir3yCj/6072xib3yyv/6kz2xiT/7lD/8FL2wyL2xCP/8VT/7E//8lb83T74zS32wiH/81b/6Er71zj94kT72zz50zP+5kj84EH/9Vj+5Uf61TX50TH83j/4zy//9Ff3xyb0vBpXStORAAAAK3RSTlMA8+yrk9q7gTsdBPfnysGyoJ+IhWhMFg3w5d7QvKSbmI9eWich+nxTRjARluH5lgAAAm5JREFUOMt1lddi4jAQRYVp6b1vspvdZKvG6pI7NjWQ7P9/T7BFQBBzXnjw0YyvxhJonZ1fzcODRuPgsNndQVvZPW9DCca4/Lk7e6rV/rUwIdiBcNy6+uz98DjgDYDffN/0WsTR3Kpf171j13MB3Vn38Fb0/cr7BpsdgeIl6uTD++16FDQhMQanu1okuv4JjpbAkMZm4JoEX9vGxFmNJ9Eoy1KGyeodaPJQelfUWZz0RpIJIYeEa0WAx7RaDrtz8Yw4TWIh/JIgm0b5hOayp6s8rbnoOQV5njK/QozGLJ+lr0NeFbhBaMeNzPsi8C1hL+E9IwcAlfkHdcGdbWSsxoTpFy+FEZlNoM/RsStC5NuKwYD1BybzBbMiv0df3NaQTM1H45hJwURmN/StjTx3KupFBkIGzJfFbFIWN2NSieCh/bURMynHPSl8EfmSlZULZR81UMMRk2nqh5P/UeiznJUvK8SMf4ie07hvAjPmhA8My6rs6VBji+eEIYTJQL5omvRNFZ6ZAMgi5R1qLieoopCFQ1Xu0kBW0UWs6aLIEeqSZWITCEF5uaQIfV+mWayW3c7sCG1jw8IiqeYwGYWSFW+cLsXL5UehpimTzL4TxMOoDwpWXmMPoUeySCzm81DUfudcu6ec6vLQ7gLYrWZm7Dx1AXhGc044xjpKWbU1dR5VTXu4MGCdj9hrrnEtBK4W1w7BfCZefcrrG6sLtOCUUB73KKe1om1sOQJMFKn39CFy6BBcD/CjPeRyuuXa0w9og4v9zyro/YuaG/wUr6uEw8kzquPp8dbe9fayv239RdvYu+x22vO/D6/dOb9cD/EONO7gZ+bVU9IAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/kanjia_cg_icon.81a489ac.png\";","import React, {Component} from 'react';\nimport {InputItem, List} from \"antd-mobile\";\nimport './bargain-info.scss'\nimport {validateTel} from \"@/utils\";\nimport {Toast} from 'antd-mobile'\nimport { http } from \"@/utils\";\nimport {Link} from \"react-router-dom\";\n\n\nclass BargainInfo extends Component {\n\n    state = {\n        mobile: '',\n        code: '',\n        isBargain: true\n    }\n\n    handleChange = e => {\n\n        let {name, value} = e.target\n\n        this.setState({\n            [name]: value\n        })\n    }\n\n    sendCode = () => {\n\n        console.log(validateTel(this.state.mobile));\n\n        if (!validateTel(this.state.mobile)) {\n            Toast.info('请输入正确的手机号')\n            return\n        }\n\n\n        http.post(`${API['base-api']}/sys/bind_send_sms`, {\n            phone_num: this.state.mobile\n        }).then(res => {\n            if (res.data.code == 200) {\n                Toast.info('验证码发送成功', 2, null, false)\n            } else if (res.data.errno === 410) {\n                Toast.info('该手机号已注册,请使用该手机号登录,发起砍价。', 3, null, false)\n                this.setState({\n                    isBargain: false\n                })\n            } else {\n                Toast.info(res.data.msg)\n            }\n        })\n    }\n\n    handleClick = () => {\n        if (!this.state.code) {\n            Toast.info('请填写验证码')\n            return\n        }\n\n        http.post(`${API.home}/m/user/bindMobile`, {\n            ...this.state\n        }).then(res => {\n            if (res.data.code == 200) {\n                Toast.info('绑定手机号成功', 2, null, false)\n                this.props.iWantBargain()\n            } else {\n                Toast.info(res.data.msg)\n            }\n        })\n\n    }\n\n\n    render() {\n        let {mobile, code} = this.state\n        return (\n            <div className={'bargain-bind-phone'}>\n                <div className=\"title\">绑定手机,先砍一刀</div>\n                <List className={'list'}>\n                    <input type=\"tel\" onChange={this.handleChange} name='mobile' placeholder='手机号' maxLength={11}/>\n                    <label htmlFor=\"code\">\n                        <input type=\"tel\" id='code' onChange={this.handleChange} name='code' placeholder='验证码'\n                               maxLength={6}/>\n                        <div className={'send-code'} onClick={this.sendCode}>发送验证码</div>\n                    </label>\n                </List>\n                {\n                    this.state.isBargain &&\n                    <button onClick={this.handleClick}\n                            className={validateTel(mobile) && code ? 'active' : ''}>先砍一刀</button>\n                }\n                {\n                    !this.state.isBargain &&\n                    <Link className='button active' to={`/passport/login`}>去登录</Link>\n                }\n            </div>\n        );\n    }\n}\n\nexport default BargainInfo","import React, { Component, useState } from 'react'\nimport './bargain.scss'\nimport { Flex, Toast } from \"antd-mobile\"\nimport Overlay from '../overlay'\nimport BargainInfo from './bargainInfo'\nimport {differenceInSeconds, differenceInMinutes, differenceInHours, differenceInDays} from \"date-fns\"\nimport { api, getParam, http } from \"@/utils\"\nimport Ranking from \"@/components/bargainMiddlePage/ranking\"\nimport { compose } from \"redux\"\nimport { withRouter } from 'react-router-dom'\nimport {connect} from \"react-redux\";\n\n\nclass Bargain extends Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            isShowOverlay: false,\n            kanjiaIcon: require('./image/kanjia_icon.png'),\n            info: '',\n            outList: [],\n            list: [],\n            limitPeople: '',\n            status: '',\n            bargainCode: '',\n            time: '',\n            barInfo: {}\n        }\n    }\n\n    componentDidMount() {\n        this.getBargainInfo();\n    }\n\n    // 获取助理好友\n    getBargainRankList = (id, type) => {\n        let data = {\n            courseId: id,\n            type: type\n        }\n        http.post(`${API.home}/m/bargain/rankList`, data).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    list: res.data.data.list,\n                    outList: res.data.data.list[0]\n                })\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n\n\n    //获取砍价信息\n    getBargainInfo = () => {\n        let data = {\n            courseId: getParam('id')\n        }\n        http.post(`${API.home}/m/bargain/courseDetail`, data).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    barInfo: res.data.data,\n                    // info: res.data.data,\n                    // limitPeople: res.data.data.limit_people,\n                    // bargainCode: res.data.data.bargain_code\n                })\n                if (res.data.data.bargain_status === 0) {\n                    this.getBargainRankList(getParam('id'), 0)\n                }\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n\n    // 查看更多\n    getMore = () => {\n        this.setState({\n            isShowMore: true\n        })\n    }\n\n    // 自组件传给父组件的boxHide\n    boxHide = (val) => {\n        this.setState({isShowMore: val})\n    }\n\n    // 领取砍价神器\n    toArtifact = () => {\n        let data = {\n            courseId: getParam('id')\n        }\n        http.post(`${API.home}/m/bargain/receiveLimit`, data).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    isShowOverlay: true,\n                    status: 1,\n                })\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n\n    // 使用砍价神器\n    useArtifact = () => {\n        this.toKanjia(getParam('id'), 2, 0)\n    }\n\n    // 加入购物车\n    toCart = () => {\n        let data = {\n            course_id: getParam('id')\n        }\n        http.post(`${API.home}/m/cart/add`, data).then((res) => {\n            if (res.data.code === 200 || res.data.code === 15001) {\n                this.props.history.push('/shopcart')\n            } else {\n                Toast.info(res.data.msg, 2);\n            }\n        })\n    }\n    // 继续砍价\n    continueBargain = () => {\n        const { barInfo = {} } = this.state;\n        const code = barInfo.bargain_code;\n        this.props.history.push(`/bargain-middle-page?id=${getParam('id')}&bargaincode=${code}&is_originator=1`)\n    }\n\n    // 我要砍价\n    iWantBargain = () => {\n        const {user} = this.props\n        const uid = user && user.data && user.data.uid\n        if(!uid){\n            this.props.history.push('/passport/login')\n        } else {\n            this.toKanjia(getParam('id'), 1, 0)\n        }\n    }\n\n    // 砍价接口\n    toKanjia = (id, type, uid) => {\n        let data = {\n            course_id: id,\n            type: type,  // 1 用户自己砍价 2 使用砍价神器 3 好友助力砍价 4 好友第二次助力\n            parent_uid: uid // 被助力人id 【自己本人操作传0】\n        }\n        const { history } = this.props;\n        http.post(`${API.home}/m/bargain/toBargain`, data).then((res) => {\n            const { data: { data, code } } = res;\n            if (code === 200) {\n                if (type === 2) {\n                    this.setState({\n                        isShowOverlay: true,\n                        status: 2,\n                    })\n                } else {\n                    if (data.user_status === 2) {\n                        this.setState({\n                            isShowOverlay: true,\n                            status: 3,\n                        })\n                    } else {\n                        history.push(`/bargain-middle-page?id=${getParam('id')}&bargaincode=${data.bargain_code}&is_originator=1`)\n                    }\n                }\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n\n\n    // 关闭弹窗\n    close = () => {\n        this.setState({\n            isShowOverlay: false,\n            status: '',\n        })\n    }\n\n    render() {\n        const { list, outList, barInfo } = this.state;\n        const {user} = this.props\n        const uid = user && user.data && user.data.uid\n        return (\n            <div className={'bargain-func'}>\n\n                {/*bargain_status 砍价状态 0-砍价中,1砍价结束,待支付,2砍价过期(没有砍价记录没有砍价信息),3已购买*/}\n                {\n                    (barInfo.bargain_status === 2 || !uid) &&\n                    <BargainIntro limitPeople={barInfo.limit_people} iWantBargain={this.iWantBargain}/>\n                }\n                {\n                    (barInfo.bargain_status === 0 || barInfo.bargain_status === 1) && uid &&\n                    <BargainStatus\n                        info={barInfo}\n                        outList={outList}\n                        getMore={this.getMore}\n                        toArtifact={this.toArtifact}\n                        useArtifact={this.useArtifact}\n                        continueBargain={this.continueBargain}\n                    />\n                }\n\n\n                {\n                    this.state.isShowOverlay &&\n                    <Overlay>\n                        {/*绑定手机号*/}\n                        {\n                            this.state.status === 3 &&\n                            <BargainInfo iWantBargain={this.iWantBargain}/>\n                        }\n\n\n                        {/*领取砍价神器*/}\n                        {\n                            this.state.status === 1 &&\n                            <Artifact useArtifact={this.useArtifact}/>\n                        }\n                        {/*使用砍价神器*/}\n                        {\n                            this.state.status === 2 &&\n                            <UseArtifact toCart={this.toCart}/>\n                        }\n\n                        {\n                            this.state.status !== 0 &&\n                            <i onClick={this.close} className={'iconfont iconiconfront-2 bargain-close'}></i>\n                        }\n\n                    </Overlay>\n\n                }\n\n\n                {/*更多好友砍价*/}\n                <Ranking\n                    list={list}\n                    icon={this.state.kanjiaIcon}\n                    limitPeople={barInfo.limit_people}\n                    isShowMore={this.state.isShowMore}\n                    boxHide={this.boxHide}\n                />\n\n            </div>\n        )\n    }\n}\n\nfunction BargainIntro(props) {\n    return (\n        <div className=\"intro-outer\">\n            <div className=\"intro-inner\">\n                <Flex direction={'column'} justify={'center'} className={'intro-wrapper'}>\n                    <p>\n                        邀请\n                        <span className={'indicator'}>{props.limitPeople}位</span>\n                        好友帮忙砍价可获得\n                        <span className={'indicator'}>【砍价神器】</span>\n                    </p>\n                    <p>一刀绝杀,砍爆底价</p>\n                    <Flex.Item>\n                        <button onClick={props.iWantBargain}>我要砍价</button>\n                    </Flex.Item>\n                </Flex>\n            </div>\n        </div>\n    )\n}\n\nfunction BargainStatus(props) {\n\n    const [day, setDay] = useState(0)\n    const [hour, setHour] = useState(0)\n    const [min, setMin] = useState(0)\n    const [sec, setSec] = useState(0)\n\n\n    let thirdRow, btn\n    // is_artifact\t 0-再邀请多少人可以使用 1-可以使用未领取 2-已领取 3-已使用\n    if (props.info.is_artifact === 0) {\n        thirdRow =\n            <div>再邀请<span className={'indicator'}>{props.info.invit_num}</span>位好友助力即可获得<span\n                className={'indicator'}>【砍价神器】</span></div>\n    } else if (props.info.is_artifact === 1) {\n        thirdRow = <div>恭喜你获得<span className={'indicator'}>【砍价神器】</span></div>\n        btn = <button onClick={props.toArtifact}>立即领取</button>\n    } else if (props.info.is_artifact === 2) {\n        thirdRow = <div>恭喜你获得<span className={'indicator'}>【砍价神器】</span></div>\n        btn = <button onClick={props.useArtifact}>立即使用</button>\n    }\n\n\n    let date = props.info.end_time * 1000\n    let now = Date.now()\n    setInterval(() => {\n        date -= 1000\n        setSec(differenceInSeconds(new Date(date), now) % 60)\n        setMin(differenceInMinutes(new Date(date), now) % 60)\n        setHour(differenceInHours(new Date(date), now) % 24)\n        setDay(differenceInDays(new Date(date), now) % 24)\n\n    }, 1000)\n\n\n    return (\n        <div className=\"status-outer\">\n\n            {\n                props.info.bargain_status === 0 &&\n                <div className=\"status-inner\">\n\n                    <Flex direction={'column'}>\n                        <div className={'first-row'}>\n                            <div>\n                                已砍<span className={'indicator'}>{props.info.bargain_price}元</span>\n                                <span className={'time hour'}>{String(hour).padStart(2, 0)}</span> :&nbsp;\n                                <span className={'time min'}>{String(min).padStart(2, 0)}</span> :&nbsp;\n                                <span className={'time sec'}>{String(sec).padStart(2, 0)}</span>\n                                <span className='over'>后砍价结束</span>\n                            </div>\n                            <div onClick={props.getMore}>{props.info.assist_num}位好友助力></div>\n                        </div>\n\n                        <div className=\"sec-row\">\n                            <div>\n                                <img\n                                    src={props.outList.avatar_file}\n                                    alt=\"\"/>\n                                <span className='name'>{props.outList.user_name}</span>\n                            </div>\n                            <div>\n                                <div>砍掉<span className={'indicator'}>{props.outList.amount}元</span></div>\n                                <button onClick={props.continueBargain}>继续砍价</button>\n                            </div>\n                        </div>\n                        <div className=\"third-row\">\n                            {thirdRow}\n                            {btn}\n                        </div>\n                    </Flex>\n                </div>\n            }\n\n            {\n                props.info.bargain_status === 1 &&\n                <div className=\"status-inner status-over\">\n\n                    <Flex direction={'column'}>\n                        <div className={'first-row'}>\n                            <div>\n                                已砍<span className={'indicator'}>{props.info.bargain_price}元</span>\n                                <span className='bargain-over'>\n                                    砍价结束\n                                </span>\n                            </div>\n                            <div onClick={props.getMore}>{props.info.assist_num}位好友助力></div>\n                        </div>\n                        <div className=\"time-tobuy\">\n                            砍价金额将于\n                            <span className={'time hour'}>{String(day).padStart(2, 0)}</span><span\n                            className={'unit'}> 天 </span>\n                            <span className={'time min'}>{String(hour).padStart(2, 0)}</span><span\n                            className={'unit'}> 时 </span>\n                            <span className={'time sec'}>{String(min).padStart(2, 0)}</span><span\n                            className={'unit'}>分</span>\n                            后清零,请尽快完成支付\n                        </div>\n                    </Flex>\n                </div>\n            }\n        </div>\n    )\n}\n\n\n{/*领取砍价神器*/\n}\n\nfunction Artifact(props) {\n    return (\n        <div className='artifact-box'>\n            <p className='top-tip'>恭喜你获得【砍价神器】!</p>\n            <p className='middle-tip'>\n                您可以使用\n                <span className={'indicator'}>【砍价神器】</span>\n                再砍一刀\n            </p>\n            <button className='use-artifact' onClick={props.useArtifact}>立即使用</button>\n        </div>\n    )\n}\n\nfunction UseArtifact(props) {\n    return (\n        <div className='use-artifact-box'>\n            <img className='top-img' src={require('./image/kanjia_cg_icon.png')} alt=\"\"/>\n            <p className='top-tip'>厉害了,又砍掉了10元!</p>\n            <p className='middle-tip'>\n                你已经砍了\n                <span className={'indicator'}>109元</span>\n                没见过你这么能砍的人...\n            </p>\n            <p className='btm-tip'>\n                不能再砍了哦~\n            </p>\n            <button className='tubuy' onClick={props.toCart}>去支付</button>\n        </div>\n    )\n}\n\n\nexport default compose(\n    connect(\n        state => ({\n            user: state.user\n        }),\n        null\n    ),\n    withRouter\n)(Bargain)\n","import React, { Component } from 'react'\nimport './index.scss'\nimport { getParam, http } from \"@/utils\"\nimport { connect } from \"react-redux\"\nimport { Flex } from 'antd-mobile'\nimport {browser} from \"@/utils\"\nimport {Toast} from 'antd-mobile'\n\n\nclass Group extends Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            isShowMore: false,\n            alreadyIn: false,\n            pdd_price: 0,\n            number: 0,\n            data: {},\n            countdown: props.countdown,\n            now_groupon_list: [],\n        }\n        console.log(props);\n    }\n\n    // 查看更多\n    getMore = () => {\n        this.setState({\n            isShowMore: true\n        })\n    }\n\n    // 关闭更多窗口\n    closeMore = () => {\n        this.setState({\n            isShowMore: false\n        })\n    }\n\n    toPay = (pdd_order_id) => {\n        const {courseInfo, history} = this.props;\n        if (courseInfo.group_status === 3) {\n            history.push(\n                `/order?id=${getParam('id')}`, \n                {\n                    group: 1,\n                    pdd_order_id\n                }\n            );\n        } else {\n            this.setState({\n                isShowMore: false,\n                alreadyIn: true\n            });\n        }\n    }\n\n    invitedFriends = () => {\n        this.setState({\n            isShowMore: false,\n            alreadyIn: false,\n        });\n        this.props.invitedFriends();\n    }\n\n    componentWillReceiveProps(nextProps) {\n        if (nextProps.courseInfo && nextProps.courseInfo.courseInfo && nextProps.courseInfo.courseInfo.course_info && nextProps.courseInfo.courseInfo.course_info.pdd_group_info) {\n            let now_groupon_list = nextProps.courseInfo.courseInfo.course_info.pdd_group_info.now_groupon_list;\n            if (now_groupon_list && now_groupon_list.length > 0) {\n                now_groupon_list.map(item => {\n                    item.end_time -= 1;\n                    return item;\n                });\n                this.setState({\n                    now_groupon_list,\n                })\n            }\n        }\n        this.setState({\n            countdown: nextProps.countdown\n        })\n    }\n\n    componentDidMount() {\n        const { courseInfo={} } = this.props;\n        if (courseInfo.pdd_group_info) {\n            let now_groupon_list = courseInfo.pdd_group_info.now_groupon_list;\n            if (now_groupon_list && now_groupon_list.length > 0) {\n                setInterval(() => {\n                    now_groupon_list.map(item => {\n                        item.end_time -= 1;\n                        return item;\n                    });\n                    this.setState({\n                        now_groupon_list,\n                    })\n                }, 1000);\n            }\n        }\n    }\n\n    hideMbc = () => {\n        this.setState({\n            alreadyIn: false\n        });\n    }\n\n    formatTimeByMillisecond = (millisecond) => {\n        let date = millisecond * 1000,\n            hours = 0,\n            minutes = 0,\n            seconds = 0;\n        date -= 1000;\n        hours = `${parseInt(date / (60 * 60 * 1000))}`.padStart(2, 0);\n        minutes = `${parseInt((date - hours * 3600000) / 60000)}`.padStart(2, 0);\n        seconds = `${parseInt((date - hours * 3600000 - minutes * 60000) / 1000)}`.padStart(2, 0);\n        return `${hours}:${minutes}:${seconds}`;\n    }\n\n    render() {\n        const { courseInfo } = this.props;\n        const { alreadyIn, countdown, now_groupon_list } = this.state;\n        let groupInfo = '', \n        groupon_member = '', \n        group_status = -1, \n        groupSuccessMbc = null;\n        if (courseInfo) {\n            groupInfo = courseInfo.pdd_group_info;\n            groupon_member = groupInfo.groupon_member;\n            group_status = courseInfo.group_status;\n        }\n        if (group_status === 4) {\n            if (groupon_member.member) {\n                const { number } = groupon_member;\n                let ary = [], num = number;\n                while (num != 0) {\n                    ary.push(num);\n                    num--;\n                }\n                let groupTip = (<div className='group-user-list'>\n                    <Flex justify='center' className='imgList'>\n                        {\n                            groupon_member.member.map(item => {\n                                return (\n                                    <div className='imgContainer' key={Math.random()}>\n                                        <img className='imgname' src={item.avatar} alt='' />\n                                        {\n                                            item.user_type === 1 ? (\n                                                <div className='leaderFlag'>\n                                                    <span>团长</span>\n                                                </div>\n                                            ) : null\n                                        }\n                                    </div>);\n                            })\n                        }\n                        {\n                            ary.map(item => {\n                                return (<div className='imgContainer' key={Math.random()}>\n                                    <div className='imgname'>\n                                        <i className='iconfont iconwode-xianxing no-body'></i>\n                                    </div>\n                                </div>)\n                            })\n                        }\n                    </Flex>\n                </div>);\n                groupSuccessMbc = <div className='groupSuccessMbc' onClick={this.hideMbc}>\n                    <div className='content'>\n                        <p>你已参团</p>\n                        {groupTip}\n                        <div className='group-btn' onClick={this.invitedFriends}>邀请好友参团 {countdown} 后结束</div>\n                        <p className='dec'>分享到3个群后,成团率高达98%</p>\n                    </div>\n                </div>;\n            }\n\n        }\n\n        return (\n            <div className='group-box'>\n                <div className=\"group-title\">\n                    <span>{groupInfo.now_groupon_total}人正在开团,可直接参与</span>\n                    <span className='more' onClick={this.getMore}>\n                        查看更多\n                        <i className='iconfont iconiconfront-70'></i>\n                    </span>\n\n                </div>\n                <ul className=\"group-list\">\n                    {\n                        groupInfo.now_groupon_list && groupInfo.now_groupon_list.length > 0 && groupInfo.now_groupon_list.map((item, index) => {\n                            return (\n                                <li key={index} className='group-item'>\n                                    <img className='avatar' src={item.avatar} alt=\"\" />\n                                    <div className='user-name text-overflow-one'>\n                                        {item.user_name}\n                                    </div>\n                                    <div className='group-status'>\n                                        <p>还差<span className='red'>{item.number}人</span>拼成</p>\n                                        <p>剩余 {this.formatTimeByMillisecond(item.end_time)}</p>\n                                    </div>\n                                    <span onClick={() => { this.toPay(item.pdd_order_id) }} className='topay'>去参团</span>\n                                </li>\n                            )\n                        })\n                    }\n                </ul>\n                <div className=\"group-dec\">\n                    <span>\n                        <i className='iconfont iconiconfront-1'></i>\n                        ·好友参团  ·人满成交  ·人不满退款\n                    </span>\n                    <span className='allNum'>{`累计${groupInfo.person_num}人成团`}</span>\n                </div>\n                {\n                    (alreadyIn && group_status === 4) && (\n                        <>\n                            {groupSuccessMbc}\n                        </>\n                    )\n\n                }\n                {/*更多*/}\n                {\n                    this.state.isShowMore &&\n                    <div className=\"moreMbc\">\n                        <div className=\"content\">\n                            <div className=\"title-box\">\n                                正在拼团\n                            </div>\n                            <ul className='more-group-list'>\n                                {\n                                    groupInfo.now_groupon_list && groupInfo.now_groupon_list.length > 0 && groupInfo.now_groupon_list.map((item, index) => {\n                                        return (\n                                            <li key={index} className='group-item'>\n                                                <img className='avatar' src={item.avatar} alt=\"\" />\n                                                <div className='user-name'>\n                                                    <p className='name text-overflow-one'>{item.user_name}</p>\n                                                    <p className='time'>剩余 {this.formatTimeByMillisecond(item.end_time)}</p>\n                                                </div>\n                                                <p className='group-status'>还差{item.number}人</p>\n                                                <span onClick={() => { this.toPay(item.pdd_order_id) }} className='topay'>去参团</span>\n                                            </li>\n                                        )\n                                    })\n                                }\n                            </ul>\n                            <div className='more-group-dec'>\n                                仅显示10个正在开团的人\n                            </div>\n                            <i onClick={this.closeMore} className={'iconfont iconiconfront-2 close'}></i>\n                        </div>\n\n                    </div>\n                }\n\n            </div>\n        )\n    }\n}\n\n// export default connect(\n//     state => ({ courseInfo: state }),\n//     null\n// )(Group)\n\nexport default Group;\n","import React, {Component} from 'react'\nimport {Link} from 'react-router-dom'\nimport {Tabs, WhiteSpace} from 'antd-mobile'\nimport './index.scss'\nimport {api, getParam, http} from \"@/utils\"\nimport {Toast} from 'antd-mobile'\n\n\nclass OutLine extends Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            stageInfo: []\n        }\n    }\n\n    htmlDecode = (content) => {\n        // let e = document.createElement('div');\n        // e.innerHTML = content;\n        // return e.childNodes.length === 0 ? \"\" : e.childNodes[0].nodeValue;\n        if(content) {\n            content = content.replace(/&lt;/g , '<');\n            content = content.replace(/&gt;/g , '>');\n            content = content.replace(/&amp;gt;/g , '');\n            content = content.replace(/&quot;/g , '\"');\n            content = content.replace(/&amp;nbsp;/g , '');\n        }\n        return content;\n    }\n\n    tabchange = (tab, index) => {\n        if(index === 1) {\n            this.getList()\n        }\n    };\n\n    // 获取大纲数据\n    getList = () => {\n        http.get(`${API.home}/m/course/syllabuses/${getParam('id')}`).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    stageInfo: res.data.data\n                })\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n\n    render() {\n        const tabs = [\n            {title: '介绍'},\n            {title: '大纲'}\n        ];\n        let introduce = ''\n        if (this.props.data) {\n            introduce = this.props.data\n        }\n        return (\n            <div className='course-detail'>\n                <WhiteSpace/>\n                <Tabs tabs={tabs}\n                initialPage={0}\n                onChange={(tab, index) => { this.tabchange(tab, index) }}\n                >\n                    {/*介绍*/}\n                    <div className='introduce'>\n                        <p>讲师:{introduce.teachers}</p>\n                        <p>课时:{introduce.course_hour}</p>\n                        <p>时间:{introduce.start_time}</p>\n                        <div className='dec' dangerouslySetInnerHTML={{__html: this.htmlDecode(introduce.intro)}}></div>\n                    </div>\n                    {/*大纲*/}\n                    <div className='outline'>\n                        {\n                            this.state.stageInfo && this.state.stageInfo.length > 0 && this.state.stageInfo.map((item, index) => {\n                                return (\n                                    <div className='stagebox' key={index}>\n                                        <h1 className='stage text-overflow-1'>{item.stage_name}</h1>\n                                        {\n                                            item.lesson.map((item, index) => {\n                                                return (\n                                                    <ul key={index}>\n                                                        <h2 className='classhour'>\n                                                            <span className='title text-overflow-1'>{item.name}</span>\n                                                            {/*\n                                                             class_status\n                                                                 0-未购买未开单集购买\n                                                                 1-未购买已开单集购买\n                                                                 2-已购买直播结束已上传视频\n                                                                 3-已购买未开课、已购买直播结束\n                                                                 4-已购买直播中\n                                                                 5-可试听且有试听权限\n                                                                 6-可试听但无试听权限\n                                                            */}\n                                                            { // 试听\n                                                                !introduce.is_aist && item.class_status === 6 &&\n                                                                <span className='btn-right-10 audition'\n                                                                      onClick={this.props.toAudition}>试听\n                                                                <i className='iconfont iconcelluar'></i>\n                                                                </span>\n                                                            }\n                                                            {  // 未购买未开单集购买:上锁标志,点击提示购买\n                                                                !introduce.is_aist && item.class_status === 0 &&\n                                                                <i className='iconfont iconiconfront-74 icon-right-22'></i>\n                                                            }\n                                                            {  // 未购买已开单集购买:显示单集价格,点击购买单集\n                                                                !introduce.is_aist && item.class_status === 1 &&\n                                                                <span className='btn-right-10 singleset'\n                                                                      onClick={e => this.props.toSingleset(item)}>¥ {item.class_price}</span>\n                                                            }\n                                                            {\n                                                                !introduce.is_aist && item.class_status === 4 &&\n                                                                item.video_auth === 1 && item.is_video === 4 &&\n                                                                <span className='live icon-right-22'>正在直播<i\n                                                                    className='iconfont icondanseshixintubiao-23'></i></span>\n                                                            }\n                                                            {\n                                                                // 已购买直播结束已上传视频:正常播放按钮,点击播放课程\n                                                                !introduce.is_aist && item.class_status === 2 &&\n                                                                <Link to={`/play/video?id=${introduce.v_course_id + '&video_id=' + item.video_id}`} className='iconfont icondanseshixintubiao-23 icon-right-22'></Link>\n                                                            }\n\n                                                            {\n                                                                // 返现课程 是返现课程  未开课 已开课   是返现课程  未开课  已开课  已练习\n                                                                introduce.is_aist && item.is_open && introduce.is_baoming === 1 &&\n                                                                <Link to={`/play/video?id=${introduce.v_course_id + '&video_id=' + item.video_id}`} className='aist aist_open'></Link>\n\n                                                            }\n\n                                                            {\n                                                                // 返现课程 是返现课程  未开课 已开课   是返现课程  未开课  已开课  已练习\n                                                                introduce.is_aist && (!item.is_open || introduce.is_baoming === 0) &&\n\n                                                                <i className='aist iconfont iconiconfront-74'></i>\n                                                            }\n                                                        </h2>\n                                                        {\n                                                            item.point && item.point.length > 0 && item.point.map((item, index) => {\n                                                                const type = (\n                                                                    <span>\n                                                                        {\n                                                                            item.type === 1 &&\n                                                                            <span>知识点{index + 1}:</span>\n                                                                        }\n                                                                        {\n                                                                            item.type === 2 &&\n                                                                            <span className='red'>实战项目:</span>\n                                                                        }\n                                                                    </span>\n                                                                )\n\n                                                                return (\n                                                                    <li className='points text-overflow-1'\n                                                                        key={index}>{type}{item.name}</li>\n                                                                )\n\n                                                            })\n                                                        }\n                                                        {\n                                                            <>\n                                                                {\n                                                                    introduce.is_aist && item.practice.title !== \"\" &&  (!item.is_open || introduce.is_baoming === 0) &&\n                                                                    <span className='camp camp_test' key={index}>\n                                                                        <span>课后练习:{item.practice.title}</span>\n                                                                        <i className='exam exam_close' />\n                                                                    </span>\n                                                                }\n                                                                {\n                                                                    introduce.is_aist && item.practice.title !== \"\" &&  item.is_open && introduce.is_baoming === 1 && !item.practice.is_tested &&\n                                                                    <Link to={`/campTest?keshi_id=${item.video_id}&qid=${item.practice.qid}`} className='camp camp_test' key={index}>\n                                                                        <span>课后练习:{item.practice.title}</span>\n                                                                    </Link>\n                                                                }\n                                                                {\n                                                                    introduce.is_aist && item.practice.title !== \"\" &&  item.is_open && introduce.is_baoming === 1 && item.practice.is_tested &&\n                                                                    <Link to={`/campResolve?keshi_id=${item.video_id}&qid=${item.practice.qid}`} className='camp camp_test' key={index}>\n                                                                        <span>课后练习:{item.practice.title}</span>\n                                                                        <i className='exam exam_open' />\n                                                                    </Link>\n                                                                }\n                                                            </>\n                                                        }\n                                                    </ul>\n                                                )\n                                            })\n                                        }\n                                    </div>\n                                )\n                            })\n                        }\n                    </div>\n                </Tabs>\n                <WhiteSpace/>\n            </div>\n        );\n    }\n\n}\n\nexport default OutLine;","import React, {Component} from 'react'\nimport './index.scss'\nimport {getParam, http} from \"@/utils\"\nimport {Toast, Flex} from 'antd-mobile'\nimport {connect} from \"react-redux\"\nimport {withRouter} from 'react-router-dom'\nimport {compose} from \"redux\"\n\nclass ShareRank extends Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            list: [],  // 分销排行榜\n            rankingslice: [],  // 分销排行榜前两名\n            code: '', // 分销code\n            shareRank: false\n        }\n    }\n\n    componentDidMount() {\n        this.getRankList()\n        this.getCode()\n    }\n\n    // 获取排行榜\n    getRankList = () => {\n        http.get(`${API.home}/dist/rankList/${getParam('id')}`).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    list: res.data.data,\n                    rankingslice: res.data.data.slice(0, 2)\n                })\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n\n    // 获取分销码\n    getCode = () => {\n        const {user} = this.props\n        const uid = user && user.data && user.data.uid\n        if (!uid) return\n        let data = {\n            course_id: getParam('id')\n        }\n        http.post(`${API.home}/dist/createCode`, data).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    code: res.data.data.code\n                })\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n\n    // 点击分销跳转到海报页\n    share = (info) => {\n        const {user} = this.props\n        const uid = user && user.data && user.data.uid\n        if (!uid) {\n            this.props.history.push('/passport/login')\n        } else {\n            const courseId = getParam('id')\n            const dist_first = info.dist_first_level_ti\n            const uid = info.uid\n            const dist_code = this.state.code\n            this.props.history.push(`/shareposter?courseId=${courseId}&dist_first=${dist_first}&uid=${uid}&dist_code=${dist_code}`)\n        }\n    }\n\n\n    // 打开分销排行榜弹窗\n    openRanking = () => {\n        this.setState({\n            shareRank: true\n        })\n    }\n\n    // 关闭弹窗\n    colse = () => {\n        this.setState({\n            shareRank: false\n        })\n    }\n\n    render() {\n        const { courseInfo: info = '' } = this.props;\n        // let info = ''\n        // if (this.props.courseInfo && this.props.courseInfo.courseInfo && this.props.courseInfo.courseInfo.course_info) {\n        //     info = this.props.courseInfo.courseInfo.course_info\n        // }\n        return (\n            <div className='share-ranking'>\n                <Flex className='share-container' justify='between'>\n                    <Flex className='share-list'>\n                        <span className=\"title\">排行榜:</span>\n                        <div className='ranking-box' onClick={this.openRanking}>\n                            {\n                                this.state.rankingslice && this.state.rankingslice.length > 0 && this.state.rankingslice.map((item, index) => {\n                                    return (\n                                        <span key={index} className=\"ranking-mess\">\n                                    <img src={item.head_imgurl} alt=\"\"/>\n                                    <i>{item.amount}元</i>\n                                </span>\n                                    )\n                                })\n                            }\n\n\n                        </div>\n                    </Flex>\n                    <Flex className='share-money' justify='between' align='center'>\n                        <img onClick={this.openRanking} className=\"ranking-ellipsis\"\n                             src=\"https://julyedu-img.oss-cn-beijing.aliyuncs.com/Image/train/ellipsis.png\" alt=\"\"/>\n                        <button className=\"share\" onClick={this.share.bind(this, info)}>分享赚{info.dist_first_level_ti}元\n                        </button>\n                    </Flex>\n                </Flex>\n\n\n                {\n                    this.state.shareRank &&\n                    <div className=\"shareMbc\">\n                        <div className=\"content\">\n                            <div className=\"title-box\">\n                                <span className=\"lable\">赚钱排行榜</span>\n                                <span className=\"tips\">只展示前9名用户</span>\n                            </div>\n                            <ul>\n                                {\n                                    this.state.list && this.state.list.length > 0 && this.state.list.map((item, index) => {\n                                        return (\n                                            <li key={index}>\n                                                <img src={item.head_imgurl} alt=\"\"/>\n                                                <span className='course-title'>{item.user_name}</span>\n                                                <span className='course-price'>{item.amount}元</span>\n                                            </li>\n                                        )\n                                    })\n                                }\n                            </ul>\n                            <div className='shareBtn'>\n                                <button onClick={this.share.bind(this, info)}>分享赚{info.dist_first_level_ti}元</button>\n                            </div>\n                            <i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i>\n                        </div>\n\n                    </div>\n                }\n            </div>\n        );\n    }\n}\n\nexport default compose(\n    connect(\n        state => ({\n            // courseInfo: state,\n            user: state.user\n        }),\n        null\n    ),\n    withRouter\n)(ShareRank)\n","import React, {Component} from 'react'\nimport './index.scss'\nimport {CallApp} from '../../../common'\n\n\nclass Audition extends Component {\n    constructor(props) {\n        super(props);\n    }\n\n    colse = () => {\n        this.props.boxHide(false);\n    }\n\n    render() {\n        return (\n            <div>\n                {\n                    this.props.auditionBox &&\n                    <div className='popup-box'>\n                        <div className='content audition-box'>\n                            <p className='audition-header'>当前页面不支持试听</p>\n                            <p className='audition-dec'>请前往APP试听</p>\n                            <CallApp className='btn btn-18B4ED' text='立即前往'></CallApp>\n                        </div>\n                        <i onClick={this.colse} className={'iconfont iconiconfront-2 close'}></i>\n                    </div>\n                }\n            </div>\n        );\n    }\n\n}\n\nexport default Audition;\n","import React, { Component } from 'react'\nimport { getParam, http } from \"@/utils\"\nimport { Toast } from 'antd-mobile'\nimport { Link } from 'react-router-dom'\nimport { getCourses } from \"@/components/detail/actions\"\nimport { connect } from \"react-redux\"\nimport './index.scss'\nimport Overlay from '../overlay'\n\n\nclass BtnStatus extends Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            isbuy: 1,\n            is_baoming: 0,\n            group_status: 3,\n            in_cart: false,\n            countdown: 0,\n            barInfo: {}\n        }\n\n    }\n\n    componentDidMount() {\n        // this.getBargainInfo()\n        this.group = false;\n    }\n\n\n    // componentDidUpdate(prevProps) {\n    //     let {courseInfo} = this.props\n    //     let {courseInfo: prevCourseInfo} = prevProps\n    //     if (courseInfo && courseInfo.is_bargain) {\n    //         if (prevCourseInfo && courseInfo.is_bargain !== prevCourseInfo.is_bargain) {\n    //             this.getBargainInfo()\n    //         }\n    //     }\n    // }\n\n    componentWillReceiveProps(nextProps) {\n        const { data = {}, user = {}} = nextProps;\n        if(data.is_bargain && user.data && user.data.uid) {\n            this.getBargainInfo();\n        }\n        // if(nextProps.data && nextProps.data.is_bargain) {\n        //     this.getBargainInfo()\n        // }\n        this.setState({\n            courseInfo: data,\n            countdown: nextProps.countdown,\n        });\n    }\n\n    // // 加入购物车 type:1 加入购物车,2加入购物车并跳转到购物车页面去支付\n    // toCart = (type) => {\n    //     const { history, addCourseToCart } = this.props;\n    //     let data = {\n    //         course_id: getParam('id')\n    //     };\n    //     http.post(`${API.home}/m/cart/add`, data).then((res) => {\n    //         if (res.data.code === 200) {\n    //             if (type === 1) {\n    //                 Toast.info('已加入购物车', 2)\n    //                 // this.props.getCourses()\n    //                 // document.location.reload()\n    //                 addCourseToCart();\n    //             } else {\n    //                 history.replace('/shopcart');ß\n    //             }\n    //         } else if (res.data.code === 15001) {\n    //             history.replace('/shopcart');\n    //         } else if (res.data.code === 4030) {\n    //             history.replace('/passport');\n    //         } else {\n    //             Toast.info(res.data.msg, 2);\n    //         }\n    //     })\n    // };\n    // 返现课程的立即购买\n    signUpNow = () => {\n        if(this.props.user.hasError) {\n            // 未登录 去登陆\n            this.props.history.push('/passport');\n        }else{\n            let cidArr = JSON.stringify([Number(getParam('id'))]);\n            http.get(`${API['base-api']}/m/cart/addtopreorder/${cidArr}?type=1`).then((res) => {\n                if (res.data.errno === 0) {\n                    this.props.history.push(\"/order?id=\" + res.data.data[0], {type: 1});\n                } else {\n                    Toast.info(res.data.msg, 2);\n                }\n            })\n        }\n    };\n    // 普通课程的立即报名 要模拟结算过程\n    simpleCourse = () => {\n        if(this.props.user.hasError) {\n            // 未登录 去登陆\n            this.props.history.push('/passport');\n        }else{\n            http.get(`${API['base-api']}/m/cart/addtopreorder/[${getParam('id')}]`).then((res) => {\n                if (res.data.errno === 0) {\n                    this.props.history.push(`/order?id=${getParam('id')}`, {simple: 1})\n                } else {\n                    Toast.info(res.data.msg, 2);\n                }\n            })\n        }\n    };\n    // 格式化开课时间\n    formatDate = (date) => {\n        let ary = date.split('-');\n        return `${ary[1]}月${ary[2]}日开课`;\n    };\n    // 直接购买\n    tobuy = () => {\n        const {user} = this.props;\n        const {barInfo} = this.state;\n        const uid = user && user.data && user.data.uid\n        if (!uid) {\n            this.props.history.push('/passport/login')\n        } else {\n            if (barInfo.bargain_status === 2) {\n                // this.toCart(2)\n                // 新需求 不需要加入购物车 直接走普通课程的立即报名流程 跳到订单页\n                this.simpleCourse();\n            } else {\n                // 取消砍价记录\n                this.setState({\n                    isShowOverlay: true,\n                    bargainStatus: 1,\n                })\n            }\n        }\n    };\n    // 一键开团\n    keyToGroup = () => {\n        if(this.props.user.hasError) {\n            // 未登录 去登陆\n            this.props.history.push('/passport');\n            return;\n        }\n        this.props.history.push(`/order?id=${getParam('id')}`, {group: 1})\n    };\n    // 砍完价去支付\n    bargainToOrder = () => {\n        if(this.props.user.hasError) {\n            // 未登录 去登陆\n            this.props.history.push('/passport');\n        }else{\n            http.get(`${API['base-api']}/m/cart/addtopreorder/[${getParam('id')}]`).then((res) => {\n                if (res.data.errno === 0) {\n                    this.props.history.push(`/order?id=[${getParam('id')}]`, {bargain: 1});\n                } else {\n                    Toast.info(res.data.msg, 2);\n                }\n            })\n        }\n    };\n\n    // 取消砍价\n    cancel = () => {\n        let data = {\n            courseId: getParam('id')\n        }\n        http.post(`${API.home}/m/bargain/cancel`, data).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    isShowOverlay: false,\n                    bargainStatus: '',\n                })\n                http.get(`${API['base-api']}/m/cart/addtopreorder/[${getParam('id')}]`).then((res) => {\n                    if (res.data.errno === 0) {\n                        this.props.history.push(`/order?id=[${getParam('id')}]`, {simple: 1});\n                    } else {\n                        Toast.info(res.data.msg, 2);\n                    }\n                })\n                // window.location.href = '/shopcart'\n                // this.props.history.push(`/order?id=[${getParam('id')}]`, {simple: 1})\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n    close = () => {\n        this.setState({\n            isShowOverlay: false,\n            bargainStatus: '',\n        })\n    }\n    // 砍价接口\n    toKanjia = () => {\n        const {user, history} = this.props;\n        const uid = user && user.data && user.data.uid;\n        const course_id = getParam('id');\n        if (!uid) {\n            this.props.history.push('/passport/login')\n        } else {\n            let data = {\n                course_id,\n                type: 1,  // 1 用户自己砍价 2 使用砍价神器 3 好友助力砍价 4 好友第二次助力\n                parent_uid: 0 // 被助力人id 【自己本人操作传0】\n            }\n            http.post(`${API.home}/m/bargain/toBargain`, data).then((res) => {\n                const {data, code, msg} = res.data;\n                if (code === 200) {\n                    history.push(`/bargain-middle-page?id=${course_id}&bargaincode=${data.bargain_code}&is_originator=1`)\n                } else {\n                    Toast.info(msg, 2)\n                }\n            })\n        }\n    }\n\n\n    //获取砍价信息\n    getBargainInfo = () => {\n        const {user} = this.props\n        const uid = user && user.data && user.data.uid\n        let data = {\n            courseId: getParam('id')\n        }\n        http.post(`${API.home}/m/bargain/courseDetail`, data).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    barInfo: res.data.data\n                })\n            } else {\n                Toast.info(res.data.msg, 2)\n            }\n        })\n    }\n\n    render() {\n        // data 课程信息;barInfo 砍价信息\n        const { user = {}, toCart } = this.props;\n        const { countdown ,barInfo, courseInfo: info = {}} = this.state;\n        const uid = user.data && user.data.uid;\n        return (\n            <div>\n                {/*正常购买*/}\n                {\n                    info.is_baoming === 0 && info.group_status !== 3 &&\n                    <div className='btns-box'>\n                        <Link className='consult consult-s' to=\"https://q.url.cn/AB8aue?_type=wpa&qidian=true\">\n                            <i className='iconfont iconerji'></i>\n                            <span>课程咨询</span>\n                        </Link>\n                        {\n                            info.in_cart &&\n                            <Link to='/shopcart' className='btn btn-s bg-FCCD05'>去购物车结算</Link>\n                        }\n                        {\n                            !info.in_cart &&\n                            <button className='btn btn-s bg-FCCD05' onClick={e => toCart(1)}>加入购物车</button>\n\n                        }\n                        <span className='btn btn-s bg-FD7700' onClick={e => this.simpleCourse()}>立即报名</span>\n                    </div>\n                }\n\n                {/*已购买*/}\n                {\n                    info.is_baoming === 1 &&\n                    <div className='btns-box'>\n                        <Link className='consult consult-m' to=\"https://q.url.cn/AB8aue?_type=wpa&qidian=true\">\n                            <i className='iconfont iconerji' />\n                            <span>课程咨询</span>\n                        </Link>\n                        <Link to={`/play/video?id=${info.v_course_id}`} className='btn btn-m bg-09f'>开始学习</Link>\n                    </div>\n                }\n                {/*拼团 未开团*/}\n                {\n                    info.is_baoming === 0 && info.group_status === 3 &&\n                    <div className='btns-box'>\n                        <Link className='consult consult-s' to=\"https://q.url.cn/AB8aue?_type=wpa&qidian=true\">\n                            <i className='iconfont iconerji'></i>\n                            <span>课程咨询</span>\n                        </Link>\n                        <button className='btn btn-s bg-F4AAA7' onClick={this.simpleCourse}>\n                            <span>{`¥ ${info.price1}`}</span>\n                            <span>直接购买</span>\n                        </button>\n                        <button className='btn btn-s bg-E02E24'>\n                            <span onClick={this.keyToGroup}>\n                                <span>{`¥ ${info.pdd_group_info.price}`}</span>\n                                <span>一键开团</span>\n                            </span>\n                        </button>\n                    </div>\n\n                }\n                {/*拼团 已开团*/}\n                {\n                    info.is_baoming === 0 && info.group_status === 4 &&\n                    <div className='btns-box'>\n                        <Link className='consult consult-s' to=\"https://q.url.cn/AB8aue?_type=wpa&qidian=true\">\n                            <i className='iconfont iconerji'></i>\n                            <span>课程咨询</span>\n                        </Link>\n                        <div className='btn btn-l bg-E02E24' onClick={this.props.invitedFriends}>\n                            邀请好友参团 {countdown} 后结束\n                        </div>\n                    </div>\n                }\n\n                {/*砍价*/}\n                {\n                    info.is_baoming === 0 && this.props.data && this.props.data.is_bargain &&\n                    <div className='btns-box'>\n                        <Link className='consult consult-s' to=\"https://q.url.cn/AB8aue?_type=wpa&qidian=true\">\n                            <i className='iconfont iconerji'></i>\n                            <span>课程咨询</span>\n                        </Link>\n                        <button className='btn btn-s bg-F4AAA7'>\n                            <span>¥{info.price1}</span>\n                            <span onClick={this.tobuy}>直接购买</span>\n                        </button>\n                        {\n                            (barInfo.bargain_status === 2 || !uid) &&\n                            <button className='btn btn-s bg-E02E24' onClick={this.toKanjia}>\n                                我要砍价\n                            </button>\n                        }\n                        {\n                            (barInfo.bargain_status === 0 || barInfo.bargain_status === 1) && (uid) &&\n                            <button className='btn btn-s bg-E02E24'>\n                                <span>¥{barInfo.amount}</span>\n                                <span onClick={this.bargainToOrder}>去支付</span>\n                            </button>\n                        }\n                    </div>\n                }\n\n                {/*特殊课程*/}\n                {\n                    this.state.isbuy === 20 &&\n                    <div className='btns-box'>\n                        <Link className='consult-l' to=\"https://q.url.cn/AB8aue?_type=wpa&qidian=true\">\n                            <i className='iconfont iconerji'></i>\n                            <span>课程咨询</span>\n                        </Link>\n                    </div>\n                }\n\n                {/*特训营课程 未登录 未报名*/}\n                {\n                    (info.is_aist && (this.props.user.hasError || info.is_baoming === 0)) &&\n                    <div className='btns-box'>\n                        <Link className='consult consult-m' to=\"https://q.url.cn/AB8aue?_type=wpa&qidian=true\">\n                            <i className='iconfont iconerji'></i>\n                            <span>课程咨询</span>\n                        </Link>\n\n                        <button className='btn sign-up-now' onClick={e => this.signUpNow()}>\n                            <span>立即报名</span>\n                        </button>\n                    </div>\n                }\n                {/*特训营课程 登陆且已报名*/}\n                {\n                    info.is_aist && !this.props.user.hasError && info.is_baoming === 1 &&\n                    <div className='btns-box'>\n                        <Link className='consult consult-m' to=\"https://q.url.cn/AB8aue?_type=wpa&qidian=true\">\n                            <i className='iconfont iconerji'></i>\n                            <span>课程咨询</span>\n                        </Link>\n\n                        {\n                            info.aist_start_time === \"\" ?\n                                (\n                                    <Link to={`/play/video?id=${info.v_course_id}`} className='btn btn-m learn-now'>\n                                        <span>开始学习</span>\n                                    </Link>\n\n                                ) : (\n                                    <button className='btn btn-m wait-open' >\n                                        <span>{this.formatDate(info.aist_start_time)}</span>\n                                    </button>\n                                )\n                        }\n                    </div>\n                }\n\n\n                {\n                    this.state.isShowOverlay &&\n                    <Overlay>\n                        {/*引导关注公众号*/}\n                        {\n                            this.state.bargainStatus === 1 &&\n                            <CancelBargain close={this.close} cancel={this.cancel}/>\n                        }\n\n                        <i onClick={this.close} className={'iconfont iconiconfront-2 bargain-close'}></i>\n                    </Overlay>\n\n                }\n            </div>\n        )\n    }\n}\n\n\nfunction CancelBargain(props) {\n    return (\n        <div className='cancel-bargain'>\n            <p className='top-img'><i className='iconfont icondanseshixintubiao-8'></i></p>\n            <p className='tip-mess'>您已发起砍价,直接购买将清除已砍金额。直接购买可使用优惠券~</p>\n            <div className=\"btns\">\n                <button onClick={props.close}>取消</button>\n                <button onClick={props.cancel}>确定</button>\n            </div>\n        </div>\n    )\n}\n\nexport default connect(\n    state => ({\n        user: state.user\n    }),\n    {getCourses}\n)(BtnStatus)\n","import React, {Component} from 'react'\nimport {Carousel, WingBlank} from 'antd-mobile'\n\nimport './index.scss'\nimport {api, getParam, http} from \"@/utils\"\n\n// 课程页面滚动广告\nclass Carouselw extends Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            list: []\n        }\n    }\n\n    componentDidMount() {\n        const _this = this\n        _this.getList()\n        this.timer = setInterval(function () {\n            _this.getList()\n        }, 10000);\n\n    }\n\n    componentWillUnmount() {\n        this.timer && clearTimeout(this.timer);\n    }\n\n    // 获取课程接口\n    getList = () => {\n        let data = {\n            course_id: getParam('id')\n        }\n        http.post(`${API.home}/m/course/barrages`, data).then((res) => {\n            if (res.data.code === 200) {\n                this.setState({\n                    list: res.data.data,\n                });\n            }\n        })\n    }\n\n    render() {\n        return (\n            <WingBlank>\n                <Carousel className=\"my-carousel\"\n                          vertical\n                          dots={false}\n                          autoplay\n                          infinite\n                >\n                    {\n                        this.state.list &&\n                        <div className=\"v-item text-overflow-one\">\n                            <img src={this.state.list.avatar} alt=\"\"/>\n                            {this.state.list.user_name} {this.state.list.live_msg}\n                        </div>\n                    }\n\n                </Carousel>\n            </WingBlank>\n        )\n    }\n}\n\nexport default Carouselw","import React, {Component} from 'react'\nimport './index.scss'\nimport Bargain from './bargain'\nimport Group from './group'\nimport OutLine from './outline'\nimport {HeaderBar, CallApp} from '../../common'\nimport ShareRank from \"./shareRank\"\nimport Audition from \"./audition\"\nimport Single from \"./single\"\nimport SingleSuccess from './single/singleSuccess';\nimport BtnStatus from \"./btnstatus\"\nimport Carouselw from \"./carousel\"\nimport {connect} from \"react-redux\"\nimport {getCourses, addCourseToCart} from \"./actions\"\nimport {getParam, http, browser,wxShare} from \"@/utils\"\nimport {Toast} from 'antd-mobile'\nimport {compose, bindActionCreators} from \"redux\";\n\nclass Detail extends Component {\n\n    courseId\n\n    constructor(props) {\n        super(props)\n        this.state = {\n            isbuy: 0,\n            isvip: 0,\n            auditionBox: false,\n\n            singleBox: false,\n            singleType: 1,\n\n            shareRank: false,\n            singMess: '',\n            barInfo: '',\n            share: false,\n            countdown: '00:00:00',\n            outList: [],\n            list: [],\n            course: {},\n\n            nowPrice: 0,\n            laterPrice: 0,\n            isPdd: 0, // 是否是拼团课程 控制首次单集购买后的 全集购买 接口: 拼团课程走拼团接口,否则直接走购买接口\n        }\n    }\n\n    componentDidMount() {\n\n        wxShare({\n            title: `课程详情页`,\n            content: `课程详情页`,\n            link: 'http://m.julyedu.com/detail?id=151',\n            logo: 'https://julyedu-img-public.oss-cn-beijing.aliyuncs.com/Public/Image/home/4aaf78c7d2.png',\n        });\n\n        this.fetchCourseInfo();\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    }\n\n    componentDidUpdate(prevProps) {\n        if(prevProps.user.hasError !== this.props.user.hasError){\n            this.fetchCourseInfo()\n        }\n    }\n\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                                    isPdd: res.data.data.data.is_pdd,\n                                })\n                            } else {\n                                Toast.info(res.data.data.msg, 2)\n                            }\n                        })\n                    }\n                })\n            }, 1000)\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.props.weixinPay(weixin_code)\n                this.setState({\n                    singMess: JSON.parse(window.localStorage.getItem('singMess'))\n                });\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                                                                isPdd: res.data.data.data.is_pdd,\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    // 判断支付是否成功\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            } 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                    isPdd: res.data.data.data.is_pdd,\n\n                })\n            } else {\n                Toast.info(res.data.data.msg, 2)\n            }\n        })\n    }\n    // payCallback = () => {\n    //\n    // };\n    // weixinPay = (weixin_code) => {\n    //\n    // }\n    payCallBack = (singleType, nowPrice, laterPrice) => {\n        // Toast.info(singleType, 2);\n        const _this = this;\n        if(singleType === 2) {\n            _this.setState({\n                singleType,\n                nowPrice,\n                laterPrice\n            })\n        }else{\n            _this.setState({\n                singleType,\n            })\n        }\n    };\n    fetchCourseInfo = () => {\n        const id = getParam('id');\n        http.get(`${API.home}/m/course/detail/${id}`).then((res) => {\n            const {data, code} = res.data;\n            if (code === 200) {\n                this.setState({\n                    course: data\n                });\n                if (data.course_info) {\n                    let course_info = data.course_info;\n                    if (course_info.group_status === 3 || course_info.group_status === 4) {\n                        let endTime = course_info.pdd_group_info.groupon_member.end_time;\n                        let date = endTime * 1000,\n                            hours = 0,\n                            minutes = 0,\n                            seconds = 0;\n                        setInterval(() => {\n                            date -= 1000\n                            hours = `${parseInt(date / (60 * 60 * 1000))}`.padStart(2, 0);\n                            minutes = `${parseInt((date - hours * 3600000) / 60000)}`.padStart(2, 0);\n                            seconds = `${parseInt((date - hours * 3600000 - minutes * 60000) / 1000)}`.padStart(2, 0);\n                            this.setState({\n                                countdown: `${hours}:${minutes}:${seconds}`\n                            });\n                        }, 1000)\n                    }\n                }\n\n\n            }\n        });\n    }\n\n    // 点击子组件试听按钮\n    toAudition = () => {\n        const {user} = this.props\n        const uid = user && user.data && user.data.uid\n        if (!uid) {\n            this.props.history.push('/passport/login')\n        } else {\n            this.setState({\n                auditionBox: true,\n            })\n        }\n    }\n    // 点击子组件单集购买按钮\n    toSingleset = (item) => {\n        const {user} = this.props\n        const uid = user && user.data && user.data.uid\n        if (!uid) {\n            this.props.history.push('/passport/login')\n        } else {\n            this.setState({\n                singleBox: true,\n                singleType: 1,\n                singMess: item\n            });\n            window.localStorage.setItem('singMess', JSON.stringify(item))\n        }\n    }\n\n    // componentWillReceiveProps(nextProps) {\n    //     let _this = this;\n    //     if (nextProps.courseInfo.course_info) {\n    //         let courseInfo = nextProps.courseInfo.course_info;\n    //         if (courseInfo.group_status === 3 || courseInfo.group_status === 4) {\n    //             let endTime = courseInfo.pdd_group_info.groupon_member.end_time;\n    //             let date = endTime * 1000,\n    //                 hours = 0,\n    //                 minutes = 0,\n    //                 seconds = 0;\n    //             setInterval(() => {\n    //                 date -= 1000\n    //                 hours = `${parseInt(date / (60 * 60 * 1000))}`.padStart(2, 0);\n    //                 minutes = `${parseInt((date - hours * 3600000) / 60000)}`.padStart(2, 0);\n    //                 seconds = `${parseInt((date - hours * 3600000 - minutes * 60000) / 1000)}`.padStart(2, 0);\n    //                 _this.setState({\n    //                     countdown: `${hours}:${minutes}:${seconds}`\n    //                 });\n    //             }, 1000)\n    //         }\n    //     }\n    // }\n\n    // 加入购物车 type:1 加入购物车,2加入购物车并跳转到购物车页面去支付\n    toCart = (type) => {\n        const { history, addCourseToCart } = this.props;\n        let data = {\n            course_id: getParam('id')\n        };\n        http.post(`${API.home}/m/cart/add`, data).then((res) => {\n            if (res.data.code === 200) {\n                if (type === 1) {\n                    Toast.info('已加入购物车', 2)\n                    // this.props.getCourses()\n                    // document.location.reload()\n                    addCourseToCart();\n                    this.fetchCourseInfo();\n                } else {\n                    history.replace('/shopcart');ß\n                }\n            } else if (res.data.code === 15001) {\n                history.replace('/shopcart');\n            } else if (res.data.code === 4030) {\n                history.replace('/passport');\n            } else {\n                Toast.info(res.data.msg, 2);\n            }\n        })\n    };\n\n    invitedFriends = () => {\n        const {course_title, image_name, course_id, pdd_group_info, pdd_group_info: {groupon_member, groupon_member: {number}, price}} = this.state.course.course_info;\n        if (browser.isWeixin) {\n            let share = this.state.share;\n            this.setState({\n                share: !share,\n            });\n            let shareData = {\n                title: `【仅剩${number}个名额】我${price}元拼了《${course_title}》`,\n                desc: course_title,                               //  分享描述\n                link: location.origin + `/detail??id=${course_id}`, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致\n                imgUrl: image_name, // 分享图标\n            };\n\n            http.post(`${API['base-api']}/m/sale/signature`).then(res => {\n                const {nonce_str, signature, timestamp} = res.data;\n                wx.config({\n                    \"debug\": false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。\n                    \"appId\": 'wx23dac6775ac82877', // 必填,公众号的唯一标识\n                    \"timestamp\": timestamp, // 必填,生成签名的时间戳\n                    \"nonceStr\": nonce_str, // 必填,生成签名的随机串\n                    \"signature\": signature, // 必填,签名\n                    jsApiList: [\n                        'hideMenuItems',\n                        'showMenuItems',\n                        'updateAppMessageShareData',\n                        'updateTimelineShareData',\n                        'onMenuShareWeibo',\n                        'onMenuShareAppMessage',\n                    ], // 必填,需要使用的JS接口列表\n                });\n            });\n            wx.ready(function () {   //需在用户可能点击分享按钮前就先调用\n                wx.hideAllNonBaseMenuItem();\n                wx.showMenuItems({\n                    menuList: ['menuItem:share:appMessage', 'menuItem:share:timeline'] // 要显示的菜单项,所有menu项见附录3\n                });\n                wx.updateAppMessageShareData({\n                    ...shareData,\n                    success: function () {\n                        // 设置成功\n                    }\n                })\n                wx.updateTimelineShareData({\n                    ...shareData,\n                    success: function () {\n                        // 设置成功\n                    }\n                })\n            });\n        } else {\n            Toast.info('请在微信中使用分享功能!', 2);\n        }\n    }\n\n    // 自组件传给父组件的boxHide\n    boxHide = (val) => {\n        this.setState({\n            auditionBox: val,\n            singleBox: val,\n            singleType: 1\n        })\n        this.props.history.push(`/detail?id=${getParam('id')}`);\n\n    }\n\n    render() {\n        const { course: { course_info={} }, barInfo, singleBox, singleType } = this.state;\n        let courseInfo = '',\n            service = '',\n            number = 0,\n            endTime = 0;\n        // if (this.props.courseInfo.course_info) {\n        //     courseInfo = this.props.courseInfo.course_info;\n        //     service = courseInfo.service;\n            if (course_info.group_status === 3 || course_info.group_status === 4) {\n                number = course_info.pdd_group_info.groupon_member.number;\n            }\n        // }\n        const {share, countdown, list, outList} = this.state;\n        let href = this.props.location && this.props.location.state? this.props.location.state.href : undefined;\n        const { location: { state = {}} } = this.props;\n        if(state.oid) {\n            href='/classify'\n        }\n\n        return (\n            <div>\n            <div className='detail-box'>\n                <HeaderBar\n                    title='课程详情'\n                    arrow={true}\n                    cart={true}\n                    toHref={href}\n                />\n                <CallApp className='toapp' />\n\n                {/*弹幕*/}\n                <Carouselw />\n\n                {/*课程*/}\n                <div className='course-content'>\n                    <div className='cover'>\n                        <img src={course_info.image_name} alt=\"\" />\n                        {\n                            course_info.is_aist &&\n                            <span className='return_cash' />\n                        }\n                    </div>\n                    <div className=\"info\">\n                        <p className='title'>{course_info.course_title}</p>\n                        <p className='contact text-overflow-2'>{course_info.simpledescription}</p>\n                        <div className='des'>\n                            {\n                                course_info.is_baoming === 0 &&\n                                <p className=\"course-price\">\n                                    <span className=\"new\">¥{course_info.price1}</span>\n                                    <span className=\"old\">¥{course_info.price0}</span>\n                                </p>\n                            }\n                            {\n                                course_info.is_baoming === 1 &&\n                                <span className=\"isbuy\">已购买</span>\n                            }\n                        </div>\n                    </div>\n                </div>\n\n                {/*正常课程已购买时显示*/}\n                {\n                    course_info.is_baoming === 1 &&\n                    <div className='group'>\n                        上课QQ群:{course_info.course_qq},加群请备注您的学号:{course_info.uid}\n                    </div>\n                }\n\n                {/*vip课程显示*/}\n                {\n                    course_info.vip_range &&\n                    <div className=\"vip\">\n                        <p>已开通年会员:{course_info.vip_range}</p>\n                        <p>年会员QQ群:{course_info.course_qq},加群请备注您的学号:{course_info.uid}</p>\n                    </div>\n                }\n\n                {/*服务承诺*/}\n                <div className='promise'>\n                    <label>服务承诺</label>\n                    <p>\n                        {\n                            course_info.service && course_info.service.length > 0 && course_info.service.map((item, index) => {\n                                return (\n                                    <span key={index}> {item} </span>\n                                )\n                            })\n                        }\n                    </p>\n                </div>\n\n                {/*试听弹窗*/}\n                <Audition auditionBox={this.state.auditionBox} boxHide={this.boxHide}/>\n\n                {/*单集购买弹窗*/}\n                {\n                singleBox &&\n                <Single\n                    singleType={this.state.singleType}\n                    singleBox={this.state.singleBox}\n                    boxHide={this.boxHide}\n                    data={this.state.singMess}\n                    vcourseId={course_info.v_course_id}\n                    videoId={this.state.singMess.video_id}\n                    title={course_info.course_title}\n                    check={this.check}\n                    courseId={course_info.course_id}\n                />}\n                {/* 单集购买成功弹窗 */}\n                {\n                    singleType !== 1 &&\n                    <SingleSuccess\n                    boxHide={this.boxHide}\n                    data={this.state.singMess}\n                        singleType={singleType}\n                        vcourseId={course_info.v_course_id}\n                        videoId={this.state.singMess.video_id}\n                        nowPrice={this.state.nowPrice}\n                        isPdd={this.state.isPdd}\n                        laterPrice={this.state.laterPrice}\n                        courseId={course_info.course_id}\n                    />\n                }\n                {/*payCallback={this.payCallback}*/}\n                {/*weixinPay = {this.weixinPay}*/}\n\n                {/*分享赚钱*/}\n                {\n                    course_info.is_dist &&\n                    <ShareRank courseInfo={course_info} />\n                }\n\n                {/**\n                  * 拼团\n                  * is_aist: 是否AI特训营\n                  * group_status: 团状态,3:课程有小团 用户没参加小团;4:用户参加了小团\n                */}\n                {\n                    !course_info.is_aist && (course_info.group_status === 3 || course_info.group_status === 4) &&\n                    <Group\n                        courseInfo={course_info}\n                        history={this.props.history}\n                        countdown={countdown}\n                        invitedFriends={this.invitedFriends}\n                    />\n                }\n\n                {/*砍价*/}\n                {\n                    course_info.is_baoming === 0 && (!course_info.is_aist) && course_info.is_bargain &&\n                    <Bargain />\n                }\n\n                {/*课程介绍、大纲*/}\n                <OutLine\n                    data={course_info}\n                    toAudition={this.toAudition}\n                    toSingleset={this.toSingleset}\n                />\n\n                {/*课程按钮*/}\n                {\n                course_info &&\n                <BtnStatus\n                    countdown={countdown}\n                    data={course_info}\n                    user={this.props.user}\n                    invitedFriends={this.invitedFriends}\n                    // addCourseToCart={this.props.addCourseToCart}\n                    toCart={this.toCart}\n                    history={this.props.history}\n                />}\n\n                {\n                    share ? (\n                        <div\n                            className='groupSuccessMbc'\n                            onClick={() => {\n                                this.setState({share: false})\n                            }}\n                        >\n                            <div className='tipContent'>\n                                {`还差${number}人,分享到3个群,成团率高达98%`}\n                            </div>\n                            <div className='tipArrow'>\n                                <i className='iconfont iconyindao' />\n                            </div>\n                        </div>\n                    ) : null\n                }\n            </div>\n            </div>\n        )\n    }\n\n}\n\nconst mapStateToProps = (state) => {\n    return {\n        // courseInfo: state.courseInfo,\n        user: {\n            ...state.user\n        }\n    }\n}\n\n// const mapDispatchToProps = {\n//     fetchCoursesListIfNeeded\n// }\nconst mapDispatchToProps = (dispatch) => {\n    return bindActionCreators(\n        {\n            getCourses,\n            addCourseToCart\n        },\n        dispatch\n    )\n}\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Detail)","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAA51BMVEUAAAD3yyr4zCr60jD61DT4zSz4zi360C770jL93jn94UH3yin4yyz4ziz4zi34zS361TX50i/50jD61DP72Dj61jP+4kH+4ED4zCv3zCz4zSz4zS350jL61jb61jT6zir50DH83Dz71DP83Dj+5ET2zDD50C77zyj93j/930H82zv3yir3yCj/6072xib3yyv/6kz2xiT/7lD/8FL2wyL2xCP/8VT/7E//8lb83T74zS32wiH/81b/6Er71zj94kT72zz50zP+5kj84EH/9Vj+5Uf61TX50TH83j/4zy//9Ff3xyb0vBpXStORAAAAK3RSTlMA8+yrk9q7gTsdBPfnysGyoJ+IhWhMFg3w5d7QvKSbmI9eWich+nxTRjARluH5lgAAAm5JREFUOMt1lddi4jAQRYVp6b1vspvdZKvG6pI7NjWQ7P9/T7BFQBBzXnjw0YyvxhJonZ1fzcODRuPgsNndQVvZPW9DCca4/Lk7e6rV/rUwIdiBcNy6+uz98DjgDYDffN/0WsTR3Kpf171j13MB3Vn38Fb0/cr7BpsdgeIl6uTD++16FDQhMQanu1okuv4JjpbAkMZm4JoEX9vGxFmNJ9Eoy1KGyeodaPJQelfUWZz0RpIJIYeEa0WAx7RaDrtz8Yw4TWIh/JIgm0b5hOayp6s8rbnoOQV5njK/QozGLJ+lr0NeFbhBaMeNzPsi8C1hL+E9IwcAlfkHdcGdbWSsxoTpFy+FEZlNoM/RsStC5NuKwYD1BybzBbMiv0df3NaQTM1H45hJwURmN/StjTx3KupFBkIGzJfFbFIWN2NSieCh/bURMynHPSl8EfmSlZULZR81UMMRk2nqh5P/UeiznJUvK8SMf4ie07hvAjPmhA8My6rs6VBji+eEIYTJQL5omvRNFZ6ZAMgi5R1qLieoopCFQ1Xu0kBW0UWs6aLIEeqSZWITCEF5uaQIfV+mWayW3c7sCG1jw8IiqeYwGYWSFW+cLsXL5UehpimTzL4TxMOoDwpWXmMPoUeySCzm81DUfudcu6ec6vLQ7gLYrWZm7Dx1AXhGc044xjpKWbU1dR5VTXu4MGCdj9hrrnEtBK4W1w7BfCZefcrrG6sLtOCUUB73KKe1om1sOQJMFKn39CFy6BBcD/CjPeRyuuXa0w9og4v9zyro/YuaG/wUr6uEw8kzquPp8dbe9fayv239RdvYu+x22vO/D6/dOb9cD/EONO7gZ+bVU9IAAAAASUVORK5CYII=\"","import React, { Component } from 'react';\nimport ReactDom from \"react-dom\";\n\nimport './overlay.scss'\n\nconst root = document.body || document.documentElement\n\nconst events = ['touchmove', 'mousewheel']\n\nclass Overlay extends Component {\n    constructor(props) {\n        super(props);\n        this.overlayBox = null\n    }\n\n    preventScroll = e => {\n        e.preventDefault()\n    }\n\n    componentDidMount() {\n        events.forEach(item => {\n            this.overlayBox.addEventListener(item, this.preventScroll, {\n                passive: false\n            })\n        })\n    }\n\n    componentWillUnmount() {\n        events.forEach(item => {\n            this.overlayBox.removeEventListener(item, this.preventScroll)\n        })\n    }\n\n    render() {\n        return ReactDom.createPortal(\n            (<div className={'overlay'}\n                  ref={el => this.overlayBox = el}\n                  style={{top: `${window.scrollY}px`}}\n            >{this.props.children}</div>),\n            root\n        )\n    }\n}\n\nexport default Overlay;","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","import React, {Component} from 'react'\nimport './index.scss'\n\nclass Ranking extends Component {\n\n    constructor(props) {\n        super(props)\n        this.state = {\n            kanjiaIcon: require('../image/kanjia_icon.png')\n        }\n    }\n\n    // 关闭更多窗口\n    closeMore = () => {\n        this.props.boxHide(false);\n    }\n\n    render() {\n        return (\n            <div className={'ranking-box'}>\n                {\n                    this.props.isShowMore &&\n                    <MoreList list={this.props.list} limitPeople={this.props.limitPeople} closeMore={this.closeMore}\n                              img={this.props.icon}/>\n                }\n            </div>\n        );\n    }\n}\n\nfunction MoreList(props) {\n    return (\n        <div className=\"moreMbc\">\n            <div className=\"content\">\n                <div className=\"title-box\">\n                    好友助力详情\n                </div>\n                <ul className='more-bargain-list'>\n                    {\n                        props.list && props.list.length > 0 && props.list.map((item, index) => {\n                            return (\n                                <li key={index} className='bargain-item'>\n                                    <img className='avatar' src={item.avatar_file} alt=\"\"/>\n                                    <p className='name'>{item.user_name}</p>\n                                    <p className='bargain-status'>\n                                        <img className='kanjia-icon' src={props.img} alt=\"\"/>\n                                        砍掉<span className={'price'}>{item.amount}</span>\n                                    </p>\n                                </li>\n                            )\n                        })\n                    }\n                </ul>\n                <div className='more-bargain-dec'>\n                    超过{props.limitPeople}位好友助力可获得【砍价神器】\n                </div>\n            </div>\n            <i onClick={props.closeMore} className={'iconfont iconiconfront-2 close'}></i>\n        </div>\n    )\n}\n\nexport default Ranking"],"sourceRoot":""}