import React,{ Component } from "react"; import {Table, Pagination,Tooltip,Spin, Row, Col ,Checkbox,Tabs,Menu, Dropdown, Icon,Input} from "antd"; import { WordsBtn,on, off, trigger ,getImageUrl,sortDirections} from 'educoder'; import axios from'axios'; import Dropdownbox from './Dropdownbox'; import Dynamiclist from './Dynamiclist'; import NoneData from "../../courses/coursesPublic/NoneData"; import './Statistics.css'; const { TabPane } = Tabs; class Statistics extends Component{ constructor(props){ super(props); this.state={ nd1:60, nd2:40, nd3:20, data:undefined, bomdata:undefined, topisSpin:true, bomisSpin:true, sort:'desc', course_groups:[], page:1, all_count:null, activeKey:'1', visible: false, group_ids:[], course_members:[] } } componentDidMount() { this.getdatas() } getdatas=()=>{ let {page,group_ids,sort}=this.state; let courseId=this.props.match.params.coursesId; let url=`/courses/${courseId}/statistics.json`; axios.get(url).then((result) => { if (result) { this.setState({ data:result.data.top_scores, topisSpin:false }) } }).catch((error) => { console.log(error); this.setState({ topisSpin:false, }) }) let courseurl=`/courses/${courseId}/all_course_groups.json`; axios.get(courseurl).then((result) => { if (result) { this.setState({ course_groups:result.data.course_groups }) let list=result.data.course_groups; // if(list.length>0){ // this.setState({ // group_ids:[list[0].id], // }) // } this.getwork_scoredata(page,undefined,sort); } }).catch((error) => { console.log(error); }) } getDynamiclistdatas=(group_ids)=>{ let courseId=this.props.match.params.coursesId; let url=`/courses/${courseId}/act_score.json`; let data={ group_ids:group_ids, } axios.get(url,{params: data }).then((result) => { if (result) { this.setState({ course_members:result.data.course_members, bomisSpin:false }) } }).catch((error) => { console.log(error); this.setState({ bomisSpin:false, }) }) } getwork_scoredata=(page,group_ids,sort)=>{ let {activeKey}=this.state; this.setState({ page:page, sort:sort, group_ids:this.props.isStudent()===true?undefined:group_ids, bomisSpin:true, }) if(activeKey==='1'){ let courseId=this.props.match.params.coursesId; let url=`/courses/${courseId}/work_score.json`; let data={ limit:20, page:page, group_ids:this.props.isStudent()===true?undefined:group_ids, sort:sort } axios.get(url,{params: data }).then((result) => { if (result) { this.setState({ bomdata:result.data.course_members, all_count:result.data.all_count, bomisSpin:false }) } }).catch((error) => { console.log(error); this.setState({ bomisSpin:false, }) }) }else{ this.getDynamiclistdatas(group_ids) } } activeKey=(key)=>{ if(key==="1"){ let {page,group_ids,sort}=this.state; // this.getdatas() this.getwork_scoredata(page,group_ids,sort) }else{ let{group_ids}=this.state; this.getDynamiclistdatas(group_ids) } this.setState({ activeKey:key }) } PaginationCourse=(pageNumber)=>{ let {group_ids,sort}=this.state; this.getwork_scoredata(pageNumber,group_ids,sort); } derivefun=(url)=>{ let{group_ids}=this.state; let data={ group_id:group_ids } axios.get(url,{params: data }).then((response)=>{ if(response === undefined){ return } if(response.data.status&&response.data.status===-1){ this.props.showNotification(response.data.message); }else if(response.data.status&&response.data.status===-2){ // if(response.data.message === "100"){ // // 已超出文件导出的上限数量(100 ),建议: // // this.setState({ // DownloadType:true, // DownloadMessageval:100 // }) // }else { // //因附件资料超过500M // this.setState({ // DownloadType:true, // DownloadMessageval:500 // }) // } this.props.showNotification(response.data.message); }else { // this.props.showNotification(`正在下载中`); // window.open("/api"+url, '_blank'); this.props.slowDownload(url); } }).catch((error) => { console.log(error) }); } // 筛选 handleTableChange =(pagination, filters, data)=>{ let order=data.order; let {page,group_ids}=this.state; if(order==="descend"){ this.getwork_scoredata(page,group_ids,'desc') }else{ this.getwork_scoredata(page,group_ids,'asc') } } render(){ let {nd1,nd2,nd3,data,bomdata,course_members}=this.state; const columns = [ { title: this.props.isAdmin()===true?'序号':'排名', dataIndex: 'index', render: (text, record,index) => { return this.props.isAdmin()===true?(this.state.page - 1) * 20 + index + 1:record.rank } }, { title: '姓名', dataIndex:'user_name', render: (text, record) => ( <span>{record.user_name}</span> ) }, { title: '分班', dataIndex: 'course_group', render: (text, record) => ( <span >{record.course_group}</span> ) }, { title: '实训作业', dataIndex: 'practice_score', render: (text, record) => ( <span >{record.practice_score.toFixed(2)}</span> ) }, { title: '普通作业', dataIndex: 'common_score', render: (text, record) => ( <span >{record.common_score.toFixed(2)}</span> ) }, { title: '分组作业', dataIndex: 'group_score', render: (text, record) => ( <span >{record.group_score.toFixed(2)}</span> ) }, { title: '毕设任务', dataIndex: 'graduation_score', render: (text, record) => ( <span >{record.graduation_score.toFixed(2)}</span> ) }, { title: '试卷', dataIndex: 'exercise_score', render: (text, record) => ( <span >{record.exercise_score}</span> ) }, { title: '总成绩', dataIndex: 'total_score', sorter: this.props.isAdmin()===true?true:false, defaultSortOrder: 'descend', sortDirections: sortDirections, render: (text, record) => ( <span >{record.total_score.toFixed(2)}</span> ) }, ]; let shixun_homeworktype=false; let common_homeworktype=false; let group_homeworktype=false; let graduationtype=false; let exercisetype=false; let course_grouptype=false; if(this.props&&this.props.course_modules!=undefined){ {this.props&&this.props.course_modules.map((item,key)=>{ if(item.type==="course_group"){ course_grouptype=true } if(item.type==="shixun_homework"){ shixun_homeworktype=true } if(item.type==="common_homework"){ common_homeworktype=true } if(item.type==="group_homework"){ group_homeworktype=true } if(item.type==="graduation"){ graduationtype=true } if(item.type==="exercise"){ exercisetype=true } })} } if(course_grouptype===false){ columns.some((item,key)=> { if (item.title === "分班") { columns.splice(key, 1) return true } } ) } if(shixun_homeworktype===false){ columns.some((item,key)=> { if (item.title === "实训作业") { columns.splice(key, 1) return true } } ) } if(common_homeworktype===false){ columns.some((item,key)=> { if (item.title === "普通作业") { columns.splice(key, 1) return true } } ) } if(group_homeworktype===false){ columns.some((item,key)=> { if (item.title === "分组作业") { columns.splice(key, 1) return true } } ) } if(graduationtype===false){ columns.some((item,key)=> { if (item.title === "毕设任务") { columns.splice(key, 1) return true } } ) } if(exercisetype===false){ columns.some((item,key)=> { if (item.title === "试卷") { columns.splice(key, 1) return true } } ) } // console.log(this.props.isAdmin) const operations = <React.Fragment> {course_grouptype===false||this.state.course_groups.length===0?"":<Dropdownbox {...this.props} {...this.state} postwork_scoredata={(group_idss)=>this.getwork_scoredata(1,group_idss,'desc')} />} <a className={"ml20 ant-btn-link"} onClick={()=>this.derivefun(`/courses/${this.props.match.params.coursesId}/export_member_scores_excel.xlsx`)}>导出</a> </React.Fragment>; return( <React.Fragment> <div className="edu-back-white"> <Spin size="large" spinning={this.state.topisSpin}> <p className="clearfix padding30"> <Row gutter={24}> <Col className={"Statisticsmxxy"}> 明星学员 </Col> </Row> <Row type="flex" justify="center" align="bottom"> {data&&data.map((item,key)=>{ if(key===3){ return( <Col span={3}> <li className="pr rankingss"> <a href={`/users/${item.user_login}`} className="color-dark"> <img src={getImageUrl(`images/${item.avatar_url}`)}/> </a> </li> </Col> ) } })} {data&&data.map((item,key)=>{ if(key===1){ return( <Col span={5}> <li className="pr rankingss"> <a href={`/users/${item.user_login}`} className="color-dark"> <img src={getImageUrl(`images/${item.avatar_url}`)} className={"mb10"}/> </a> </li> <Col className={`height-${nd2}`}> </Col> </Col> ) } })} {data&&data.map((item,key)=>{ if(key===0){ return( <Col span={5} className={"relatives"}> <li className="pr rankingss"> <img src="https://test-newweb.educoder.net/images/educoder/huangguan.png" className="huangguans mb5" /> <a href={`/users/${item.user_login}`} className="color-dark"> <img src={getImageUrl(`images/${item.avatar_url}`)} className={"mb10 mt5"}/> </a> </li> <Col className={`height-${nd1}`}> </Col> </Col> ) } })} {data&&data.map((item,key)=>{ if(key===2){ return( <Col span={5}> <li className="pr rankingss"> <a href={`/users/${item.user_login}`} className="color-dark"> <img src={getImageUrl(`images/${item.avatar_url}`)} className={"mb10"}/> </a> </li> <Col className={`height-${nd3}`}> </Col> </Col> ) } })} {data&&data.map((item,key)=>{ if(key===4){ return( <Col span={3}> <li className="pr rankingss"> <a href={`/users/${item.user_login}`} className="color-dark"> <img src={getImageUrl(`images/${item.avatar_url}`)}/> </a> </li> </Col> ) } })} </Row> <Row className="mt10" type="flex" justify="center" align="bottom"> {data&&data.map((item,key)=>{ if(key===3){ return( <Col span={3} className={"Statisticscenter"}> <Col>{item.user_name}</Col> <Col>4th</Col> </Col> ) } })} {data&&data.map((item,key)=>{ if(key===1){ return( <Col span={5} className={"Statisticscenter"}> <Col>{item.user_name}</Col> <Col>2nd</Col> </Col> ) } })} {data&&data.map((item,key)=>{ if(key===0){ return( <Col span={5} className={"Statisticscenter"}> <Col>{item.user_name}</Col> <Col>1st</Col> </Col> ) } })} {data&&data.map((item,key)=>{ if(key===2){ return( <Col span={5} className={"Statisticscenter"}> <Col>{item.user_name}</Col> <Col>3rd</Col> </Col> ) } })} {data&&data.map((item,key)=>{ if(key===4){ return( <Col span={3} className={"Statisticscenter"}> <Col>{item.user_name}</Col> <Col>5th</Col> </Col> ) } })} </Row> </p> </Spin> </div> <div className="mt20 edu-back-white"> <Spin size="large" spinning={this.state.bomisSpin}> <style>{ ` .ant-select-dropdown-menu { max-height: 320px; } .ant-tabs-extra-content{ margin-top:20px; } .ant-table-thead > tr > th, .ant-table-tbody > tr > td { padding: 16px 0px; text-align: center; } ` }</style> <Tabs className="statisticsTabs" activeKey={this.state.activeKey} onChange={this.activeKey} tabBarExtraContent={this.props.isAdmin()===true?operations:""}> <TabPane tab="学习成绩" key="1" className={"statisticsTabs1"} > {bomdata===undefined||bomdata===null?"":bomdata.length===0?<NoneData/>:<Table columns={columns} dataSource={bomdata} pagination={false} onChange={this.handleTableChange} />} </TabPane> <TabPane tab="课堂活跃度" key="2"> {course_members===undefined||course_members===null?"":course_members.length===0?<NoneData/>:<Dynamiclist {...this.state} {...this.props} />} </TabPane> </Tabs> </Spin> </div> {this.state.all_count===undefined||this.state.all_count===null||this.state.activeKey==="2"?'':this.state.all_count >20&&this.props.isAdmin()===true?<div className="mb40 edu-txt-center padding20-30" > <Pagination showQuickJumper defaultCurrent={1} pageSize={20} total={this.state.all_count===undefined?0:this.state.all_count===null?0:this.state.all_count} current={this.state.page} onChange={this.PaginationCourse} /> </div>:""} </React.Fragment> ) } } export default Statistics;