index.js 7.93 KB
Newer Older
zhanghaozhe committed
1 2 3 4
import React, { Component } from 'react';
import { Accordion, Toast } from 'antd-mobile';
import { HeaderBar } from '@/common';
import { http, getParam } from '@/utils';
zhanghaozhe committed
5
import './index.scss';
zhanghaozhe committed
6
import { connect } from "react-redux";
zhanghaozhe committed
7 8 9
import Mask from './../poup/index.js'

class PythonStudy extends Component {
zhanghaozhe committed
10 11 12 13 14 15 16 17 18
  constructor(props) {
    super(props);
    this.state = {
      toApp: false,
      courseInfo: '',
      syllabus: '',
      learning: ''
    };
  }
zhanghaozhe committed
19

zhanghaozhe committed
20 21 22
  componentDidMount() {
    this.fetchCourseDetail();
  }
zhanghaozhe committed
23

zhanghaozhe committed
24 25 26 27 28 29 30 31 32 33 34 35 36 37
  fetchCourseDetail = () => {
    http.get(`${API['home']}/web/it_detail?course_id=${getParam('id')}&is_pay=1`).then(res => {
      const {data, code, msg} = res.data;
      if (code === 200) {
        this.setState({
          courseInfo: data.course_info,
          syllabus: data.syllabus,
          learning: data.learning
        })
      } else {
        Toast.info(msg, 2)
      }
    });
  }
zhanghaozhe committed
38

zhanghaozhe committed
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
  Change = (data) => {
    let cn = ["一", "二", "三", "四", "五", "六", "七", "八", "九", '十'];
    let newStr = ''
    let str = data.toString()
    let ci = Number(str) % 10
    let cs = Math.floor(Number(str) / 10)
    let cv = ''
    if (str.length > 1) {
      if (cs == 1) {
        cv = ci >= 1 ? cn[9] + cn[ci - 1] : cn[9]
      } else {
        cv = ci > 1 ? cn[cs - 1] + cn[9] + cn[ci - 1] : cn[cs - 1] + cn[9]
      }
    } else {
      cv = cn[ci - 1]
zhanghaozhe committed
54
    }
zhanghaozhe committed
55 56 57
    newStr = str.replace(str, cv)
    return newStr;
  }
zhanghaozhe committed
58

zhanghaozhe committed
59 60 61
  onChange = (key) => {
    console.log(key);
  }
zhanghaozhe committed
62

zhanghaozhe committed
63 64 65 66 67
  toPythonHome = (isUnlock) => {
    if (isUnlock == 1) {
      this.setState({
        toApp: true
      })
zhanghaozhe committed
68
    }
zhanghaozhe committed
69
  }
zhanghaozhe committed
70

zhanghaozhe committed
71 72 73 74 75 76 77 78 79 80
  toLearn = () => {
    this.setState({
      toApp: true
    })
  }
  closePop = () => {
    this.setState({
      toApp: false,
    })
  }
zhanghaozhe committed
81

zhanghaozhe committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
  render() {
    const {user} = this.props;
    const uid = user && user.data && user.data.uid
    const {courseInfo, syllabus, learning, toApp} = this.state;
    return (
      <div className="python-study">
        <HeaderBar title='Python基础语法' arrow={true}/>
        <div className="python-study__header">
          <div className="python-study__course">
            <h2 className="python-study__course-name">Python人工智能</h2>
            <p className="python-study__course-contact">
              <span>{courseInfo.contact_type == 1 ? '上课请加QQ学习群' : '添加助教微信入群'}{courseInfo.course_qq}</span>
              <span>并备注您的学号:{uid}</span>
            </p>
          </div>
          {
            learning.schedule > 0 &&
            <div className="python-study__progress">
              <h2 className="python-study__progress-title">学习进度</h2>
              <div className="python-study__progress-bar">
                <i style={{width: learning.schedule + '%'}}/>
                <span className="python-study__progress-tip"
                      style={{left: learning.schedule + '%'}}>{learning.schedule + '%'}</span>
              </div>
            </div>
          }
zhanghaozhe committed
108

zhanghaozhe committed
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
        </div>
        <Accordion
          defaultActiveKey="0"
          className="python-study__stage"
          onChange={this.onChange}
        >
          {
            syllabus && syllabus.length > 0 && syllabus.map((syllabusItem, index) => {
              let header = `第${this.Change(syllabusItem.stage)}阶段:${syllabusItem.name}`
              return (
                <Accordion.Panel header={header} className="pad" key={index}>
                  {
                    syllabusItem.lessons && syllabusItem.lessons.length > 0 && syllabusItem.lessons.map((lessonsItem, index) => {
                      return (
                        <div key={index}>
                          <h2 className="python-study__pass">
                            {lessonsItem.shut} {lessonsItem.name}
                            {
                              lessonsItem.complete == 1 &&
                              <i className="python-study__pass-tag">闯关完成</i>
                            }
                          </h2>
zhanghaozhe committed
131

zhanghaozhe committed
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
                          <div className="python-study__subject"
                               style={{opacity: lessonsItem.info.is_unlock == 0 ? '.6' : '1'}}
                               onClick={() => {
                                 this.toPythonHome(lessonsItem.info.is_unlock)
                               }}
                               key={index}>
                            <img className="python-study__subject-icon"
                                 src={lessonsItem.info.img_url} alt=""/>
                            {
                              lessonsItem.info.is_unlock == 1 && lessonsItem.info.complete == 1 &&
                              <i className="python-study__subject-status"
                                 data-status="complete"/>
                            }
                            {
                              lessonsItem.info.is_unlock == 0 &&
                              <i className="python-study__subject-status"
                                 data-status="lock"/>
                            }
                            <div className="python-study__subject-content">
                              <h2 className="python-study__subject-title text-overflow-1">{lessonsItem.info.name}</h2>
                            </div>
                          </div>
zhanghaozhe committed
154

zhanghaozhe committed
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
                          {
                            lessonsItem.project && <div className="python-study__subject"
                                                        style={{opacity: lessonsItem.project.is_unlock == 0 ? '.6' : '1'}}
                                                        onClick={() => {
                                                          this.toPythonHome(lessonsItem.project.is_unlock)
                                                        }}
                            >
                              <img className="python-study__subject-icon"
                                   src={lessonsItem.project.icon} alt=""/>
                              {
                                lessonsItem.project.is_unlock == 1 && lessonsItem.project.complete == 1 &&
                                <i className="python-study__subject-status"
                                   data-status="complete"/>
                              }
                              {
                                lessonsItem.project.is_unlock == 1 && lessonsItem.project.complete == 0 &&
                                <i className="python-study__subject-status"
                                   data-status="lock"/>
                              }
                              <div className="python-study__subject-content">
                                <h2
                                  className="python-study__subject-title text-overflow-1">{lessonsItem.project.name}</h2>
                                {
                                  lessonsItem.project.is_must == 1 &&
                                  <span
                                    className="python-study__subject-tag">必做练习</span>
                                }
                              </div>
                            </div>
                          }
                        </div>
                      )
                    })
                  }
                </Accordion.Panel>
              )
            })
          }
        </Accordion>
        {
          learning.schedule == 0 &&
          <span onClick={this.toLearn} className="python-study__button">开始学习</span>
        }
        {
          learning.schedule != 0 && learning.schedule != 100 &&
          <span onClick={this.toLearn} className="python-study__button">继续学习</span>
        }
        {
          learning.schedule == 100 &&
          <button className="python-study__button python-study__over">已学完全部课时</button>
        }
zhanghaozhe committed
206

zhanghaozhe committed
207 208 209 210 211 212
        {
          toApp && <Mask closePop={this.closePop} type={2}/>
        }
      </div>
    )
  }
zhanghaozhe committed
213 214 215 216
}


export default connect(
zhanghaozhe committed
217 218
  state => ({user: state.user}),
  null
zhanghaozhe committed
219
)(PythonStudy);