123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- import React from 'react';
- import { Form, Input, Button, Row, Col, DatePicker } from 'antd';
- import './index.less';
- 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 } from '@src/services/Tools';
- import { asyncSMessage } from '@src/services/AsyncTools';
- // import { PreviewMode } from '../../../../Constant';
- import QuestionNoList from '../../../components/QuestionNoList';
- import { Preview } from '../../../stores/preview';
- import { User } from '../../../stores/user';
- // import { Question } from '../../../stores/question';
- import { Exercise } from '../../../stores/exercise';
- import config from './index';
- export default class extends Page {
- constructor(props) {
- super(props);
- const { id } = this.params;
- if (id) {
- config.title = '编辑预习作业';
- } else {
- config.title = '添加预习作业';
- }
- }
- init() {
- Exercise.allStruct().then(result => {
- result = result.filter(row => row.level === 2).map(row => { row.title = `${row.titleZh}/${row.titleEn}`; row.value = row.id; return row; });
- this.setState({ exercise: result });
- });
- }
- initData() {
- const { id } = this.params;
- const { form } = this.props;
- let handler;
- if (id) {
- handler = Preview.get({ id });
- } else {
- handler = Promise.resolve({ questionNoIds: [] });
- }
- handler
- .then(result => {
- const { questionNoIds } = result;
- result.time = [result.startTime, result.endTime];
- form.setFieldsValue(result);
- generateSearch('userIds', { mode: 'multiple' }, this, (search) => {
- return User.list(search);
- }, (row) => {
- return {
- title: `${row.nickname}(${row.mobile})`,
- value: row.id,
- };
- }, result.userIds, null);
- this.setState({ questionNoIds });
- });
- }
- submit() {
- const { form } = this.props;
- form.validateFields((err) => {
- if (!err) {
- const data = form.getFieldsValue();
- [data.startTime, data.endTime] = data.time;
- let handler;
- data.questionNoIds = this.state.questionNos.map(row => row.id);
- if (!data.id) {
- handler = Preview.add(data);
- } else {
- handler = Preview.edit(data);
- }
- handler.then(() => {
- asyncSMessage('保存成功');
- }).catch((e) => {
- if (e.result) form.setFields(formatFormError(data, e.result));
- });
- }
- });
- }
- deleteQuestion(index) {
- const { questionNos } = this.state;
- questionNos.splice(index, 1);
- this.setState({ questionNos });
- this.props.form.setFieldsValue({ questionNos: questionNos.map(row => row.no) });
- }
- orderQuestion(oldIndex, newIndex) {
- const { questionNos } = this.state;
- const tmp = questionNos[oldIndex];
- questionNos[oldIndex] = questionNos[newIndex];
- questionNos[newIndex] = tmp;
- this.setState({ questionNos });
- this.props.form.setFieldsValue({ questionNos: questionNos.map(row => row.no) });
- }
- renderBase() {
- const { getFieldDecorator } = this.props.form;
- return <Block>
- <Form>
- {getFieldDecorator('id')(<input hidden />)}
- <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='选择课程'>
- {getFieldDecorator('category', {
- rules: [
- { required: true, message: '请选择课程' },
- ],
- })(
- <Select select={this.state.exercise} placeholder='请选择课程' />,
- )}
- </Form.Item>
- <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='起止时间'>
- {getFieldDecorator('time', {
- rules: [
- { required: true, message: '请输入起止时间' },
- ],
- })(
- <DatePicker.RangePicker />,
- )}
- </Form.Item>
- <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='作业标题'>
- {getFieldDecorator('title', {
- rules: [
- { required: true, message: '请输入作业标题' },
- ],
- })(
- <Input placeholder='请输入作业标题' />,
- )}
- </Form.Item>
- <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='指定做题人'>
- {getFieldDecorator('userIds', {
- rules: [
- { required: true, message: '请指定做题人' },
- ],
- })(
- <Select {...this.state.userIds} placeholder='请指定做题人' />,
- )}
- </Form.Item>
- <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='选择作业题'>
- {getFieldDecorator('questionNos', {
- rules: [
- { required: true, message: '请选择作业题' },
- ],
- })(
- <Select mode='multiple' maxTagCount={200} notFoundContent={null} placeholder='输入题目id, 逗号分隔' tokenSeparators={[',', ',']} {...this.state.questionNos} onChange={(values) => {
- // todo 查找
- this.setState({ questionNos: values });
- }} />,
- )}
- </Form.Item>
- </Form>
- </Block>;
- }
- renderQuestionList() {
- const { getFieldDecorator, setFieldsValue } = this.props.form;
- return <Block>
- <h1>题目预览</h1>
- <QuestionNoList loading={false} questionNos={this.state.questionNos} onChange={(nos) => {
- getFieldDecorator('questionNos');
- setFieldsValue({ questionNos: nos.map(row => row.id) });
- }} />
- </Block>;
- }
- renderView() {
- return <div flex>
- {this.renderBase()}
- {this.renderQuestionList()}
- <Row type="flex" justify="center">
- <Col>
- <Button type="primary" onClick={() => {
- this.submit();
- }}>保存</Button>
- </Col>
- </Row>
- </div>;
- }
- }
|