import React from 'react'; import { Form, Input, Tabs, Row, Col, Button, DatePicker, 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 { formatFormError, generateSearch, getMap } from '@src/services/Tools'; import { asyncSMessage } from '@src/services/AsyncTools'; import { TextbookType, QuestionStyleType } from '../../../../Constant'; import { Preview } from '../../../stores/preview'; 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 = '添加机经题目'; } } initData() { const { id } = this.params; const { form } = this.props; let handler; if (id) { handler = Preview.get({ id }); } else { handler = Promise.resolve({ question: { content: { number: 1, type: 'single', typeset: 'one', questions: [], steps: [] } } }); } handler .then(result => { const { questionNoIds } = result; result.time = [result.startTime, result.endTime]; this.uuid[0] = -1; 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.content.questions[${index}].answer[${this.uuid}]`); } const answerMap = {}; row.answer.forEach(r => { answerMap[r] = true; }); row.answer = row.select.map(r => answerMap[r] || false); } else if (row.answer && row.answer.length > 0) { for (; this.uuid[index] < row.answer.length; this.uuid[index] += 1) { keys.push(this.uuid); form.getFieldDecorator(`question.content.questions[${index}].answer[${this.uuid}]`); } } form.getFieldDecorator(`question.content.questions[${index}].keys`); row.keys = keys; return row; }); result.question.content.steps.forEach((row, index) => { form.getFieldDecorator(`question.content.steps[${index}].title`); form.getFieldDecorator(`question.content.steps[${index}].stem`); }); form.getFieldDecorator('question.content.step'); form.getFieldDecorator('question.content.number'); form.getFieldDecorator('question.content.type'); form.getFieldDecorator('question.content.typeset'); form.setFieldsValue(result); generateSearch('setId', {}, this, (search) => { return System.listRank(search); }, (row) => { return { title: row.title, value: row.id, }; }, result.setId, null); this.setState({ questionNoIds }); }); } refreshPlace(type) { let handler = null; if (this.placeSetting) { handler = Promise.resolve(this.placeSetting); } else { handler = System.getPlace(); } handler.then(result => { this.placeSetting = result; this.placeList = result[type] || []; }); } 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`) || []; 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.content.answer[${index}].single`) || []; answer = answer.map(() => !value); answer[k] = !!value; form.setFieldsValue({ [`question.content.answer[${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.editQuestion(data); } else { handler = Textbook.addQuestion(data); } handler.then(() => { asyncSMessage('保存成功'); }).catch((e) => { if (e.result) form.setFields(formatFormError(data, e.result)); }); } }); } renderAttr() { const { getFieldDecorator } = this.props.form; return

基本信息

{getFieldDecorator('id')()} {getFieldDecorator('time', { rules: [ { required: true, message: '请输入起止时间' }, ], })( , )} {getFieldDecorator('setId', { rules: [ { required: true, message: '请选择换库表' }, ], })( { this.refreshPlace(v); }} />, )} {getFieldDecorator('question.place', { rules: [ { required: true, message: '请选择考点' }, ], })( , )}
; } renderBase() { const { getFieldDecorator } = this.props.form; return

题干信息

{getFieldDecorator('question.id')()} {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`, { })( , )} )} {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('qxContent', { })( , )}
; } 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()}
; } }