dev_forum
ysl 6 years ago
parent 765af2c66e
commit 005dfc59ca

@ -1,31 +1,33 @@
import React,{Component} from "React"; import React, {Component} from "React";
import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal} from "antd"; import {Form, Select, Input, Button, Checkbox, Upload, Icon, message, Modal} from "antd";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor'; import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
import { WordsBtn,getUrl} from 'educoder'; import {WordsBtn, getUrl} from 'educoder';
import axios from 'axios'; import axios from 'axios';
import Modals from '../../../modals/Modals'; import Modals from '../../../modals/Modals';
import '../../css/Courses.css'; import '../../css/Courses.css';
const { Option} = Select;
const {Option} = Select;
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
const confirm = Modal.confirm; const confirm = Modal.confirm;
let GraduationTasksnewtype=true; let GraduationTasksnewtype = true;
class GraduationTasksnew extends Component{
class GraduationTasksnew extends Component {
constructor(props){ constructor(props) {
super(props) super(props)
this.state={ this.state = {
coursename:"", coursename: "",
coursesearch:"", coursesearch: "",
title_num:60, title_num: 60,
title_value:"", title_value: "",
fileList: [], fileList: [],
contents: [{val:"",id:1}], contents: [{val: "", id: 1}],
type:true type: true
} }
} }
componentDidMount(){ componentDidMount() {
// const query =this.props.location.search; // const query =this.props.location.search;
// //
// const type = query.split('&'); // const type = query.split('&');
@ -39,57 +41,57 @@ class GraduationTasksnew extends Component{
// }) // })
} }
scrollToAnchors=(anchorName)=>{ scrollToAnchors = (anchorName) => {
this.setState({ this.setState({
anchor:anchorName anchor: anchorName
}) })
} }
handleSubmit=(e) => { handleSubmit = (e) => {
let {fileList}=this.state; let {fileList} = this.state;
let listid=[] let listid = []
for(var list of fileList){ for (var list of fileList) {
listid.push(list.response.id) listid.push(list.response.id)
} }
e.preventDefault(); e.preventDefault();
if( GraduationTasksnewtype===true){ if (GraduationTasksnewtype === true) {
this.props.form.validateFields((err, values) => { this.props.form.validateFields((err, values) => {
if (!err) { if (!err) {
if(values.tasktype===undefined){ if (values.tasktype === undefined) {
this.scrollToAnchors("tasktypes"); this.scrollToAnchors("tasktypes");
return return
} }
if(values.name===undefined){ if (values.name === undefined) {
this.scrollToAnchors("nametypes"); this.scrollToAnchors("nametypes");
return return
} }
if(values.description===undefined){ if (values.description === undefined) {
this.scrollToAnchors("descriptiontypes"); this.scrollToAnchors("descriptiontypes");
return return
}else if(values.description.length>5000){ } else if (values.description.length > 5000) {
this.scrollToAnchors("descriptiontypes"); this.scrollToAnchors("descriptiontypes");
return return
} }
console.log('Received values of form: ', values); console.log('Received values of form: ', values);
console.log(fileList); console.log(fileList);
const course_id=this.props.match.params.coursesId; const course_id = this.props.match.params.coursesId;
let url="/courses/"+course_id+"/graduation_tasks.json" let url = "/courses/" + course_id + "/graduation_tasks.json"
axios.post(url, { axios.post(url, {
task_type:parseInt(values.tasktype), task_type: parseInt(values.tasktype),
name:values.name, name: values.name,
description:values.description, description: values.description,
attachment_ids:listid, attachment_ids: listid,
} }
).then((response) => { ).then((response) => {
if(response.status===200) { if (response.status === 200) {
GraduationTasksnewtype=false; GraduationTasksnewtype = false;
// this.goback(); // this.goback();
this.props.history.push("/courses/"+this.props.match.params.coursesId+"/graduation_tasks/"+this.props.match.params.category_id+"/"+response.data.task_id+"/setting"); this.props.history.push("/courses/" + this.props.match.params.coursesId + "/graduation_tasks/" + this.props.match.params.category_id + "/" + response.data.task_id + "/setting");
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
@ -103,20 +105,20 @@ class GraduationTasksnew extends Component{
} }
goback=()=>{ goback = () => {
let courseId=this.props.match.params.coursesId; let courseId = this.props.match.params.coursesId;
let category_id=this.props.match.params.category_id; let category_id = this.props.match.params.category_id;
window.location.href="/courses/"+courseId+"/graduation_tasks/"+category_id; window.location.href = "/courses/" + courseId + "/graduation_tasks/" + category_id;
} }
// 输入title // 输入title
changeTitle=(e)=>{ changeTitle = (e) => {
this.setState({ this.setState({
title_num:60-parseInt(e.target.value.length), title_num: 60 - parseInt(e.target.value.length),
title_value:e.target.value title_value: e.target.value
}) })
} }
@ -127,7 +129,7 @@ class GraduationTasksnew extends Component{
// for(var list of fileList ){ // for(var list of fileList ){
// console.log(list) // console.log(list)
// } // }
this.setState({ fileList }); this.setState({fileList});
} }
onAttachmentRemove = (file) => { onAttachmentRemove = (file) => {
@ -146,30 +148,29 @@ class GraduationTasksnew extends Component{
// return false; // return false;
this.setState({ this.setState({
Modalstype:true, Modalstype: true,
Modalstopval:'确定要删除这个附件吗?', Modalstopval: '确定要删除这个附件吗?',
ModalSave: ()=>this.deleteAttachment(file), ModalSave: () => this.deleteAttachment(file),
ModalCancel:this.cancelAttachment ModalCancel: this.cancelAttachment
}) })
return false; return false;
} }
cancelAttachment=()=>{ cancelAttachment = () => {
this.setState({ this.setState({
Modalstype:false, Modalstype: false,
Modalstopval:'确定要删除这个附件吗?', Modalstopval: '确定要删除这个附件吗?',
ModalSave:"", ModalSave: "",
ModalCancel:"" ModalCancel: ""
}) })
} }
deleteAttachment = (file) => { deleteAttachment = (file) => {
const url = `/attachments/${file.response ? file.response.id : file.uid}.json` const url = `/attachments/${file.response ? file.response.id : file.uid}.json`
axios.delete(url, { axios.delete(url, {})
})
.then((response) => { .then((response) => {
if (response.data) { if (response.data) {
const { status } = response.data; const {status} = response.data;
if (status == 0) { if (status == 0) {
console.log('--- success') console.log('--- success')
@ -188,12 +189,13 @@ class GraduationTasksnew extends Component{
console.log(error); console.log(error);
}); });
} }
//滚动 //滚动
ifHasAnchorJustScorll() { ifHasAnchorJustScorll() {
// let anchor = this.getURLStuff("anchor"); // let anchor = this.getURLStuff("anchor");
let anchor = this.state.anchor; let anchor = this.state.anchor;
console.log("anchor ", anchor); // console.log("anchor ", anchor);
// 对应id的话, 滚动到相应位置 // 对应id的话, 滚动到相应位置
if (!!anchor) { if (!!anchor) {
let anchorElement = document.getElementById(anchor); let anchorElement = document.getElementById(anchor);
@ -206,16 +208,19 @@ class GraduationTasksnew extends Component{
document.body.scrollTop = document.documentElement.scrollTop = 0; document.body.scrollTop = document.documentElement.scrollTop = 0;
} }
} }
render(){
const { getFieldDecorator } = this.props.form;
let {coursename,coursesearch,title_num,title_value,pageType,fileList,contents,type,
Modalstype,Modalstopval,ModalCancel,ModalSave} =this.state;
let {coursedata}=this.props; render() {
const {getFieldDecorator} = this.props.form;
let {
coursename, coursesearch, title_num, title_value, pageType, fileList, contents, type,
Modalstype, Modalstopval, ModalCancel, ModalSave
} = this.state;
let {coursedata} = this.props;
let courseId=this.props.match.params.coursesId; let courseId = this.props.match.params.coursesId;
let position=this.props.match.params.position; let position = this.props.match.params.position;
let category_id=this.props.match.params.category_id; let category_id = this.props.match.params.category_id;
const uploadProps = { const uploadProps = {
width: 600, width: 600,
fileList, fileList,
@ -237,8 +242,8 @@ render(){
}; };
this.ifHasAnchorJustScorll(); this.ifHasAnchorJustScorll();
// console.log(this.props.current_user.course_name) // console.log(this.props.current_user.course_name)
return( return (
<React.Fragment> <React.Fragment>
<div> <div>
{/*提示*/} {/*提示*/}
@ -252,45 +257,70 @@ render(){
<div className={"educontent mb20"}> <div className={"educontent mb20"}>
<p className="clearfix mt10"> <p className="clearfix mt10">
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/students"} className="color-grey-6">{this.props.current_user&&this.props.current_user.course_name}</Link></WordsBtn> <WordsBtn style="grey" className="fl"> <Link to={"/courses/" + courseId + "/students"}
className="color-grey-6">{this.props.current_user && this.props.current_user.course_name}</Link></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id} className="color-grey-6">毕设任务</Link></WordsBtn> <WordsBtn style="grey" className="fl"> <Link
to={"/courses/" + courseId + "/graduation_tasks/" + category_id} className="color-grey-6">毕设任务</Link></WordsBtn>
<span className="color-grey-9 fl ml3 mr3">&gt;</span> <span className="color-grey-9 fl ml3 mr3">&gt;</span>
<span>{"新建"}</span> <span>{"新建"}</span>
</p> </p>
<div style={{ width:'100%',height:'75px'}} > <div style={{width: '100%', height: '60px'}}>
<p className=" fl color-black mt25 summaryname">新建毕设任务</p> <p className=" fl color-black mt20 summaryname">新建毕设任务</p>
<a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a> <a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a>
</div> </div>
<Form labelCol={{ span: 5 }} wrapperCol={{ span: 12 }} onSubmit={GraduationTasksnewtype===true?this.handleSubmit:""} >
<Form labelCol={{span: 5}} wrapperCol={{span: 12}}
onSubmit={GraduationTasksnewtype === true ? this.handleSubmit : ""}>
<style>
{
`.ant-form-item-label{
text-align: right;
vertical-align: middle;
padding: 0px 0px 20px 0px;
display: inline-block;
overflow: hidden;
white-space: nowrap;
line-height: 20px; */
}
.ant-form-item-control{
line-height: 39.9999px;
position: relative;
zoom: 1;
}
`
}
</style>
{/*内容*/} {/*内容*/}
<div className="stud-class-set bor-bottom-greyE pd20 edu-back-white"> <div className="stud-class-set bor-bottom-greyE pt20 pl20 pr20 edu-back-white">
<Form.Item label="类型"> <Form.Item label="类型" >
{getFieldDecorator('tasktype', { {getFieldDecorator('tasktype', {
rules: [{ required: true, message: "请选择任务类型" }], rules: [{required: true, message: "请选择任务类型"}],
})(<Select className={"greyInput"} })(<Select className={"greyInput mb20"}
style={{width:'20%'}} style={{width: '20%'}}
placeholder="请选择任务类型"> placeholder="请选择任务类型">
<Option value="1">普通</Option> <Option value="1">普通</Option>
<Option value="2">分组</Option> <Option value="2">分组</Option>
</Select>)} </Select>)}
<input type="hidden" id='tasktypes' /> <input type="hidden" id='tasktypes'/>
<span className={"newcoursestitle"}>选择确认后无法修改</span> <span className={"newcoursestitle"}>选择确认后无法修改</span>
</Form.Item> </Form.Item>
<Form.Item label="任务标题" > <Form.Item label="任务标题" >
{getFieldDecorator('name', { {getFieldDecorator('name', {
rules: [{ required: true, message: "不能为空" }], rules: [{required: true, message: "不能为空"}],
})(<Input placeholder="请输入任务名称最大限制60个字符" value={title_value} onInput={this.changeTitle} className="searchView searchViewAfter" style={{"width":"100%"}} maxLength="60" addonAfter={String(title_num)}/>)} })(<Input placeholder="请输入任务名称最大限制60个字符" value={title_value} onInput={this.changeTitle}
className="searchView searchViewAfter mb20" style={{"width": "100%"}} maxLength="60"
addonAfter={String(title_num)}/>)}
</Form.Item> </Form.Item>
<input type="hidden" id='nametypes' /> <input type="hidden" id='nametypes'/>
</div> </div>
<div className="stud-class-set pd20 coursenavbox edu-back-white"> <div className="stud-class-set pt20 pl20 pr20 coursenavbox edu-back-white">
<style>{` <style>{`
.uploadBtn.ant-btn { .uploadBtn.ant-btn {
border: none; border: none;
@ -324,10 +354,10 @@ render(){
mdID={'courseMessageMD'} className="courseMessageMD"></TPMMDEditor> mdID={'courseMessageMD'} className="courseMessageMD"></TPMMDEditor>
)} )}
</Form.Item> </Form.Item>
<input type="hidden" id='descriptiontypes' /> <input type="hidden" id='descriptiontypes'/>
<Upload {...uploadProps} className="upload_1 ml5"> <Upload {...uploadProps} className="upload_1 ml5">
<Button className="uploadBtn"> <Button className="uploadBtn">
<Icon type="upload" /> 上传附件 <Icon type="upload"/> 上传附件
</Button> </Button>
(单个文件150M以内) (单个文件150M以内)
</Upload> </Upload>
@ -346,10 +376,11 @@ render(){
</div> </div>
</div> </div>
</React.Fragment> </React.Fragment>
) )
} }
} }
const GraduationTasksnewApp = Form.create({ name: 'coursesNew' })(GraduationTasksnew);
const GraduationTasksnewApp = Form.create({name: 'coursesNew'})(GraduationTasksnew);
export default GraduationTasksnewApp; export default GraduationTasksnewApp;

@ -570,7 +570,7 @@ submittojoinclass=(value)=>{
// join_course_url: "https://www.educoder.net/courses/join_course_multi_role" // join_course_url: "https://www.educoder.net/courses/join_course_multi_role"
// join_project_url: "https://www.educoder.net/applied_project/applied_project_info" // join_project_url: "https://www.educoder.net/applied_project/applied_project_info"
// rolearr:["",""], // rolearr:["",""],
console.log() // console.log()
return ( return (
<div className="newHeader" id="nHeader"> <div className="newHeader" id="nHeader">

Loading…
Cancel
Save