index.js 10.9 KB
Newer Older
xuzhenghua committed
1
import React, {Component} from 'react'
zhanghaozhe committed
2 3 4 5 6 7
import './index.scss'
import Description from './Description/index.js'
import Study from './Study/index.js'
import Team from './Team/index.js'
import Experience from './Experience/index.js'
import Progream from './Progream/index.js'
zhanghaozhe committed
8
import Selection from './Selection'
zhanghaozhe committed
9
import Mask from './../poup/index.js'
zhanghaozhe committed
10
import InAction from "./InAction"
zhanghaozhe committed
11 12
import ShareRank from "src/components/detail/shareRank"
import {http, getParam, SendMessageToApp, browser} from 'src/utils'
xuzhenghua committed
13 14
import {connect} from 'react-redux'
import {Toast} from "antd-mobile"
zhanghaozhe committed
15
import {CallApp} from "src/common/index"
zhanghaozhe committed
16 17

@connect(state => ({
xuzhenghua committed
18
    user: state.user
zhanghaozhe committed
19 20
}))
class PythonDes extends Component {
xuzhenghua committed
21 22 23 24 25 26 27 28 29 30 31 32 33 34
    constructor(props) {
        super(props)
        this.state = {
            syllabus: [], // 阶梯学习
            allSyllabus: [], // 阶梯学习
            allSyllabusShow: false,
            allPractice: [], // 课后实操
            toApp: false,
            payMoney: 0,
            isOnline: true, //课程是否上架
            courseInfo: {},
            isShowChannel: window.sessionStorage.getItem('isShowSiteWindowByChannel'),
            orderId: ''
        }
zhanghaozhe committed
35 36
    }

xuzhenghua committed
37 38 39 40 41 42 43 44 45 46
    // 立即报名
    // signUp = () => {
    //   this.statistics(3)
    //   // 已登录
    //   if (!this.props.user.hasError) {
    //     this.toDetail()
    //   } else {// 未登录
    //     this.toLogin()
    //   }
    // }
zhanghaozhe committed
47

xuzhenghua committed
48
    // 立即体验type=1、立即报名type=3、9.9特价试学type=2
xuzhenghua committed
49 50 51 52
    tryLearn = type => {
        this.statistics(type)
        // 已登录
        if (!this.props.user.hasError) {
xuzhenghua committed
53
            this.creatOid(type)
xuzhenghua committed
54 55 56
        } else {// 未登录
            this.toLogin()
        }
zhanghaozhe committed
57
    }
xuzhenghua committed
58 59 60 61 62 63 64 65
    creatOid = (type) => {
        let url = ''
        if (type == 3) {
            url = `${API['base-api']}/sys/it_baoming/create`
        } else {
            url = `${API['base-api']}/sys/trial_create`
        }
        http.post(url, {course_id: getParam('id')}).then(res => {
xuzhenghua committed
66 67 68 69 70 71 72 73 74
            const {errno, data, msg} = res.data
            if (errno === 200) {
                this.setState({
                    orderId: data.oid
                })
                this.weixinPay(data.oid)
            } else {
                Toast.info(msg, 2)
            }
xuzhenghua committed
75
        })
xuzhenghua committed
76 77 78 79 80
    }
    // 微信支付
    weixinPay = (orderId) => {
        // 微信内部-支付
        if (browser.isWeixin) {
xuzhenghua committed
81 82
            let url = window.location.origin + location.pathname + '?id=' + getParam('id')
            window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" + encodeURIComponent(url + "&aa=bb&oid=" + orderId).toLowerCase() + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
xuzhenghua committed
83
        } else {
xuzhenghua committed
84 85 86 87 88 89 90 91
            // 微信外部-支付
            http.get(`${API['base-api']}/pay/wxpay/wap_charge/oid/${orderId}`).then((res) => {
                if (res.data.errno === 0) {
                    window.location.href = res.data.data.url + "&redirect_url=" + encodeURIComponent(window.location.href + "&weixinpay=1&oid=" + orderId).toLowerCase()
                } else {
                    Toast.info(res.data.msg, 2)
                }
            })
xuzhenghua committed
92 93 94
        }
    }

xuzhenghua committed
95 96 97 98 99 100 101 102 103 104 105 106
    toLearn = () => {
        const {backwardVersion} = this.props
        http.post(`${API['home']}/m/it/user/trialCourse`, {course_id: getParam('id')}).then((res) => {
            const {code, msg} = res.data
            if (code == 200) {
                if (!getParam('version')) { // H5
                    this.setState({
                        toApp: true
                    })
                } else { // APP
                    if (backwardVersion) {
                        Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端体验', 2)
xuzhenghua committed
107
                    } else {
xuzhenghua committed
108
                        SendMessageToApp("toLearn", getParam('id'))
xuzhenghua committed
109
                    }
xuzhenghua committed
110
                }
xuzhenghua committed
111
            } else {
xuzhenghua committed
112
                Toast.info(msg, 2)
xuzhenghua committed
113 114 115
            }
        })
    }
zhanghaozhe committed
116

xuzhenghua committed
117 118 119 120 121 122 123 124 125
    closePop = () => {
        this.setState({
            toApp: false
        })
    }

