/* eslint-disable jsx-a11y/anchor-is-valid */ import React, { Component } from "react" import classnames from "classnames" import { http, getParam, SendMessageToApp } from "src/utils" import { Toast } from "antd-mobile" import ListFrame from "./../listFrame/index" import CourseItem from "./../courseItem/index" import ListHeader from "./../listHeader" import "./index.scss" class CourseList extends Component { constructor(props) { super(props) this.state = { basic: { course: [], courseList: [], isMore: false, }, advanced: { course: [], courseList: [], isMore: false, }, higher: { course: [], courseList: [], isMore: false, }, expand: { course: [], courseList: [], isMore: false, }, group: { course: [], courseList: [], isMore: false, }, training: { course: [], courseList: [], isMore: false, }, } } componentDidMount() { // 精品课程-集训营、就业班/AI特训营 this.fetchCourseData() // AI之路-基础 this.fetchAICourse("one") // AI之路-进阶 this.fetchAICourse("two") // AI之路-高阶 this.fetchAICourse("three") // AI之路-拓展 this.fetchAICourse("four") } shouldComponentUpdate(nextProps, nextState, nextContext) { if (this.props.isApp !== nextProps.isApp) { // 精品课程-集训营、就业班/AI特训营 this.fetchCourseData() // AI之路-基础 this.fetchAICourse("one") // AI之路-进阶 this.fetchAICourse("two") // AI之路-高阶 this.fetchAICourse("three") // AI之路-拓展 this.fetchAICourse("four") return false } return true } fetchAICourse = (key) => { const { basic, advanced, higher, expand } = this.state http.get(`${API.home}/sys/ai_grow_up_courses/${key}`).then((res) => { const { code, data } = res.data if (code === 200) { if (data.length > 4) { if (key === "one") { this.setState({ basic: Object.assign({}, basic, { isMore: true, course: data.filter((item, index) => index < 4), courseList: data, }), }) } if (key === "two") { this.setState({ advanced: Object.assign({}, advanced, { isMore: true, course: data.filter((item, index) => index < 4), courseList: data, }), }) } if (key === "three") { this.setState({ higher: Object.assign({}, higher, { isMore: true, course: data.filter((item, index) => index < 4), courseList: data, }), }) } if (key === "four") { this.setState({ expand: Object.assign({}, expand, { isMore: true, course: data.filter((item, index) => index < 4), courseList: data, }), }) } } else { if (key === "one") { this.setState({ basic: Object.assign({}, basic, { isMore: false, course: data, courseList: data, }), }) } if (key === "two") { this.setState({ advanced: Object.assign({}, advanced, { isMore: false, course: data, courseList: data, }), }) } if (key === "three") { this.setState({ higher: Object.assign({}, higher, { isMore: false, course: data, courseList: data, }), }) } if (key === "four") { this.setState({ expand: Object.assign({}, expand, { isMore: false, course: data, courseList: data, }), }) } } } }) } fetchCourseData = () => { const { group, training } = this.state http.get(`${API.home}/sys/preheat_data`).then((res) => { const { code, data } = res.data if (code === 200) { if (data.excellent_course.length > 2) { this.setState({ group: Object.assign({}, group, { isMore: true, course: data.excellent_course.filter((item, index) => index < 2), courseList: data.excellent_course, }), }) } else { this.setState({ group: Object.assign({}, group, { isMore: false, course: data.excellent_course, courseList: data.excellent_course, }), }) } if (data.ai_elite_courses.length > 2) { this.setState({ training: Object.assign({}, training, { isMore: true, course: data.ai_elite_courses.filter((item, index) => index < 2), courseList: data.ai_elite_courses, }), }) } else { this.setState({ training: Object.assign({}, training, { isMore: false, course: data.ai_elite_courses, courseList: data.ai_elite_courses, }), }) } } }) } handleToMore = (key) => { let data = {} if (this.state[key]["isMore"]) { data[key] = { isMore: !this.state[key]["isMore"], course: this.state[key]["courseList"], courseList: this.state[key]["courseList"], } this.setState({ ...data, }) } else { if (key === "group" || key === "training") { data[key] = { isMore: !this.state[key]["isMore"], course: this.state[key]["courseList"].filter( (item, index) => index < 2 ), courseList: this.state[key]["courseList"], } } else { data[key] = { isMore: !this.state[key]["isMore"], course: this.state[key]["courseList"].filter( (item, index) => index < 4 ), courseList: this.state[key]["courseList"], } } this.setState({ ...data, }) } } toReceiveCoupon(id, key = "") { const { isLogin, toLogin } = this.props if (isLogin) { var _czc = _czc || [] var name = "课程id=" + id _czc.push(["_trackEvent", name, "m端双十一立即领券"]) http .post(`${API.home}/sys/activity/coupon/receive`, { course_id: id, }) .then((res) => { const { code, msg } = res.data if (code === 200) { Toast.info("领取成功~", 2, null, false) let obj = {} obj[key] = { isMore: this.state[key]["isMore"], course: this.state[key]["course"].map((item) => { if (item.course_id === id) { return Object.assign({}, item, { course_status: 2, }) } return item }), courseList: this.state[key]["courseList"].map((item) => { if (item.course_id === id) { return Object.assign({}, item, { course_status: 2, }) } return item }), } this.setState({ ...obj, }) } else { Toast.info(msg, 2, null, false) } }) } else { toLogin() } } toQQque = () => { if (!getParam("version")) { window.location.href = "https://q.url.cn/AB8aue?_type=wpa&qidian=true" } else { SendMessageToApp("toQQ", "https://q.url.cn/AB8aue?_type=wpa&qidian=true") } } // 去课程详情页 toCourse = (courseId) => { const { history } = this.props if (!getParam("version")) { history.push(`/detail?id=${courseId}`) } else { SendMessageToApp("toCourse", courseId) } } // 开始使用 toCourse2 = (courseId) => { const { history } = this.props var _czc = window._czc || [] var name = "课程id=" + courseId _czc.push(["_trackEvent", name, "m端双十一开始使用优惠券"]) if (!getParam("version")) { history.push(`/detail?id=${courseId}`) } else { SendMessageToApp("toCourse", courseId) } } render() { const { isFormal } = this.props const { basic, advanced, higher, expand, group, training } = this.state return ( <div className="boutique-course"> <ListHeader text="集训营、就业班" size="middle" styles={{ margin: "20px 0 15px" }} /> {/* 集训营、就业班 */} {group.course && group.course.length > 0 && ( <> <div data-layout="row"> {group.course.map((item) => ( <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse} > <div className="coupon-course__footer"> <a onClick={() => this.toQQque()} className="course-button"> 立抢超低团购价 </a> </div> </CourseItem> ))} </div> {group.courseList && group.courseList.length > 2 && ( <button className="more-button" onClick={() => this.handleToMore("group")} > {group.isMore ? "展开更多" : "收起"} </button> )} </> )} <ListHeader text="AI特训营" size="middle" styles={{ margin: "0 0 15px" }} /> {/* AI特训营 */} {training.course && training.course.length > 0 && ( <> <div data-layout="row"> {training.course.map((item) => ( <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse} > <div className="coupon-course__footer"> {item.course_status === 1 && ( <a className={classnames( "coupon-course__button", "coupon-course__button--receive" )} onClick={() => this.toReceiveCoupon(item.course_id, "training") } > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 立即领券 </span> </a> )} {isFormal === 0 && item.course_status === 2 && ( <a className="coupon-course__button"> <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 11.11开始使用 </span> </a> )} {isFormal === 1 && item.course_status === 2 && ( <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button" > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 开始使用 </span> </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> </CourseItem> ))} </div> {training.courseList && training.courseList.length > 2 && ( <button className="more-button" onClick={() => this.handleToMore("training")} > {training.isMore ? "展开更多" : "收起"} </button> )} </> )} {/* AI成长之路--基础 */} <ListHeader text="AI成长之路" size="middle" styles={{ margin: "0 0 15px" }} /> {basic.course && basic.course.length > 0 && ( <> <h4 className="ai-course__subtitle">基础</h4> <div data-layout="row"> {basic.course.map((item) => ( <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse} > {item.type === 0 && ( <div className="coupon-course__footer"> {item.course_status === 1 && ( <a className={classnames( "coupon-course__button", "coupon-course__button--receive" )} onClick={() => this.toReceiveCoupon(item.course_id, "basic") } > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 立即领券 </span> </a> )} {isFormal === 0 && item.course_status === 2 && ( <a className="coupon-course__button"> <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 11.11开始使用 </span> </a> )} {isFormal === 1 && item.course_status === 2 && ( <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button" > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 开始使用 </span> </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> )} {item.type === 1 && ( <div className="cent-course__footer"> {(item.course_status === 1 || item.course_status === 2) && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" > 1分钱开团 </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> )} </CourseItem> ))} </div> {basic.courseList && basic.courseList.length > 4 && ( <button className="more-button" onClick={() => this.handleToMore("basic")} > {basic.isMore ? "展开更多" : "收起"} </button> )} </> )} {/* AI成长之路--进阶 */} {advanced.course && advanced.course.length > 0 && ( <> <h4 className="ai-course__subtitle">进阶</h4> <div data-layout="row"> {advanced.course.map((item) => ( <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse} > {item.type === 0 && ( <div className="coupon-course__footer"> {item.course_status === 1 && ( <a className={classnames( "coupon-course__button", "coupon-course__button--receive" )} onClick={() => this.toReceiveCoupon(item.course_id, "advanced") } > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 立即领券 </span> </a> )} {isFormal === 0 && item.course_status === 2 && ( <a className="coupon-course__button"> <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 11.11开始使用 </span> </a> )} {isFormal === 1 && item.course_status === 2 && ( <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button" > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 开始使用 </span> </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> )} {item.type === 1 && ( <div className="cent-course__footer"> {(item.course_status === 1 || item.course_status === 2) && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" > 1分钱开团 </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> )} </CourseItem> ))} </div> {advanced.courseList && advanced.courseList.length > 4 && ( <button className="more-button" onClick={() => this.handleToMore("advanced")} > {advanced.isMore ? "展开更多" : "收起"} </button> )} </> )} {/* AI成长之路--高阶 */} {higher.course && higher.course.length > 0 && ( <> <h4 className="ai-course__subtitle">高阶</h4> <div data-layout="row"> {higher.course.map((item) => ( <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse} > {item.type === 0 && ( <div className="coupon-course__footer"> {item.course_status === 1 && ( <a className={classnames( "coupon-course__button", "coupon-course__button--receive" )} onClick={() => this.toReceiveCoupon(item.course_id, "higher") } > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 立即领券 </span> </a> )} {isFormal === 0 && item.course_status === 2 && ( <a className="coupon-course__button"> <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 11.11开始使用 </span> </a> )} {isFormal === 1 && item.course_status === 2 && ( <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button" > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 开始使用 </span> </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> )} {item.type === 1 && ( <div className="cent-course__footer"> {(item.course_status === 1 || item.course_status === 2) && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" > 1分钱开团 </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> )} </CourseItem> ))} </div> {higher.courseList && higher.courseList.length > 4 && ( <button className="more-button" onClick={() => this.handleToMore("higher")} > {higher.isMore ? "展开更多" : "收起"} </button> )} </> )} {/* AI成长之路--扩展 */} {expand.course && expand.course.length > 0 && ( <> <h4 className="ai-course__subtitle">扩展</h4> <div data-layout="row"> {expand.course.map((item) => ( <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse} > {item.type === 0 && ( <div className="coupon-course__footer"> {item.course_status === 1 && ( <a className={classnames( "coupon-course__button", "coupon-course__button--receive" )} onClick={() => this.toReceiveCoupon(item.course_id, "expand") } > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 立即领券 </span> </a> )} {isFormal === 0 && item.course_status === 2 && ( <a className="coupon-course__button"> <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 11.11开始使用 </span> </a> )} {isFormal === 1 && item.course_status === 2 && ( <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button" > <span className="coupon-course__button-price"> <em>¥{item.coupon}</em> <i>代金券</i> </span> <span className="coupon-course__button-label"> 开始使用 </span> </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> )} {item.type === 1 && ( <div className="cent-course__footer"> {(item.course_status === 1 || item.course_status === 2) && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" > 1分钱开团 </a> )} {item.course_status === 3 && ( <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study" > 开始学习 </a> )} </div> )} </CourseItem> ))} </div> {expand.courseList && expand.courseList.length > 4 && ( <button className="more-button" onClick={() => this.handleToMore("expand")} > {expand.isMore ? "展开更多" : "收起"} </button> )} </> )} </div> ) } } export default ListFrame(CourseList)