import React,{Component} from "React"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; import {Link} from 'react-router-dom'; import locale from 'antd/lib/date-picker/locale/zh_CN'; import { WordsBtn,getUrl ,handleDateString} from 'educoder'; import axios from 'axios'; import Modals from '../../../modals/Modals'; import DownloadMessageysl from "../../../modals/DownloadMessageysl"; import CoursesListType from '../../coursesPublic/CoursesListType'; import HomeworkModal from "../../coursesPublic/HomeworkModal"; import moment from 'moment'; const { Option} = Select; const RadioGroup = Radio.Group; function range(start, end) { const result = []; for (let i = start; i < end; i++) { result.push(i); } return result; } function disabledDateTime() { return { disabledMinutes: () => range(1, 30).concat(range(31, 60)), }; } class GraduationTaskssettingapp extends Component{ constructor(props){ super(props) this.state={ coursename:"", coursesearch:"", title_num:20, title_value:"", fileList: [], contents: [{val:"",id:1}], type:true, taskname:"", taskid:"", settingdata:undefined, baseonproject:false, minnum:2, maxnum:5, publish_time:null, end_time:null, allowlate:1, latepenalty:undefined, latetime:null, crosscomment:undefined, commentstatus:1, commentnum:0, opergrade:false, operworks:false, commenttime:undefined, graduationgroups:[], assigngroups:[], selecassigngroups:[], hasproject:false, hascommit:false, minnums:0, max_nums:0, minnumstype:false, maxnumstype:false, edittype:false, task_type:false, starttimetype:false, endtimetype:false, flagPageEdit:false, visible:false, starttime:undefined, DownloadType:false, DownloadMessageval:undefined, } } getsettings=()=>{ let task_Id=this.props.match.params.task_Id; let url ="/graduation_tasks/"+task_Id+"/settings.json" axios.get(url).then((result)=> { if(result.status===200){ let assigngroups = [] for (var list of result.data.graduation_groups) { assigngroups.push({ assign_group_id: list.assign_group_id, select_name: list.select_name, }) } let starttype=false; let endtype=false; if(moment(result.data.publish_time)<moment()){ starttype=true } if(moment(result.data.end_time)<moment()){ endtype=true } this.setState({ starttimetype:starttype, endtimetype:endtype, settingdata: result.data, minnum: result.data.min_num, minnums: result.data.min_num, maxnum: result.data.max_num, max_nums: result.data.max_num, task_type: result.data.task_type, baseonproject: result.data.base_on_project, publish_time:result.data.publish_time===null||result.data.publish_time=== ""?"":moment(moment(handleDateString(result.data.publish_time))).format("YYYY-MM-DD HH:mm"), end_time:result.data.end_time===null||result.data.end_time=== ""?"":moment(moment(handleDateString(result.data.end_time))).format("YYYY-MM-DD HH:mm"), allowlate: result.data.allow_late, latepenalty: result.data.late_penalty, latetime:result.data.late_time===null||result.data.late_time=== ""?"":moment(moment(handleDateString(result.data.late_time))).format("YYYY-MM-DD HH:mm"), crosscomment: result.data.cross_comment, taskid: result.data.id, taskname: result.data.task_name, coursename: result.data.course_name, commentstatus: result.data.comment_status, commentnum: result.data.comment_num, operworks: result.data.open_work, opergrade: result.data.open_score, graduationgroups: result.data.graduation_groups, hasproject: result.data.has_project, hascommit: result.data.has_commit, assigngroups: assigngroups, commenttime:result.data.comment_time===null||result.data.comment_time=== ""?"":moment(moment(handleDateString(result.data.comment_time))).format("YYYY-MM-DD HH:mm"), task_status: result.data.task_status }) } }).catch((error)=>{ console.log(error) }) } componentDidMount(){ let query=this.props.location.search const type = query.split('?tab='); let id=parseInt(type[1]) this.getsettings(); if(this.props.isAdmin()===true&&isNaN(id)){ this.editSetting() } } baseprojectfun=(e)=>{ this.setState({ baseonproject:e.target.checked }) } setminnum=(e)=>{ if(isNaN(parseInt(e.target.value))){ this.setState({ minnum:"" }) }else if(parseInt(e.target.value)===0) { this.setState({ minnum:1 }) }else{ this.setState({ minnum:parseInt(e.target.value) }) } } setmaxnum=(e)=>{ let {minnum}=this.state; if(isNaN(parseInt(e.target.value))){ this.setState({ maxnum:"" }) }else if(parseInt(e.target.value)===0) { this.setState({ maxnum:parseInt(minnum)+1 }) }else{ if(parseInt(e.target.value)<=parseInt(minnum)){ this.setState({ maxnum:minnum+1 }) }else{ this.setState({ maxnum:parseInt(e.target.value) }) } } } onChangeTimepublish= (date, dateString) => { let endtime; if(date===null){ this.setState({ publish_time:null, end_time:null, latetime:null }) }else{ endtime= moment(moment(handleDateString(dateString))).add(1, 'months').format("YYYY-MM-DD HH:mm") let {allowlate}=this.state; if(allowlate===true||allowlate===1){ this.setState({ publish_time:moment(moment(handleDateString(dateString))).format("YYYY-MM-DD HH:mm"), end_time:endtime, latetime:moment(moment(handleDateString(endtime))).add(1, 'months').format("YYYY-MM-DD HH:mm"), }) }else{ this.setState({ publish_time:moment(moment(handleDateString(dateString))).format("YYYY-MM-DD HH:mm"), end_time:endtime }) } } } onChangeTimeend= (date, dateString) => { if(date===null){ this.setState({ end_time:null, latetime:null }) }else{ let {allowlate}=this.state; if(allowlate===true||allowlate===1){ this.setState({ end_time:moment(moment(handleDateString(dateString))).format("YYYY-MM-DD HH:mm"), latetime:moment(moment(handleDateString(dateString))).add(1, 'months').format("YYYY-MM-DD HH:mm"), }) }else{ this.setState({ end_time:moment(moment(handleDateString(dateString))).format("YYYY-MM-DD HH:mm"), }) } } } onChangeTimelatetime=(date, dateString)=>{ let {end_time}=this.state; if(moment(dateString)>moment(end_time)){ this.setState({ latetimetype:false }) } this.setState({ latetime:handleDateString(dateString) }) } onChangeTimecommenttime=(date, dateString)=>{ let{end_time}=this.state; if(moment(dateString)>moment(end_time)){ this.setState({ commenttimetype:false, }) } this.setState({ commenttime:handleDateString(dateString) }) } allowlatefun=(e)=>{ let {end_time}=this.state; if(e.target.value===true||e.target.value===1){ this.setState({ latepenalty:5, allowlate:e.target.value, latetime:end_time===null||end_time === ""?"":moment(moment(handleDateString(end_time))).add(1, 'months').format("YYYY-MM-DD HH:mm"), }) }else{ this.setState({ latepenalty:0, allowlate:e.target.value, latetime:"" }) } } funlatepenalty=(e)=>{ let value= parseInt(e.target.value); if(isNaN(value)){ value=0 } this.setState({ latepenalty:value }) } updatesfuncrosscomment=(types,newlatetime,newcommenttime)=>{ let {endtimetype}=this.state; if(types===1){ this.setState({ latetime:newlatetime, crosscomment:true, commenttime:newcommenttime }) }else{ if(endtimetype===true){ this.setState({ crosscomment:true, commenttime:newcommenttime }) }else{ this.setState({ end_time:newlatetime, crosscomment:true, commenttime:newcommenttime }) } } } funcrosscomment=(e)=>{ let {latetime,end_time,allowlate}=this.state; let newlatetimea=moment(new Date()).add(7, 'days').format("YYYY-MM-DD HH:mm"); let newcommenttimea=moment(new Date()).format("YYYY-MM-DD HH:mm"); let newlatetimes=moment(latetime).add(7, 'days').format("YYYY-MM-DD HH:mm"); let newcommenttimes=moment(latetime).format("YYYY-MM-DD HH:mm"); let newend_timeb=moment(new Date()).add(7, 'days').format("YYYY-MM-DD HH:mm"); let newcommenttimeb=moment(new Date()).add(8, 'days').format("YYYY-MM-DD HH:mm"); let newend_timed=moment(end_time).add(7, 'days').format("YYYY-MM-DD HH:mm"); let newcommenttimed=moment(end_time).add(8, 'days').format("YYYY-MM-DD HH:mm"); let newtime; if(e.target.checked===true){ if(allowlate===1||allowlate===true){ if(latetime===null||latetime===""){ this.updatesfuncrosscomment(1,newlatetimea,newcommenttimea) }else{ this.updatesfuncrosscomment(1,newlatetimes,newcommenttimes) } }else{ if(end_time===null||end_time===""){ this.updatesfuncrosscomment(2,newend_timeb,newcommenttimeb) }else{ this.updatesfuncrosscomment(2,newend_timed,newcommenttimed) } } }else{ this.setState({ crosscomment:e.target.checked, commenttime:undefined }) } } funcommentstatus=(e)=>{ this.setState({ commentstatus:parseInt(e.target.value) }) } funcoperworks=(e)=>{ this.setState({ operworks:e.target.checked }) } funcopergrade=(e)=>{ this.setState({ opergrade:e.target.checked }) } //立即发布 publish=()=>{ let starttime= this.props.getNowFormatDates(1,1); let endtime=this.props.getNowFormatDates(2,1); // this.homeworkstart() this.setState({ modalname:"立即发布", visibles:true, Topval:"学生将立即收到毕设任务", // Botvalleft:"点击修改", // Botval:`本操作只对"未发布"的分班有效`, starttime:moment(moment(new Date())).format("YYYY-MM-DD HH:mm") , starttimes:this.props.getNowFormatDates(1), typs:"start", endtime:endtime, Cancelname:"暂不发布", Savesname:"立即发布", Cancel:this.cancelmodel, Saves:this.homepublish, }) } //立即发布 homeworkstart=()=>{ let coursesId=this.props.match.params.coursesId; let url="/courses/"+coursesId+"/all_course_groups.json"; axios.get(url).then((response) => { if(response.status===200){ this.setState({ modaltype:response.data.course_groups===null||response.data.course_groups.length===0?2:1, course_groups:response.data.course_groups, }) } }).catch((error) => { console.log(error) }); } homepublish=(ids,endtime)=>{ let task_Id=this.props.match.params.task_Id; const cid = this.props.match.params.coursesId // let url = `/courses/${cid}/graduation_tasks/publish_task.json`; let url="/courses/"+cid+"/graduation_tasks/publish_task.json" axios.post(url,{ task_ids:[task_Id], group_ids: this.state.course_groupslist, end_time:endtime, }).then((response)=>{ if (response.data.status == 0) { this.getsettings(); this.cancelmodel(); this.setState({ // Modalstype:true, // Modalstopval:resulet.data.message, // ModalSave:this.cancelmodel, // Loadtype:true starttime:undefined, course_groupslist:[], }) this.props.showNotification(response.data.message); } }).catch((error)=>{ }) } // //跳转道描点的地方 // scrollToAnchor = (anchorName) => { // if (anchorName) { // // 找到锚点 // let anchorElement = document.getElementById(anchorName); // // 如果对应id的锚点存在,就跳转到锚点 // if(anchorElement) { anchorElement.scrollIntoView(); } // } // } saveTaskssetting=()=>{ let {latepenalty,hascommit,minnums,max_nums,publish_time,end_time,crosscomment,latetime,starttimetype}=this.state; if(isNaN(parseInt(this.state.minnum))){ this.setState({ numtype:true }) this.scrollToAnchor("publishtimestart"); return }else{ this.setState({ numtype:false }) } if(isNaN(parseInt(this.state.maxnum))){ this.setState({ numtype:true }) this.scrollToAnchor("publishtimestart"); return }else{ this.setState({ numtype:false }) } if(latepenalty===undefined){ this.setState({ latepenaltytype:true, latepenaltyvalue:"不能为空" }) return }else if(latepenalty===""){ this.setState({ latepenaltytype:true, latepenaltyvalue:"不能为空" }) return }else{ this.setState({ latepenaltytype:false }) } if(starttimetype===false) { if (moment(publish_time) <= moment()) { this.setState({ publishTimetypes: true, publishTimetypesval: "发布时间不能早于当前时间", }) return } else { this.setState({ publishTimetypes: false }) } } if(moment(end_time)<moment(publish_time)){ this.setState({ endTimetypes:true, endTimetypesval:"截止时间不能早于发布时间" }) return }else{ this.setState({ endTimetypes:false }) } if(moment(latetime)<moment(publish_time)){ this.setState({ latetimetype:true, latetimetypeval:"结束时间不能早于发布时间" }) return }else if(moment(latetime)<moment(end_time)){ this.setState({ latetimetype:true, latetimetypeval:"结束时间不能早于截止时间" }) return }else{ this.setState({ latetimetype:false }) } if(crosscomment===true){ if(this.state.commenttime===undefined||this.state.commenttime===null||this.state.commenttime===""){ this.setState({ commenttimetype:true, commenttimevalue:"不能为空", }) return }else{ this.setState({ commenttimetype:false }) } if(moment(this.state.commenttime)<moment(publish_time)){ this.setState({ commenttimetype:true, commenttimevalue:"开始时间不能小于发布时间", }) return }else{ this.setState({ commenttimetype:false }) } if(moment(this.state.commenttime)<moment(end_time)){ this.setState({ commenttimetype:true, commenttimevalue:"开始时间不能小于截止时间", }) return }else{ this.setState({ commenttimetype:false }) } } if(starttimetype===false){ if(publish_time===null||publish_time=== ""){ this.setState({ publishTimetypes:true, publishTimetypesval:"发布时间不能为空", }) this.scrollToAnchor("publishtimestart"); return } } if(end_time===null||end_time=== ""){ this.setState({ endTimetypes:true, endTimetypesval:"截止时间不能为空" }) this.scrollToAnchor("publishtimeend"); return } if(this.props.isAdmin()) { this.setState({ edittype: true }) if (hascommit === true) { if (parseInt(this.state.minnum) > parseInt(minnums)) { this.setState({ minnumstype: true }) return }else{ this.setState({ minnumstype:false }) } if (parseInt(this.state.maxnum) < parseInt(max_nums)) { this.setState({ maxnumstype: true }) return }else{ this.setState({ maxnumstype:false }) } } if (this.state.end_time === "" || this.state.end_time === null) { this.setState({ end_timetype: true }) return }else{ this.setState({ end_timetype:false }) } if(publish_time!=null){ this.sethomepublish(); } } } sethomepublish=()=>{ let {assigngroups,starttime}=this.state; let assigngroupslist=[]; for(var list of assigngroups){ assigngroupslist.push(list.assign_group_id) } let {allowlate,baseonproject,crosscomment,opergrade,operworks,commentstatus,latepenalty,end_time,latetime}=this.state; let task_Id=this.props.match.params.task_Id; let url="/graduation_tasks/"+task_Id+"/update_settings.json"; axios.post(url,{ min_num: this.state.minnum, max_num: this.state.maxnum, base_on_project:baseonproject===true?1:0, publish_time:this.state.publish_time===null||this.state.publish_time=== ""?"":this.state.publish_time, end_time: this.state.end_time===null||this.state.end_time=== ""?this.props.getNowFormatDates(2,1):this.state.end_time, allow_late:allowlate===true||allowlate===1?1:undefined, late_time: this.state.latetime===null||this.state.latetime=== ""?this.props.getNowFormatDates(3,1):this.state.latetime, late_penalty: latepenalty, cross_comment: crosscomment===true?1:undefined, comment_status: crosscomment===true?this.state.commentstatus===0?2:this.state.commentstatus===1?2:this.state.commentstatus:undefined, comment_num: commentstatus===4?this.state.commentnum:undefined, comment_time: crosscomment===true?this.state.commenttime:undefined, comment_group: commentstatus===4?assigngroupslist:undefined, open_work: opergrade===true?1:undefined, open_score: operworks===true?1:undefined, group_ids:this.state.course_groupslist }).then((resulet)=>{ if(resulet.status===200){ if(resulet.data.status===0){ this.getsettings(); this.cancelmodel(); this.isgoback() this.setState({ // Modalstype:true, // Modalstopval:resulet.data.message, // ModalSave:this.cancelmodel, // Loadtype:true starttime:undefined, course_groupslist:[], }) this.props.showNotification(resulet.data.message); } } }).catch((error)=>{ console.log(error) }) } selectassigngroups=(e,index)=>{ let {assigngroups}=this.state; let newassigngroups=assigngroups; for(var i=0; i<newassigngroups.length; i++){ if(i===parseInt(index.key)){ newassigngroups[i].assign_group_id=index.props.id; newassigngroups[i].select_name=index.props.value; } } // // console.log(assigngroups) // console.log(newassigngroups) // assigngroups.push({ // assign_group_id:list.assign_group_id, // select_name:list.select_name, // }) this.setState({ assigngroups:newassigngroups, }) } goback=()=>{ let courseId=this.props.match.params.coursesId; if(courseId===undefined){ this.props.history.push("/courses"); }else{ this.props.history.push(this.props.current_user.first_category_url); } } isgoback=()=>{ this.setState({ flagPageEdit: false, }) } end=()=>{ this.setState({ modalname:"立即截止", visibles:true, Topval:"学生将不能再提交作品", // Botvalleft:"暂不截止", // Botval:`本操作只对"提交中"的分班有效`, Cancelname:"暂不截止", Savesname:"立即截止", Cancel:this.cancelmodel, Saves:this.coursetaskend, typs:"end", }) // this.homeworkstart() } cancelmodel=()=>{ this.setState({ Modalstype:false, Loadtype:false, visible:false, visibles:false, Modalstopval:"", ModalCancel:"", ModalSave:"", starttime:undefined }) } coursetaskend=()=>{ const coursesId = this.props.match.params.coursesId; const task_Id = this.props.match.params.task_Id; let url = `/courses/${coursesId}/graduation_tasks/end_task.json`; axios.post(url,{ task_ids:[task_Id], group_ids:this.state.course_groupslist }).then((response)=>{ if (response.data.status == 0) { // this.setState({ // Modalstype:true, // Modalstopval:response.data.message, // ModalSave:this.cancelmodel, // Loadtype:true, // checkBoxValues:[], // checkAllValue:false // }) this.getsettings(); this.props.showNotification(response.data.message); this.cancelmodel(); this.setState({ course_groupslist:[], // Modalstopval:resulet.data.message, // ModalSave:this.cancelmodel, // Loadtype:true }) } }).catch((error)=>{ }) } setcommentnum=(e)=>{ this.setState({ commentnum:parseInt(e.target.value) }) } scrollToAnchor = (anchorName) => { if (anchorName) { // 找到锚点 let anchorElement = document.getElementById(anchorName); // 如果对应id的锚点存在,就跳转到锚点 if(anchorElement) { anchorElement.scrollIntoView({block: 'start', behavior: 'smooth'}); } } } skipTop=()=>{ this.scrollToAnchor("starttime") this.cancelmodel() } getcourse_groupslist=(id)=>{ this.setState({ course_groupslist:id }) } //编辑 editSetting = () => { if (this.state.settingdata&&this.state.settingdata.is_end === true) { // this.setState({ // modalsType: true, // modalsTopval: "课堂已结束不能再修改!", // loadtype: true, // modalSave: this.cancelBox // }) this.props.showNotification("课堂已结束不能再修改!"); } else { this.setState({ flagPageEdit: true, }) } } /// 确认是否下载 confirmysl(url){ axios.get(url).then((response) => { if(response === undefined){ return } if(response.data.status&&response.data.status===-1){ }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 }) } }else { this.props.showNotification(`正在下载中`); window.open("/api"+url, '_blank'); } }).catch((error) => { console.log(error) }); } Downloadcal=()=> { this.setState({ DownloadType: false, DownloadMessageval: undefined }) } render(){ const { getFieldDecorator } = this.props.form; const dateFormat = 'YYYY-MM-DD HH:mm'; let {coursename,taskname,settingdata,baseonproject,Modalstype,Modalstopval,operworks,opergrade,graduationgroups,Loadtype,task_type,end_timetype, ModalCancel,ModalSave,publish_time,end_time,allowlate,latepenalty,latetime,crosscomment,commentstatus,commentnum,commenttime,numtype, minnum,maxnum,modalname,task_status, visible, Topval, Topvalright, Botvalleft, Botval, starttime, endtime, Cancelname, Savesname, Cancel, Saves, course_groups,hasproject,hascommit,minnumstype,maxnumstype, latepenaltytype, latepenaltyvalue, latetimetype, starttimetype, endtimetype, commenttimetype, commenttimevalue, flagPageEdit } =this.state; let courseId=this.props.match.params.coursesId; let category_id=this.props.match.params.category_id; let task_Id=this.props.match.params.task_Id; const radioStyle = { display: 'block', height: '30px', lineHeight: '30px', }; // // console.log(moment(publish_time)) // console.log(this.props.isSuperAdmin()) return( <React.Fragment> {settingdata&&settingdata? <div> {/*提示*/} <Modals modalsType={Modalstype} modalsTopval={Modalstopval} modalCancel={ModalCancel} modalSave={ModalSave} loadtype={Loadtype} /> {/*/!*立即发布*!/*/} {/*<PublishModals*/} {/*modalname={modalname}*/} {/*visible={visible}*/} {/*Topval={Topval}*/} {/*Topvalright={Topvalright}*/} {/*Botvalleft={Botvalleft}*/} {/*Botval={Botval}*/} {/*starttime={starttime}*/} {/*endtime={endtime}*/} {/*Cancelname={Cancelname}*/} {/*Savesname={Savesname}*/} {/*Cancel={Cancel}*/} {/*Saves={Saves}*/} {/*course_groups={course_groups}*/} {/*skipTop={this.skipTop}*/} {/*/>*/} <DownloadMessageysl {...this.props} value={this.state.DownloadMessageval} modalCancel={this.Downloadcal} modalsType={this.state.DownloadType} /> <HomeworkModal starttimes={this.state.starttimes} typs={this.state.typs} modalname={modalname} visible={this.state.visibles} Topval={Topval} Topvalright={Topvalright} Botvalleft={Botvalleft} Botval={Botval} starttime={starttime} endtime={endtime} Cancelname={Cancelname} Savesname={Savesname} Cancel={Cancel} Saves={Saves} course_groups={course_groups} modaltype={this.state.modaltype} getcourse_groupslist={(id) => this.getcourse_groupslist(id)} /> <style> {` .ant-input{ height:40px; } .linbox{ height: 26px; } ` }</style> <div className="newMain clearfix"> <div className={"educontent mb20"}> <p className="clearfix mt10"> <a onClick={this.goback} className="color-grey-9 fl">{coursename}</a> <span className="color-grey-9 fl ml3 mr3">></span> <Link to={"/courses/"+courseId+"/graduation_tasks/"+settingdata.graduation_id} className="color-grey-9 fl">毕设任务</Link> <span className="color-grey-9 fl ml3 mr3">></span> {/*{taskname===""?"":*/} {/*<WordsBtn style="grey" className="fl">*/} {/*<Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"} className="color-grey-6">{taskname}</Link>*/} {/*<span className="color-grey-c ml3 mr3">></span>*/} {/*</WordsBtn>*/} {/*}*/} <span className="color-grey-6">任务详情</span> </p> <div className="clearfix mt20 mb20 lineh-25 linbox"> <p className=" fl color-black lineh-25 summaryname"> <Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"} className="color-grey-3">{taskname}</Link> </p> <CoursesListType typelist={task_status} /> <a className="color-grey-3 fr font-16 ml30 mr20" onClick={this.goback}>返回</a> </div> <div className="stud-class-set bor-bottom-greyE" id={"publishtimestart"}> <div className="mt10 clearfix edu-back-white poll_list pl20" id={"publishtimeend"}> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/list"}>任务列表</Link> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/questions"}>任务问答</Link> <Link className="active" style={{paddingLeft:'38px'}} to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/setting?tab=3"}>设置</Link> {/*<a className={"fr color-blue font-16"}>导出</a>*/} <style> { ` .drop_down_menu{ height: 118px; left:0px; width: 121px; } .drop_down_menu li { overflow: visible; width: 121px; } .drop_down_menu li a{ padding: 0px; font-size: 14px; } .mt19{ margin-top:19px; } .drop_down_menu, .drop_down_normal{ padding-top: 10px; padding-bottom: 8px; } .drop_down_menu li .color-dark{ color: #666 !important; } `} </style> {this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li> </ul> </li>:""} {/*{this.props.isAdmin()?<a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.xls"} className={"fr color-blue font-16"}>导出成绩</a>:""}*/} {/*{this.props.isAdmin()?<a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.zip"} className={"fr color-blue font-16"}>导出作品附件</a>:""}*/} {/*<a className={"fr color-blue font-16"}>项目在线质量检测</a>*/} {this.props.isAdmin()?settingdata.status===1?<a className={"fr color-blue font-16 mr20"} onClick={() => { this.end()} }>立即截止</a>:"":""} {this.props.isAdmin()?settingdata.status===0?<a className={"fr color-blue font-16 mr20"} onClick={() => { this.publish()} }>立即发布</a>:"":""} {this.props.isAdmin()?<a className={"fr color-blue font-16"} href={"/courses/"+courseId+"/graduation_tasks/"+task_Id+"/edit"}>编辑任务</a>:""} </div> </div> <Form id={"starttime"}> { !flagPageEdit && this.props.isAdmin() === true ? <a className="fr mt20 mr40" onClick={this.editSetting}><Tooltip title="编辑"><i className="iconfont icon-bianjidaibeijing font-20 color-green "></i></Tooltip></a> : "" } {/*内容*/} {task_type===2?<div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl30" > <div className={"xingrequired font-16 color-dark h20 mb20"}>分组设置 <span className={"font-14 color-grey-c"}>(提交作品时需要关联同组成员,组内成员作品共享)</span></div> <div className={"mb30 h20 ml40"}> <Input className={numtype===true?"noticeTip mr20":"mr20"} style={{ width:"100px" }} value={minnum} onInput={this.setminnum} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true}/> <span className="mr20">~</span> <Input className={numtype===true?"noticeTip mr20":"mr20"} style={{width:"100px" }} value={maxnum} onInput={this.setmaxnum} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true}/> <span className="mr10">人</span> <span className={"font-14 color-grey-c"}>(学生提交作品时需要关联同组成员,组内成员作品共享)</span> </div> {minnumstype===true?<div className={"color-red ml40"}>已有提交作品,最小人数不能变大</div>:""} {maxnumstype===true?<div className={"color-red ml40"}>已有提交作品,最大人数不能变小</div>:""} {numtype===true?<div className={"color-red ml40"}>不能为空</div>:""} <div> <Tooltip placement="bottom" title={hascommit===true?"已有关联项目或作品,不能修改":""}> <Checkbox className="ml40 " checked={baseonproject} disabled={this.props.isAdmin()===true?hascommit===true||hasproject===true?true:flagPageEdit===true?false:true:true} onChange={this.baseprojectfun}>基于项目实施</Checkbox> </Tooltip> <span className={"font-14 color-grey-c"}>(选中,则必须在本平台创建项目,项目管理员可以提交作品;不选中,无需在平台创建项目,任意小组成员均可以提交作品)</span> </div> </div>:""} <div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36" > <div className={" font-16 color-dark h20 mb20"} >发布设置 </div> <div className={"h20 mb30 ml30"} > <span>发布时间:</span> <Tooltip placement="bottom" title={this.props.isAdmin()===true?starttimetype===true?"时间已过,不能再修改":"":""}> <span> <DatePicker showToday={false} dropdownClassName="hideDisable" showTime={{ format: 'HH:mm' }} locale={locale} format={dateFormat} placeholder="请选择发布时间" id={"startime"} width={"210px"} value={publish_time===null||publish_time===""?"":moment(publish_time, dateFormat)} onChange={this.onChangeTimepublish} disabledTime={disabledDateTime} disabled={this.props.isAdmin()===true?starttimetype===true?true:flagPageEdit===true?false:true:true} className={ this.state.publishTimetypes===true?"noticeTip":""} /> </span> </Tooltip> <span className={"font-14 color-grey-c ml10"}>(学生收到作业的时间)</span> </div> <style> { ` .ml102{ margin-left: 102px; } ` } </style> {this.state.publishTimetypes===true?<div className={"color-red ml102"}> {this.state.publishTimetypesval} </div>:""} <div className={"h20 mb30 ml30"} > <span>截止时间:</span> <Tooltip placement="bottom" title={this.props.isSuperAdmin()===true?"":this.props.isAdmin()===true?endtimetype===true?"时间已过,不能再修改":"":""}> <span> <DatePicker showToday={false} dropdownClassName="hideDisable" showTime={{ format: 'HH:mm' }} locale={locale} format={dateFormat} placeholder="请选择截止时间" id={"endTime"} width={"210px"} value={end_time===null||end_time===""?"":moment(end_time, dateFormat)} onChange={this.onChangeTimeend} disabledTime={disabledDateTime} // disabled={this.props.isSuperAdmin()===true?flagPageEdit===true?false:true:this.props.isAdmin()===true?endtimetype===true?true:flagPageEdit===true?false:true:true} disabled={this.props.isAdmin()===true?endtimetype===true?true:flagPageEdit===true?false:true:true} className={this.state.endTimetypes===true||end_timetype===true?"noticeTip":""} /> </span> </Tooltip> <span className={"font-14 color-grey-c ml10"}>(学生“按时”提交作品的时间截点)</span> </div> <style> { ` .ml102{ margin-left: 102px; } ` } </style> {this.state.endTimetypes===true?<div className={"color-red ml102"}>{this.state.endTimetypesval} </div>:""} {end_timetype===true?<div className={"color-red ml40"}>不能为空</div>:""} </div> <div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36"> <div className={" font-16 color-dark h20 mb20"}>补交设置 </div> <RadioGroup onChange={this.allowlatefun} value={allowlate===true||allowlate===1?1:2} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true}> <Radio style={radioStyle} value={1}>开启补交<span className={"font-14 color-grey-c "}>(选中,则允许学生延时提交作品)</span></Radio> <div className={"h21 mb30 ml30 mt20"}> <span>迟交扣分:</span> <Input className="mr10" style={{width:"100px" }} value={latepenalty} disabled={this.props.isAdmin()===true?allowlate===true||allowlate===1?flagPageEdit===true?false:true:true:true} onInput={this.funlatepenalty}/> <span className={"font-14 color-grey-c "}>(延时提交作品时,学生成绩将被扣减的分值)</span> {latepenaltytype===true?<div className={"color-red ml40"}>{latepenaltyvalue}</div>:""} </div> <div className={"h20 mb30 ml30"}> <span>结束时间:</span> <DatePicker showToday={false} dropdownClassName="hideDisable" showTime={{ format: 'HH:mm' }} locale={locale} format={dateFormat} placeholder="请选择结束时间" id={"enTime"} width={"210px"} value={latetime===null||latetime===""?"":moment(latetime, dateFormat)} disabledTime={disabledDateTime} onChange={this.onChangeTimelatetime} disabled={this.props.isAdmin()===true?allowlate===true||allowlate===1?flagPageEdit===true?false:true:true:true} className={ latetimetype===true?"noticeTip":""} /> <span className={"font-14 color-grey-c ml10"}>(学生“延时”提交作品的时间截点)</span> <style> { ` .ml70{ margin-left: 71px; } ` } </style> {latetimetype===true?<div className={"color-red ml70"}>{this.state.latetimetypeval}</div>:""} </div> <Radio style={radioStyle} value={2}>禁止补交</Radio> </RadioGroup> </div> {/*<div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36">*/} {/*<div className={" font-16 color-dark h20 mb20"}>项目质量检测 </div>*/} {/*</div>*/} <div className="stud-class-set bor-bottom-greyE pd20 edu-back-white pl36"> <div className={" font-16 color-dark h20 mb20"}>评分设置 </div> <div className={"font-16 h20 mb20"}>最终成绩组成 <span className={"font-14 color-grey-c"}>(取各教师最终评分的平均分)</span></div> <Checkbox className="ml40 font-16" checked={crosscomment} onChange={this.funcrosscomment} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true} >启用交叉评阅 <span className={"font-14 color-grey-c"}>(给老师分配其他指导老师的学生作品)</span> </Checkbox> {crosscomment===true?<div> <div className={"h20 mb30 ml30 mt20 ml87"}> <span>开始时间:</span> <DatePicker showToday={false} dropdownClassName="hideDisable" showTime={{ format: 'HH:mm' }} locale={locale} format={dateFormat} placeholder="请选择发布时间" id={"endTime"} width={"210px"} value={commenttime===null||commenttime=== ""?"":moment(commenttime, dateFormat)} disabledTime={disabledDateTime} onChange={this.onChangeTimecommenttime} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true} className={ commenttimetype===true?"noticeTip":""} /> <span className={"font-14 color-grey-c ml10"}>(交叉评阅开始时间之前提交的作品,参与交叉评阅)</span> <style> { ` .ml70{ margin-left:70px; } ` } </style> {crosscomment===true&&commenttimetype===true?<div className={"color-red ml70"}>{commenttimevalue}</div>:""} </div> <div className={"mb20 ml30 ml87 ml87"}> <span className={"fl mt6"}>评阅方式:</span> <span> <RadioGroup onChange={this.funcommentstatus} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true} value={crosscomment===false?undefined:commentstatus===0?2:commentstatus===2?2:commentstatus===4?4:undefined}> <Radio style={radioStyle} value={2}>指导老师手动分配 <span className={"font-14 color-grey-c ml10"}>(由指导老师在作品列表中,手动选择每个作品被分配的评阅老师)</span></Radio> <Radio style={radioStyle} value={4}>答辩组间老师互评 <span className={"font-14 color-grey-c ml10"}>(由系统按照设置在答辩组之间自动分配: <a href={"/courses/"+courseId+"/teachers"} target="_blank"> <span className={"color-blue"}>答辩组设置</span></a> </span></Radio> </RadioGroup> </span> </div> <div style={{display:crosscomment===false?"none":commentstatus===0?"none":commentstatus===2?"none":commentstatus===4?"":"none"}}> <div className={"h20 mb30 ml30 ml87"}> <span>评阅数:</span> <Input className="mr20" style={{width:"200px" }} value={commentnum} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true} onInput={this.setcommentnum} /> <span className={"font-14 color-grey-c "}>(单个作品将被分配互评的次数)</span> </div> {graduationgroups.map((item,key)=>{ return( <div className={"clearfix"} key={key}> <div className={"h20 mb30 ml30 ml87 fl mt20"} style={{width:'140px'}}> <span id={item.group_id} key={key}>{item.group_name}({item.member_count} 个教师)</span> </div> <div className={"h20 mb30 fl mt20"} style={{width:'10px'}}> <Icon className={" mr10"} type="arrow-right" key={key}/> </div> <div className={"h20 mb30 fl ml25 mt14"} style={{width:'100px'}}> <Select style={{ width: 120 }} defaultValue={item.select_name} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true} onChange={(e,index)=>this.selectassigngroups(e,index)}> {graduationgroups.map((list,index)=>{ if(index!=key){ return( <Option value={list.group_name} id={list.group_id} name={list.member_count} key={key}>{list.group_name}</Option> ) } })} </Select> </div> </div> ) })} </div> </div>:""} <div className={"both"}></div> </div> {/*open_score: true*/} {/*open_work: true*/} <div className="stud-class-set pd20 edu-back-white pl36"> <div className={" font-16 color-dark h20 mb20"}>公开设置 </div> <div className={"mb20"}> <Checkbox className="ml40" checked={operworks} onChange={this.funcoperworks} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true}>公开作品</Checkbox> <span className={"font-14 color-grey-c"}>(选中,则在作业截止/补交结束时间之后,已提交作品的学生可以查看其它学生的作品,否则只能查看自己的作品)</span> </div> <div> <Checkbox className="ml40" checked={opergrade} onChange={this.funcopergrade} disabled={this.props.isAdmin()===true?flagPageEdit===true?false:true:true}>公开成绩</Checkbox> <span className={"font-14 color-grey-c"}>(选中,则在作业截止/补交结束时间之后,已提交作品的学生可以查看其它学生的成绩,否则只能查看自己的成绩)</span> </div> </div> </Form> {this.props.isAdmin()===true?flagPageEdit===true?<div className="clearfix mt30 mb30"> <Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20" onClick={this.saveTaskssetting} >提交</Button> {/*<Link to={"/courses/"+courseId+"/graduation_tasks/"+position+"/"+category_id+coursesearch} className="defalutCancelbtn fl">取消</Link>*/} <a onClick={this.isgoback} className="defalutCancelbtn fl">取消</a> </div>:"":""} </div> </div> </div>:""} </React.Fragment> ) } } const GraduationTaskssetting = Form.create({ name: 'coursesNew' })(GraduationTaskssettingapp); export default GraduationTaskssetting;