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/busyWork/UseBank.js

333 lines
12 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 { Modal,Input, Checkbox,Icon,Spin} from "antd";
import '../css/members.css'
import '../css/busyWork.css'
import { WordsBtn, ConditionToolTip } from 'educoder'
import axios from 'axios'
import InfiniteScroll from 'react-infinite-scroller';
import NoneData from '../coursesPublic/NoneData'
const Search=Input.Search;
const pageCount = 20
// "poll", #normal 普通作业题库; group 分组作业题库; poll问卷题库 exercise试卷题库; gtask 毕设选题题库gtopic 毕设任务
const engNameMap = {
poll: '问卷',
normal: '普通作业',
group: '分组作业',
exercise: '试卷',
gtask: '毕设任务',
gtopic: '毕设选题',
}
class UseBank extends Component{
constructor(props){
super(props);
this.state={
flag:false,
nav_my: 'myself',
search: '',
page: 1,
checkBoxValues: [],
isChecked:'',
is_teacher:undefined,
hometypepvisible:false
}
}
componentDidMount() {
}
onCheckBoxChange = (checkBoxValues) => {
this.setState({
checkBoxValues: checkBoxValues
})
if(checkBoxValues.length!=0){
this.setState({
isChecked:""
})
}
}
fetchAll = (arg_page) => {
console.log('fetchAll')
const courseId = this.props.match.params.coursesId
const page = arg_page || this.state.page;
const { nav_my, search } = this.state
/**
normal 普通作业题库; group 分组作业题库; poll问卷题库 exercise试卷题库; gtask 毕设选题题库gtopic 毕设任务
filter string public公共题库 2 myself我的题库 1
*/
const object_type = this.props.object_type
let url = `/question_banks/bank_list.json?page=${page}&limit=${pageCount}&object_type=${object_type || ''}&search=${search || ''}&filter=${nav_my}`
this.setState({ loading: true })
axios.get(url
// , {
// params: {
// }
// }
)
.then((response) => {
if(response.data){
this.setState({
is_teacher:response.data.is_teacher
})
}
if (!response.data.object_list || response.data.object_list.length == 0) {
this.setState({
object_list: page == 1 ? [] : this.state.object_list,
page,
loading: false,
hasMore: false,
})
} else {
this.setState({
object_list: page == 1 ? response.data.object_list : this.state.object_list.concat(response.data.object_list),
page,
loading: false,
hasMore: response.data.object_list.length == pageCount
})
}
})
.catch(function (error) {
console.log(error);
});
}
openSelectBank=()=>{
this.setState({
search: '',
flag:true
}, () => {
this.fetchAll()
})
}
closeSelectBank=()=>{
this.setState({
flag:false,
nav_my: 'myself',
search: '',
page: 1,
checkBoxValues: [],
isChecked:'',
is_teacher:undefined,
hometypepvisible:false
})
}
//切换tab
changeNav=(index)=>{
this.setState({
nav_my:index
}, () => {
this.fetchAll(1)
})
}
onSearchChange = (e) => {
this.setState({
search: e.target.value
})
}
onSave = () => {
const { checkBoxValues } = this.state;
const { object_type } = this.props
if(checkBoxValues.length==0){
this.setState({
isChecked:"请先选择"+engNameMap[object_type]
})
return;
}
this.setState({
hometypepvisible:true
})
const courseId = this.props.match.params.coursesId
let url = `/question_banks/save_banks.json`
this.setState({ loading: true })
axios.post(url
,{
"object_type": object_type,
"bank_id": checkBoxValues,
"course_id": courseId
}
)
.then((response) => {
if (response.data.status == 0) {
this.props.showNotification('题库选用成功')
this.props.useBankSuccess && this.props.useBankSuccess(checkBoxValues,response.data.object_ids);
this.closeSelectBank();
this.props.updataleftNavfun()
this.setState({
hometypepvisible:false,
checkBoxValues:[]
})
} else {
this.setState({
hometypepvisible:false,
checkBoxValues:[]
})
this.props.showNotification(response.data.message)
}
})
.catch( (error) =>{
console.log(error);
this.setState({
hometypepvisible:false,
checkBoxValues:[]
})
});
}
render(){
let { flag, nav_my, loading, hasMore, object_list, search, checkBoxValues,isChecked,page,is_teacher }=this.state
let { object_type }=this.props;
const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />;
return(
<a>
<style>{`
.bankModal .task-hide {
max-width: 290px;
}
.d_middle{
justify-content: center;
align-items: center;
display: -webkit-flex;
}
.setImgW .edu-nodata-img{
width:218px !important;
}
.bankwidth{
width:24% !important;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap
}
`}</style>
{
flag===true?<style>
{
`
body {
overflow: hidden !important;
}
`
}
</style>:""
}
<WordsBtn style="blue" className="mr30 font-16" onClick={()=>this.openSelectBank()}>{engNameMap[object_type]=="问卷"?"问卷选用":engNameMap[object_type]=="试卷"?"试卷选用":"题库选用"}</WordsBtn>
{flag===true?<Modal
title="题库选用"
visible={flag}
closable={false}
width="800px"
footer={null}
keyboard={false}
destroyOnClose={true}
centered={true}
>
<div className="newupload_conbox clearfix bankModal">
<Spin indicator={antIcon} spinning={this.state.hometypepvisible} className="newnext-loading" color='#4AC7FF' size="large">
<div className="clearfix mb30">
<ul className="fl mt2 bankNav">
<li className={nav_my==='myself'?"active":""} onClick={()=>this.changeNav('myself')}><a>我的题库</a></li>
<li className={nav_my==='myself'?"":"active"} onClick={()=>this.changeNav('public')}><a>公共题库</a></li>
</ul>
<Search placeholder="输入标题、适用课程进行搜索" className="searchView fr" style={{"width":"268px","height":"30px"}}
onSearch={() => this.fetchAll(1)} onChange={this.onSearchChange} value={search}
></Search>
</div>
{
object_list && object_list.length == 0 && page == 1 ? "" : nav_my==='myself'?
<p className="color-grey-6 mb25 edu-txt-center">选用对象你在课堂{engNameMap[object_type]}列表中已<span className="color-orange-tip">加入题库</span>{engNameMap[object_type]}</p>
:
<p className="color-grey-6 mb25 edu-txt-center">选用对象题库中已设置成公共属性的所有{engNameMap[object_type]}</p>
}
{
nav_my !='myself' && is_teacher == false ?
<div style={{"height":"230px"}} className="d_middle edu-txt-center">
<div>
<p className="font-16 mb20 color-grey-3">通过职业认证的教师才能访问公共题库</p>
<a className="white-btn edu-orangeback-btn" target="_blank" href="/account/professional_certification">立即认证</a>
</div>
</div>
:
object_list && object_list.length == 0 && page == 1 ?
<div className="setImgW"><NoneData></NoneData></div>
:
<div className="edu-back-skyblue padding20" style={{"height":"230px", "overflowY": 'auto'}}>
<InfiniteScroll
threshold={10}
initialLoad={false}
pageStart={0}
loadMore={() => this.fetchAll(this.state.page + 1)}
hasMore={!loading && hasMore}
useWindow={false}
>
<Checkbox.Group style={{ width: '100%' }} onChange={this.onCheckBoxChange} value={checkBoxValues}>
{ object_list && object_list.map( item => {
/**
course_list_name: "C++程序设计"
id: 3889
name: "作业3第四章 控制结构 "
username: "Coder"
*/
return (
<p className="clearfix mb7" key={item.id}>
<Checkbox className="fl" value={item.id}></Checkbox>
<span className="fl with65">
<label className="task-hide fl" title={item.name && item.name.length > 30 ? item.name:""} style={{"maxWidth":"100%"}}>{item.name}</label>
</span>
<span title={item.course_list_name && item.course_list_name.length > 10 && item.course_list_name}
className={nav_my==='myself'?"fl with30 color-grey-6 task-hide pl5 bankwidth":"fl with30 color-grey-6 task-hide pl5 bankwidth"}
>{item.course_list_name}</span>
{
nav_my==='public' &&
<span className="fl with16 color-grey-6 task-hide pl10">{item.username}</span>
}
</p>
)
})}
</Checkbox.Group>
{/* <p className="clearfix mb7">
<Checkbox className="fl"></Checkbox>
<span className="fl with45"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>毕业设计2018开题报告题报</label></span>
<span className={nav_my===1?"fl with50 color-grey-6 task-hide pl5":"fl with30 color-grey-6 task-hide pl5"}>数据库原理数据库原理</span>
{
nav_my===2 &&
<span className="fl with16 color-grey-6 task-hide pl10">胡莎莎胡莎莎</span>
}
</p> */}
</InfiniteScroll>
</div>
}
<p style={{height:"20px",lineHeight:"20px;", marginTop: '4px'}}>
{
isChecked !="" ? <span className="color-red">{isChecked}</span>:""
}
</p>
<div className="mt10 marginauto clearfix edu-txt-center">
<a onClick={this.closeSelectBank} className="pop_close task-btn mr30">取消</a>
{object_list && object_list.length == 0 && page == 1 ?
nav_my !='myself' && is_teacher == false ?
<a onClick={this.closeSelectBank} className="task-btn task-btn-orange">确定</a>
: <a onClick={this.closeSelectBank} className="task-btn task-btn-orange">确定</a>
:<a className="task-btn task-btn-orange" id="submit_send_shixun" onClick={this.onSave}>确定</a>
}
{/*<a className="task-btn task-btn-orange" id="submit_send_shixun" onClick={this.onSave}>确定</a>*/}
</div>
</Spin>
</div>
</Modal>:""}
</a>
)
}
}
export default UseBank;