|
|
import React,{ Component } from "react";
|
|
|
import { Input,Checkbox,Menu,Pagination,Spin} from "antd";
|
|
|
import CourseLayoutcomponent from '../common/CourseLayoutComponent';
|
|
|
import UseBank from './UseBank'
|
|
|
|
|
|
import '../css/members.css'
|
|
|
import '../css/busyWork.css'
|
|
|
|
|
|
import CoursesListType from '../coursesPublic/CoursesListType'
|
|
|
import CommonWorkItem from './CommonWorkItem'
|
|
|
import PublishRightnow from './PublishRightnow'
|
|
|
import ConnectProject from './ConnectProject'
|
|
|
|
|
|
import { WordsBtn, on, off } from 'educoder'
|
|
|
import Modals from '../../modals/Modals'
|
|
|
import NoneData from "../coursesPublic/NoneData"
|
|
|
import Titlesearchsection from '../common/titleSearch/TitleSearchSection';
|
|
|
import { RouteHOC } from './common'
|
|
|
|
|
|
import axios from 'axios';
|
|
|
import _ from 'lodash'
|
|
|
|
|
|
const Search = Input.Search;
|
|
|
const map={1:"普通作业",2:"",3:"分组作业"}
|
|
|
const COMMON_WORK = 1
|
|
|
// const COMMON_WORK = 2
|
|
|
class commonWork extends Component{
|
|
|
constructor(props){
|
|
|
super(props);
|
|
|
this.state={
|
|
|
modalsType:"",
|
|
|
modalsTopval:"",
|
|
|
modalsBottomval:"",
|
|
|
modalCancel:"",
|
|
|
mainList:undefined,
|
|
|
selectedKeys: 'all',
|
|
|
order:"",
|
|
|
page:1,
|
|
|
search:"",
|
|
|
totalCount:0,
|
|
|
checkAll:false,
|
|
|
checkBoxValues:[],
|
|
|
isSpin:false
|
|
|
}
|
|
|
}
|
|
|
//输入搜索条件
|
|
|
inputStudent=(e)=>{
|
|
|
this.setState({
|
|
|
search:e.target.value,
|
|
|
page:1
|
|
|
})
|
|
|
}
|
|
|
//搜索查询
|
|
|
searchStudent=()=>{
|
|
|
let {page,search,order}=this.state;
|
|
|
this.getList(page,search,order);
|
|
|
}
|
|
|
openConnectionProject = (work) => {
|
|
|
this.refs['connectProject'].openConnectionProject(work)
|
|
|
}
|
|
|
|
|
|
// 新建
|
|
|
createCommonWork=(type)=>{
|
|
|
this.props.toNewPage(this.props.match.params)
|
|
|
}
|
|
|
|
|
|
cancelDelClasses=()=>{
|
|
|
this.setState({
|
|
|
modalsType:false,
|
|
|
modalsTopval:"",
|
|
|
modalsBottomval:"",
|
|
|
modalCancel:false
|
|
|
})
|
|
|
}
|
|
|
sureDelClasses(){
|
|
|
|
|
|
}
|
|
|
componentDidUpdate(prevProps, prevState) {
|
|
|
if (prevProps.match.path != this.props.match.path) {
|
|
|
this.clearSelection()
|
|
|
this.setState({ selectedKeys: 'all', order: '' }, () => {
|
|
|
this._getList()
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
_getList = () => {
|
|
|
this.setState({
|
|
|
isSpin:true
|
|
|
})
|
|
|
let {page,search,order}=this.state;
|
|
|
this.getList(page,search,order);
|
|
|
}
|
|
|
componentDidMount(){
|
|
|
this._getList()
|
|
|
|
|
|
on('updateNavSuccess', this.updateNavSuccess)
|
|
|
}
|
|
|
componentWillUnmount() {
|
|
|
off('updateNavSuccess', this.updateNavSuccess)
|
|
|
}
|
|
|
updateNavSuccess = () => {
|
|
|
this._getList()
|
|
|
}
|
|
|
|
|
|
useBankSuccess = (checkBoxValues, newWorkIdArray) => {
|
|
|
this.setState({
|
|
|
page:1,
|
|
|
checkBoxValues: newWorkIdArray
|
|
|
}, () => {
|
|
|
this.refs['publishModalRef'].open()
|
|
|
})
|
|
|
|
|
|
let {search, order}=this.state;
|
|
|
this.getList(1, search, order);
|
|
|
}
|
|
|
|
|
|
getList=(page,search,order)=>{
|
|
|
this.setState({
|
|
|
isSpin:true
|
|
|
})
|
|
|
let id=this.props.match.params.coursesId;
|
|
|
let workType = this.props.getModuleType()
|
|
|
let url="/courses/"+id+"/homework_commons.json?type="+workType+"&page="+page;
|
|
|
if(order!=""){
|
|
|
url+="&order="+order;
|
|
|
}
|
|
|
if(search!=""){
|
|
|
url+="&search="+search;
|
|
|
}
|
|
|
axios.get(encodeURI(url)).then((result)=>{
|
|
|
if(result.status==200){
|
|
|
this.setState({
|
|
|
mainList:result.data,
|
|
|
totalCount:result.data.task_count,
|
|
|
isSpin:false,
|
|
|
...result.data
|
|
|
})
|
|
|
}
|
|
|
}).catch((error)=>{
|
|
|
console.log(error);
|
|
|
})
|
|
|
}
|
|
|
//筛选条件
|
|
|
selectedStatus=(e)=>{
|
|
|
this.clearSelection()
|
|
|
this.setState({
|
|
|
order:e.key==="all"?"":e.key,
|
|
|
selectedKeys: e.key,
|
|
|
page:1,
|
|
|
isSpin:true,
|
|
|
checkBoxValues:[],
|
|
|
checkAll:false
|
|
|
})
|
|
|
let {search}=this.state;
|
|
|
this.getList(1,search,e.key==="all"?"":e.key);
|
|
|
}
|
|
|
|
|
|
onPageChange=(pageNumber)=>{
|
|
|
this.setState({
|
|
|
page:pageNumber,
|
|
|
checkBoxValues:[]
|
|
|
})
|
|
|
let {search,order}=this.state;
|
|
|
this.getList(pageNumber,search,order);
|
|
|
}
|
|
|
|
|
|
// 全选和反选
|
|
|
changeAll=(e)=>{
|
|
|
this.setState({
|
|
|
checkAll: e.target.checked
|
|
|
})
|
|
|
|
|
|
const valueId=this.state.mainList.homeworks.map(item=>{
|
|
|
return item.homework_id
|
|
|
})
|
|
|
if (e.target.checked) {
|
|
|
const concated = this.state.checkBoxValues.concat(valueId);
|
|
|
const sortedUniqed = _.uniq(concated)
|
|
|
this.setState({
|
|
|
checkBoxValues: sortedUniqed
|
|
|
})
|
|
|
} else {
|
|
|
this.setState({
|
|
|
checkBoxValues: _.difference(this.state.checkBoxValues, valueId)
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
onChangeSelect=(checkedValues)=>{
|
|
|
this.setState({
|
|
|
checkBoxValues: checkedValues,
|
|
|
checkAll: checkedValues.length == this.state.mainList.homeworks.length
|
|
|
})
|
|
|
}
|
|
|
|
|
|
onWorkDelete = () => {
|
|
|
const { checkBoxValues } = this.state;
|
|
|
const len = checkBoxValues.length;
|
|
|
if (len == 0) {
|
|
|
this.props.showNotification('请先选择要删除的作业')
|
|
|
return;
|
|
|
}
|
|
|
this.props.confirm({
|
|
|
// content: `确认要删除所选的${len}个作业吗?`,
|
|
|
content: <div>
|
|
|
<div>已提交作品将全部被删除,不可恢复</div>
|
|
|
<div>是否确认删除?</div>
|
|
|
</div>,
|
|
|
onOk: () => {
|
|
|
let coursesId=this.props.match.params.coursesId;
|
|
|
const url = `/courses/${coursesId}/homework_commons/multi_destroy.json`
|
|
|
axios.post(url, {
|
|
|
homework_ids: checkBoxValues,
|
|
|
all_check: 0,
|
|
|
// group_ids
|
|
|
}).then((response) => {
|
|
|
if (response.data.status == 0) {
|
|
|
this.props.showNotification('删除成功')
|
|
|
this.clearSelection()
|
|
|
let {search,order}=this.state;
|
|
|
this.getList(1,search,order);
|
|
|
this.props.updataleftNavfun()
|
|
|
}
|
|
|
console.log(response)
|
|
|
}).catch((error) => {
|
|
|
console.log(error)
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
|
|
|
}
|
|
|
clearSelection = () => {
|
|
|
this.setState({ checkBoxValues: [], checkAll: false })
|
|
|
}
|
|
|
//
|
|
|
onSetPublic = () => {
|
|
|
const { checkBoxValues } = this.state;
|
|
|
const len = checkBoxValues.length;
|
|
|
if (len == 0) {
|
|
|
this.props.showNotification('请先选择要公开的作业')
|
|
|
return;
|
|
|
}
|
|
|
this.props.confirm({
|
|
|
content: <div>
|
|
|
<div>设为公开后,非课堂成员也可以访问查看</div>
|
|
|
<div>是否确认设为公开?</div>
|
|
|
</div>,
|
|
|
onOk: () => {
|
|
|
let coursesId=this.props.match.params.coursesId;
|
|
|
const url = `/courses/${coursesId}/homework_commons/set_public.json`
|
|
|
axios.post(url, {
|
|
|
homework_ids: checkBoxValues,
|
|
|
all_check: 0
|
|
|
}).then((response) => {
|
|
|
if (response.data.status == 0) {
|
|
|
this.props.showNotification('设为公开操作成功')
|
|
|
let {search,order, page}=this.state;
|
|
|
this.getList(page,search,order);
|
|
|
}
|
|
|
console.log(response)
|
|
|
}).catch((error) => {
|
|
|
console.log(error)
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
doWhenSuccess = () => {
|
|
|
let {search,order, page}=this.state;
|
|
|
this.getList(page,search,order);
|
|
|
this.setState({
|
|
|
checkBoxValues:[]
|
|
|
})
|
|
|
}
|
|
|
onItemClick = (item) => {
|
|
|
const checkBoxValues = this.state.checkBoxValues.slice(0);
|
|
|
const index = checkBoxValues.indexOf(item.id);
|
|
|
if (index != -1) {
|
|
|
_.remove(checkBoxValues, (listItem)=> listItem === item.id)
|
|
|
} else {
|
|
|
checkBoxValues.push(item.id)
|
|
|
}
|
|
|
this.onChangeSelect(checkBoxValues)
|
|
|
}
|
|
|
addToBank = () => {
|
|
|
const { checkBoxValues } = this.state;
|
|
|
const len = checkBoxValues.length;
|
|
|
if (len == 0) {
|
|
|
this.props.showNotification('请先选择要加入题库的作业')
|
|
|
return;
|
|
|
}
|
|
|
const coursesId = this.props.match.params.coursesId
|
|
|
const url = `/courses/${coursesId}/homework_commons/add_to_homework_bank.json`
|
|
|
axios.post(url, {
|
|
|
homework_ids: checkBoxValues,
|
|
|
all_check: 0
|
|
|
}).then((response) => {
|
|
|
if (response.data.status == 0) {
|
|
|
this.props.showNotification('加入成功')
|
|
|
let {search,order}=this.state;
|
|
|
this.getList(1,search,order);
|
|
|
}
|
|
|
console.log(response)
|
|
|
}).catch((error) => {
|
|
|
console.log(error)
|
|
|
})
|
|
|
}
|
|
|
connectSuccess = () => {
|
|
|
let {page,search,order}=this.state;
|
|
|
this.getList(page,search,order);
|
|
|
}
|
|
|
|
|
|
cancelConnectionProject = (work) => {
|
|
|
let workId=this.props.match.params.workId;
|
|
|
let courseId=this.props.match.params.coursesId;
|
|
|
|
|
|
const url = `/homework_commons/${work.homework_id}/student_works/cancel_relate_project.json`
|
|
|
axios.get(url).then((response)=> {
|
|
|
if (response.data.status == 0) {
|
|
|
let {page,search,order}=this.state;
|
|
|
this.getList(page,search,order);
|
|
|
this.props.showNotification('取消关联成功')
|
|
|
}
|
|
|
}).catch((error)=>{
|
|
|
console.log(error)
|
|
|
})
|
|
|
}
|
|
|
|
|
|
|
|
|
render(){
|
|
|
let {
|
|
|
search,
|
|
|
page,
|
|
|
modalsType,
|
|
|
modalsTopval,
|
|
|
modalsBottomval,
|
|
|
mainList,
|
|
|
totalCount,
|
|
|
checkAll,
|
|
|
checkBoxValues,
|
|
|
|
|
|
task_count,
|
|
|
published_count,
|
|
|
unpublished_count,
|
|
|
main_category_name,
|
|
|
}=this.state;
|
|
|
const { coursedata } = this.props;
|
|
|
if (!coursedata) {
|
|
|
return ''
|
|
|
}
|
|
|
let workType = this.props.getModuleType()
|
|
|
const moduleChineseName = this.props.getModuleName(true)
|
|
|
const { course_public } = coursedata;
|
|
|
|
|
|
const isGroup = this.props.isGroup()
|
|
|
const isAdmin = this.props.isAdmin()
|
|
|
|
|
|
// <CourseLayoutcomponent {...this.props}>
|
|
|
// </CourseLayoutcomponent>
|
|
|
return(
|
|
|
|
|
|
<div>
|
|
|
{/* <div className="edu-back-white">
|
|
|
<p className="clearfix padding30 bor-bottom-greyE">
|
|
|
<span className="font-18 fl color-dark-21">{moduleChineseName}</span>
|
|
|
|
|
|
</p>
|
|
|
<div className="clearfix pl30 pr30">
|
|
|
<div className="fl mt6 task_menu_ul">
|
|
|
<Menu mode="horizontal" defaultSelectedKeys="all" onClick={this.selectedStatus}>
|
|
|
<Menu.Item key="all">全部</Menu.Item>
|
|
|
{isAdmin && <Menu.Item key="0">未发布</Menu.Item>}
|
|
|
<Menu.Item key="1">提交中</Menu.Item>
|
|
|
<Menu.Item key="2">补交中</Menu.Item>
|
|
|
<Menu.Item key="3">匿评中</Menu.Item>
|
|
|
<Menu.Item key="4">申诉中</Menu.Item>
|
|
|
<Menu.Item key="5">评阅中</Menu.Item>
|
|
|
</Menu>
|
|
|
</div>
|
|
|
<div className="fr mt16 mb16 searchView">
|
|
|
<Search
|
|
|
value={search}
|
|
|
placeholder="请输入姓名进行搜索"
|
|
|
onInput={this.inputStudent}
|
|
|
onSearch={this.searchStudent}
|
|
|
></Search>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div> */}
|
|
|
<ConnectProject ref="connectProject" {...this.props} connectSuccess={this.connectSuccess}></ConnectProject>
|
|
|
|
|
|
|
|
|
<Titlesearchsection
|
|
|
title={main_category_name}
|
|
|
searchValue={ search }
|
|
|
// searchtype={this.props.isAdmin||this.props.isStudent ?true:false}
|
|
|
onInputSearchChange={this.inputStudent}
|
|
|
onPressEnter={this.searchStudent}
|
|
|
|
|
|
firstRowRight={
|
|
|
<React.Fragment>
|
|
|
{ isAdmin && <WordsBtn style="blue" className="fr" onClick={()=>this.createCommonWork(1)}>新建</WordsBtn>}
|
|
|
{ isAdmin && <li className="fr">
|
|
|
<UseBank {...this.props} {...this.state} object_type={isGroup ? "group" : "normal"} useBankSuccess={this.useBankSuccess}></UseBank>
|
|
|
</li> }
|
|
|
</React.Fragment>
|
|
|
}
|
|
|
secondRowBotton={
|
|
|
<div className="fl mt6 task_menu_ul">
|
|
|
<Menu mode="horizontal" selectedKeys={this.state.selectedKeys} onClick={this.selectedStatus}>
|
|
|
<Menu.Item key="all">全部</Menu.Item>
|
|
|
{isAdmin && <Menu.Item key="0">未发布</Menu.Item>}
|
|
|
<Menu.Item key="1">提交中</Menu.Item>
|
|
|
<Menu.Item key="2">补交中</Menu.Item>
|
|
|
<Menu.Item key="3">匿评中</Menu.Item>
|
|
|
<Menu.Item key="4">申诉中</Menu.Item>
|
|
|
<Menu.Item key="5">评阅中</Menu.Item>
|
|
|
</Menu>
|
|
|
</div>
|
|
|
}
|
|
|
secondRowLeft={
|
|
|
<div style={{"display":"inline-block", "marginTop": "22px"}}>
|
|
|
<span>共 {mainList&&mainList.all_count} 个{moduleChineseName}</span>
|
|
|
<span style={{"marginLeft":"16px"}}>已发布:{published_count}个</span>
|
|
|
{/* {this.props.isAdmin()?:""} */}
|
|
|
<span style={{"marginLeft":"16px"}}>未发布:{unpublished_count}个</span>
|
|
|
</div>
|
|
|
}
|
|
|
searchPlaceholder={"请输入名称进行搜索"}
|
|
|
showSearchInput={true}
|
|
|
></Titlesearchsection>
|
|
|
<PublishRightnow ref="publishModalRef" showActionButton={true} {...this.props} checkBoxValues={checkBoxValues}
|
|
|
showActionButton={false}
|
|
|
isPublish={true}
|
|
|
isPublishtype={1}
|
|
|
doWhenSuccess={this.doWhenSuccess} fromListPage={true}></PublishRightnow>
|
|
|
{
|
|
|
mainList && mainList.course_identity < 5 && mainList.homeworks.length>0 &&
|
|
|
<div className="mt20 edu-back-white padding20-30">
|
|
|
<div className="clearfix" >
|
|
|
<Checkbox className="fl" onChange={this.changeAll} checked={checkAll}>已选 {checkBoxValues.length} 个 (不支持跨页勾选)</Checkbox>
|
|
|
<div className="studentList_operation_ul">
|
|
|
<li className="li_line">
|
|
|
<a href="javascript:void(0)" className="color-grey-9"
|
|
|
onClick={this.onWorkDelete}>删除</a>
|
|
|
</li>
|
|
|
<li className="li_line">
|
|
|
<a href="javascript:void(0)" className="color-grey-9" onClick={() => this.refs['publishModalRef'].homeworkstart()}>{ "立即发布" }</a>
|
|
|
</li>
|
|
|
<li className="li_line">
|
|
|
<PublishRightnow showActionButton={true} {...this.props} checkBoxValues={checkBoxValues}
|
|
|
isPublish={false} doWhenSuccess={this.doWhenSuccess} fromListPage={true}></PublishRightnow>
|
|
|
</li>
|
|
|
|
|
|
{ !!course_public && <li className="li_line"><a href="javascript:void(0)" onClick={this.onSetPublic} className="color-grey-9">设为公开</a></li>}
|
|
|
<li><a href="javascript:void(0)" className="color-grey-9"
|
|
|
onClick={this.addToBank}
|
|
|
>加入题库</a></li>
|
|
|
</div>
|
|
|
{/* 设为公开 */}
|
|
|
<Modals
|
|
|
modalsType={modalsType}
|
|
|
modalsTopval={modalsTopval}
|
|
|
modalsBottomval={modalsBottomval}
|
|
|
modalCancel={this.cancelDelClasses}
|
|
|
modalSave={this.sureDelClasses}
|
|
|
>
|
|
|
</Modals>
|
|
|
</div>
|
|
|
</div>
|
|
|
}
|
|
|
|
|
|
|
|
|
<Spin size="large" spinning={this.state.isSpin}>
|
|
|
<Checkbox.Group style={{"width":"100%"}} onChange={this.onChangeSelect} value={checkBoxValues}>
|
|
|
<CommonWorkItem mainList={mainList} {...this.props} workType={workType} onItemClick={this.onItemClick}
|
|
|
openConnectionProject={this.openConnectionProject}
|
|
|
cancelConnectionProject={this.cancelConnectionProject}
|
|
|
></CommonWorkItem>
|
|
|
</Checkbox.Group>
|
|
|
</Spin>
|
|
|
|
|
|
{
|
|
|
mainList && mainList.homeworks && mainList.homeworks.length==0 && <NoneData></NoneData>
|
|
|
}
|
|
|
|
|
|
{
|
|
|
!!totalCount && totalCount > 15 &&
|
|
|
<div className="edu-txt-center pt30 pb10 clearfix">
|
|
|
<Pagination current={page} showQuickJumper pageSize={15} total={totalCount} onChange={this.onPageChange}></Pagination>
|
|
|
</div>
|
|
|
}
|
|
|
</div>
|
|
|
)
|
|
|
}
|
|
|
}
|
|
|
export default RouteHOC() (commonWork); |