1
0

page.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import React from 'react';
  2. import { Form, Button, Row, Col, List, Icon, Switch, Typography } from 'antd';
  3. import './index.less';
  4. import Editor from '@src/components/Editor';
  5. import Page from '@src/containers/Page';
  6. import Block from '@src/components/Block';
  7. import DragList from '@src/components/DragList';
  8. // import FileUpload from '@src/components/FileUpload';
  9. import { formatFormError, formatDate, getMap } from '@src/services/Tools';
  10. import { AskTarget, QuestionType } from '@src/services/Constant';
  11. import { asyncSMessage } from '@src/services/AsyncTools';
  12. import { User } from '../../../stores/user';
  13. const QuestionTypeMap = getMap(QuestionType, 'value', 'label');
  14. const AskTargetMap = getMap(AskTarget, 'value', 'label');
  15. export default class extends Page {
  16. init() {
  17. // Exercise.allStruct().then(result => {
  18. // result = result.filter(row => row.level === 2).map(row => { row.title = `${row.titleZh}/${row.titleEn}`; row.value = row.id; return row; });
  19. // this.setState({ exercise: result });
  20. // });
  21. }
  22. initData() {
  23. const { id } = this.params;
  24. let handler;
  25. if (id) {
  26. handler = User.getAsk({ id });
  27. } else {
  28. handler = Promise.resolve({ others: [{ content: 123123123, answer: 123123 }, {}] });
  29. }
  30. handler
  31. .then(result => {
  32. const { getFieldDecorator, setFieldsValue } = this.props.form;
  33. getFieldDecorator('id');
  34. getFieldDecorator('answer');
  35. getFieldDecorator('showStatus');
  36. setFieldsValue({ id: result.id, answer: result.answer, showStatus: result.showStatus });
  37. this.setState({ data: result });
  38. });
  39. }
  40. orderQuestion(oldIndex, newIndex) {
  41. const { data } = this.state;
  42. const { other = [] } = data;
  43. const tmp = other[oldIndex];
  44. other[oldIndex] = other[newIndex];
  45. other[newIndex] = tmp;
  46. this.setState({ other });
  47. }
  48. submit() {
  49. const { form } = this.props;
  50. form.validateFields((err) => {
  51. if (!err) {
  52. const data = form.getFieldsValue();
  53. data.other = this.state.data.others.map(row => row.id);
  54. User.editAsk(data).then(() => {
  55. asyncSMessage('保存成功');
  56. }).catch((e) => {
  57. if (e.result) form.setFields(formatFormError(data, e.result));
  58. });
  59. }
  60. });
  61. }
  62. renderBase() {
  63. const { data } = this.state;
  64. const { question = {}, questionNo = {} } = data;
  65. return <Block>
  66. <h1>题目信息</h1>
  67. <Form>
  68. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='题型'>
  69. {QuestionTypeMap[question.type]}
  70. </Form.Item>
  71. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='题目id'>
  72. <a href='' target='_blank'>{questionNo.no}</a>
  73. </Form.Item>
  74. </Form>
  75. </Block>;
  76. }
  77. renderAsk() {
  78. const { data } = this.state;
  79. const { user = {}, createTime, target, content } = data;
  80. return <Block>
  81. <h1>提问信息</h1>
  82. <Form>
  83. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='用户姓名'>
  84. {user.realName}
  85. </Form.Item>
  86. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='提问时间'>
  87. {formatDate(createTime)}
  88. </Form.Item>
  89. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='提问模块'>
  90. {AskTargetMap[target]}
  91. </Form.Item>
  92. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='提问详情'>
  93. {content}
  94. </Form.Item>
  95. </Form>
  96. </Block>;
  97. }
  98. renderQuestionList() {
  99. return <Block>
  100. <h1>该题目的展示中问题</h1>
  101. <DragList
  102. loading={this.props.core.loading}
  103. dataSource={this.state.data.others || []}
  104. handle={'.icon'}
  105. onMove={(oldIndex, newIndex) => {
  106. this.orderQuestion(oldIndex, newIndex);
  107. }}
  108. renderItem={(item) => (
  109. <List.Item actions={[<Icon type='bars' className='icon' />, <Typography.Text copyable={{ text: 'url' }} />]}>
  110. <Row style={{ width: '100%' }}>
  111. <Col span={11}>问题:{item.content}</Col>
  112. <Col span={11} offset={1}>答复:{item.answer}</Col>
  113. </Row>
  114. </List.Item>
  115. )}
  116. /></Block>;
  117. }
  118. renderAnswer() {
  119. const { getFieldDecorator } = this.props.form;
  120. return <Block>
  121. <Form>
  122. {getFieldDecorator('id')(<input hidden />)}
  123. <Form.Item label='教师回复'>
  124. {getFieldDecorator('answer', {
  125. })(
  126. <Editor placeholder='输入内容' />,
  127. )}
  128. </Form.Item>
  129. <Row type="flex" justify="center">
  130. <Col span={12}>
  131. <Form.Item labelCol={{ span: 12 }} wrapperCol={{ span: 10 }} label='显示状态'>
  132. {getFieldDecorator('showStatus', {
  133. valuePropName: 'checked',
  134. })(
  135. <Switch checkedChildren='on' unCheckedChildren='off' />,
  136. )}
  137. </Form.Item>
  138. </Col>
  139. </Row>
  140. </Form>
  141. </Block>;
  142. }
  143. renderView() {
  144. return <div flex>
  145. {this.renderBase()}
  146. {this.renderAsk()}
  147. {this.renderQuestionList()}
  148. {this.renderAnswer()}
  149. <Row type="flex" justify="center">
  150. <Col>
  151. <Button type="primary" onClick={() => {
  152. this.submit();
  153. }}>保存</Button>
  154. </Col>
  155. </Row>
  156. </div>;
  157. }
  158. }