mock平台

index.js 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import React, { Component } from 'react';
  2. import { connect } from 'react-redux';
  3. import PropTypes from 'prop-types';
  4. import { Form, Switch, Button, Icon, Tooltip, message } from 'antd';
  5. import AceEditor from '../../../../components/AceEditor/AceEditor';
  6. const FormItem = Form.Item;
  7. import { updateProjectMock, getProject } from '../../../../reducer/modules/project';
  8. const formItemLayout = {
  9. labelCol: {
  10. sm: { span: 4 }
  11. },
  12. wrapperCol: {
  13. sm: { span: 16 }
  14. }
  15. };
  16. const tailFormItemLayout = {
  17. wrapperCol: {
  18. sm: {
  19. span: 16,
  20. offset: 11
  21. }
  22. }
  23. };
  24. @connect(
  25. state => {
  26. return {
  27. projectMsg: state.project.currProject
  28. };
  29. },
  30. {
  31. updateProjectMock,
  32. getProject
  33. }
  34. )
  35. @Form.create()
  36. export default class ProjectMock extends Component {
  37. static propTypes = {
  38. form: PropTypes.object,
  39. match: PropTypes.object,
  40. projectId: PropTypes.number,
  41. updateProjectMock: PropTypes.func,
  42. projectMsg: PropTypes.object,
  43. getProject: PropTypes.func
  44. };
  45. constructor(props) {
  46. super(props);
  47. this.state = {
  48. is_mock_open: false,
  49. project_mock_script: ''
  50. };
  51. }
  52. handleSubmit = async () => {
  53. let params = {
  54. id: this.props.projectId,
  55. project_mock_script: this.state.project_mock_script,
  56. is_mock_open: this.state.is_mock_open
  57. };
  58. let result = await this.props.updateProjectMock(params);
  59. if (result.payload.data.errcode === 0) {
  60. message.success('保存成功');
  61. await this.props.getProject(this.props.projectId);
  62. } else {
  63. message.success('保存失败, ' + result.payload.data.errmsg);
  64. }
  65. };
  66. componentWillMount() {
  67. this.setState({
  68. is_mock_open: this.props.projectMsg.is_mock_open,
  69. project_mock_script: this.props.projectMsg.project_mock_script
  70. });
  71. }
  72. // 是否开启
  73. onChange = v => {
  74. this.setState({
  75. is_mock_open: v
  76. });
  77. };
  78. handleMockJsInput = e => {
  79. this.setState({
  80. project_mock_script: e.text
  81. });
  82. };
  83. render() {
  84. return (
  85. <div className="m-panel">
  86. <Form>
  87. <FormItem
  88. label={
  89. <span>
  90. 是否开启&nbsp;<a
  91. target="_blank"
  92. rel="noopener noreferrer"
  93. href="https://hellosean1025.github.io/yapi/documents/project.html#%E5%85%A8%E5%B1%80mock"
  94. >
  95. <Tooltip title="点击查看文档">
  96. <Icon type="question-circle-o" />
  97. </Tooltip>
  98. </a>
  99. </span>
  100. }
  101. {...formItemLayout}
  102. >
  103. <Switch
  104. checked={this.state.is_mock_open}
  105. onChange={this.onChange}
  106. checkedChildren="开"
  107. unCheckedChildren="关"
  108. />
  109. </FormItem>
  110. <FormItem label="Mock脚本" {...formItemLayout}>
  111. <AceEditor
  112. data={this.state.project_mock_script}
  113. onChange={this.handleMockJsInput}
  114. style={{ minHeight: '500px' }}
  115. />
  116. </FormItem>
  117. <FormItem {...tailFormItemLayout}>
  118. <Button type="primary" htmlType="submit" onClick={this.handleSubmit}>
  119. 保存
  120. </Button>
  121. </FormItem>
  122. </Form>
  123. </div>
  124. );
  125. }
  126. }