diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6d5688078..2770a3739 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -33,6 +33,12 @@ module ApplicationHelper Base64.urlsafe_encode64(content) end + # 替换换行和tab键 + def regexp_msg content + return nil if content.blank? + content.gsub(/\n/, '
').gsub(/\t/, " \; \; \; \; \; \; \; \;") + end + def graduation_navigation graduation graduation.class.to_s == "GraduationTopic" ? "毕设选题" : "毕设任务" end diff --git a/app/views/hack_user_lastest_codes/record_detail.json.jbuilder b/app/views/hack_user_lastest_codes/record_detail.json.jbuilder index d05b6d799..f6e4d5bd1 100644 --- a/app/views/hack_user_lastest_codes/record_detail.json.jbuilder +++ b/app/views/hack_user_lastest_codes/record_detail.json.jbuilder @@ -1,7 +1,7 @@ json.status 0 json.message "返回成功" json.data do - json.(@hack_user, :id, :status, :error_line, :error_msg, :expected_output, + json.(@hack_user, :id, :status, :error_line, :expected_output, :error_msg, :input, :output, :execute_time, :execute_memory, :created_at, :code) json.language @hack_user.language json.name @hack_user.hack.name diff --git a/public/react/package-lock.json b/public/react/package-lock.json index ce3ac05c7..7bd937b8b 100644 --- a/public/react/package-lock.json +++ b/public/react/package-lock.json @@ -15012,6 +15012,18 @@ } } }, + "react-zmage": { + "version": "0.8.5-beta.31", + "resolved": "https://registry.npm.taobao.org/react-zmage/download/react-zmage-0.8.5-beta.31.tgz", + "integrity": "sha1-kc+7Hs+Y0fYFEdDFfZEt4K+53ZY=", + "requires": { + "classnames": "^2.2.6", + "lodash.memoize": "^4.1.2", + "prop-types": "^15.6.2", + "react": "^16.6.3", + "react-dom": "^16.6.3" + } + }, "read-pkg": { "version": "1.1.0", "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", diff --git a/public/react/src/App.js b/public/react/src/App.js index 7fc302e9f..512f60e21 100644 --- a/public/react/src/App.js +++ b/public/react/src/App.js @@ -439,7 +439,7 @@ class App extends Component { window.addEventListener('error', (event) => { const msg = `${event.type}: ${event.message}`; - console.log(msg) + // console.log(msg) }); } //修改登录方法 diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index c630abf7e..df3ad315b 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -46,7 +46,7 @@ debugType = "admin"; // 老师 // debugType="teacher"; // 学生 -//debugType="student"; +debugType="student"; diff --git a/public/react/src/common/TextUtil.js b/public/react/src/common/TextUtil.js index 4c445dcbf..8360881e9 100644 --- a/public/react/src/common/TextUtil.js +++ b/public/react/src/common/TextUtil.js @@ -6,39 +6,44 @@ export function isImageExtension(fileName) { } export function markdownToHTML(oldContent, selector) { - window.$('#md_div').html('') - // markdown to html - if (selector && oldContent && oldContent.startsWith(' { if (item.name.indexOf(uploadNameSizeSeperator) == -1) { return Object.assign({}, item, {name: `${item.name}${uploadNameSizeSeperator}${bytesToSize(item.size)}`}) - } + } return item - }) + }) } export const uploadNameSizeSeperator = '  ' -export const sortDirections = ["ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", - "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", - "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", +export const sortDirections = ["ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", + "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", + "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", "ascend", "descend", ] \ No newline at end of file diff --git a/public/react/src/common/educoder.js b/public/react/src/common/educoder.js index c990b5dea..d8194d7f1 100644 --- a/public/react/src/common/educoder.js +++ b/public/react/src/common/educoder.js @@ -59,6 +59,8 @@ export { default as ActionBtn } from './course/ActionBtn' export { default as MarkdownToHtml } from './components/markdown/MarkdownToHtml' +export { default as QuillForEditor } from './quillForEditor' + export { default as DMDEditor } from './components/markdown/DMDEditor' export { default as Clappr } from './components/media/Clappr' diff --git a/public/react/src/modules/courses/Video/video-play/index.jsx b/public/react/src/modules/courses/Video/video-play/index.jsx index 3556d4a05..93d04b245 100644 --- a/public/react/src/modules/courses/Video/video-play/index.jsx +++ b/public/react/src/modules/courses/Video/video-play/index.jsx @@ -28,7 +28,6 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => { const suf = src.split('.').pop() const isFlv = suf === 'flv' const el = useRef() - const deviceMatch = navigator.userAgent.toLowerCase().match(regex) const device = deviceMatch ? deviceMatch[0] : 'pc' diff --git a/public/react/src/modules/courses/exercise/ExerciseDisplay.js b/public/react/src/modules/courses/exercise/ExerciseDisplay.js index 42702e9cb..589bbb6f0 100644 --- a/public/react/src/modules/courses/exercise/ExerciseDisplay.js +++ b/public/react/src/modules/courses/exercise/ExerciseDisplay.js @@ -1,30 +1,14 @@ 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 axios from 'axios' -import {getUrl, ActionBtn, markdownToHTML} from 'educoder'; - import SingleDisplay from './new/SingleDisplay' import JudgeDisplay from './new/JudgeDisplay' import NullDisplay from './new/NullDisplay' import MainDisplay from './new/MainDisplay' import ShixunDisplay from './new/ShixunDisplay' +import ShixunProgramming from './new/ShixunProgramming' import './new/common.css' -const { TextArea } = Input; -const confirm = Modal.confirm; -const $ = window.$ -const { Option } = Select; -const tagArray = [ - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', - 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', - 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' -] class ExerciseDisplay extends Component{ constructor(props){ @@ -51,7 +35,7 @@ class ExerciseDisplay extends Component{ } } componentDidMount = () => { - const Id = this.props.match.params.Id + const Id = this.props.match.params.Id if (Id) { const url = `/${this.props.urlPath || 'exercises'}/${Id}.json` axios.get(url) @@ -87,20 +71,7 @@ class ExerciseDisplay extends Component{ } } render() { - // let { question_title, question_score, question_type, question_choices, standard_answer, - // question_id, question_number, index, displayCount, - // multi_count - // } = this.props; const { exercise_questions,exercise,exercise_types} = this.state; - - // // const { getFieldDecorator } = this.props.form; - - // const isAdmin = this.props.isAdmin() - // const courseId=this.props.match.params.coursesId; - // const isEdit = this.isEdit - // const qNumber = `question_${index}`; - // let length = 5; - // const qName = qNameArray[question_type] const commonHandler = {} return( @@ -153,42 +124,48 @@ class ExerciseDisplay extends Component{ { exercise_questions.map((item, index) => { if (item.question_type == 0 || item.question_type == 1) { - - - return - + } else if (item.question_type == 2) { - - - return - + } else if (item.question_type == 3) { - - - return - + } else if (item.question_type == 4) { - - - return - + } else if (item.question_type == 5) { - - + + return - + + }else if (item.question_type == 6) { + + return + }else{ + return
} - return
+ })} ) diff --git a/public/react/src/modules/courses/exercise/ExerciseNew.js b/public/react/src/modules/courses/exercise/ExerciseNew.js index 07bd1467c..f5b60cfd4 100644 --- a/public/react/src/modules/courses/exercise/ExerciseNew.js +++ b/public/react/src/modules/courses/exercise/ExerciseNew.js @@ -1,94 +1,56 @@ -import React,{ Component } from "react"; +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 axios from 'axios' -// import './board.css' -// import "../common/formCommon.css" +import { CBreadcrumb } from 'educoder'; -// import { RouteHOC } from './common.js' - -// import { Q_TYPE_SINGLE, Q_TYPE_MULTI, Q_TYPE_JUDGE, Q_TYPE_NULL, Q_TYPE_MAIN, Q_TYPE_SHIXUN } from './new/common' -// import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor'; -// import CBreadcrumb from '../common/CBreadcrumb' -import {getUrl, ActionBtn, CBreadcrumb} from 'educoder'; - -// import SingleEditor from './new/SingleEditor' -// import SingleDisplay from './new/SingleDisplay' -// import JudgeEditor from './new/JudgeEditor' -// import JudgeDisplay from './new/JudgeDisplay' -// import NullEditor from './new/NullEditor' -// import NullDisplay from './new/NullDisplay' -// import MainEditor from './new/MainEditor' -// import MainDisplay from './new/MainDisplay' -// import ShixunEditor from './new/ShixunEditor' -// import ShixunDisplay from './new/ShixunDisplay' - -import update from 'immutability-helper' import './new/common.css' import '../css/Courses.css' import ExerciseNewCommon from './ExerciseNewCommon' -const { TextArea } = Input; -class ExerciceNew extends Component{ - constructor(props){ +class ExerciceNew extends Component { + constructor(props) { super(props); - - this.state = { - + left_banner_id: null } - } - componentDidMount = () => { - } initData = (data) => { - this.setState({left_banner_id: data.left_banner_id}) + this.setState({ left_banner_id: data.left_banner_id }) + } + componentDidMount() { + document.title = this.props.coursedata && this.props.coursedata.name; } render() { - let { left_banner_id } = this.state; - - + let { left_banner_id } = this.state; const { current_user } = this.props - - const courseId=this.props.match.params.coursesId; - - const isEdit = this.isEdit; - - document.title=this.props.coursedata&&this.props.coursedata.name; - return( -
- -
- { current_user && } - -