    toDetail = () => {
        const {backwardVersion} = this.props
        const id = getParam('id')
zhanghaozhe committed
126
        if (!getParam('version')) { // H5
xuzhenghua committed
127 128 129 130 131 132 133
            http.get(`${API['base-api']}/m/cart/addtopreorder/[${id}]`).then((res) => {
                if (res.data.errno === 0) {
                    this.props.history.push(`/order?id=${id}`, {simple: 1})
                } else {
                    Toast.info(res.data.msg, 2)
                }
            })
zhanghaozhe committed
134
        } else { // APP
xuzhenghua committed
135 136 137 138 139 140 141 142 143 144
            if (backwardVersion) {
                Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端购买', 2)
                let onlyoneUse = setTimeout(() => {
                    clearTimeout(onlyoneUse)
                    onlyoneUse = null
                    SendMessageToApp('toPay', id)
                }, 2000)
            } else {
                SendMessageToApp('toPay', id)
            }
zhanghaozhe committed
145
        }
xuzhenghua committed
146
    }
zhanghaozhe committed
147

xuzhenghua committed
148 149
    toLogin = () => {
        if (!getParam('version')) { // H5
xuzhenghua committed
150 151 152 153 154
            if (browser.isWeixin) {
                this.props.isWxloginFun(true);
            } else {
                this.props.history.push('/passport')
            }
xuzhenghua committed
155 156
        } else { // APP
            SendMessageToApp("toLogin")
zhanghaozhe committed
157 158
        }
    }
zhanghaozhe committed
159

xuzhenghua committed
160 161 162 163 164 165 166 167 168 169 170 171 172
    showAll = (key) => {
        if (key === 1) {
            this.setState({
                syllabus: this.state.allSyllabus,
                allSyllabusShow: true,
            })
        }
        if (key === 2) {
            this.setState({
                practice: this.state.allPractice,
                allPracticeShow: true,
            })
        }
zhanghaozhe committed
173
    }
xuzhenghua committed
174 175 176 177 178 179 180 181 182 183 184 185 186
    hideSome = (key) => {
        if (key === 1) {
            this.setState({
                syllabus: this.state.allSyllabus.slice(0, 2),
                allSyllabusShow: false,
            })
        }
        if (key === 2) {
            this.setState({
                practice: this.state.allPractice.slice(0, 2),
                allPracticeShow: false,
            })
        }
zhanghaozhe committed
187
    }
zhanghaozhe committed
188

xuzhenghua committed
189
    getStatus = () => {
xuzhenghua committed
190 191 192
        const {buyTry} = this.props

        http.get(`${API['home']}/web/it_detail?course_id=${getParam('id')}&buy_try=${buyTry}`).then(res => {
xuzhenghua committed
193 194 195 196 197 198 199 200 201 202 203 204
            const {code, data, msg} = res.data
            if (code == 200) {
                this.setState({
                    syllabus: data.syllabus.slice(0, 2),
                    allSyllabus: data.syllabus,
                    allPractice: data.practice,
                    payMoney: data.course_info.price1,
                    courseInfo: data.course_info
                })
            } else {
                Toast.info(msg)
            }
zhanghaozhe committed
205
        })
xuzhenghua committed
206
    }
zhanghaozhe committed
207

xuzhenghua committed
208 209
    componentDidMount() {
        this.getStatus()
zhanghaozhe committed
210

xuzhenghua committed
211 212 213 214
        const {backwardVersion, isPay} = this.props
        if (backwardVersion && isPay === 1) {
            Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端学习', 2)
        }
zhanghaozhe committed
215
    }
xuzhenghua committed
216

xuzhenghua committed
217 218 219
    // 统计
    statistics = type => {
        http.post(`${API.home}/web/it_click_num/${getParam('id')}`, {type})
xuzhenghua committed
220
    }
zhanghaozhe committed
221

zhanghaozhe committed
222

xuzhenghua committed
223 224 225 226 227 228
    shouldComponentUpdate(nextProps, nextState, nextContext) {
        if (this.props.isAppUpdate !== nextProps.isAppUpdate) {
            this.getStatus()
            return false
        }
        return true
zhanghaozhe committed
229 230
    }

xuzhenghua committed
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257
    render() {
        const {
            syllabus,
            allSyllabusShow,
            toApp,
            payMoney,
            isOnline,
            courseInfo
        } = this.state
        return (
            <div className={'python__des'}>
                <div className={'des__start'}></div>
                {
                    !!courseInfo.is_dist && <ShareRank courseInfo={courseInfo}/>
                }
                <div className={'course__introduce'}></div>
                {
                    isOnline
                        ? (
                            <div className={'bottom__btn_group'}>
                                <div className={'course__price'}>
                                    <div className={'money'}>{payMoney}<span style={{fontSize: '18px'}}></span></div>
                                    <div className={'discount'}>
                                        限时特惠
                                        <div className={'triangle'}></div>
                                    </div>
                                </div>
zhanghaozhe committed
258

xuzhenghua committed
259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
                                <div className={'btn__group'}>
                                    <div className={'try__study'} onClick={() => {
                                        this.tryLearn(3)
                                    }}>立即报名
                                    </div>
                                    <div className={'sign__now'} onClick={() => {
                                        this.tryLearn(2)
                                    }}>9.9特价试学
                                    </div>
                                </div>
                            </div>
                        )
                        : (
                            <div className="bottom__btn_group">
                                <p className="online__label">Python人工智能</p>
                                <button className="online__button">即将上架 敬请期待</button>
                            </div>
                        )
                }
zhanghaozhe committed
278

xuzhenghua committed
279 280 281 282 283 284
                {
                    this.state.isShowChannel == 1 &&
                    <CallApp className='toapp'/>
                }
                {/* 课程介绍 */}
                <Description/>
zhanghaozhe committed
285

xuzhenghua committed
286 287
                <Study syllabus={syllabus} allSyllabusShow={allSyllabusShow} show={this.showAll}
                       hide={this.hideSome}></Study>
zhanghaozhe committed
288

xuzhenghua committed
289 290
                {/*精选习题*/}
                <Selection/>
zhanghaozhe committed
291

xuzhenghua committed
292 293
                {/*项目实战*/}
                <InAction/>
zhanghaozhe committed
294

xuzhenghua committed
295
                <Team/>
zhanghaozhe committed
296

xuzhenghua committed
297 298 299 300 301 302 303 304 305 306 307
                {/* 试学体验 */}
                <Experience tryLearn={this.tryLearn} isOnline={isOnline}/>
                <img
                    style={{
                        display: 'block',
                        width: '100%',
                        height: '8px'
                    }}
                    src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/mlCourse/m/di.png"
                    alt=""
                />
zhanghaozhe committed
308

xuzhenghua committed
309 310 311 312 313 314 315 316
                {/* 常见问题 */}
                <Progream/>
                {
                    toApp && (<Mask type={1} closePop={this.closePop}/>)
                }
            </div>
        )
    }
zhanghaozhe committed
317 318 319
}

function DefineItem(props) {
xuzhenghua committed
320 321 322 323 324 325 326 327 328
    const {item, item: {desInfo}} = props
    return (
        <div className={'number_one'}>
            <img className={'trophy'} src={item.titleUrl}></img>
            <p className={'item__title'}>{item.title}</p>
            <p className={'item__subtitle'} style={{width: item.subWidth}}>{item.subTitle}</p>
            <img style={{width: desInfo.width, height: desInfo.height}} src={item.bottomUrl}></img>
        </div>
    )
zhanghaozhe committed
329 330 331
}

export default PythonDes