import React from 'react'; import { Form, Input, Tabs, Row, Col, Button, List, Icon, Checkbox } from 'antd'; import './index.less'; import DragList from '@src/components/DragList'; import Editor from '@src/components/Editor'; import Page from '@src/containers/Page'; import Block from '@src/components/Block'; import Select from '@src/components/Select'; // import FileUpload from '@src/components/FileUpload'; import { formatDate, formatFormError, generateSearch, getMap } from '@src/services/Tools'; import { asyncSMessage } from '@src/services/AsyncTools'; import { TextbookType, QuestionStyleType } from '../../../../Constant'; import { Textbook } from '../../../stores/textbook'; import { System } from '../../../stores/system'; import config from './index'; const QuestionStyleTypeMap = getMap(QuestionStyleType, 'value', 'label'); export default class extends Page { constructor(props) { super(props); this.placeList = []; this.placeSetting = null; this.uuid = []; const { id } = this.params; if (id) { config.title = '编辑机经题目'; } else { config.title = '添加机经题目'; } } init() { } initData() { const { id } = this.params; const { form } = this.props; let handler; if (id) { handler = Textbook.getQuestion({ id }); } else { let { libraryId } = this.state.search; libraryId = Number(libraryId || 0); handler = Textbook.getNextQuestion({ libraryId }).then(result => { return { libraryId: libraryId || '', no: result, question: { content: { number: 1, type: 'single', typeset: 'one', questions: [] } } }; }); } handler .then(result => { const { questionNoIds } = result; // result.time = [result.startTime, result.endTime]; this.uuid[0] = -1; let type = result.question.content.type || 'single'; if (type === 'inline') type = 'single'; result.question.content.questions.forEach((row, index) => { const keys = []; this.uuid[index] = 0; if (row.select && row.select.length > 0) { for (; this.uuid[index] < row.select.length; this.uuid[index] += 1) { keys.push(this.uuid[index]); form.getFieldDecorator(`question.content.questions[${index}].select[${this.uuid}]`); form.getFieldDecorator(`question.answer.questions[${index}].${type}[${this.uuid}]`); } } form.getFieldDecorator(`question.content.questions[${index}].keys`); row.keys = keys; return row; }); form.getFieldDecorator('question.content.number'); form.getFieldDecorator('question.content.type'); form.getFieldDecorator('question.content.typeset'); form.getFieldDecorator('question.stem'); form.getFieldDecorator('question.questionType'); form.getFieldDecorator('question.qxContent'); form.getFieldDecorator('question.place'); form.getFieldDecorator('question.id'); form.getFieldDecorator('questionId'); form.getFieldDecorator('libraryId'); form.getFieldDecorator('title'); form.getFieldDecorator('no'); form.getFieldDecorator('id'); form.setFieldsValue(result); generateSearch('libraryId', {}, this, (search) => { return Textbook.listLibrary(search); }, (row) => { return { title: `${formatDate(row.startDate, 'YYYY-MM-DD')} - ${row.endDate ? formatDate(row.endDate, 'YYYY-MM-DD') : '至今'}`, value: row.id, }; }, result.libraryId, null); this.setState({ questionNoIds }); }); } refreshPlace(type) { let handler = null; if (this.placeSetting) { handler = Promise.resolve(this.placeSetting); } else { handler = System.getPlace(); } return handler.then(result => { this.placeSetting = result; this.placeList = result[type] || []; this.setState({ placeList: this.placeList }); }); } refreshNo(libraryId) { return Textbook.getNextQuestion({ libraryId }).then(result => { this.props.form.setFieldsValue({ no: result }); }); } removeQuestion(index, k) { const { form } = this.props; const keys = form.getFieldValue(`question.content.questions[${index}].keys`); if (keys.length === 1) { return; } form.setFieldsValue({ [`question.content.questions[${index}].keys`]: keys.filter(key => key !== k), }); } addQuestion(index) { const { form } = this.props; const keys = form.getFieldValue(`question.content.questions[${index}].keys`) || []; if (!this.uuid[index]) { this.uuid[index] = 1; } else { this.uuid[index] += 1; } const nextKeys = keys.concat(this.uuid[index]); form.setFieldsValue({ [`question.content.questions[${index}].keys`]: nextKeys, }); } orderQuestion(index, oldIndex, newIndex) { const { form } = this.props; const keys = form.getFieldValue(`question.content.questions[${index}].keys`) || []; const tmp = keys[oldIndex]; keys[oldIndex] = keys[newIndex]; keys[newIndex] = tmp; form.setFieldsValue({ [`question.content.questions[${index}].keys`]: keys, }); } changeQuestion(index, k, value) { const { form } = this.props; let answer = form.getFieldValue(`question.answer.questions[${index}].single`) || []; answer = answer.map(() => !value); answer[k] = !!value; form.setFieldsValue({ [`question.answer.questions[${index}].single`]: answer }); } submit() { const { form } = this.props; form.validateFields((err) => { if (!err) { const data = form.getFieldsValue(); // [data.startTime, data.endTime] = data.time; let handler; if (!data.id) { handler = Textbook.addQuestion(data); } else { handler = Textbook.editQuestion(data); } handler.then((result) => { asyncSMessage('保存成功'); if (data.id) { linkTo(`/subject/textbook/question/${data.id}`); } else { linkTo(`/subject/textbook/question/${result.id}`); } }).catch((e) => { if (e.result) form.setFields(formatFormError(data, e.result)); else asyncSMessage(e.message, 'error'); }); } }); } renderAttr() { const { id } = this.params; const { getFieldDecorator } = this.props.form; return

