index.js 11.2 KB
Newer Older
zhanghaozhe committed
1
/* eslint-disable eqeqeq, jsx-a11y/alt-text */
zhanghaozhe committed
2 3 4 5 6 7 8 9 10 11 12 13 14
import React, { Component } from "react"
import "./index.scss"
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"
import Experience from "./Experience/index.js"
import Progream from "./Progream/index.js"
import Mask from "./../poup/index.js"
import { http, getParam, SendMessageToApp } from "src/utils"
import { connect } from "react-redux"
import { Toast } from "antd-mobile"
zhanghaozhe committed
15
import ShareRank from "src/components/detail/shareRank"
FE committed
16

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

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

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

zhanghaozhe committed
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
  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
              )
FE committed
152
            } else {
zhanghaozhe committed
153
              SendMessageToApp("toLearn", getParam("id"))
FE committed
154
            }
zhanghaozhe committed
155 156 157 158 159 160 161 162 163 164 165 166
          }
        } else {
          Toast.info(msg, 2)
        }
      })
  }

  closePop = () => {
    this.setState({
      toApp: false,
    })
  }
FE committed
167

zhanghaozhe committed
168 169 170 171 172 173 174 175 176 177 178 179 180
  toDetail = () => {
    const { backwardVersion } = this.props
    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)
          }
FE committed
181
        })
zhanghaozhe committed
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
    } else {
      // APP
      if (backwardVersion) {
        Toast.info(
          "当前版本不支持该课程模式,请升级到最新版本或前往PC端购买",
          2
        )
        let onlyoneUse = setTimeout(() => {
          clearTimeout(onlyoneUse)
          onlyoneUse = null
          SendMessageToApp("toPay", id)
        }, 2000)
      } else {
        SendMessageToApp("toPay", id)
      }
wangshuo committed
197
    }
zhanghaozhe committed
198
  }
FE committed
199

zhanghaozhe committed
200 201 202 203 204 205 206
  toLogin = () => {
    if (!getParam("version")) {
      // H5
      this.props.history.push("/passport")
    } else {
      // APP
      SendMessageToApp("toLogin")
wangshuo committed
207
    }
zhanghaozhe committed
208
  }
wangshuo committed
209

zhanghaozhe committed
210 211 212 213 214 215
  showAll = (key) => {
    if (key === 1) {
      this.setState({
        syllabus: this.state.allSyllabus,
        allSyllabusShow: true,
      })
wangshuo committed
216
    }
zhanghaozhe committed
217 218 219 220 221
    if (key === 2) {
      this.setState({
        practice: this.state.allPractice,
        allPracticeShow: true,
      })
wangshuo committed
222
    }
zhanghaozhe committed
223 224 225 226 227 228 229
  }
  hideSome = (key) => {
    if (key === 1) {
      this.setState({
        syllabus: this.state.allSyllabus.slice(0, 2),
        allSyllabusShow: false,
      })
wangshuo committed
230
    }
zhanghaozhe committed
231 232 233 234 235
    if (key === 2) {
      this.setState({
        practice: this.state.allPractice.slice(0, 2),
        allPracticeShow: false,
      })
wangshuo committed
236
    }
zhanghaozhe committed
237
  }
FE committed
238

zhanghaozhe committed
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
  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,
            payMoney: data.course_info.price1,
            courseInfo: data.course_info,
          })
        } else {
          Toast.info(msg)
wangshuo committed
255
        }
zhanghaozhe committed
256 257
      })
  }
wangshuo committed
258

zhanghaozhe committed
259 260
  componentDidMount() {
    this.getStatus()
xuzhenghua committed
261

zhanghaozhe committed
262 263 264 265 266 267 268 269 270 271
    const { backwardVersion, isPay } = this.props
    if (backwardVersion && isPay === 1) {
      Toast.info("当前版本不支持该课程模式,请升级到最新版本或前往PC端学习", 2)
    }
  }

  shouldComponentUpdate(nextProps, nextState, nextContext) {
    if (this.props.isAppUpdate !== nextProps.isAppUpdate) {
      this.getStatus()
      return false
FE committed
272
    }
zhanghaozhe committed
273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297
    return true
  }

  render() {
    const {
      defineList,
      desList,
      worryList,
      syllabus,
      practice,
      allSyllabusShow,
      allPracticeShow,
      toApp,
      payMoney,
      isOnline,
      courseInfo,
    } = this.state
    console.log(courseInfo)
    return (
      <div className={"python__des"}>
        <div className={"des__start"}></div>
        {!!courseInfo.is_dist && <ShareRank courseInfo={courseInfo} />}
        <div className={"python__define"}>
          <img
            className={"left__decorate"}
298
            src={"https://cdn.julyedu.com/h5_python_class/left__decorate.png"}
zhanghaozhe committed
299 300 301
          ></img>
          <img
            className={"right__decorate"}
302
            src={"https://cdn.julyedu.com/h5_python_class/right__decorate.png"}
zhanghaozhe committed
303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
          ></img>
          <p className={"define__title"}> /  /  / Python</p>
          {defineList.map((item, index) => {
            return <DefineItem item={item} key={index}></DefineItem>
          })}
        </div>
        <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>
FE committed
322

zhanghaozhe committed
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
            <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>
          </div>
        )}
FE committed
338

zhanghaozhe committed
339 340
        {/* 课程介绍 */}
        <Description list={desList} />
FE committed
341

zhanghaozhe committed
342
        <NoWorry list={worryList}></NoWorry>
FE committed
343

zhanghaozhe committed
344 345 346 347 348 349
        <Study
          syllabus={syllabus}
          allSyllabusShow={allSyllabusShow}
          show={this.showAll}
          hide={this.hideSome}
        ></Study>
FE committed
350

zhanghaozhe committed
351 352 353 354 355 356 357 358
        {/* 课后实操 */}
        <Test
          practice={practice}
          allPracticeShow={allPracticeShow}
          show={this.showAll}
          hide={this.hideSome}
        />
        <Team />
FE committed
359

zhanghaozhe committed
360 361 362 363 364 365 366 367
        {/* 试学体验 */}
        <Experience tryLearn={this.tryLearn} isOnline={isOnline} />
        <img
          style={{
            display: "block",
            width: "100%",
            height: "8px",
          }}
368
          src="https://cdn.julyedu.com/h5_python_class/changjian.png"
zhanghaozhe committed
369 370 371 372 373 374 375 376 377
          alt=""
        />

        {/* 常见问题 */}
        <Progream />
        {toApp && <Mask type={1} closePop={this.closePop} />}
      </div>
    )
  }
xuzhenghua committed
378 379 380
}

function DefineItem(props) {
zhanghaozhe committed
381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397
  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
398 399
}

wangshuo committed
400
export default PythonDes