import React,{Component} from "React"; import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal,Tooltip} from "antd"; import {Link} from 'react-router-dom'; import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor'; import { WordsBtn, getUploadActionUrl, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from 'educoder'; import axios from 'axios'; import Modals from '../../modals/Modals'; import _ from 'lodash' const Search = Input.Search; const CheckboxGroup = Checkbox.Group; class CommonWorkPost extends Component{ constructor(props){ super(props) this.mdRef = React.createRef(); this.state={ coursename:"", coursesearch:"", title_num:20, title_value:"", fileList: [], contents: [{val:"",id:1}], type:true, workslist:undefined, search:"", task_status:[], members: [], selectmemberslist:[], minvalue:"", setvalue:"", minmaxtype:false, selectobjct:undefined, Loadtype:false, limit:20, memberNumMin: 2, memberNumMax: 5, } } componentDidMount(){ const studentWorkId = this.props.match.params.studentWorkId this.isEdit = !!studentWorkId window.location.pathname.indexOf('post_edit') != -1 let coursesId=this.props.match.params.coursesId; let workId=this.props.match.params.workId; let url = `/homework_commons/${workId}/student_works/new.json` const isGroup = this.props.isGroup() if (isGroup) { this.searchList('',1, this.state.limit) } if (this.isEdit) { url = `/student_works/${studentWorkId}/edit.json` axios.get(url).then((response)=>{ if(response.data.course_id){ // TODO // response.data.attachments const _fileList = response.data.attachments.map(item => { return { id: item.id, uid: item.id, name: appendFileSizeToUploadFile(item), url: item.url, status: 'done' } }) const _memebers = response.data.members.slice(0); this._edit_init_memebers = _memebers delete response.data.members; this.setState({ ...response.data, selectmemberslist: _memebers || [], // members: [], task_status: [], //_memebers ? _memebers.map(item => item.user_id) : [], fileList: _fileList, memberNumMin: response.data.min_num, memberNumMax: response.data.max_num, }) this.mine = _memebers.length ? _memebers[0] : null // 分组 // this.setState({ // task_status:checkedValues, // selectmemberslist:selects // }) this.props.form.setFieldsValue({ description: response.data.description, }, () => {}); this.mdRef.current.setValue(response.data.description) } }).catch((error)=>{ console.log(error) }) } else { axios.get(url).then((response)=>{ if(response.data.course_id){ const mine = { user_id: response.data.user_id, user_name: response.data.user_name, student_id: response.data.user_student_id, group_name: response.data.group_name, } this.mine = mine // const _memebers = response.data.members.slice(0); if (response.data.members) { delete response.data.members; } this.setState({ ...response.data, selectmemberslist: [mine], memberNumMin: response.data.min_num, memberNumMax: response.data.max_num, }) } }).catch((error)=>{ console.log(error) }) } } setedit=(workId)=>{ let coursesId=this.props.match.params.coursesId; window.location.href="courses/"+coursesId+"/graduation_tasks/"+workId+"/appraise"; // window.location.href="/courses/"+coursesId+"/graduation/graduation_tasks/"+workId+"/"+workId+"/works/edit"; } handleSubmit=(e) => { let {fileList,selectmemberslist,workslist, memberNumMin, memberNumMax}=this.state; let userids=[]; for(var list of selectmemberslist){ if(list.user_id!=undefined&&list.user_id!=null){ userids.push(list.user_id) } } const isGroup = this.props.isGroup() if(!isGroup){ userids=undefined } let listid=[]; for(var list of fileList){ listid.push(list.id || list.response.id) } e.preventDefault(); if( true ){ this.props.form.validateFields((err, values) => { if (!err) { console.log(values.description); // console.log(fileList); if(values.description===undefined||values.description===""){ return } if(isGroup){ if(userids!=undefined){ if(userids.length < memberNumMin){ this.setState({ minvalue: memberNumMin, setvalue:"小于", minmaxtype:true }) return }else if(userids.length > memberNumMax){ this.setState({ minvalue: memberNumMax, setvalue:"大于", minmaxtype:true }) return } else { this.setState({ minmaxtype: false }) } } } if (!listid || listid.length == 0) { this.props.confirm({ content:
还未上传附件
是否确认提交作品?
, onOk: () => { this.doCommit(values, listid, userids) } }) } else { this.doCommit(values, listid, userids) } } }); } } doCommit = (values, listid, userids) => { let workId=this.props.match.params.workId; let studentWorkId=this.props.match.params.studentWorkId; let coursesId=this.props.match.params.coursesId; // let url="/graduation_tasks/"+id+"/graduation_works.json"; let url = `/homework_commons/${workId}/student_works.json` const moduleName = this.props.getModuleName() if (this.isEdit) { url = `/student_works/${studentWorkId}.json` axios.put(url, { description:values.description, attachment_ids:listid, user_ids:userids } ).then((response) => { if(response.status===200) { if(response.data.status===0){ // this.props.showNotification('保存成功') }else{ } this.props.history.push(`/courses/${coursesId}/${moduleName}/${workId}/${studentWorkId}/appraise`) } }).catch((error) => { console.log(error) }) } else { axios.post(url, { description:values.description, attachment_ids:listid, user_ids:userids } ).then((response) => { if(response.status===200) { if(response.data.status===0){ this.props.history.push(`/courses/${coursesId}/${moduleName}/${workId}/${response.data.work_id}/appraise`) // this.props.showNotification('保存成功') // this.setState({ // Modalstype:true, // Modalstopval:response.data.message, // ModalSave:()=>this.setedit(response.data.work_id), // Loadtype:true // }) }else{ } } }).catch((error) => { console.log(error) }) } } handleSelectChange = (value) => { console.log(value); this.props.form.setFieldsValue({ note: `Hi, ${value === 'male' ? 'man' : 'lady'}!`, }); } goback=()=>{ // this.props.toListPage(this.props.match.params, this.state.category ? this.state.category.category_id : '') this.props.history.goBack() } // 输入title changeTitle=(e)=>{ this.setState({ title_num:20-parseInt(e.target.value.length), title_value:e.target.value }) } // 附件相关 START handleChange = (info) => { if (info.file.status === 'uploading' || info.file.status === 'done') { let fileList = info.fileList; this.setState({ fileList: appendFileSizeToUploadFileAll(fileList) }); } } onAttachmentRemove = (file) => { // confirm({ // title: '确定要删除这个附件吗?', // okText: '确定', // cancelText: '取消', // // content: 'Some descriptions', // onOk: () => { // this.deleteAttachment(file) // }, // onCancel() { // console.log('Cancel'); // }, // }); // return false; // this.setState({ // Modalstype:true, // // Modalstopval:'确定要删除这个附件吗?', // Modalstopval:'是否确认删除?', // ModalSave: ()=>this.deleteAttachment(file), // ModalCancel:this.cancelAttachment // }) this.deleteAttachment(file) return false; } cancelAttachment=()=>{ this.setState({ Modalstype:false, // Modalstopval:'确定要删除这个附件吗?', Modalstopval:'是否确认删除?', ModalSave:"", ModalCancel:"" }) } deleteAttachment = (file) => { const url = `/attachments/${file.response ? file.response.id : file.uid}.json` axios.delete(url, { }) .then((response) => { if (response.data) { // const { status } = response.data; if (response.data.status === 0) { console.log('--- success') // this.setState({ // Modalstype:true, // Modalstopval:response.data.message, // ModalSave:this.cancelAttachment, // Loadtype:true, // }) this.setState((state) => { const index = state.fileList.indexOf(file); const newFileList = state.fileList.slice(); newFileList.splice(index, 1); return { fileList: newFileList, }; }); this.cancelAttachment() } } }) .catch(function (error) { console.log(error); }); } inputSearchValue=(e)=>{ if(e.target.value===""){ this.setState({ search:null }) }else{ this.setState({ search:e.target.value }) } } searchValue=()=>{ let {search, limit} = this.state; this.searchList(search,1, limit) } searchList=(search,page,limit)=>{ let id=this.props.match.params.workId; let workId=this.props.match.params.workId; // let url="/graduation_tasks/"+id+"/graduation_works/search_member_list.json"; let url = `/homework_commons/${workId}/student_works/search_member_list.json` axios.get(url,{ params: { search: search, page: page, limit: limit } }).then((result)=>{ if(result.status===200){ this.setState({ page: result.data.members.length == 0 ? page - 1 : page, members: page != 1 && search == this.state.lastSearch ? this.state.members.concat(result.data.members) : result.data.members, search: search, lastSearch: search, }) } }).catch((error)=>{ console.log(error) }) } contentViewScroll=(e)=>{ //滑动到底判断 if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){ // console.log("到达底部"); let{ search,page,limit }=this.state; let newpage=page+1 this.searchList(search,newpage,limit) } } funtaskstatus=(checkedValues)=>{ /** 比较 checkedValues 和 this.state.selectmemberslist checkedValues length > this.state.task_status.length 是新增; 反之是删除 比较找到不同的id 去除重复的,checkedValues留下的是新增,task_status留下的是删除 */ const _checkedValues = checkedValues.slice(0) const _task_status = this.state.task_status.slice(0); checkedValues.forEach(item => { this.state.task_status.forEach(_item => { if (item == _item) { _.remove(_checkedValues, (item)=> item == _item) _.remove(_task_status, (item)=> item == _item) } }) }) let _selectmemberslist = this.state.selectmemberslist.slice(0) if (_checkedValues.length) { // 新增 _selectmemberslist.push( this.state.members.filter(item => item.user_id == _checkedValues[0])[0]) } else if (_task_status.length) { // 删除 _.remove(_selectmemberslist, (item)=> item.user_id == _task_status[0]) } // let{members}=this.state; // let newlist =members.concat(this.state.selectmemberslist); // let newcheckedValues=checkedValues; // let selects= this.mine ? [this.mine] : []; // // const selectobjct = this._findByUserId(check) // // selects.push(selectobjct) // for(var z=0; z { let{selectmemberslist,task_status}=this.state; let newlist=task_status.slice(0); let selects=selectmemberslist; for(var i=0; i{ if (this.isEdit) { let deleteOldMemberIndex = -1; if (this._edit_init_memebers && this._edit_init_memebers.length) { this._edit_init_memebers.some((item, index) => { if (item.user_id == id) { deleteOldMemberIndex = index; return true } }) if (deleteOldMemberIndex == -1) { this.doDelete(id) return; } else { } } this.props.confirm({ content:
TA的作品将被删除
是否确认删除?
, onOk: () => { let workId=this.props.match.params.workId; const url = `/homework_commons/${workId}/student_works/delete_work.json`; axios.delete(url, { data: { user_id: id }}) .then((response) => { if (response.data.status == 0) { this.searchValue() this.doDelete(id) deleteOldMemberIndex != -1 && this._edit_init_memebers.splice(deleteOldMemberIndex, 1) } }) .catch(function (error) { console.log(error); }); } }) } else { this.doDelete(id) } } gocannel=()=>{ this.props.history.goBack() } render(){ const { getFieldDecorator } = this.props.form; const isEdit = this.isEdit let {search,fileList, workslist,setvalue,minvalue,minmaxtype,Loadtype, Modalstype,Modalstopval,ModalCancel,ModalSave,task_status,selectmemberslist,members, category, course_name, homework_name, memberNumMax, memberNumMin } =this.state; const { current_user } = this.props let courseId=this.props.match.params.coursesId; let workId=this.props.match.params.workId; const uploadProps = { width: 600, fileList, multiple: true, // https://github.com/ant-design/ant-design/issues/15505 // showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。 // showUploadList: false, action: `${getUploadActionUrl()}`, onChange: this.handleChange, onRemove: this.onAttachmentRemove, beforeUpload: (file) => { // TODO 文件存在则提示并退出 let gotSameFile = false; this.state.fileList && this.state.fileList.some((item) => { if (item.name && item.name.startsWith(file.name)) { gotSameFile = true; return true } }) if (gotSameFile) { this.props.showNotification("该附件已被上传!") return false } console.log('beforeUpload', file.name); const isLt150M = file.size / 1024 / 1024 < 150; if (!isLt150M) { message.error('文件大小必须小于150MB!'); } return isLt150M; }, }; // console.log(workslist&&workslist) // console.log(selectmemberslist&&selectmemberslist) const moduleName = this.props.getModuleName() const moduleCHName = this.props.getModuleName(true) const isGroup = this.props.isGroup() return(
{/*提示*/}

{course_name} > {moduleCHName} > {/**/} {/*{workslist&&workslist.task_name}*/} {/*>*/} {/**/} {`${current_user ? current_user.username : ''} ${ this.isEdit ? '编辑' : '提交'}作品` }

{homework_name}

返回
{/* */}
{getFieldDecorator('description', { rules: [{ required: true, message: '请输入作品内容', }, { max: 5000, message: '最大限制为5000个字符', }], })( )} (单个文件150M以内)
{!isGroup?"":
成员要求:{memberNumMin}~{memberNumMax}人
{members.map((item,key)=>{ return(
{item.user_name}
{item.group_name}
{item.student_id}
{item.commit_status===true?已提交 :""}
) })}
{selectmemberslist&&selectmemberslist.map((item,key)=>{ return(
{item.user_name}
{item.group_name}
{item.student_id}
{item.user_id != this.props.current_user.user_id ?
this.delecttask_status(item.user_id)}>
:""}
) })}
{minmaxtype===true? 人数不能{setvalue+minvalue}个人 :""}
}
取消
) } } const CommonWorkPostApp = Form.create({ name: 'coursesNew' })(CommonWorkPost); export default CommonWorkPostApp;