hjm 6 years ago
commit dbaa41a595

@ -1,83 +1,83 @@
import React,{ Component } from "react"; import React,{ Component } from "react";
import TPMMDEditor from '../../../modules/tpm/challengesnew/TPMMDEditor' import TPMMDEditor from '../../../modules/tpm/challengesnew/TPMMDEditor'
import {markdownToHTML} from 'educoder' import {markdownToHTML} from 'educoder'
import './DMDEditor.css' import './DMDEditor.css'
// 需要父组件通过toShowMode、toMDMode 来控制一次只能打开一个DMDEditor // 需要父组件通过toShowMode、toMDMode 来控制一次只能打开一个DMDEditor
class DMDEditor extends Component{ class DMDEditor extends Component{
constructor(props){ constructor(props){
super(props); super(props);
this.mdRef = React.createRef() this.mdRef = React.createRef()
this.state={ this.state={
mdMode: false, mdMode: false,
// value: this.props.initValue // value: this.props.initValue
} }
} }
componentDidUpdate(prevProps, prevState) { componentDidUpdate(prevProps, prevState) {
} }
componentDidMount() { componentDidMount() {
// if(this.props.initValue != this.mdRef.current.getValue()) { // if(this.props.initValue != this.mdRef.current.getValue()) {
// this.mdRef.current.setValue(this.props.initValue) // this.mdRef.current.setValue(this.props.initValue)
// } // }
} }
toMDMode = () => { toMDMode = () => {
this.setState({mdMode: true}, () => { this.setState({mdMode: true}, () => {
this.mdRef.current.resize() this.mdRef.current.resize()
this.mdRef.current.setValue(this.props.initValue) this.mdRef.current.setValue(this.props.initValue)
}) })
this.props.toMDMode(this) this.props.toMDMode(this)
} }
toShowMode = () => { toShowMode = () => {
this.setState({mdMode: false}) this.setState({mdMode: false})
this.props.toShowMode && this.props.toShowMode(this) this.props.toShowMode && this.props.toShowMode(this)
} }
onCMBlur = () => { onCMBlur = () => {
this.toShowMode() this.toShowMode()
} }
onChange = (val) => { onChange = (val) => {
// this.setState({ value: val }) // this.setState({ value: val })
this.props.onChange(val) this.props.onChange(val)
if (this.state.showError == true) { if (this.state.showError == true) {
this.setState({showError: false}) this.setState({showError: false})
} }
} }
showError = () => { showError = () => {
this.mdRef.current.showError() this.mdRef.current.showError()
this.setState({showError: true}) this.setState({showError: true})
} }
render(){ render(){
const { mdMode, showError } = this.state; const { mdMode, showError } = this.state;
const { initValue } = this.props; const { initValue } = this.props;
let _style = {} let _style = {}
if (showError) { if (showError) {
_style.border = '1px solid red' _style.border = '1px solid red'
} }
_style = Object.assign(_style, {display: mdMode == true ? 'none' : '', color: initValue? '': '#999', alignItems: 'center', wordBreak: 'break-all'}) _style = Object.assign(_style, {display: mdMode == true ? 'none' : '', color: initValue? '': '#999', alignItems: 'center', wordBreak: 'break-all'})
return( return(
<React.Fragment> <React.Fragment>
<style>{` <style>{`
`}</style> `}</style>
<div id="content_editorMd_show" className="new_li content_editorMd_show" <div id="content_editorMd_show" className="new_li content_editorMd_show markdown-body"
style={_style} style={_style}
dangerouslySetInnerHTML={{__html: initValue ? markdownToHTML(initValue):this.props.placeholder}} dangerouslySetInnerHTML={{__html: initValue ? markdownToHTML(initValue):this.props.placeholder}}
onClick={this.toMDMode} onClick={this.toMDMode}
> >
</div> </div>
{/* {/*
onCMBlur={this.onCMBlur} */} onCMBlur={this.onCMBlur} */}
<TPMMDEditor <TPMMDEditor
ref={this.mdRef} ref={this.mdRef}
{...this.props} {...this.props}
initValue={initValue} initValue={initValue}
className={`${this.props.className} ${mdMode == true ? '' : 'hideMd'}`} className={`${this.props.className} ${mdMode == true ? '' : 'hideMd'}`}
onChange={this.onChange} onChange={this.onChange}
></TPMMDEditor> ></TPMMDEditor>
</React.Fragment> </React.Fragment>
) )
} }
} }
export default DMDEditor; export default DMDEditor;

@ -186,7 +186,7 @@ class Exercisestatisticalresult extends Component {
<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> <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> <div>
{/*Q{item.ques_position}*/} {/*Q{item.ques_position}*/}
<div dangerouslySetInnerHTML={{__html: markdownToHTML(item.ques_title).replace(/▁/g,"▁▁▁")}}></div> <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(item.ques_title).replace(/▁/g,"▁▁▁")}}></div>
{/*<span className="markdown-body" dangerouslySetInnerHTML={createMarkup(item.ques_title)}></span>*/} {/*<span className="markdown-body" dangerouslySetInnerHTML={createMarkup(item.ques_title)}></span>*/}
</div> </div>

