page.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import React from 'react';
  2. import { Form, Input, Button, Row, Col, DatePicker, List, Icon } from 'antd';
  3. import './index.less';
  4. import Page from '@src/containers/Page';
  5. import Block from '@src/components/Block';
  6. import Select from '@src/components/Select';
  7. // import FileUpload from '@src/components/FileUpload';
  8. import { formatFormError, generateSearch } from '@src/services/Tools';
  9. import { asyncSMessage } from '@src/services/AsyncTools';
  10. import { Preview } from '../../../stores/preview';
  11. import { Exercise } from '../../../stores/exercise';
  12. import { User } from '../../../stores/user';
  13. import config from './index';
  14. export default class extends Page {
  15. init() {
  16. Exercise.allStruct().then(result => {
  17. result = result.filter(row => row.level === 2).map(row => { row.title = `${row.titleZh}/${row.titleEn}`; row.value = row.id; return row; });
  18. this.setState({ exercise: result });
  19. });
  20. }
  21. initData() {
  22. const { id } = this.params;
  23. const { form } = this.props;
  24. let handler;
  25. if (id) {
  26. config.title = '编辑预习作业';
  27. handler = Preview.get({ id });
  28. } else {
  29. config.title = '添加预习作业';
  30. handler = Promise.resolve({});
  31. }
  32. handler
  33. .then(result => {
  34. form.setFieldsValue(result);
  35. generateSearch('userIds', { mode: 'multiple' }, this, (search) => {
  36. return User.list(search);
  37. }, (row) => {
  38. return {
  39. title: `${row.nickname}(${row.mobile})`,
  40. value: row.id,
  41. };
  42. }, result.userIds || [], null);
  43. });
  44. }
  45. submit() {
  46. const { form } = this.props;
  47. form.validateFields((err) => {
  48. if (!err) {
  49. const data = form.getFieldsValue();
  50. let handler;
  51. if (data.id) {
  52. handler = Preview.add(data);
  53. } else {
  54. handler = Preview.edit(data);
  55. }
  56. handler.then(() => {
  57. asyncSMessage('保存成功');
  58. }).catch((e) => {
  59. if (e.result) form.setFields(formatFormError(data, e.result));
  60. });
  61. }
  62. });
  63. }
  64. searchQuestion(values) {
  65. console.log(values);
  66. }
  67. renderBase() {
  68. const { getFieldDecorator } = this.props.form;
  69. return <Block>
  70. <Form>
  71. {getFieldDecorator('id')(<input hidden />)}
  72. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='选择课程'>
  73. {getFieldDecorator('category', {
  74. rules: [
  75. { required: true, message: '请选择课程' },
  76. ],
  77. })(
  78. <Select select={this.state.exercise} placeholder='请选择课程' />,
  79. )}
  80. </Form.Item>
  81. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='起止时间'>
  82. {getFieldDecorator('time', {
  83. rules: [
  84. { required: true, message: '请输入起止时间' },
  85. ],
  86. })(
  87. <DatePicker.RangePicker />,
  88. )}
  89. </Form.Item>
  90. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='作业标题'>
  91. {getFieldDecorator('title', {
  92. rules: [
  93. { required: true, message: '请输入作业标题' },
  94. ],
  95. })(
  96. <Input placeholder='请输入作业标题' />,
  97. )}
  98. </Form.Item>
  99. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='指定做题人'>
  100. {getFieldDecorator('userIds', {
  101. rules: [
  102. { required: true, message: '请指定做题人' },
  103. ],
  104. })(
  105. <Select {...this.state.userIds} placeholder='请指定做题人' />,
  106. )}
  107. </Form.Item>
  108. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='选择作业题'>
  109. {getFieldDecorator('questionIds', {
  110. rules: [
  111. { required: true, message: '请选择作业题' },
  112. ],
  113. })(
  114. <Select select={[]} mode='tags' maxTagCount={200} notFoundContent={null} placeholder='输入题目id, 逗号分隔' tokenSeparators={[',', ',']} onSelect={(values) => {
  115. this.searchQuestion(values);
  116. }} />,
  117. )}
  118. </Form.Item>
  119. </Form>
  120. </Block>;
  121. }
  122. renderQuestionList() {
  123. return <List
  124. header={<h1>题目预览</h1>}
  125. loading={this.props.core.loading}
  126. itemLayout="horizontal"
  127. dataSource={this.state.questionList || [{}]}
  128. renderItem={item => (
  129. <List.Item actions={[<Button type='link' onClick={() => {
  130. console.log(item);
  131. }}><Icon type='delete' /></Button>, <a>more</a>]}>
  132. 123123
  133. </List.Item>
  134. )}
  135. />;
  136. }
  137. renderView() {
  138. return <Block flex>
  139. {this.renderBase()}
  140. {this.renderQuestionList()}
  141. <Row type="flex" justify="center">
  142. <Col>
  143. <Button type="primary" onClick={() => {
  144. this.submit();
  145. }}>保存</Button>
  146. </Col>
  147. </Row>
  148. </Block>;
  149. }
  150. }