import React, { Component } from 'react'; import { Tabs, WhiteSpace, List, Flex, WingBlank, Modal, ListView, Toast } from 'antd-mobile'; import './scholarship.scss'; import { is_weixin, http } from "@/utils"; import CategoryItem from './CategoryItem/CategoryItem.js'; import SortItem from './SortItem/SortItem.js'; import { connect } from 'react-redux'; import OpenApp from '@/common/CallApp'; import {getCourses} from './../detail/actions'; const Item = List.Item; @connect(state => ({ user: state.user })) class _Scholarship extends Component { constructor(props) { super(props); this.state = { un_affirm: 0, account: 0.00, drawCashHtml: false, drawCashWechat: false, waitMoneyDetail: false, codeSrc: '', dataSource: new ListView.DataSource({ rowHasChanged: (row1, row2) => row1 !== row2, }), page: 1, useBodyScroll: true, isLoading: false, showNoData: false, hasMore: true, tab: 0, } this.downImage = React.createRef(); this.tabIndex = 0; this.searchObject = {}; this.rData = []; } tabList = [ { title: '课程列表', sub: '1' }, { title: '分销榜单', sub: '2' }, ]; // 返回上一页 goback = () => { this.props.history.push('/my'); } // 关闭弹框 closeModal = () => { this.setState({ drawCashWechat: false, drawCashHtml: false, waitMoneyDetail: false, }); }; // 显示代收款提示modal showDetail = () => { this.setState({ waitMoneyDetail: true, }); } // 提现按钮 根据是否在微信环境中显示提示 drawCash = () => { if (is_weixin()) { this.setState({ drawCashWechat: true }); } else { this.setState({ drawCashHtml: true }); } const {hasError, data = {}} = this.props.user; if(hasError) { Toast.info("请登录提现!", undefined, undefined, false); return; } http.get(`${API['base-api']}/wx/user_temporary_qrcode/${data.uid}`).then(res => { if(res.data.errno === 0) { if (is_weixin()) { this.setState({ codeSrc: res.data.data.qr_image }); } else { this.setState({ codeSrc: res.data.data.qr_image }); } }else{ Toast.info(res.data.data.msg, 2); } }); }; // 去登陆 toLogin = () => { this.props.history.push('/passport'); }; // 跳转到规则说明页 showDocument = () => { this.props.history.push('/document'); }; // 保存二维码 TODO 失败 saveImage = () => { }; // 分销赚钱 shareCategory = (course_id, money) => { const {hasError, data = {}} = this.props.user; if(hasError) { Toast.info("请登录后分享!", undefined, undefined, false); return; } http.post(`${API.home}/dist/createCode`, {course_id}).then((res) => { if (res.data.code === 200) { this.props.history.push(`/shareposter?courseId=${course_id}&dist_first=${money}&uid=${data.uid}&dist_code=${res.data.data.code}`) } }) }; onEndReached = () => { if (this.state.isLoading || !this.state.hasMore) { return; } this.setState({ isLoading: true, }); let apiUrl = `${API.home}/m/dist/course_list`; if (this.tabIndex === 1) { apiUrl = `${API.home}/m/dist/commission_ranking_list` }; http.get(apiUrl).then((res) => { if (res.data.code !== 200) { this.setState({ isLoading: false }); return; } let newData = []; if(this.tabIndex === 0) { if (!res.data.data.list || res.data.data.list.length === 0) { this.setState({ isLoading: false, hasMore: false, showNoData: this.searchObject.page === 1 }); return; } newData = res.data.data.list; } else { if (!res.data.data || res.data.data.length === 0) { this.setState({ isLoading: false, hasMore: false, showNoData: this.searchObject.page === 1 }); return; } newData = res.data.data; } this.searchObject.page++; this.rData = [...this.rData, ...newData]; this.setState({ dataSource: this.state.dataSource.cloneWithRows(this.rData), isLoading: false, // hasMore: newData.length >= 10, hasMore: false }); }) .catch(() => { this.setState({ isLoading: false }); }); } componentDidMount() { if (this.state.useBodyScroll) { document.body.style.overflow = 'auto'; } else { document.body.style.overflow = 'hidden'; } http.get(`${API.home}/m/user_account`).then(res=>{ if(res.data.code === 200) { this.setState({ ...res.data.data }); } }); this.onEndReached(); } toCourseDetail = (id) => { const { dispatch, history } = this.props; // dispatch(getCourses(id, () => { history.push(`/detail?id=${id}`) // })); } render() { const row = ( rowData, rowID ) => { return ( <CategoryItem {...rowData} key={rowID} share={this.shareCategory} toDetail={this.toCourseDetail} /> ); }; const row1 = ( rowData, rowID ) => { return <SortItem {...rowData} sortNum={this.rData.indexOf(rowData) + 1} key={rowID} />; }; const separator = (sectionID, rowID) => ( <div key={`${sectionID}-${rowID}`}> <WhiteSpace /> </div> ); const { un_affirm, account, drawCashHtml, drawCashWechat, waitMoneyDetail, codeSrc, } = this.state; const { hasError } = this.props.user; return ( <div className={'scholarship'}> <div className={'account-container'}> <WhiteSpace></WhiteSpace> <WingBlank> <Flex justify='between'> <i className={'iconfont iconiconfront-68 back'} onClick={this.goback}></i> <span className={"common-ft-15"}>账户资金</span> <i className={'iconfont iconiconfront-22 tip-info'} onClick={this.showDocument}></i> </Flex> </WingBlank> <WhiteSpace></WhiteSpace> <WingBlank> <span className={'common-ft-14'}> 可提现余额: </span> </WingBlank> <WhiteSpace></WhiteSpace> { hasError ? ( <> <WhiteSpace></WhiteSpace> <Flex justify='center'> <div className={'login-check'} onClick={this.toLogin}>登录后查看</div> </Flex> </> ) : ( <> <Flex justify='center' align='baseline' className={"drawCash"} > <span className={'common-ft-25'}>{account}</span> <span className={'common-ft-15'}>元</span> </Flex> <WhiteSpace></WhiteSpace> <Flex justify='center'> <div className={'draw-cash'} onClick={this.drawCash}>提现</div> </Flex> </> ) } </div> <div className={'over-am-list-item'} > { hasError ? (null) : ( <> <div> <List> <Item arrow="horizontal" style={{ padding: '0 0 0 15px' }} onClick={this.showDetail} > <Flex direction='row' justify='between'> <span className={'common-ft-15'}>待确认金额</span> <span className={'money'}>{un_affirm}</span> </Flex> </Item> </List> </div> <WhiteSpace></WhiteSpace> </> ) } <div style={{ backgroundColor: '#FFF' }}> <Tabs tabs={this.tabList} initialPage={0} swipeable={false} // onChange={this.changeTab} onChange={(tab, index) => { this.tabIndex = index; this.pageIndex = 1; this.rData = []; this.searchObject.page = 1; this.setState( { isLoading: false, hasMore: true, dataSource: this.state.dataSource.cloneWithRows(this.rData), tab: index, }, () => { this.onEndReached(); } ); }} > </Tabs> { this.state.tab === 0 ? ( <div style={{ marginTop: '15px', backgroundColor: '#FFF' }}> { this.state.dataSource._cachedRowCount !== 0 ? ( <ListView useBodyScroll={this.state.useBodyScroll} dataSource={this.state.dataSource} renderRow={row} renderBodyComponent={() => <div />} onEndReached={this.onEndReached} pageSize={4} onEndReachedThreshold={100} /> ) : ( null ) } </div> ) : null } { this.state.tab === 1 ? ( <div> <Flex justify='center' align='center' className={'runtimeList'}>榜单实时更新,仅显示前50名</Flex> { this.state.dataSource._cachedRowCount !== 0 ? ( <ListView useBodyScroll={this.state.useBodyScroll} dataSource={this.state.dataSource} renderRow={row1} renderBodyComponent={() => <div />} onEndReached={this.onEndReached} pageSize={4} onEndReachedThreshold={100} /> ) : ( null ) } </div> ) : null } </div> </div> <Modal visible={drawCashWechat} transparent maskClosable={true} onClose={this.closeModal} title="提现" footer={[{ text: '确认', onPress: () => { this.closeModal() } }]} className={'wechatModal'} style={{ width: '300px' }} > <p style={{ fontSize: '13px', color: '#666666' }}> 提现金额将通过微信零钱转账给您,识别下方二维码,关注【七月在线】服务号申请提现。 </p> <WhiteSpace size='sm'></WhiteSpace> <Flex justify='center'> <img src={codeSrc} style={{ width: '90px', height: '90px', backgroundColor: '#666' }} alt="二维码" /> </Flex> </Modal> <Modal visible={drawCashHtml} transparent maskClosable={true} onClose={this.closeModal} style={{ width: '300px'}} > <p style={{color: '#333333', fontSize: '16px', textAlign: 'center'}}>提现</p> <WhiteSpace size='lg'></WhiteSpace> <p style={{ fontSize: '12px', color: '#666666', textAlign: 'left' }}> 提现金额将通过微信零钱转账给您,请微信扫码关注【七月在线】服务号后申请提现。 </p> <WhiteSpace size='lg'></WhiteSpace> <Flex justify='center'> <img src={codeSrc} style={{ width: '90px', height: '90px' }} alt="二维码" /> </Flex> <WhiteSpace size='sm'></WhiteSpace> <Flex justify='center' style={{color: '#333333', fontSize: '12px'}}>长按二维码保存到相册</Flex> <i onClick={this.closeModal} className='iconfont iconiconfront-2' style={{zIndex: 99, fontSize: '40px', color: '#fff', position: "fixed", top: '70%', left: '50%', transform: 'translateX(-50%)'}}></i> </Modal> <Modal visible={waitMoneyDetail} transparent maskClosable={true} onClose={this.closeModal} title="待确认金额" footer={[ { text: '知道了', onPress: () => { this.closeModal() } } ]} style={{ width: '300px' }} > <p style={{ fontSize: '13px', color: '#666666', textAlign: 'left', lineHeight: '20px' }}> 1.尚未开课的直播课程,用户购买后归属您的佣金会暂时存放在『待确认金额』中。 </p> <p style={{ fontSize: '13px', color: '#666666', textAlign: 'left', lineHeight: '20px' }}> 2.该课程正式开课时,如果用户没有退款,对应的订单金额会自动转入您的账号余额,否则该佣金会自动收回。 </p> <WhiteSpace></WhiteSpace> <Flex style={{ fontSize: '14px', color: '#0099FF' }} justify='center'> <span style={{color: "#333", marginRight: '10px'}}>待确认订单详情可</span> <OpenApp className='toApp' text='前往APP查看'/> </Flex> </Modal> </div> ) } } // const mapStateToProps = (state) => { // return { // user: { // ...state.user // }, // }; // }; // const mapDispatchToProps = (dispatch) => { // return {}; // }; // export const Scholarship = connect( // mapStateToProps, // mapDispatchToProps // )(_Scholarship); export default _Scholarship;