You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/public/react/src/modules/courses/exercise/new/MainEditor.js

188 lines
6.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import React,{ Component } from "react";
import {
Form, Input, InputNumber, Switch, Radio,
Slider, Button, Upload, Icon, Rate, Checkbox, message,
Row, Col, Select, Modal, Tooltip
} from 'antd';
import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
import axios from 'axios'
import update from 'immutability-helper'
import { qNameArray } from './common'
import {getUrl, ActionBtn, DMDEditor} from 'educoder';
const { TextArea } = Input;
const confirm = Modal.confirm;
const $ = window.$
const { Option } = Select;
class MainEditor extends Component{
constructor(props){
super(props);
/**
choice_id: 32076
choice_position: 1
choice_text: "1"
standard_boolean: true
*/
const {standard_answer} = this.props;
let _standard_answers = undefined;
if (standard_answer) {
_standard_answers = standard_answer
}
this.state = {
standard_answers: _standard_answers || [''],
question_title: this.props.question_title || '',
question_type: this.props.question_type || 2,
question_score: this.props.question_score || this.props.init_question_score,
}
}
onSave = () => {
const {question_title, question_score, question_type, question_choices, standard_answers } = this.state;
const { question_id_to_insert_after, question_id } = this.props
// TODO check
const answerArray = standard_answers
if(!question_title) {
this.refs['titleEditor'].showError()
this.props.showNotification('题目:不能为空'); return;
}
const intScore = parseFloat(question_score)
if(!question_score || intScore == NaN) {
this.props.showNotification('分值:不能为空'); return;
} else {
if (intScore == 0) {
this.props.showNotification('分值必须大于0'); return;
}
}
// if(!answerArray || answerArray.length == 0 || !answerArray[0]) {
// this.props.showNotification('请输入参考答案'); return;
// }
/**
{
"question_title":"社会主义核心价值观是?.",
"question_type":4,
"question_score":5,
"standard_answers":["富强,民主,自由。。。"]
}
}*/
const Id = this.props.match.params.Id
if (question_id) {
const editUrl = `/exercise_questions/${question_id}.json`
axios.put(editUrl, {
question_title,
question_type: 4,
question_score,
// question_choices,
standard_answers: answerArray,
insert_id: question_id_to_insert_after || undefined
})
.then((response) => {
if (response.data.status == 0) {
this.props.addSuccess()
}
})
.catch(function (error) {
console.log(error);
});
} else {
const url = `/exercises/${Id}/exercise_questions.json`
axios.post(url, {
question_title,
question_type: 4,
question_score,
// question_choices,
standard_answers: answerArray,
insert_id: question_id_to_insert_after || undefined
})
.then((response) => {
if (response.data.status == 0) {
this.props.addSuccess()
}
})
.catch(function (error) {
console.log(error);
});
}
}
onCancel = () => {
this.props.onEditorCancel()
}
componentDidMount = () => {
}
on_question_score_change = (e) => {
this.setState({ question_score: e })
}
render() {
let { question_title, question_score, question_type, question_choices, standard_answers } = this.state;
let { question_id, index, exerciseIsPublish,
// question_title,
// question_type,
// question_score,
isNew } = this.props;
// const { getFieldDecorator } = this.props.form;
const isAdmin = this.props.isAdmin()
const courseId=this.props.match.params.coursesId;
const isEdit = !!this.props.question_id
const qNumber = `question_${index}`;
// const answerTagArray = standard_answers.map((item, index) => { return item == true ? tagArray[index] : -1 }).filter(item => item != -1);
return(
<div className="padding20-30 bor-bottom-greyE" id={qNumber}>
<style>{`
.optionMdEditor {
flex: 0 0 800px
}
.optionRow {
margin: 2px;
}
`}</style>
<p className="mb10 clearfix">
{/*!question_id ? '新建' : '编辑'*/}
<span className="color-blue font-16 mr20 fl">{qNameArray[question_type]}</span>
<span className="color-grey-9 font-12 fl">主观题未作答的情况下自动评为零分</span>
</p>
<TPMMDEditor mdID={`question_${question_id}`} placeholder="请您输入题目" height={155} watch={false}
initValue={question_title} onChange={(val) => this.setState({ question_title: val})}
noStorage={true} ref="titleEditor"
></TPMMDEditor>
<div>
<div className="mb10 font-16">参考答案</div>
<TPMMDEditor mdID={`question_answer_${question_id}`} placeholder="请输入参考答案(可选)" height={155} watch={false}
initValue={standard_answers[0] || ''} onChange={(val) => this.setState({ standard_answers: [val]})}
noStorage={true}
></TPMMDEditor>
{/* <div style={{color: '#999999' }}>温馨提示:[简答题]参考答案仅作为人工评分的参考</div> */}
</div>
<div className="mt10">
分值
<InputNumber step={0.1} precision={1} min={0.1} max={100} style={{width: 100}} value={question_score} onChange={this.on_question_score_change}
disabled={exerciseIsPublish}
></InputNumber>
<span className="fr">
<ActionBtn style="greyBack" className="middle mr20" onClick={this.onCancel}
>取消</ActionBtn>
<ActionBtn style="blue" className="middle" onClick={this.onSave}>保存</ActionBtn>
</span>
</div>
</div>
)
}
}
// RouteHOC()
export default (MainEditor);