page.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import React from 'react';
  2. import { Form, Input, Button, Row, Col } 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 Select from '@src/components/Select';
  8. // import FileUpload from '@src/components/FileUpload';
  9. import { formatFormError, getMap } from '@src/services/Tools';
  10. import { asyncSMessage } from '@src/services/AsyncTools';
  11. import { Ready } from '../../../stores/ready';
  12. export default class extends Page {
  13. init() {
  14. Ready.getReadyRead().then(result => {
  15. return this.refreshStruct(result);
  16. });
  17. }
  18. initData() {
  19. const { id } = this.params;
  20. const { form } = this.props;
  21. let handler;
  22. if (id) {
  23. handler = Ready.getRead({ id });
  24. } else {
  25. handler = Promise.resolve({});
  26. }
  27. handler
  28. .then(result => {
  29. form.setFieldsValue(result);
  30. });
  31. }
  32. refreshStruct(result) {
  33. result = result || {};
  34. result.plates = (result.plates || []).map((row, index) => { row.value = index + 1; return row; });
  35. this.structMap = getMap(result.plates, 'value', 'plate');
  36. this.setState({
  37. struct: result,
  38. plates: result.plates.map((row) => {
  39. row.value = `${row.value}`;
  40. row.label = row.plate;
  41. row.title = '';
  42. return row;
  43. }),
  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 = Ready.editRead(data);
  54. } else {
  55. handler = Ready.addRead(data);
  56. }
  57. handler.then(() => {
  58. asyncSMessage('保存成功');
  59. goBack();
  60. }).catch((e) => {
  61. if (e.result) form.setFields(formatFormError(data, e.result));
  62. });
  63. }
  64. });
  65. }
  66. renderBase() {
  67. const { getFieldDecorator } = this.props.form;
  68. return <Block>
  69. <Form>
  70. {getFieldDecorator('id')(<input hidden />)}
  71. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='板块'>
  72. {getFieldDecorator('plate', {
  73. rules: [
  74. { required: true, message: '请选择' },
  75. ],
  76. })(
  77. <Select select={this.state.plates} placeholder='请选择' />,
  78. )}
  79. </Form.Item>
  80. <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='文章标题'>
  81. {getFieldDecorator('title', {
  82. rules: [
  83. { required: true, message: '请输入标题' },
  84. ],
  85. })(
  86. <Input placeholder='请输入标题' />,
  87. )}
  88. </Form.Item>
  89. <Form.Item label='正文'>
  90. {getFieldDecorator('content', {
  91. })(
  92. <Editor placeholder='输入内容' />,
  93. )}
  94. </Form.Item>
  95. </Form>
  96. </Block>;
  97. }
  98. renderView() {
  99. return <div flex>
  100. {this.renderBase()}
  101. <Row type="flex" justify="center">
  102. <Col>
  103. <Button type="primary" onClick={() => {
  104. this.submit();
  105. }}>保存</Button>
  106. </Col>
  107. </Row>
  108. </div>;
  109. }
  110. }