@ -293,7 +293,20 @@ class GraduationTasksSubmitedit extends Component{
funtaskstatus=(checkedValues)=>{ funtaskstatus=(checkedValues)=>{
let{memberslist,selectobjct}=this.state;
let{memberslist,selectobjct,workslist}=this.state;
if(selectobjct.length>workslist.max_num){
this.setState({
minvalue:workslist.max_num,
setvalue:"大于",
minmaxtype:true
})
return
}else{
this.setState({
minmaxtype:false
})
}
let newlist =memberslist; let newlist =memberslist;
let newcheckedValues=checkedValues; let newcheckedValues=checkedValues;
let selects=[]; let selects=[];
@ -309,6 +322,7 @@ class GraduationTasksSubmitedit extends Component{
} }
} }
this.setState({ this.setState({
task_status:checkedValues, task_status:checkedValues,
selectmemberslist:selects selectmemberslist:selects
@ -347,12 +361,7 @@ class GraduationTasksSubmitedit extends Component{
handleSubmit=(e) => { handleSubmit=(e) => {
let {fileList,selectmemberslist,workslist}=this.state; let {fileList,selectmemberslist,workslist}=this.state;
if(fileList.length===0){
this.setState({
shixunsreplace:true,
})
return
}
this.Commoninterface(fileList,selectmemberslist,workslist); this.Commoninterface(fileList,selectmemberslist,workslist);
// setTimeout(function () { // setTimeout(function () {
@ -361,6 +370,7 @@ class GraduationTasksSubmitedit extends Component{
} }
Commoninterface =(fileList,selectmemberslist,workslist)=>{ Commoninterface =(fileList,selectmemberslist,workslist)=>{
let userids=[]; let userids=[];
for(var list of selectmemberslist){ for(var list of selectmemberslist){
@ -386,17 +396,16 @@ class GraduationTasksSubmitedit extends Component{
return return
} }
if(workslist.task_type===2){ if(workslist.task_type===2){
if(userids.length<2){ if(userids.length<workslist.min_num){
this.setState({ this.setState({
minvalue:2, minvalue:workslist.min_num,
setvalue:"小于", setvalue:"小于",
minmaxtype:true minmaxtype:true
}) })
return return
}else if(userids.length>5){ }else if(userids.length>workslist.max_num){
this.setState({ this.setState({
minvalue:5, minvalue:workslist.max_num,
setvalue:"大于", setvalue:"大于",
minmaxtype:true minmaxtype:true
}) })
@ -409,6 +418,13 @@ class GraduationTasksSubmitedit extends Component{
}) })
let workId=this.props.match.params.work_Id; let workId=this.props.match.params.work_Id;
if(fileList.length===0){
this.setState({
shixunsreplace:true,
})
return
}
let url="/graduation_works/"+workId+".json"; let url="/graduation_works/"+workId+".json";
axios.put(url, { axios.put(url, {
description:values.description, description:values.description,
@ -474,7 +490,7 @@ class GraduationTasksSubmitedit extends Component{
multiple: true, multiple: true,
// https://github.com/ant-design/ant-design/issues/15505 // https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。 // showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
showUploadList: false, // showUploadList: false,
action: `${getUrl()}/api/attachments.json`, action: `${getUrl()}/api/attachments.json`,
onChange: this.handleChange, onChange: this.handleChange,
onRemove: this.onAttachmentRemove, onRemove: this.onAttachmentRemove,
@ -628,37 +644,37 @@ class GraduationTasksSubmitedit extends Component{
) )
})} })}
<style> {/*<style>*/}
{ {/*{*/}
` {/*`*/}
.maxwidth500{ {/*.maxwidth500{*/}
max-width:500px; {/*max-width:500px;*/}
overflow: hidden; {/*overflow: hidden;*/}
text-overflow: ellipsis; {/*text-overflow: ellipsis;*/}
white-space: nowrap; {/*white-space: nowrap;*/}
color: #05101a; {/*color: #05101a;*/}
} {/*}*/}
` {/*`*/}
} {/*}*/}
</style> {/*</style>*/}
{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{ {/*{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{*/}
return( {/*return(*/}
<p className="color-grey mt10" key={key} > {/*<p className="color-grey mt10" key={key} >*/}
<a className="color-grey fl"> {/*<a className="color-grey fl">*/}
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i> {/*<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>*/}
</a> {/*</a>*/}
<span className="mr12 color9B9B maxwidth500 fl" length="58"> {/*<span className="mr12 color9B9B maxwidth500 fl" length="58">*/}
{item.name} {/*{item.name}*/}
</span> {/*</span>*/}
<span className="color656565 mt2 color-grey-6 font-12 mr8"> {/*<span className="color656565 mt2 color-grey-6 font-12 mr8">*/}
{item.response===undefined?"":bytesToSize(item.size)} {/*{item.response===undefined?"":bytesToSize(item.size)}*/}
</span> {/*</span>*/}
<i className="font-14 iconfont icon-guanbi " {/*<i className="font-14 iconfont icon-guanbi "*/}
id={item.response===undefined?"":item.response.id} {/*id={item.response===undefined?"":item.response.id}*/}
aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i> {/*aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i>*/}
</p> {/*</p>*/}
) {/*)*/}
})} {/*})}*/}
@ -675,7 +691,7 @@ class GraduationTasksSubmitedit extends Component{
> >
<div> <div>
<div className={"fl ml20"}>成员要求25</div> <div className={"fl ml20"}>成员要求{workslist&&workslist.min_num}{workslist&&workslist.max_num}</div>
<Search <Search
className={"fl mt5 ml20"} className={"fl mt5 ml20"}
style={{width:"270px"}} style={{width:"270px"}}
@ -724,7 +740,7 @@ class GraduationTasksSubmitedit extends Component{
</div>:memberslist&&memberslist.map((item,key)=>{ </div>:memberslist&&memberslist.map((item,key)=>{
return( return(
<div key={key} style={{ <div key={key} style={{
width: '375px', width: '400px',
height: '30px' height: '30px'
}}> }}>
<Checkbox value={item.user_id} <Checkbox value={item.user_id}
@ -735,8 +751,8 @@ class GraduationTasksSubmitedit extends Component{
} }
disabled={item.commit_status===true?true:false} className="fl "></Checkbox> disabled={item.commit_status===true?true:false} className="fl "></Checkbox>
<div className={"fl ml5 fonthidden width100"} style={{width: '70px'}} title={item.user_name}>{item.user_name}</div> <div className={"fl ml5 fonthidden width100"} style={{width: '70px'}} title={item.user_name}>{item.user_name}</div>
<div className={"fl ml5 fonthidden width100 color-grey-9"} style={{width: '70px'}}>{item.group_name}</div> <div className={"fl ml5 fonthidden width100 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml5 color-grey-9 fonthidden width100"} style={{width: '70px'}}>{item.student_id}</div> <div className={"fl ml5 color-grey-9 fonthidden width100"}>{item.student_id}</div>
<div className={"fl ml20"}>{item.commit_status===false?<span className={"color-orange"}>已提交</span> :""}</div> <div className={"fl ml20"}>{item.commit_status===false?<span className={"color-orange"}>已提交</span> :""}</div>
</div> </div>
) )
@ -760,7 +776,7 @@ class GraduationTasksSubmitedit extends Component{
height: '30px', height: '30px',
display: item.user_name === undefined ? "none" : "" display: item.user_name === undefined ? "none" : ""
}}> }}>
<div className={"fl ml5 fonthidden width100"} style={{width: '50px'}} <div className={"fl ml5 fonthidden width100"}
title={item.user_name}>{item.user_name}</div> title={item.user_name}>{item.user_name}</div>
<div className={"fl ml5 fonthidden width100 color-grey-9"}>{item.group_name}</div> <div className={"fl ml5 fonthidden width100 color-grey-9"}>{item.group_name}</div>
<div className={"fl ml5 color-grey-9 fonthidden width100"}>{item.student_id}</div> <div className={"fl ml5 color-grey-9 fonthidden width100"}>{item.student_id}</div>
@ -769,6 +785,7 @@ class GraduationTasksSubmitedit extends Component{
style={{marginTop: '-4px'}} style={{marginTop: '-4px'}}
onClick={() => this.delecttask_status(item.user_id)}></i> onClick={() => this.delecttask_status(item.user_id)}></i>
</div> : ""} </div> : ""}
<div className={"both"}></div>
</div> </div>
) )
} }

@ -85,15 +85,9 @@ class GraduationTasksSubmitnew extends Component{
} }
handleSubmit=(e) => { handleSubmit=(e) => {
console.log("86");
let {fileList,selectmemberslist,workslist}=this.state; let {fileList,selectmemberslist,workslist}=this.state;
if(fileList.length === 0){
this.setState({
shixunsreplace:true,
})
return
}
this.Commoninterface(fileList,selectmemberslist,workslist); this.Commoninterface(fileList,selectmemberslist,workslist);
} }
@ -280,7 +274,19 @@ class GraduationTasksSubmitnew extends Component{
funtaskstatus=(checkedValues)=>{ funtaskstatus=(checkedValues)=>{
let{memberslist,selectobjct}=this.state; let{memberslist,selectobjct,workslist}=this.state;
if(selectobjct.length>workslist.max_num){
this.setState({
minvalue:workslist.max_num,
setvalue:"大于",
minmaxtype:true
})
return
}else{
this.setState({
minmaxtype:false
})
}
let newlist =memberslist; let newlist =memberslist;
let newcheckedValues=checkedValues; let newcheckedValues=checkedValues;
let selects=[]; let selects=[];
@ -382,17 +388,17 @@ class GraduationTasksSubmitnew extends Component{
} }
if(workslist&&workslist.task_type===2){ if(workslist&&workslist.task_type===2){
if(userids!=undefined){ if(userids!=undefined){
if(userids.length<2){ if(userids.length<workslist.min_num){
this.setState({ this.setState({
minvalue:2, minvalue:workslist.min_num,
setvalue:"小于", setvalue:"小于",
minmaxtype:true minmaxtype:true
}) })
return return
}else if(userids.length>5){ }else if(userids.length>workslist.max_num){
this.setState({ this.setState({
minvalue:5, minvalue:workslist.max_num,
setvalue:"大于", setvalue:"大于",
minmaxtype:true minmaxtype:true
}) })
@ -405,8 +411,16 @@ class GraduationTasksSubmitnew extends Component{
spinnings:true spinnings:true
}) })
let id=this.props.match.params.task_Id; let id=this.props.match.params.task_Id;
if(fileList.length === 0){
this.setState({
shixunsreplace:true,
})
return
}
debugger
let url="/graduation_tasks/"+id+"/graduation_works.json"; let url="/graduation_tasks/"+id+"/graduation_works.json";
axios.post(url, { axios.post(url, {
description:values.description, description:values.description,
@ -471,7 +485,7 @@ render(){
multiple: true, multiple: true,
// https://github.com/ant-design/ant-design/issues/15505 // https://github.com/ant-design/ant-design/issues/15505
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。 // showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
showUploadList: false, // showUploadList: false,
action: `${getUrl()}/api/attachments.json`, action: `${getUrl()}/api/attachments.json`,
onChange: this.handleChange, onChange: this.handleChange,
onRemove: this.onAttachmentRemove, onRemove: this.onAttachmentRemove,
@ -593,37 +607,37 @@ render(){
</Button> </Button>
<span className={"color-grey-9"}>(单个文件150M以内)</span> <span className={"color-grey-9"}>(单个文件150M以内)</span>
</Upload> </Upload>
<style> {/*<style>*/}
{ {/*{*/}
` {/*`*/}
.maxwidth500{ {/*.maxwidth500{*/}
max-width:500px; {/*max-width:500px;*/}
overflow: hidden; {/*overflow: hidden;*/}
text-overflow: ellipsis; {/*text-overflow: ellipsis;*/}
white-space: nowrap; {/*white-space: nowrap;*/}
color: #05101a; {/*color: #05101a;*/}
} {/*}*/}
` {/*`*/}
} {/*}*/}
</style> {/*</style>*/}
{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{ {/*{this.state.fileList.length===0?"":this.state.fileList.map((item,key)=>{*/}
return( {/*return(*/}
<p className="color-grey mt10" key={key} > {/*<p className="color-grey mt10" key={key} >*/}
<a className="color-grey fl"> {/*<a className="color-grey fl">*/}
<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i> {/*<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>*/}
</a> {/*</a>*/}
<span className="mr12 color9B9B maxwidth500 fl" length="58"> {/*<span className="mr12 color9B9B maxwidth500 fl" length="58">*/}
{item.name} {/*{item.name}*/}
</span> {/*</span>*/}
<span className="color656565 mt2 color-grey-6 font-12 mr8"> {/*<span className="color656565 mt2 color-grey-6 font-12 mr8">*/}
{item.response===undefined?"":bytesToSize(item.size)} {/*{item.response===undefined?"":bytesToSize(item.size)}*/}
</span> {/*</span>*/}
<i className="font-14 iconfont icon-guanbi " {/*<i className="font-14 iconfont icon-guanbi "*/}
id={item.response===undefined?"":item.response.id} {/*id={item.response===undefined?"":item.response.id}*/}
aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i> {/*aria-hidden="true" onClick={()=>this.onAttachmentRemove(item.response===undefined?"":item.response.id&&item.response.id)}></i>*/}
</p> {/*</p>*/}
) {/*)*/}
})} {/*})}*/}
</div> </div>
@ -638,7 +652,7 @@ render(){
> >
<div> <div>
<div className={"fl ml20"}>成员要求25</div> <div className={"fl ml20"}>成员要求{workslist&&workslist.min_num}{workslist&&workslist.max_num}</div>
<input type="text" style={{width:"0px",height:"0px",display:"none"}} onKeyUp={(e) => this.onSearchKeywordKeyUp(e)} <input type="text" style={{width:"0px",height:"0px",display:"none"}} onKeyUp={(e) => this.onSearchKeywordKeyUp(e)}
onkeydown={(e)=>this.onSearchKeywordKeyUps(e)}/> onkeydown={(e)=>this.onSearchKeywordKeyUps(e)}/>

@ -7,15 +7,9 @@ import axios from 'axios';
import Modals from '../../../modals/Modals'; import Modals from '../../../modals/Modals';
import DownloadMessage from '../../../modals/DownloadMessage'; import DownloadMessage from '../../../modals/DownloadMessage';
import CoursesListType from '../../coursesPublic/CoursesListType'; import CoursesListType from '../../coursesPublic/CoursesListType';
import PublishModals from "../../coursesPublic/PublishModals";
import HomeworkModal from "../../coursesPublic/HomeworkModal"; import HomeworkModal from "../../coursesPublic/HomeworkModal";
import moment from 'moment'; import moment from 'moment';
const { Option} = Select; const { Option} = Select;
const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm;
let GraduationTasksnewtype=true;
// const $ = window.$;
const Search = Input.Search;
const RadioGroup = Radio.Group; const RadioGroup = Radio.Group;
function range(start, end) { function range(start, end) {
@ -1109,8 +1103,8 @@ class GraduationTaskssettingapp extends Component{
{this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}> {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> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}>
<li><a onClick={()=>this.confirmysl("/api/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li>
<li><a onClick={()=>this.confirmysl("/api/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li>
</ul> </ul>
</li>:""} </li>:""}

@ -73,14 +73,14 @@ class GraduationTaskssettinglist extends Component{
//get 数组 //get 数组
axios.get(url,{ axios.get(url,{
params: { params: {
teacher_comment:teacher_comment, teacher_comment:teacher_comment===null?undefined:teacher_comment,
task_status:task_status, task_status:task_status===null?undefined:task_status,
course_group:course_group, course_group:course_group===null?undefined:course_group,
cross_comment:cross_comment, cross_comment:cross_comment===null?undefined:cross_comment,
order:order, order:order===null?undefined:order,
b_order:b_order, b_order:b_order===null?undefined:b_order,
search:search, search:search===null?undefined:search,
page:pages, page:pages===null?undefined:pages,
limit:20, limit:20,
}, },
paramsSerializer: function(params) { paramsSerializer: function(params) {
@ -144,11 +144,16 @@ class GraduationTaskssettinglist extends Component{
let {teacher_comment, task_status, course_group, cross_comment, order, b_order, search} = this.state; let {teacher_comment, task_status, course_group, cross_comment, order, b_order, search} = this.state;
this.setState({ this.setState({
teacher_comment:list.length===key?null:list, teacher_comment:list.length===key?undefined:list[0],
loadingstate:true loadingstate:true
}) })
this.seacthdata(list.length===key?undefined:list, task_status, course_group, cross_comment, order, b_order, search,this.state.page); if(list.length===key){
}else{
this.seacthdata(list[0], task_status, course_group, cross_comment, order, b_order, search,this.state.page);
}
} }
@ -1079,8 +1084,8 @@ class GraduationTaskssettinglist extends Component{
{this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}> {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> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}>
<li><a onClick={()=>this.confirmysl("/api/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">学生成绩</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">学生成绩</a></li>
<li><a onClick={()=>this.confirmysl("/api/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">作品附件</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">作品附件</a></li>
</ul> </ul>
</li>:""} </li>:""}

@ -352,8 +352,8 @@ class GraduationTasksquestions extends Component{
{this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}> {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> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}>
<li><a onClick={()=>this.confirmysl("/api/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li>
<li><a onClick={()=>this.confirmysl("/api/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li> <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li>
</ul> </ul>
</li>:""} </li>:""}
@ -376,7 +376,7 @@ class GraduationTasksquestions extends Component{
width: '100%', width: '100%',
border: '1px solid transparent' border: '1px solid transparent'
}}> }}>
<div dangerouslySetInnerHTML={{__html: markdownToHTML(questionslist.description).replace(/▁/g,"▁▁▁")}}></div> <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(questionslist.description).replace(/▁/g,"▁▁▁")}}></div>
</div>:"" </div>:""
} }

File diff suppressed because it is too large Load Diff

@ -160,7 +160,7 @@ class CommitSummary extends Component{
max: 5000, message: '最大限制为5000个字符', max: 5000, message: '最大限制为5000个字符',
}], }],
})( })(
<TPMMDEditor ref={this.mdRef} placeholder={'请在此输入帖子详情,最大限制为5000个字符'} <TPMMDEditor ref={this.mdRef} placeholder={'请在此输入总结内容,最多5000个字符'}
mdID={'courseMessageMD'} initValue={this.state.description} className="courseMessageMD"></TPMMDEditor> mdID={'courseMessageMD'} initValue={this.state.description} className="courseMessageMD"></TPMMDEditor>
)} )}
</div> </div>

@ -337,13 +337,6 @@ class Listofworks extends Component {
render: (text, record) => ( render: (text, record) => (
record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</span> : record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</span> :
<span> <span>
<Tooltip placement="bottom" title={<div>
<div>直接调整最终成绩的分数</div>
<div>其它评分全部作废</div>
</div>}>
<a style={this.props.isNotMember() === true ? this.state.mystyles : this.state.mystyle}
onClick={() => this.Viewstudenttraininginformations(record)}>调分</a>
</Tooltip>
<a style={{"text-align": "center"}} className="color-blue" <a style={{"text-align": "center"}} className="color-blue"
onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a> onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a>
</span> </span>
@ -590,13 +583,6 @@ class Listofworks extends Component {
render: (text, record) => ( render: (text, record) => (
record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</span> : record.submitstate === "未提交" ? <span style={{ color: '#9A9A9A'}}>--</span> :
<span> <span>
<Tooltip placement="bottom" title={<div>
<div>直接调整最终成绩的分数</div>
<div>其它评分全部作废</div>
</div>}>
<a style={this.props.isNotMember() === true ? this.state.mystyles : this.state.mystyle}
onClick={() => this.Viewstudenttraininginformations(record)}>调分</a>
</Tooltip>
<a style={{"text-align": "center"}} className="color-blue" <a style={{"text-align": "center"}} className="color-blue"
onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a> onClick={() => this.Viewstudenttraininginformation(record)}>{record.operating}</a>
</span> </span>

@ -550,6 +550,8 @@ class Listofworksstudentone extends Component {
} }
} }
// console.log("554");
// console.log(columns2);
this.setState({ this.setState({
@ -577,7 +579,7 @@ class Listofworksstudentone extends Component {
} }
} }
else if(this.props.isNotMember()===true&&item.title==="学号") { if(this.props.isNotMember()===true&&item.title==="学号") {
}else{ }else{
arr.push(item); arr.push(item);
@ -640,6 +642,8 @@ class Listofworksstudentone extends Component {
} }
// console.log("datalistdatalist文件"); // console.log("datalistdatalist文件");
// console.log(datalist); // console.log(datalist);
// console.log("645");
// console.log(columns2);
this.setState({ this.setState({
data: datalist, data: datalist,
teacherlist: teacherlist, teacherlist: teacherlist,
@ -835,7 +839,9 @@ class Listofworksstudentone extends Component {
} }
render() { render() {
let {visibles, game_list,columns, limit,experience, boolgalist,viewtrainingdata, teacherdata, page, data, jobsettingsdata, styletable, datas, order, loadingstate,computeTimetype} = this.state; let {visibles, game_list,columns, limit,experience, boolgalist,viewtrainingdata, teacherdata, page, data, jobsettingsdata, styletable, datas, order, loadingstate,computeTimetype} = this.state;
// console.log(this.state.data);
// console.log("841");
// console.log(this.state.columns);
return ( return (
teacherdata === undefined || teacherdata.student_works === undefined || teacherdata.student_works === null || JSON.stringify(teacherdata.student_works) === "[]" ? teacherdata === undefined || teacherdata.student_works === undefined || teacherdata.student_works === null || JSON.stringify(teacherdata.student_works) === "[]" ?
// 学生不能查看别人的 // 学生不能查看别人的
@ -1018,7 +1024,7 @@ class Listofworksstudentone extends Component {
} }
`}</style> `}</style>
<div className="edu-table edu-back-white "> <div className="edu-table edu-back-white ">
{data === undefined ? "" : <Table {data === undefined ? "222222" : <Table
dataSource={data} dataSource={data}
columns={columns} columns={columns}
pagination={false} pagination={false}

@ -751,7 +751,7 @@ class ShixunStudentWork extends Component {
</style> </style>
{data&&data? {data&&data?
<div> <div style={{display:duplicatechecking===false?"":"none"}}>
<ul className="clearfix" style={{padding: '20px 16px 10px'}}> <ul className="clearfix" style={{padding: '20px 16px 10px'}}>
<li className="clearfix "> <li className="clearfix ">

@ -1,5 +1,5 @@
import React, {Component} from "react"; import React, {Component} from "react";
import {WordsBtn} from 'educoder'; import {WordsBtn,markdownToHTML} from 'educoder';
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider,InputNumber, Tag,DatePicker,Radio,Tooltip,Spin} from "antd"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider,InputNumber, Tag,DatePicker,Radio,Tooltip,Spin} from "antd";
import {Link,Switch,Route,Redirect} from 'react-router-dom'; import {Link,Switch,Route,Redirect} from 'react-router-dom';
import axios from 'axios'; import axios from 'axios';
@ -13,12 +13,10 @@ import 'codemirror/mode/cmake/cmake';
import 'codemirror/mode/xml/xml'; import 'codemirror/mode/xml/xml';
import 'codemirror/mode/javascript/javascript'; import 'codemirror/mode/javascript/javascript';
import 'codemirror/mode/clike/clike'; import 'codemirror/mode/clike/clike';
import '../css/members.css'; import '../css/members.css';
import "../common/formCommon.css"; import "../common/formCommon.css";
import '../css/Courses.css'; import '../css/Courses.css';
import './style.css'; import './style.css';
import moment from 'moment';
import 'moment/locale/zh-cn'; import 'moment/locale/zh-cn';
class ShixunWorkReport extends Component { class ShixunWorkReport extends Component {
@ -172,7 +170,6 @@ class ShixunWorkReport extends Component {
<style> <style>
{` {`
.personalsummary{ .personalsummary{
height:115px;
border:1px solid rgba(235,235,235,1); border:1px solid rgba(235,235,235,1);
border-radius:2px; border-radius:2px;
} }
@ -194,7 +191,9 @@ class ShixunWorkReport extends Component {
</style> </style>
<div className={"pad040"}> <div className={"pad040"}>
<div className={"personalsummary"}> <div className={"personalsummary"}>
{data&&data.work_description}
<div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(data&&data.work_description).replace(/▁/g, "▁▁▁")}}></div>
</div> </div>
</div> </div>
</div> </div>

@ -184,10 +184,10 @@ class ShixunWorkModal extends Component{
if (response.data.status === 0) { if (response.data.status === 0) {
this.props.updatas() this.props.updatas()
this.props.issCancel() this.props.issCancel()
notification.open({ // notification.open({
message:"提示", // message:"提示",
description: response.data.message // description: response.data.message
}); // });
this.props.history.replace(`/courses/${this.props.match.params.coursesId}/shixun_homeworks/${this.props.match.params.homeworkid}/student_work`); this.props.history.replace(`/courses/${this.props.match.params.coursesId}/shixun_homeworks/${this.props.match.params.homeworkid}/student_work`);
}else if(response.data.status === -1){ }else if(response.data.status === -1){
notification.open({ notification.open({

@ -221,7 +221,7 @@ class Trainingjobsetting extends Component {
deadline: result.data.end_time === undefined ? undefined : result.data.end_time === null ? undefined : result.data.end_time, deadline: result.data.end_time === undefined ? undefined : result.data.end_time === null ? undefined : result.data.end_time,
late_time: result.data.late_time === undefined ? undefined : result.data.late_time === null ? undefined : result.data.late_time, late_time: result.data.late_time === undefined ? undefined : result.data.late_time === null ? undefined : result.data.late_time,
late_times: result.data.late_time === undefined ? undefined : result.data.late_time === null ? undefined : result.data.late_time, late_times: result.data.late_time === undefined ? undefined : result.data.late_time === null ? undefined : result.data.late_time,
allowreplenishment: result.data.allow_late === true ? "允许补交" : "禁止补交", allowreplenishment: result.data.allow_late,
latededuction: result.data.late_penalty, latededuction: result.data.late_penalty,
level: result.data.answer_open_evaluation === true ? "满分" : "扣分", level: result.data.answer_open_evaluation === true ? "满分" : "扣分",
completionefficiencyscore: result.data.work_efficiency, completionefficiencyscore: result.data.work_efficiency,
@ -231,10 +231,6 @@ class Trainingjobsetting extends Component {
challenge_settings: result.data.challenge_settings, challenge_settings: result.data.challenge_settings,
code_review:result.data.code_review code_review:result.data.code_review
}) })
} }
}) })
@ -337,7 +333,7 @@ class Trainingjobsetting extends Component {
} }
} }
} }
if (this.state.allowreplenishment === "允许补交") { if (this.state.allowreplenishment === true) {
if (this.state.late_times === undefined || this.state.late_times === null || this.state.late_times === "") { if (this.state.late_times === undefined || this.state.late_times === null || this.state.late_times === "") {
@ -409,7 +405,7 @@ class Trainingjobsetting extends Component {
if (this.state.allowreplenishment === "允许补交") { if (this.state.allowreplenishment === true) {
if (this.state.latededuction === undefined) { if (this.state.latededuction === undefined) {
this.props.showNotification(`请输入迟交扣分数`); this.props.showNotification(`请输入迟交扣分数`);
@ -530,7 +526,7 @@ class Trainingjobsetting extends Component {
unified_setting: this.state.unifiedsetting, //统一配置 unified_setting: this.state.unifiedsetting, //统一配置
publish_time: moment(this.state.publish_time).format('YYYY-MM-DD HH:mm'), //发布时间 publish_time: moment(this.state.publish_time).format('YYYY-MM-DD HH:mm'), //发布时间
end_time: moment(this.state.end_time).format('YYYY-MM-DD HH:mm'), //截止时间 end_time: moment(this.state.end_time).format('YYYY-MM-DD HH:mm'), //截止时间
allow_late: this.state.allowreplenishment === "允许补交" ? true : false, //补交 allow_late: this.state.allowreplenishment, //补交
late_penalty: parseInt(this.state.latededuction), //迟交扣分 late_penalty: parseInt(this.state.latededuction), //迟交扣分
late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间 late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间
answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项 answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项
@ -546,7 +542,7 @@ class Trainingjobsetting extends Component {
data = { data = {
unified_setting: this.state.unifiedsetting, //非统一配置 unified_setting: this.state.unifiedsetting, //非统一配置
group_settings: this.state.rulesdata, group_settings: this.state.rulesdata,
allow_late: this.state.allowreplenishment === "允许补交" ? true : false, //补交 allow_late: this.state.allowreplenishment, //补交
late_penalty: parseInt(this.state.latededuction), //迟交扣分 late_penalty: parseInt(this.state.latededuction), //迟交扣分
late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间 late_time: moment(this.state.late_time).format('YYYY-MM-DD HH:mm'), //结束时间
answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项 answer_open_evaluation: this.state.level === "满分" ? true : false, //扣分项
@ -651,9 +647,8 @@ class Trainingjobsetting extends Component {
//允许补交 //允许补交
onChanges = (e) => { onChanges = (e) => {
// console.log("640");
// console.log(this.state.end_time); // console.log(this.state.end_time);
if(e.target.value ==="允许补交"){ if(e.target.checked ===true){
if(this.state.end_time !== null && this.state.end_time!== undefined){ if(this.state.end_time !== null && this.state.end_time!== undefined){
// console.log(this.state.end_time); // console.log(this.state.end_time);
// var times = this.state.deadline.format('YYYY-MM-DD HH:mm'); // var times = this.state.deadline.format('YYYY-MM-DD HH:mm');
@ -665,16 +660,19 @@ class Trainingjobsetting extends Component {
this.setState({ this.setState({
allowreplenishment: e.target.value, allowreplenishment: e.target.checked,
latededuction:5, latededuction:5,
whethertopay:true, whethertopay:true,
}) })
}else { }else {
this.setState({ this.setState({
allowreplenishment: e.target.value, allowreplenishment: e.target.checked,
latededuction:0, latededuction:0,
whethertopay:false, whethertopay:false,
hand__e_tip: "",
hand_flags: false,
handclass:"",
}) })
} }
@ -1239,7 +1237,7 @@ class Trainingjobsetting extends Component {
this.setState({ this.setState({
publish_time:moment(handleDateString(dateString)) publish_time:moment(handleDateString(dateString))
}) })
if(this.state.allowreplenishment === "允许补交") { if(this.state.allowreplenishment === true) {
this.setState({ this.setState({
end_time:moment(handleDateString(dateString)).add(1, 'months'), end_time:moment(handleDateString(dateString)).add(1, 'months'),
deadline:moment(handleDateString(dateString)).add(1, 'months').format('YYYY-MM-DD HH:mm'), deadline:moment(handleDateString(dateString)).add(1, 'months').format('YYYY-MM-DD HH:mm'),
@ -1303,7 +1301,7 @@ class Trainingjobsetting extends Component {
end_time:moment(handleDateString(dateString)) end_time:moment(handleDateString(dateString))
}) })
// this.onChangedata('end_time', value, dateString); // this.onChangedata('end_time', value, dateString);
if(this.state.allowreplenishment === "允许补交"){ if(this.state.allowreplenishment === true){
this.setState({ this.setState({
deadline:moment(handleDateString(dateString)).format('YYYY-MM-DD HH:mm'), deadline:moment(handleDateString(dateString)).format('YYYY-MM-DD HH:mm'),
late_time:moment(handleDateString(dateString)).add(2, 'months'), late_time:moment(handleDateString(dateString)).add(2, 'months'),
@ -1580,7 +1578,7 @@ class Trainingjobsetting extends Component {
if(moment(this.state.late_time,"YYYY-MM-DD HH:mm")<=moment()){ if(moment(this.state.late_time,"YYYY-MM-DD HH:mm")<=moment()){
endtime=false; endtime=false;
} }
if(this.state.allowreplenishment === "禁止补交"){ if(this.state.allowreplenishment === false){
whethertopays=false; whethertopays=false;
} }
this.setState({ this.setState({
@ -1985,11 +1983,11 @@ class Trainingjobsetting extends Component {
<div className=" clearfix edu-back-white poll_list mt10"> <div className=" clearfix edu-back-white poll_list mt10">
<div className={"font-16 color-dark fl pl20 mt10 "} style={{"color":"#05101A"}}>补交设置</div> <div className={"font-16 color-dark fl pl20 mt10 "} style={{"color":"#05101A"}}>补交设置</div>
</div> </div>
{/*value={this.state.allowreplenishment}*/}
<RadioGroup className="ml40 mt10" onChange={this.onChanges} <div className="ml40 mt10"
value={this.state.allowreplenishment}> >
<Radio style={radioStyle} value={"允许补交"} disabled={!flagPageEdit}>允许补交 <span <Checkbox style={radioStyle} value={"允许补交"} checked={this.state.allowreplenishment} onChange={this.onChanges} disabled={!flagPageEdit}>开启补交 <span
className={"font-14 ml10 color-grey-9"} style={{"text-align":"left","font-size":"14px"}} >(选中则允许学生延时提交作品)</span></Radio> className={"font-14 ml10 color-grey-9"} style={{"text-align":"left","font-size":"14px"}} >(选中则允许学生延时提交作品)</span></Checkbox>
<div className={"h21 mb30 ml30 mt20"}> <div className={"h21 mb30 ml30 mt20"}>
<span style={{"width": "100px","color":"#999999"}}>迟交扣分</span> <span style={{"width": "100px","color":"#999999"}}>迟交扣分</span>
@ -2049,8 +2047,8 @@ class Trainingjobsetting extends Component {
} }
</p> </p>
</div> </div>
<Radio style={radioStyle} value={"禁止补交"} disabled={!flagPageEdit}>禁止补交</Radio> {/*<Radio style={radioStyle} value={"禁止补交"} disabled={!flagPageEdit}>禁止补交</Radio>*/}
</RadioGroup> </div>
<div className="h20 mb10 "></div> <div className="h20 mb10 "></div>
</div> </div>
{/*评分设置*/} {/*评分设置*/}

@ -509,7 +509,7 @@ class Workquestionandanswer extends Component {
} }
</style> </style>
<div className={"font-16 color-dark fl pl20 "}> <div className={"font-16 color-dark fl pl20 "}>
<div <div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.description).replace(/▁/g, "▁▁▁")}}></div> dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.description).replace(/▁/g, "▁▁▁")}}></div>
{/* /!*{}}></div> {/* /!*{}}></div>
{/* /!*{jobsettingsdata.data.description}*!/*/} {/* /!*{jobsettingsdata.data.description}*!/*/}
@ -559,7 +559,7 @@ class Workquestionandanswer extends Component {
<div className="pl20 markdown-body" style={{"padding": "10px 10px 10px 20px"}}> <div className="pl20 markdown-body" style={{"padding": "10px 10px 10px 20px"}}>
{jobsettingsdata === undefined ? "无" : jobsettingsdata === null ? "无" : jobsettingsdata === "null" ? "无" : {jobsettingsdata === undefined ? "无" : jobsettingsdata === null ? "无" : jobsettingsdata === "null" ? "无" :
jobsettingsdata.data.explanation === undefined ? "无" : jobsettingsdata.data.explanation === null ? "无" : jobsettingsdata.data.explanation === undefined ? "无" : jobsettingsdata.data.explanation === null ? "无" :
<div <div className={"markdown-body"}
dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.explanation).replace(/▁/g, "▁▁▁")}}></div> dangerouslySetInnerHTML={{__html: markdownToHTML(jobsettingsdata.data.explanation).replace(/▁/g, "▁▁▁")}}></div>
} }

@ -342,7 +342,7 @@ class PathDetailIndex extends Component{
<div className="color-grey-6 clearfix"> <div className="color-grey-6 clearfix">
<div id="shixuns_propaedeutics" className="new_li fl" style={{"padding":" 0px","textAlign": "justify;"}}> <div id="shixuns_propaedeutics" className="new_li fl" style={{"padding":" 0px","textAlign": "justify;"}}>
{detailInfoList === undefined ? "" :detailInfoList.description===null?"": {detailInfoList === undefined ? "" :detailInfoList.description===null?"":
<div dangerouslySetInnerHTML={{__html: markdownToHTML(detailInfoList.description).replace(/▁/g,"▁▁▁")}}></div> <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(detailInfoList.description).replace(/▁/g,"▁▁▁")}}></div>
} }
</div> </div>
</div> </div>

@ -304,7 +304,7 @@ class Challenges extends Component {
id="challenge_editorMd_description"> id="challenge_editorMd_description">
<p id="ReactMarkdown" style={{overflow:'hidden'}}> <p id="ReactMarkdown" style={{overflow:'hidden'}}>
{ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"": {ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"":
<div dangerouslySetInnerHTML={{__html: markdownToHTML(ChallengesDataList.description).replace(/▁/g,"▁▁▁")}}></div> <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(ChallengesDataList.description).replace(/▁/g,"▁▁▁")}}></div>
} }
</p> </p>

Loading…
Cancel
Save