mock平台

AdvMock.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import React, { Component } from 'react';
  2. // import { connect } from 'react-redux'
  3. import axios from 'axios';
  4. import PropTypes from 'prop-types';
  5. import { withRouter } from 'react-router-dom';
  6. import { Form, Switch, Button, message, Icon, Tooltip, Radio } from 'antd';
  7. import MockCol from './MockCol/MockCol.js';
  8. import mockEditor from 'client/components/AceEditor/mockEditor';
  9. import constants from '../../client/constants/variable.js';
  10. const FormItem = Form.Item;
  11. class AdvMock extends Component {
  12. static propTypes = {
  13. form: PropTypes.object,
  14. match: PropTypes.object
  15. };
  16. constructor(props) {
  17. super(props);
  18. this.state = {
  19. enable: false,
  20. mock_script: '',
  21. tab: 'case'
  22. };
  23. }
  24. handleSubmit = e => {
  25. e.preventDefault();
  26. let projectId = this.props.match.params.id;
  27. let interfaceId = this.props.match.params.actionId;
  28. let params = {
  29. project_id: projectId,
  30. interface_id: interfaceId,
  31. mock_script: this.state.mock_script,
  32. enable: this.state.enable
  33. };
  34. axios.post('/api/plugin/advmock/save', params).then(res => {
  35. if (res.data.errcode === 0) {
  36. message.success('保存成功');
  37. } else {
  38. message.error(res.data.errmsg);
  39. }
  40. });
  41. };
  42. componentWillMount() {
  43. this.getAdvMockData();
  44. }
  45. async getAdvMockData() {
  46. let interfaceId = this.props.match.params.actionId;
  47. let result = await axios.get('/api/plugin/advmock/get?interface_id=' + interfaceId);
  48. if (result.data.errcode === 0) {
  49. let mockData = result.data.data;
  50. this.setState({
  51. enable: mockData.enable,
  52. mock_script: mockData.mock_script
  53. });
  54. }
  55. let that = this;
  56. mockEditor({
  57. container: 'mock-script',
  58. data: that.state.mock_script,
  59. onChange: function(d) {
  60. that.setState({
  61. mock_script: d.text
  62. });
  63. }
  64. });
  65. }
  66. onChange = v => {
  67. this.setState({
  68. enable: v
  69. });
  70. };
  71. handleTapChange = e => {
  72. this.setState({
  73. tab: e.target.value
  74. });
  75. };
  76. render() {
  77. const formItemLayout = {
  78. labelCol: {
  79. sm: { span: 4 }
  80. },
  81. wrapperCol: {
  82. sm: { span: 16 }
  83. }
  84. };
  85. const tailFormItemLayout = {
  86. wrapperCol: {
  87. sm: {
  88. span: 16,
  89. offset: 11
  90. }
  91. }
  92. };
  93. const { tab } = this.state;
  94. const isShowCase = tab === 'case';
  95. return (
  96. <div style={{ padding: '20px 10px' }}>
  97. <div style={{ textAlign: 'center', marginBottom: 20 }}>
  98. <Radio.Group value={tab} size="large" onChange={this.handleTapChange}>
  99. <Radio.Button value="case">期望</Radio.Button>
  100. <Radio.Button value="script">脚本</Radio.Button>
  101. </Radio.Group>
  102. </div>
  103. <div style={{ display: isShowCase ? 'none' : '' }}>
  104. <Form onSubmit={this.handleSubmit}>
  105. <FormItem
  106. label={
  107. <span>
  108. 是否开启&nbsp;<a
  109. target="_blank"
  110. rel="noopener noreferrer"
  111. href={constants.docHref.adv_mock_script}
  112. >
  113. <Tooltip title="点击查看文档">
  114. <Icon type="question-circle-o" />
  115. </Tooltip>
  116. </a>
  117. </span>
  118. }
  119. {...formItemLayout}
  120. >
  121. <Switch
  122. checked={this.state.enable}
  123. onChange={this.onChange}
  124. checkedChildren="开"
  125. unCheckedChildren="关"
  126. />
  127. </FormItem>
  128. <FormItem label="Mock脚本" {...formItemLayout}>
  129. <div id="mock-script" style={{ minHeight: '500px' }} />
  130. </FormItem>
  131. <FormItem {...tailFormItemLayout}>
  132. <Button type="primary" htmlType="submit">
  133. 保存
  134. </Button>
  135. </FormItem>
  136. </Form>
  137. </div>
  138. <div style={{ display: isShowCase ? '' : 'none' }}>
  139. <MockCol />
  140. </div>
  141. </div>
  142. );
  143. }
  144. }
  145. module.exports = Form.create()(withRouter(AdvMock));