detail.48995e3a.chunk.js.map 182 KB
Newer Older
FE committed
1
{"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","pathname","search","qid","from","window","location","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","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","wxShare","course_title","desc","index_description","link","encodeURI","origin","imgUrl","image_name","singleBox","setItem","_this2$props","addCourseToCart","ß","_this2$state$course","self_oid","isvip","_this$props$location$","browser","isWeixin","prevProps","_this$state$course$co","_this$state2","href","_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_fe_frontCode_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__","_Users_fe_frontCode_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__","_Users_fe_frontCode_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_fe_frontCode_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__","_Users_fe_frontCode_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__","_Users_fe_frontCode_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_fe_frontCode_mr_julyedu_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_6__","showSingleBox","toBuyAll","zerobuyReceive","success","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.48995e3a.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={{\n                                                                        pathname: `/campTest`,\n                                                                        search: `?keshi_id=${item.video_id}&qid=${item.practice.qid}`,\n                                                                        state: {from: `/detail${window.location.search}`}\n                                                                    }} 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={{\n                                                                        pathname: `/campResolve`,\n                                                                        search: `?keshi_id=${item.video_id}&qid=${item.practice.qid}`,\n                                                                        state: {from: `/detail${window.location.search}`}\n                                                                    }} 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        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\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                    wxShare({\n                        title: course_info.course_title,\n                        desc: course_info.index_description,\n                        link: encodeURI(location.origin + '/detail?id=' + getParam('id')),\n                        imgUrl:course_info.image_name\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        //     wxShare({\n        //         title: `【仅剩${number}个名额】我${price}元拼了《${course_title}》`,\n        //         desc: course_title,\n        //         link: location.href,\n        //         imgUrl: image_name,\n        //     });\n        // } else {\n        //     Toast.info('请在微信中使用分享功能!', 2);\n        // }\n        const { history } = this.props;\n        const { course = {} } = this.state;\n        if(course.course_info && course.course_info.self_oid) {\n            history.push(`/togroup?id=${course.course_info.self_oid}`);\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 = '';\n        const { location: { state = {}} } = this.props;\n        if(state.to && state.to === 'classify') {\n            href = '/classify'\n        }\n        if(state.oid) {\n            href='/classify'\n        }\n        if(getParam('dist_code')) {\n            href='/'\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":""}