You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/public/react/src/modules/courses/exercise/Exercisestatisticalresult.js

338 lines
9.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import React, {Component} from "react";
import {WordsBtn,markdownToHTML, MarkdownToHtml} from 'educoder';
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider,InputNumber, Tag,DatePicker,Radio,Tooltip,Pagination} from "antd";
import {Link,Switch,Route,Redirect} from 'react-router-dom';
import axios from 'axios';
import Exercisetablesmubu from './Exercisetablesmubu';
import Exercisestatisticalresulttabel from './Exercisestatisticalresulttabel';
import '../css/members.css';
import '../css/busyWork.css';
import '../poll/pollStyle.css';
const CheckboxGroup = Checkbox.Group;
const $ = window.$
function createMarkup(value) { return {__html:value} };
class Exercisestatisticalresult extends Component {
constructor(props) {
super(props);
this.state = {
data:undefined,
sort:"percent",
exercise_group_id:[],
page:1,
limit:10,
searchtext:"",
order: "end_at",
}
}
componentDidMount() {
let{sort,exercise_group_id,page,limit}=this.state;
this.updatefun(sort,exercise_group_id,page,limit);
try {
this.props.triggerRef(this);
}catch (e) {
}
}
_getRequestParams() {
const { order, exercise_group_id,searchtext, page ,limit} = this.state
return {
page,
search:searchtext,
order,
limit: limit,
group_id:exercise_group_id,
}
}
updatefun=(sort,exercise_group_id,page,limit)=>{
let ExerciseId=this.props.match.params.Id;
let url = `/exercises/`+ExerciseId+`/exercise_result.json`;
axios.get(url,{
params:{
sort:sort,
exercise_group_id:exercise_group_id,
page:page,
limit:limit
}
}).then((result) => {
// console.log(result)
this.setState({
data:result.data
})
}).catch((error) => {
console.log(error)
})
}
onSortTypeChange=(value)=>{
let{exercise_group_id,page,limit}=this.state;
this.setState({
sort:value
})
this.updatefun(value,exercise_group_id,page,limit)
}
funtaskstatustwo=(checkedValues,list)=>{
let{sort,page,limit}=this.state;
if(checkedValues.length===list.length){
this.setState({
exercise_group_id:[]
})
}else{
this.setState({
exercise_group_id:checkedValues
})
}
this.updatefun(sort,checkedValues,page,limit)
}
PaginationCourse=(pageNumber)=>{
let{sort,exercise_group_id,limit}=this.state;
this.setState({
page:pageNumber
})
// debugger
$('html').animate({
scrollTop: 10
}, 1000);
this.updatefun(sort,exercise_group_id,pageNumber,limit)
}
render() {
let{data,sort,page,limit} =this.state;
let choicetype=["满分作答","部分得分作答","零分作答","未批"]
return (
<div className=" ">
<style>
{`
div{
color: rgba(0, 0, 0, 0.65);
}
`}
</style>
<div className={"educontent mb30" } >
{data&&data.course_groups.length===0?"":<div className="stud-class-set">
<div className="clearfix edu-back-white">
<ul className="clearfix" style={{padding:'20px'}}>
<li className="clearfix mt10">
<span className="fl mr10 color-grey-8">分班情况</span>
<span className="fl ">
<a id="graduation_comment_no_limit" className={this.state.exercise_group_id.length===0?"pl10 pr10 mr20 check_on":"pl10 pr10 mr20" }>不限</a>
</span>
<CheckboxGroup onChange={(e)=>this.funtaskstatustwo(e,data&&data.course_groups)} value={this.state.exercise_group_id} style={{width:'87%',paddingTop: '4px'}}>
{ data&&data.course_groups.map((item, key) => {
return (
<span key={key}>
<Checkbox value={item.exercise_group_id}
key={item.exercise_group_id}
// checked={course_group_info === undefined ? false : course_group_info[key].course_group_id === item.course_group_id ? true : false}
className="fl ">{item.exercise_group_name}
<span>({item.exercise_group_students})</span>
</Checkbox>
</span>
)
})}
</CheckboxGroup>
</li>
</ul>
</div>
</div>}
<div className="stud-class-set">
<div className="clearfix edu-back-white exerciseTable ">
<Exercisestatisticalresulttabel
data={data}
/>
</div>
</div>
<style>
{`
.fafafa{
background: #fafafa;
height:50px;
}
.drop_down_normal li{
text-align: center;
}
.mr33{
margin-right: 33px;
}
`}
</style>
<div className="stud-class-set fafafa">
<li className="drop_down fr mt10 mr33">
{sort==="percent"?"正确率":sort==="type"?"题型":sort==="position"?"题序":""}<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_normal">
{sort==='percent'?"":<li onClick={() => this.onSortTypeChange('percent')}>正确率</li>}
{sort==='type'?"":<li onClick={() => this.onSortTypeChange('type')}>题型</li>}
{sort==='position'?"":<li onClick={() => this.onSortTypeChange('position')}>题序</li>}
</ul>
</li>
</div>
<style>
{`
.CACFF{
color:#4CACFF;
}
.bor-greyE{
border: 1px solid #EEEEEE!important;
}
.padtop24{
padding-top: 24px;
}
.exerciseTable .shixunreporttitle{
padding:0px!important;
}
.exerciseTable .ant-table-thead > tr > th,.exerciseTable .ant-table-tbody > tr > td{
padding:16px 20px!important;
}
.exerciseTable .editormd-html-preview{
width:100%!important;
}
`}
</style>
{/* 从子组件将样式提出来,不然会循环多次 */}
<style>{`
// .ant-table-thead > tr > th{
// text-align: center;
// }
.tasknamebox{
width: 50px;
height: 24px;
border: 1px solid rgba(221,23,23,1);
border-radius: 12px;
color: rgba(221,23,23,1);
display: inline-block;
line-height: 24px;
text-align: center;
}
.tasknameboxs{
color: #666666 !important;
background:rgba(237,237,237,1) !important;
}
.ant-table-tbody > tr > td{
font-size:14px;
}
.task-hide{
max-width: 345px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
// .ant-table-tbody > tr{
// height:64px;
// text-align: center;
// }
.ant-progress-success-bg, .ant-progress-bg{
background-color: #29BD8B !important;
}
.ant-table-thead > tr > th:nth-child(1){
text-align: left;
}
.ant-table-tbody > tr > td:nth-child(1){
text-align: left;
}
.Exermubu .ant-table-tbody > tr:nth-last-child(1) > td{
border:1px solid transparent;
}
.Exermubu .editormd-html-preview, .Exermubu .editormd-preview-container {
background: transparent;
}
`}
</style>
{data&&data.commit_results.map((item,key)=>{
return(
<div className="stud-class-set mb20 exerciseTable" key={key}>
<div className="clearfix edu-back-white poll_list" style={{padding: '20px'}}>
<div className="font-16 shixunreporttitle fl" style={{width:"1050px"}}>
<span className="CACFF">{item.ques_position+"."}{item.ques_type===0?"单选":item.ques_type===1?"多选":item.ques_type===2?"判断":item.ques_type===3?"填空":item.ques_type===4?"主观":item.ques_type===5?"实训":""}</span>
<div>
{/*Q{item.ques_position}*/}
{/* <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML1(item.ques_title).replace(/▁/g,"▁▁▁")}}></div> */}
<MarkdownToHtml content={item.ques_title} selector={'ques_title_' + key}
className=""
></MarkdownToHtml>
{/*<span className="markdown-body" dangerouslySetInnerHTML={createMarkup(item.ques_title)}></span>*/}
</div>
</div>
<div className="fr shixunreporttitles mt3">正确率<span style={{color:'#FF6800'}}> {item.right_percent}%</span></div>
</div>
{item.ques_type===5?
item.ques_details.map((ite,k)=>{
return(
<div>
<div className="clearfix edu-back-white poll_list mb10" style={{padding: '0px 20px'}}>
<div className="font-16 shixunreporttitle fl pt20 pb20">
<span>{ite.challenge_position}{ite.challenge_name}</span>
</div>
<div className="fr shixunreporttitles">正确率<span style={{color:'#FF6800'}}> {ite.challenge_percent}%</span></div>
</div>
<Exercisetablesmubu
tableNum={`${key}${k}`}
data={ite.challenge_details}
type={item.ques_type}
effictive_counts={item.effictive_counts}
choicetype={choicetype}
/>
</div>
)
}):
<Exercisetablesmubu
tableNum={key}
data={item.ques_details}
type={item.ques_type}
effictive_counts={item.effictive_counts}
choicetype={choicetype}
/>}
</div>
)
})}
</div>
{
data && data.questions_count > 10 &&
<div className="mb40 edu-txt-center padding20-30">
<Pagination
showQuickJumper
defaultCurrent={1}
pageSize={limit}
total={ data && data.questions_count }
current={page}
onChange={this.PaginationCourse}
/>
</div>
}
</div>
)
}
}
export default Exercisestatisticalresult;