| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- import React, { Component } from 'react';
- import PropTypes from 'prop-types';
- import { Row, Icon, Input, Select, Tooltip } from 'antd';
- import _ from 'underscore';
- const Option = Select.Option;
- // 深拷贝
- function deepEqual(state) {
- return JSON.parse(JSON.stringify(state));
- }
- const METHODS_LIST = [
- { name: 'md5', type: false, params: [], desc: 'md5加密' },
- { name: 'lower', type: false, params: [], desc: '所有字母变成小写' },
- { name: 'length', type: false, params: [], desc: '数据长度' },
- { name: 'substr', type: true, component: 'doubleInput', params: [], desc: '截取部分字符串' },
- { name: 'sha', type: true, component: 'select', params: ['sha1'], desc: 'sha加密' },
- { name: 'base64', type: false, params: [], desc: 'base64加密' },
- { name: 'unbase64', type: false, params: [], desc: 'base64解密' },
- { name: 'concat', type: true, component: 'input', params: [], desc: '连接字符串' },
- { name: 'lconcat', type: true, component: 'input', params: [], desc: '左连接' },
- { name: 'upper', type: false, desc: '所有字母变成大写' },
- { name: 'number', type: false, desc: '字符串转换为数字类型' }
- ];
- class MethodsList extends Component {
- static propTypes = {
- show: PropTypes.bool,
- click: PropTypes.func,
- clickValue: PropTypes.string,
- paramsInput: PropTypes.func,
- clickIndex: PropTypes.number,
- params: PropTypes.array
- };
- constructor(props) {
- super(props);
- this.state = {
- list: METHODS_LIST,
- moreFlag: true
- };
- }
- showMore = () => {
- this.setState({
- moreFlag: false
- });
- };
- componentDidMount() {
- var index = _.findIndex(METHODS_LIST, { name: this.props.clickValue });
- let moreFlag = index > 3 ? false : true;
- this.setState({
- moreFlag
- });
- }
- inputComponent = props => {
- let clickIndex = props.clickIndex;
- let paramsIndex = props.paramsIndex;
- let params = props.params;
- return (
- <Input
- size="small"
- placeholder="请输入参数"
- value={params[0]}
- onChange={e => this.handleParamsChange(e.target.value, clickIndex, paramsIndex, 0)}
- />
- );
- };
- doubleInputComponent = props => {
- let clickIndex = props.clickIndex;
- let paramsIndex = props.paramsIndex;
- let params = props.params;
- return (
- <div>
- <Input
- size="small"
- placeholder="start"
- value={params[0]}
- onChange={e => this.handleParamsChange(e.target.value, clickIndex, paramsIndex, 0)}
- />
- <Input
- size="small"
- placeholder="length"
- value={params[1]}
- onChange={e => this.handleParamsChange(e.target.value, clickIndex, paramsIndex, 1)}
- />
- </div>
- );
- };
- selectComponent = props => {
- const subname = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512'];
- let clickIndex = props.clickIndex;
- let paramsIndex = props.paramsIndex;
- let params = props.params;
- return (
- <Select
- value={params[0] || 'sha1'}
- placeholder="请选择"
- style={{ width: 150 }}
- size="small"
- onChange={e => this.handleParamsChange(e, clickIndex, paramsIndex, 0)}
- >
- {subname.map((item, index) => {
- return (
- <Option value={item} key={index}>
- {item}
- </Option>
- );
- })}
- </Select>
- );
- };
- // 处理参数输入
- handleParamsChange(value, clickIndex, paramsIndex, index) {
- let newList = deepEqual(this.state.list);
- newList[paramsIndex].params[index] = value;
- this.setState({
- list: newList
- });
- this.props.paramsInput(value, clickIndex, index);
- }
- // 组件选择
- handleComponent(item, clickIndex, index, params) {
- let query = {
- clickIndex: clickIndex,
- paramsIndex: index,
- params
- };
- switch (item.component) {
- case 'select':
- return this.selectComponent(query);
- case 'input':
- return this.inputComponent(query);
- case 'doubleInput':
- return this.doubleInputComponent(query);
- default:
- break;
- }
- }
- render() {
- const { list, moreFlag } = this.state;
- const { click, clickValue, clickIndex, params } = this.props;
- let showList = moreFlag ? list.slice(0, 4) : list;
- return (
- <div className="modal-postman-form-method">
- <h3 className="methods-title title">方法</h3>
- {showList.map((item, index) => {
- return (
- <Row
- key={index}
- type="flex"
- align="middle"
- className={'row methods-row ' + (item.name === clickValue ? 'checked' : '')}
- onClick={() => click(item.name, showList[index].params)}
- >
- <Tooltip title={item.desc}>
- <span>{item.name}</span>
- </Tooltip>
- <span className="input-component">
- {item.type &&
- this.handleComponent(
- item,
- clickIndex,
- index,
- item.name === clickValue ? params : []
- )}
- </span>
- </Row>
- );
- })}
- {moreFlag && (
- <div className="show-more" onClick={this.showMore}>
- <Icon type="down" />
- <span style={{ paddingLeft: '4px' }}>更多</span>
- </div>
- )}
- </div>
- );
- }
- }
- export default MethodsList;
|