index.js 13 KB
Newer Older
FE committed
1
import React, {Component} from 'react'
xuzhenghua committed
2
import './index.scss'
FE committed
3 4 5 6 7
import Description from './Description/index.js'
import NoWorry from './NoWorry/index.js'
import Study from './Study/index.js'
import Test from './Test/index.js'
import Team from './Team/index.js'
wangshuo committed
8
import Experience from './Experience/index.js'
wangshuo committed
9
import Progream from './Progream/index.js'
10
import Mask from './../poup/index.js'
FE committed
11 12 13 14
import {http, getParam, SendMessageToApp,} from '@/utils'
import {connect} from 'react-redux'
import {Toast} from "antd-mobile"

wangshuo committed
15
@connect(state => ({
FE committed
16
    user: state.user
wangshuo committed
17 18
}))
class PythonDes extends Component {
FE committed
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
    constructor(props) {
        super(props)
        this.state = {
            syllabus: [], // 阶梯学习
            allSyllabus: [], // 阶梯学习
            allSyllabusShow: false,
            practice: [], // 课后实操
            allPractice: [], // 课后实操
            allPracticeShow: false,
            toApp: false,
            defineList: [
                {
                    titleUrl: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/trophy.png',
                    title: '排名第1的编程语言',
                    subTitle: '2018世界编程语言排行榜中,Python排名第1',
                    subWidth: '180px',
                    bottomUrl: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/program_lan.png',
                    desInfo: {
                        width: '240px',
                        height: '170px',
                    }
                },
                {
                    titleUrl: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/kaifa.png',
                    title: '开发快速、简单易掌握',
                    subTitle: '严谨的代码编写格式,语法格式简单易理解完成一个相同的任务',
                    subWidth: '260px',
                    bottomUrl: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/kuaisu.png',
                    desInfo: {
                        width: '212px',
                        height: '106px',
                    }
                },
                {
                    titleUrl: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/lingyu.png',
                    title: '适用领域广',
                    subTitle: 'Python工程师可从事多领域编程工作,人才年需求增长6倍',
                    subWidth: '230px',
                    bottomUrl: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/jiandan.png',
                    desInfo: {
                        width: '234px',
                        height: '106px',
                    }
                }
            ],
            desList: [
                {
                    url: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/xingshi.png',
                    title: '全新课程形式',
                    subTitle: '对话式交互教学,轻松、生动、不无聊'
                },
                {
                    url: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/huanjing.png',
                    title: '在线编程环境',
                    subTitle: '无需安装任何编程软件'
                },
                {
                    url: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/rumen.png',
FE committed
77
                    title: '17天零基础入门',
FE committed
78
                    subTitle: '降低学习门槛,17天入门人工智能'
FE committed
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
                },
            ],
            worryList: [
                {
                    url: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/jiechu.png',
                    title: '初次接触,担心学不会',
                    subTitle: '本课程专门为零基础的你打造,全篇通过最白话沟通交流的方式进行讲解,无论你有无编程经验都可以轻松理解并且掌握。'
                },
                {
                    url: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/xuexi.png',
                    title: '想学习,没有坚持下来',
                    subTitle: '以故事性的方式编写学习内容, 把生硬的知识点有趣化。精美的图片+幽默的文字+代码编写让你越学越向学。'
                },
                {
                    url: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/zhishidian.png',
                    title: '知识点掌握了,不知如何运用',
                    subTitle: '每节课的知识点都设有代码编写部分,每节课课后都有课后实操。有多次代码编写练习的机会,助你真正学以致用。'
                },
            ],
98
            payMoney: 0,
wangshuo committed
99
            isOnline: true, //课程是否上架
xuzhenghua committed
100 101
        }
    }
FE committed
102 103 104 105 106 107 108 109 110

    // 立即报名
    signUp = () => {
        // 已登录
        if (!this.props.user.hasError) {
            this.toDetail()
        } else {// 未登录
            this.toLogin()
        }
wangshuo committed
111
    }
FE committed
112 113 114 115 116 117 118 119 120

    // 立即体验、免费试学
    tryLearn = () => {
        // 已登录
        if (!this.props.user.hasError) {
            this.toLearn()
        } else {// 未登录
            this.toLogin()
        }
wangshuo committed
121
    }
FE committed
122 123

    toLearn = () => {
wangshuo committed
124
        const {backwardVersion, isPay} = this.props;
FE committed
125 126 127 128 129 130 131 132
        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
wangshuo committed
133 134 135 136 137
                    if(backwardVersion) {
                        Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端体验', 2)
                    } else {
                        SendMessageToApp("toLearn")
                    }
FE committed
138 139 140 141 142 143 144 145 146 147 148
                }
            } else {
                Toast.info(msg, 2)
            }
        })
    }

    closePop = () => {
        this.setState({
            toApp: false
        })
wangshuo committed
149
    }
