Files
yapi/client/containers/Project/Interface/InterfaceList/Run/AddColModal.js
2024-03-01 20:28:14 +08:00

150 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { PureComponent as Component } from 'react';
import { connect } from 'react-redux';
import { Modal, Collapse, Row, Col, Input, message, Button, Icon } from 'antd';
import PropTypes from 'prop-types';
import axios from 'axios';
import { withRouter } from 'react-router';
import { fetchInterfaceColList } from '../../../../../reducer/modules/interfaceCol';
const { TextArea } = Input;
const Panel = Collapse.Panel;
@connect(
state => ({
interfaceColList: state.interfaceCol.interfaceColList
}),
{
fetchInterfaceColList
}
)
@withRouter
export default class AddColModal extends Component {
static propTypes = {
visible: PropTypes.bool,
interfaceColList: PropTypes.array,
fetchInterfaceColList: PropTypes.func,
match: PropTypes.object,
onOk: PropTypes.func,
onCancel: PropTypes.func,
caseName: PropTypes.string
};
state = {
visible: false,
addColName: '',
addColDesc: '',
id: 0,
caseName: ''
};
constructor(props) {
super(props);
}
UNSAFE_componentWillMount() {
this.props.fetchInterfaceColList(this.props.match.params.id);
this.setState({ caseName: this.props.caseName });
}
UNSAFE_componentWillReceiveProps(nextProps) {
this.setState({ id: nextProps.interfaceColList[0]._id });
this.setState({ caseName: nextProps.caseName });
}
addCol = async () => {
const { addColName: name, addColDesc: desc } = this.state;
const project_id = this.props.match.params.id;
const res = await axios.post('/api/col/add_col', { name, desc, project_id });
if (!res.data.errcode) {
message.success('添加集合成功');
await this.props.fetchInterfaceColList(project_id);
this.setState({ id: res.data.data._id });
} else {
message.error(res.data.errmsg);
}
};
select = id => {
this.setState({ id });
};
render() {
const { interfaceColList = [] } = this.props;
const { id } = this.state;
return (
<Modal
className="add-col-modal"
title="添加到集合"
visible={this.props.visible}
onOk={() => this.props.onOk(id, this.state.caseName)}
onCancel={this.props.onCancel}
>
<Row gutter={6} className="modal-input">
<Col span="5">
<div className="label">接口用例名</div>
</Col>
<Col span="15">
<Input
placeholder="请输入接口用例名称"
value={this.state.caseName}
onChange={e => this.setState({ caseName: e.target.value })}
/>
</Col>
</Row>
<p>请选择添加到的集合</p>
<ul className="col-list">
{interfaceColList.length ? (
interfaceColList.map(col => (
<li
key={col._id}
className={`col-item ${col._id === id ? 'selected' : ''}`}
onClick={() => this.select(col._id)}
>
<Icon type="folder-open" style={{ marginRight: 6 }} />
{col.name}
</li>
))
) : (
<span>暂无集合请添加</span>
)}
</ul>
<Collapse>
<Panel header="添加新集合">
<Row gutter={6} className="modal-input">
<Col span="5">
<div className="label">集合名</div>
</Col>
<Col span="15">
<Input
placeholder="请输入集合名称"
value={this.state.addColName}
onChange={e => this.setState({ addColName: e.target.value })}
/>
</Col>
</Row>
<Row gutter={6} className="modal-input">
<Col span="5">
<div className="label">简介</div>
</Col>
<Col span="15">
<TextArea
rows={3}
placeholder="请输入集合描述"
value={this.state.addColDesc}
onChange={e => this.setState({ addColDesc: e.target.value })}
/>
</Col>
</Row>
<Row type="flex" justify="end">
<Button style={{ float: 'right' }} type="primary" onClick={this.addCol}>
</Button>
</Row>
</Panel>
</Collapse>
</Modal>
);
}
}