基本信息

{getFieldDecorator('id')()} {getFieldDecorator('question.questionType', { rules: [ { required: true, message: '请选择题型' }, ], })( { this.refreshNo(v); }} />, )} {getFieldDecorator('no')( , )} {getFieldDecorator('question.place', { rules: [ { required: true, message: '请选择考点' }, ], })( )} {getFieldDecorator('question.stem', { })( System.uploadImage(file)} />, )} {getFieldDecorator('question.content.type')()} {getFieldDecorator('question.content.number')()} {getFieldDecorator('question.content.typeset')()}
; } renderSelect() { const { getFieldDecorator, getFieldValue } = this.props.form; const number = getFieldValue('question.content.number'); const type = getFieldValue('question.content.type'); const result = []; let handler = null; switch (type) { case 'single': handler = (index) => this.renderSelectSingle(index); break; default: } for (let index = 0; index < Number(number); index += 1) { result.push(

选项信息({QuestionStyleTypeMap[type]})

{type !== 'inline' && ( {getFieldDecorator(`question.content.questions[${index}].description`, { })( System.uploadImage(file)} />, )} )} {handler(index)}
); } return result; } renderSelectSingle(index) { const { getFieldDecorator, getFieldValue } = this.props.form; getFieldDecorator(`question.content.questions[${index}].keys`); const keys = getFieldValue(`question.content.questions[${index}].keys`) || []; return [ { this.orderQuestion(index, oldIndex, newIndex); }} renderItem={(k) => ( ]}> {getFieldDecorator(`question.answer.questions[${index}].single[${k}]`, { valuePropName: 'checked', })( { this.changeQuestion(index, k, value); }} />, )} )} />, , ]; } renderQX() { const { getFieldDecorator } = this.props.form; return
{getFieldDecorator('question.qxContent', { })( System.uploadImage(file)} />, )}
; } renderTab() { return { switch (tab) { case 'sentence': linkTo('/subject/sentence/question'); break; case 'base': linkTo('/subject/question'); break; default: } }}> ; } renderView() { return
{this.renderTab()} {this.renderAttr()} {this.renderBase()} {this.renderSelect()} {this.renderQX()}
; } }