import React, { PureComponent as Component } from 'react' import { connect } from 'react-redux'; import PropTypes from 'prop-types' import { withRouter } from 'react-router' import { Link } from 'react-router-dom' import axios from 'axios' import { message, Tooltip, Input } from 'antd' import { fetchInterfaceColList, setColData, fetchCaseData, fetchCaseList } from '../../../../reducer/modules/interfaceCol' import { Postman } from '../../../../components' import './InterfaceCaseContent.scss' @connect( state => { return { interfaceColList: state.interfaceCol.interfaceColList, currColId: state.interfaceCol.currColId, currCaseId: state.interfaceCol.currCaseId, currCase: state.interfaceCol.currCase, isShowCol: state.interfaceCol.isShowCol, currProject: state.project.currProject } }, { fetchInterfaceColList, fetchCaseData, setColData, fetchCaseList } ) @withRouter export default class InterfaceCaseContent extends Component { static propTypes = { match: PropTypes.object, interfaceColList: PropTypes.array, fetchInterfaceColList: PropTypes.func, fetchCaseData: PropTypes.func, setColData: PropTypes.func, fetchCaseList: PropTypes.func, history: PropTypes.object, currColId: PropTypes.number, currCaseId: PropTypes.number, currCase: PropTypes.object, isShowCol: PropTypes.bool, currProject: PropTypes.object } state = { isEditingCasename: true, editCasename: '' } constructor(props) { super(props) } getColId(colList, currCaseId) { let currColId = 0; colList.forEach(col => { col.caseList.forEach(caseItem => { if (+caseItem._id === +currCaseId) { currColId = col._id; } }) }) return currColId; } async componentWillMount() { const result = await this.props.fetchInterfaceColList(this.props.match.params.id) let { currCaseId } = this.props; const params = this.props.match.params; const { actionId } = params; currCaseId = +actionId || +currCaseId || result.payload.data.data[0].caseList[0]._id; let currColId = this.getColId(result.payload.data.data, currCaseId); this.props.history.push('/project/' + params.id + '/interface/case/' + currCaseId) await this.props.fetchCaseData(currCaseId) this.props.setColData({ currCaseId: +currCaseId, currColId, isShowCol: false }) this.setState({ editCasename: this.props.currCase.casename }) } async componentWillReceiveProps(nextProps) { const oldCaseId = this.props.match.params.actionId const newCaseId = nextProps.match.params.actionId const { interfaceColList } = nextProps; let currColId = this.getColId(interfaceColList, newCaseId); if (oldCaseId !== newCaseId) { await this.props.fetchCaseData(newCaseId); this.props.setColData({ currCaseId: +newCaseId, currColId, isShowCol: false }) this.setState({ editCasename: this.props.currCase.casename }) } } savePostmanRef = (postman) => { this.postman = postman; } updateCase = async () => { const { case_env, req_params, req_query, req_headers, req_body_type, req_body_form, req_body_other, test_script, enable_script, test_res_body, test_res_header } = this.postman.state; const { editCasename: casename } = this.state; const { _id: id } = this.props.currCase; let params = { id, casename, case_env, req_params, req_query, req_headers, req_body_type, req_body_form, req_body_other, test_script, enable_script, test_res_body, test_res_header }; const res = await axios.post('/api/col/up_case', params); if (this.props.currCase.casename !== casename) { this.props.fetchInterfaceColList(this.props.match.params.id); } if (res.data.errcode) { message.error(res.data.errmsg) } else { message.success('更新成功') this.props.fetchCaseData(id); } } triggerEditCasename = () => { this.setState({ isEditingCasename: true, editCasename: this.props.currCase.casename }) } cancelEditCasename = () => { this.setState({ isEditingCasename: false, editCasename: this.props.currCase.casename }) } render() { const { currCase, currProject } = this.props; const { isEditingCasename, editCasename } = this.state; const data = Object.assign({}, currCase, { env: currProject.env, pre_script: currProject.pre_script, after_script: currProject.after_script }, { _id: currCase._id }); return (