page.js 4.9 KB

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