import React, {Component} from 'react' import {VList} from '../../common' import {Tabs, WhiteSpace} from 'antd-mobile' import './courselist.scss' import HeaderSearch from '../../common/HeaderSearch/index' import {http, api, getParam} from "@/utils" import {Toast} from 'antd-mobile' import {Link} from 'react-router-dom' import Loading from '@/common/Loading' class Classify extends Component { constructor(props) { super(props) this.state = { ispull: false, display: 'none', arr: [{basics: []}, {advanced: []}], allClass: [], data: [], activeTab: decodeURIComponent(getParam('name')), isLoading: true } } componentDidMount() { this.getTabs() this.getList() } // 获取tabs接口 getTabs = () => { let data = 0 http.get(`${api.home}/m/course/classify/${data}`) .then((res) => { const _this = this if (res.data.code === 200) { if (res.data.data.common.length > 0) { let arr = ['basics', 'advanced'] let arr2 = [{basics: []}, {advanced: []}] let arr3 = [] arr.forEach(function (item, index) { arr2[item] = res.data.data.common[index] res.data.data.common[index].list.forEach(function (item, index) { arr3.push({'title': item.c_name, 'id': item.c_id}) }) }) _this.setState({ arr: arr2, allClass: arr3 }) } } else { Toast.info(res.data.msg, 2) } }) .catch(err => { console.log(err) }) } // 获取课程接口 getList = () => { http.get(`${api.home}/m/course/list/${getParam('id')}`).then((res) => { if (res.data.code === 200) { this.setState({ data: res.data.data, isLoading: false }) } }) } // 点击横向滚动tab查询 ontabclick = (tab) => { this.props.history.push(`/courselist?id=${tab.id}&name=${tab.title}`) this.getList() this.setState({ activeTab: decodeURIComponent(getParam('name')) }); } // 上下展示 pulldown = () => { this.setState(status => ({ ispull: !status.ispull, display: status.ispull ? 'none' : 'block' })); } // 弹窗里面tab点击查询 labelclick = (item) => { this.props.history.push(`/courselist?id=${item.c_id}&name=${item.c_name}`) this.getList() this.setState(status => ({ ispull: !status.ispull, display: status.ispull ? 'none' : 'block', activeTab: decodeURIComponent(getParam('name')) })) } render() { const bottom = ( <i className={'iconfont iconiconfront-69 pull-down'}></i> ) const top = ( <i className={'iconfont iconiconfront-71 pull-down'}></i> ) let page = this.state.allClass.findIndex((item) => item.title === this.state.activeTab) return ( <div className='class-child'> <HeaderSearch></HeaderSearch> <Loading isLoading={this.state.isLoading}> <div className='class-content'> <WhiteSpace/> <div onClick={this.pulldown.bind(this)}> {this.state.ispull ? top : bottom} </div> <Tabs tabs={this.state.allClass} animated={false} page={page} onChange={(tab) => this.ontabclick(tab)} > <div className='tabs'> <ul> {this.state.data && this.state.data.length > 0 && this.state.data.map((item, index) => { const Info = ( <div className="info"> <p className='title'> <Link to={`/detail?id=${item.course_id}`}> {item.course_title} </Link> </p> <p className='contact text-overflow-2'>{item.desc}</p> <div className='des'> {!item.is_buy && <p className="course-price"> <span className="new">¥{item.price0}</span> <span className="old">¥{item.price1}</span> </p> } {item.is_buy && <a href="/#" className="isbuy">已购买</a> } </div> </div> ) const status = ( <div> {item.bargain_num === 0 && item.groupon_num !== 0 && <p className='course-status'>拼团减{item.groupon_num}元</p> } {item.bargain_num !== 0 && item.groupon_num === 0 && <p className='course-status'>砍价减{item.bargain_num}元</p> } </div> ) return ( <VList key={index} status={status} img={item.image_name} id={item.course_id} info={Info}></VList> ) })} </ul> </div> </Tabs> <WhiteSpace/> </div> <div className='mbc-box' style={{display: this.state.display}}> { this.state.arr.basics && <div className="tabcontent"> <ClassCourse activeTab={this.state.activeTab} data={this.state.arr.basics.list} title={this.state.arr.basics.name} labelclick={this.labelclick}/> <ClassCourse activeTab={this.state.activeTab} data={this.state.arr.advanced.list} title={this.state.arr.advanced.name} labelclick={this.labelclick}/> </div> } </div> </Loading> </div> ) } } function ClassCourse(props) { return ( <div className="class-course"> <p className='course-items-title'>{props.title}</p> <div className='items-box'> { props.data && props.data.length > 0 && props.data.map((item, index) => { return ( <span className={props.activeTab === item.c_name ? 'active-label' : 'item-label'} key={index} onClick={e => props.labelclick(item)}>{item.c_name}</span> ) }) } </div> </div> ) } export default Classify;