- {this.isEdit ? "编辑" : "新建"}试卷 - this.props.history.length == 1 ? : this.props.history.goBack() - onClick={() => this.props.history.push(`/classrooms/${courseId}/exercises/${left_banner_id}`)}> - 返回 + const courseId = this.props.match.params.coursesId; + return ( +

+ +
+ {current_user && } + +

+ {this.isEdit ? "编辑" : "新建"}试卷 + this.props.history.push(`/classrooms/${courseId}/exercises/${left_banner_id}`)}> + 返回 -

- - -
+

+ +
- ) - } +
+ ) + } } -// RouteHOC() -export default (ExerciceNew); +export default ExerciceNew; diff --git a/public/react/src/modules/courses/exercise/ExerciseNewCommon.js b/public/react/src/modules/courses/exercise/ExerciseNewCommon.js index 0f61b9942..677a09f8f 100644 --- a/public/react/src/modules/courses/exercise/ExerciseNewCommon.js +++ b/public/react/src/modules/courses/exercise/ExerciseNewCommon.js @@ -1,19 +1,10 @@ -import React,{ Component } from "react"; +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 { Q_TYPE_SINGLE, Q_TYPE_MULTI, Q_TYPE_JUDGE, Q_TYPE_NULL, Q_TYPE_MAIN, Q_TYPE_SHIXUN } from './new/common' -import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor'; +import { Tooltip } from 'antd' +import { Q_TYPE_SINGLE, Q_TYPE_MULTI, Q_TYPE_JUDGE, Q_TYPE_NULL, Q_TYPE_MAIN, Q_TYPE_SHIXUN } from './new/common' import axios from 'axios' -// import './board.css' import "../common/formCommon.css" - -// import { RouteHOC } from './common.js' -import CBreadcrumb from '../common/CBreadcrumb' -import {getUrl, ActionBtn} from 'educoder'; +import { ActionBtn } from 'educoder'; import SingleEditor from './new/SingleEditor' import SingleDisplay from './new/SingleDisplay' @@ -27,22 +18,20 @@ import ShixunEditor from './new/ShixunEditor' import ShixunDisplay from './new/ShixunDisplay' import ShixunChooseModal from '../coursesPublic/ShixunChooseModal' +import ExerciseForm from './exercise-new-form' + import update from 'immutability-helper' import './new/common.css' import '../css/Courses.css' -const { TextArea } = Input; -const confirm = Modal.confirm; const $ = window.$ -const { Option } = Select; -const TITLE_MAX_LENGTH = 60; -class ExerciseNewCommon extends Component{ - constructor(props){ +class ExerciseNewCommon extends Component { + constructor(props) { super(props); - this.state = { exercise_questions: [], exercise_name: '', + is_md: false, exercise_description: '', exercise_types: {}, editMode: !this.props.match.params.Id, @@ -50,30 +39,30 @@ class ExerciseNewCommon extends Component{ } // 已发布试卷编辑保存的确认弹框 - changeScore = (question_id,answerArray) =>{ + changeScore = (question_id, answerArray) => { this.props.confirm({ - content:'修改了标准答案', - subContent:"是否重新计算学生答题的成绩?", - onOk:()=>{ - this.sureChangeScore(question_id,answerArray) + content: '修改了标准答案', + subContent: "是否重新计算学生答题的成绩?", + onOk: () => { + this.sureChangeScore(question_id, answerArray) }, - onCancel:()=>{ + onCancel: () => { this.addSuccess(); } }) } // 已发布试卷修改答案确认修改分数 - sureChangeScore = (question_id,answerArray) =>{ - let url=`/exercise_questions/${question_id}/update_scores.json` - axios.post((url),{ - standard_answers:answerArray - }).then((result)=>{ - if(result){ + sureChangeScore = (question_id, answerArray) => { + let url = `/exercise_questions/${question_id}/update_scores.json` + axios.post((url), { + standard_answers: answerArray + }).then((result) => { + if (result) { this.props.showNotification(`${result.data.message}`); this.addSuccess(); } - }).catch((error)=>{ + }).catch((error) => { console.log(error); }) } @@ -82,7 +71,7 @@ class ExerciseNewCommon extends Component{ const Id = this.props.match.params.Id this.isEdit = this.props.isEdit || !!Id if (this.isEdit) { - const url = this.props.exercise_url ? `/${this.props.exercise_url }/${Id}.json` : `/exercises/${Id}/edit.json` + const url = this.props.exercise_url ? `/${this.props.exercise_url}/${Id}.json` : `/exercises/${Id}/edit.json` axios.get(url) .then((response) => { if (response.data.exercise) { @@ -101,7 +90,7 @@ class ExerciseNewCommon extends Component{ console.log(error); }); } else { - const courseId=this.props.match.params.coursesId; + const courseId = this.props.match.params.coursesId; const newUrl = `/courses/${courseId}/exercises/new.json` axios.get(newUrl) @@ -120,63 +109,54 @@ class ExerciseNewCommon extends Component{ componentDidMount = () => { this.fetchExercise() } - // handleSubmit = (e) => { - // - // } - onSaveExercise = () => { - const { exercise_name, exercise_description } = this.state; + + onSaveExercise = (data) => { const exercise_id = this.props.match.params.Id const courseId = this.props.match.params.coursesId + if (this.isEdit) { - // /exercise_banks/:id.json const editUrl = `/${this.props.exercise_url ? this.props.exercise_url : 'exercises'}/${exercise_id}.json` - axios.put(editUrl, { - exercise_name, - exercise_description - }) + axios.put(editUrl, { ...data }) .then((response) => { if (response.data.status == 0) { - this.setState({editMode: false}) + this.setState({ ...data, editMode: false }) this.props.showNotification('试卷编辑成功') } }) .catch(function (error) { - console.log(error); + console.log(error); }); } else { const url = `/courses/${courseId}/exercises.json` axios.post(url, { - exercise_name, - exercise_description + ...data }) .then((response) => { if (response.data.status == 0) { - this.setState({editMode: false}) - - this.props.showNotification('试卷新建成功') - const exercise_id = response.data.data.exercise_id; - this.isEdit = true; - - this.props.history.replace(`/classrooms/${courseId}/exercises/${exercise_id}/edit`); + this.setState({ ...data, editMode: false }) + this.props.showNotification('试卷新建成功') + const exercise_id = response.data.data.exercise_id; + this.isEdit = true; + this.props.history.replace(`/classrooms/${courseId}/exercises/${exercise_id}/edit`); } }) .catch(function (error) { - console.log(error); + console.log(error); }); } } exercise_name_change = (e) => { - this.setState({exercise_name: e.target.value}) + this.setState({ exercise_name: e.target.value }) } exercise_description_change = (e) => { - this.setState({exercise_description: e.target.value}) + this.setState({ exercise_description: e.target.value }) } // #问题的类型,0为单选题,1为多选题,2为判断题,3为填空题,4为主观题,5为实训题 _checkIsEditing = () => { - if (this.editingId && $(this.editingId).length ) { + if (this.editingId && $(this.editingId).length) { this.props.showNotification('请先保存或取消当前正在编辑的问题。') - $("html").animate({ scrollTop: $(this.editingId).offset().top - 100}) + $("html").animate({ scrollTop: $(this.editingId).offset().top - 100 }) return true } return false @@ -186,7 +166,7 @@ class ExerciseNewCommon extends Component{ // 找到编辑或新建的item,新建就删掉item,编辑就isNew改为false const { exercise_questions } = this.state let index = -1; - for(let i = 0; i < exercise_questions.length; i++) { + for (let i = 0; i < exercise_questions.length; i++) { if (exercise_questions[i].isNew == true) { index = i; break; @@ -195,14 +175,14 @@ class ExerciseNewCommon extends Component{ if (exercise_questions[index].question_id) { // 编辑 this.setState( (prevState) => ({ - exercise_questions : update(prevState.exercise_questions, {[index]: { isNew: {$set: false}}}) + exercise_questions: update(prevState.exercise_questions, { [index]: { isNew: { $set: false } } }) // update(prevState.exercise_questions, {$splice: [[index, 1]]}) }) ) } else { // 新建 this.setState( (prevState) => ({ - exercise_questions : update(prevState.exercise_questions, {$splice: [[index, 1]]}) + exercise_questions: update(prevState.exercise_questions, { $splice: [[index, 1]] }) }) ) } @@ -241,10 +221,6 @@ class ExerciseNewCommon extends Component{ this.refs.shixunChooseModal.setVisible(true) this.question_id_to_insert_after = question_id_to_insert_after; return; - // 拉取实训items - this.addEditingQuestion(Q_TYPE_SHIXUN, question_id_to_insert_after, { - shixun_id: 50 - }) } editQestion = (index) => { if (this._checkIsEditing()) { @@ -254,7 +230,7 @@ class ExerciseNewCommon extends Component{ this.setState( (prevState) => ({ - exercise_questions : update(prevState.exercise_questions, {[index]: { isNew: {$set: true}}}) + exercise_questions: update(prevState.exercise_questions, { [index]: { isNew: { $set: true } } }) }) ) } @@ -264,16 +240,16 @@ class ExerciseNewCommon extends Component{ } const url = `/${this.props.exercise_url_questions || 'exercise_questions'}/${question_id}/up_down.json` - axios.post(url, { opr: isUp ? 'up' : 'down'}) - .then((response) => { - if (response.data.status == 0) { - // this.props.showNotification('移动成功') - this.fetchExercise() - } - }) - .catch(function (error) { - console.log(error); - }); + axios.post(url, { opr: isUp ? 'up' : 'down' }) + .then((response) => { + if (response.data.status == 0) { + // this.props.showNotification('移动成功') + this.fetchExercise() + } + }) + .catch(function (error) { + console.log(error); + }); } onSortDown = (index, question_id) => { this.onSort(index, question_id, false) @@ -304,7 +280,7 @@ class ExerciseNewCommon extends Component{ } const _indexBefore = question_id_to_insert_after ? this.findIndexById(question_id_to_insert_after) : this.state.exercise_questions.length - 1 for (let i = _indexBefore; i >= 0; i--) { - if(this.state.exercise_questions[i].question_type == question_type) { + if (this.state.exercise_questions[i].question_type == question_type) { init_question_score = this.state.exercise_questions[i].question_score break; } @@ -315,7 +291,7 @@ class ExerciseNewCommon extends Component{ let init_question_score = this.getInitScore(question_type, question_id_to_insert_after) - let questionObj = { + let questionObj = { question_type: question_type, // 需要这个通过类型判断 init_question_score: init_question_score, isNew: true, // 新建或编辑,用是否有id区分是新建还是编辑 @@ -336,13 +312,13 @@ class ExerciseNewCommon extends Component{ this.editingId = `#question_${newIndex}` this.setState({ exercise_questions: new_exercise_questions }, () => { setTimeout(() => { - $(this.editingId).length && $("html").animate({ scrollTop: $(this.editingId).offset().top - 100}) + $(this.editingId).length && $("html").animate({ scrollTop: $(this.editingId).offset().top - 100 }) }, 500) }) } findIndexById = (id) => { const { exercise_questions } = this.state - for(let i = 0; i < exercise_questions.length; i++) { + for (let i = 0; i < exercise_questions.length; i++) { if (exercise_questions[i].question_id == id) { return i; } @@ -354,24 +330,15 @@ class ExerciseNewCommon extends Component{ onOk: () => { const url = `/${this.props.exercise_url_questions || 'exercise_questions'}/${question_id}.json` axios.delete(url) - .then((response) => { - if (response.data.status == 0) { - this.props.showNotification('删除成功') - this.fetchExercise() - - // const { exercise_questions } = this.state - // const index = this.findIndexById(question_id) - - // this.setState( - // (prevState) => ({ - // exercise_questions : update(prevState.exercise_questions, {$splice: [[index, 1]]}) - // }) - // ) - } - }) - .catch(function (error) { - console.log(error); - }); + .then((response) => { + if (response.data.status == 0) { + this.props.showNotification('删除成功') + this.fetchExercise() + } + }) + .catch(function (error) { + console.log(error); + }); } }) } @@ -393,40 +360,33 @@ class ExerciseNewCommon extends Component{ const editUrl = this.props.exercise_url_questions ? `/${this.props.exercise_url_questions}/${question_id}.json` : `/exercise_questions/${question_id}.json` return editUrl; } + onCancel = () => { + this.setState({ + editMode: false + }) + } render() { - let { exercise_name, exercise_description, course_id, exercise_types, - exercise_questions, left_banner_id } = this.state; - // if (this.isEdit && !exercise_types) { - // return '' - // } - // const { getFieldDecorator } = this.props.form; + let { exercise_name, exercise_description, exercise_types, exercise_questions, is_md } = this.state; const { q_counts, q_scores, q_doubles, q_doubles_scores, q_judges, q_judges_scores, - q_mains, q_mains_scores, q_nulls, q_nulls_scores, q_shixuns, q_shixuns_scores, q_singles, q_singles_scores} = exercise_types; - const formItemLayout = { - labelCol: { - xs: { span: 24 }, - // sm: { span: 8 }, - sm: { span: 24 }, - }, - wrapperCol: { - xs: { span: 24 }, - // sm: { span: 16 }, - sm: { span: 24 }, - }, - }; + q_mains, q_mains_scores, q_nulls, q_nulls_scores, q_shixuns, q_shixuns_scores, q_singles, q_singles_scores } = exercise_types; + + const exerciseFormOpt = { + exercise_name, + exercise_description, + is_md, + onCancel: this.onCancel, + isEdit: this.isEdit, + onSaveHandler: this.onSaveExercise + } - const { current_user } = this.props - const isAdmin = this.props.isAdmin() - const courseId=this.props.match.params.coursesId; const exercise_id = this.props.match.params.Id - const isEdit = this.isEdit const commonHandler = { onQestionDelete: this.onQestionDelete, addSuccess: this.addSuccess, addQuestion: this.addQuestion, onEditorCancel: this.onEditorCancel, - changeScore:this.changeScore, + changeScore: this.changeScore, editQestion: this.editQestion, onSortDown: this.onSortDown, onSortUp: this.onSortUp, @@ -438,16 +398,18 @@ class ExerciseNewCommon extends Component{ getEditQuestionUrl: this.getEditQuestionUrl, exercise_url: this.props.exercise_url, } - return( - - - - {!this.state.editMode &&
-
- {exercise_name} - { this.setState({editMode: true}) }} style={{ lineHeight: '32px'}}> - - -
-
- -
} - {this.state.editMode &&
-
- - {/* {getFieldDecorator('subject', { - rules: [{ - required: true, message: '请输入标题', - }, { - max: 20, message: '最大限制为20个字符', - }], - })( */} - - - {/* )} */} - - - - {/* {getFieldDecorator('select_board_id', { - // initialValue: '3779', - })( */} -