FE committed
150 151

    toDetail = () => {
wangshuo committed
152
        const {backwardVersion, isPay} = this.props;
FE committed
153 154 155 156 157 158 159 160 161 162
        const id = getParam('id')
        if (!getParam('version')) { // H5
            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)
                }
            })
        } else { // APP
wangshuo committed
163 164 165 166 167 168 169 170 171 172
            if(backwardVersion) {
                Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端购买', 2);
                let onlyoneUse = setTimeout(() => {
                    clearTimeout(onlyoneUse);
                    onlyoneUse = null;
                    SendMessageToApp('toPay', id)
                }, 2000); 
            } else {
                SendMessageToApp('toPay', id)
            }
wangshuo committed
173 174 175
        }
    }

FE committed
176 177 178 179 180 181
    toLogin = () => {
        if (!getParam('version')) { // H5
            this.props.history.push('/passport')
        } else { // APP
            SendMessageToApp("toLogin")
        }
wangshuo committed
182
    }
FE committed
183 184 185 186 187 188 189 190 191 192 193 194 195 196

    showAll = (key) => {
        if (key === 1) {
            this.setState({
                syllabus: this.state.allSyllabus,
                allSyllabusShow: true,
            })
        }
        if (key === 2) {
            this.setState({
                practice: this.state.allPractice,
                allPracticeShow: true,
            })
        }
wangshuo committed
197
    }
FE committed
198 199 200 201 202 203 204 205 206 207 208 209 210
    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,
            })
        }
wangshuo committed
211
    }
FE committed
212 213 214 215 216 217 218 219 220 221

    getStatus = () => {
        http.get(`${API['home']}/web/it_detail?course_id=${getParam('id')}`).then(res => {
            const {code, data, msg} = res.data
            if (code == 200) {
                this.setState({
                    syllabus: data.syllabus.slice(0, 2),
                    allSyllabus: data.syllabus,
                    practice: data.practice.slice(0, 2),
                    allPractice: data.practice,
222
                    payMoney: data.course_info.price1,
FE committed
223 224 225 226 227
                })
            } else {
                Toast.info(msg)
            }
        })
wangshuo committed
228
    }
FE committed
229 230 231

    componentDidMount() {
        this.getStatus()
wangshuo committed
232 233 234 235 236

        const {backwardVersion, isPay} = this.props;
        if(backwardVersion && isPay === 1) {
            Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端学习', 2);
        }
wangshuo committed
237 238
    }

xuzhenghua committed
239

FE committed
240 241 242 243
    shouldComponentUpdate(nextProps, nextState, nextContext) {
        if (this.props.isAppUpdate !== nextProps.isAppUpdate) {
            this.getStatus()
            return false
244
        }
FE committed
245 246 247 248
        return true
    }

    render() {
FE committed
249 250 251 252 253 254 255 256 257 258 259 260
        const {
            defineList, 
            desList, 
            worryList, 
            syllabus, 
            practice, 
            allSyllabusShow, 
            allPracticeShow, 
            toApp, 
            payMoney,
            isOnline
        } = this.state
FE committed
261 262
        return (
            <div className={'python__des'}>
263
                <div>测试显示不显示</div>
FE committed
264 265 266 267 268 269 270 271 272 273 274 275 276 277
                <div className={'des__start'}></div>
                <div className={'python__define'}>
                    <img className={'left__decorate'}
                         src={'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/left__decorate.png'}></img>
                    <img className={'right__decorate'}
                         src={'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/right__decorate.png'}></img>
                    <p className={'define__title'}> /  /  / Python</p>
                    {
                        defineList.map((item, index) => {
                            return <DefineItem item={item} key={index}></DefineItem>
                        })
                    }
                </div>
                <div className={'course__introduce'}></div>
FE committed
278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
                {
                    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>

                            <div className={'btn__group'}>
                                <div className={'try__study'} onClick={this.tryLearn}>免费试学</div>
                                <div className={'sign__now'} onClick={this.signUp}>立即报名</div>
                            </div>
                        </div>
                    )
                    : (
                        <div className="bottom__btn_group">
                            <p className="online__label">Python人工智能</p>
                            <button className="online__button">即将上架 敬请期待</button>
FE committed
300
                        </div>
FE committed
301 302 303 304 305
                    )
                }
                
                {/* 课程介绍 */}
                <Description list={desList} />
FE committed
306 307 308 309 310 311 312

                <NoWorry list={worryList}></NoWorry>
                <Study syllabus={syllabus} allSyllabusShow={allSyllabusShow} show={this.showAll}
                       hide={this.hideSome}></Study>
                <Test practice={practice} allPracticeShow={allPracticeShow} show={this.showAll}
                      hide={this.hideSome}></Test>
                <Team/>
FE committed
313 314 315 316 317 318 319 320 321 322 323 324 325 326 327

                {/* 试学体验 */}
                <Experience tryLearn={this.tryLearn} isOnline={isOnline} />
                <img 
                    style={{
                        display: 'block', 
                        width: '100%', 
                        height: '8px'
                    }}
                    src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/changjian.png" 
                    alt=""
                />
                
                {/* 常见问题 */}
                <Progream />
FE committed
328 329 330 331 332 333
                {
                    toApp && (<Mask type={1} closePop={this.closePop}/>)
                }
            </div>
        )
    }
xuzhenghua committed
334 335 336
}

function DefineItem(props) {
FE committed
337 338 339 340 341 342 343 344 345
    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>
    )
xuzhenghua committed
346 347
}

wangshuo committed
348
export default PythonDes