| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- import React, { PureComponent as Component } from 'react';
- import PropTypes from 'prop-types';
- import { connect } from 'react-redux';
- import { Icon, Input, AutoComplete } from 'antd';
- import './Search.scss';
- import { withRouter } from 'react-router';
- import axios from 'axios';
- import { setCurrGroup, fetchGroupMsg } from '../../../reducer/modules/group';
- import { changeMenuItem } from '../../../reducer/modules/menu';
- import { fetchInterfaceListMenu } from '../../../reducer/modules/interface';
- const Option = AutoComplete.Option;
- @connect(
- state => ({
- groupList: state.group.groupList,
- projectList: state.project.projectList
- }),
- {
- setCurrGroup,
- changeMenuItem,
- fetchGroupMsg,
- fetchInterfaceListMenu
- }
- )
- @withRouter
- export default class Srch extends Component {
- constructor(props) {
- super(props);
- this.state = {
- dataSource: []
- };
- }
- static propTypes = {
- groupList: PropTypes.array,
- projectList: PropTypes.array,
- router: PropTypes.object,
- history: PropTypes.object,
- location: PropTypes.object,
- setCurrGroup: PropTypes.func,
- changeMenuItem: PropTypes.func,
- fetchInterfaceListMenu: PropTypes.func,
- fetchGroupMsg: PropTypes.func
- };
- onSelect = async (value, option) => {
- if (option.props.type === '分组') {
- this.props.changeMenuItem('/group');
- this.props.history.push('/group/' + option.props['id']);
- this.props.setCurrGroup({ group_name: value, _id: option.props['id'] - 0 });
- } else if (option.props.type === '项目') {
- await this.props.fetchGroupMsg(option.props['groupId']);
- this.props.history.push('/project/' + option.props['id']);
- } else if (option.props.type === '接口') {
- await this.props.fetchInterfaceListMenu(option.props['projectId']);
- this.props.history.push(
- '/project/' + option.props['projectId'] + '/interface/api/' + option.props['id']
- );
- }
- };
- handleSearch = value => {
- axios
- .get('/api/project/search?q=' + value)
- .then(res => {
- if (res.data && res.data.errcode === 0) {
- const dataSource = [];
- for (let title in res.data.data) {
- res.data.data[title].map(item => {
- switch (title) {
- case 'group':
- dataSource.push(
- <Option
- key={`分组${item._id}`}
- type="分组"
- value={`${item.groupName}`}
- id={`${item._id}`}
- >
- {`分组: ${item.groupName}`}
- </Option>
- );
- break;
- case 'project':
- dataSource.push(
- <Option
- key={`项目${item._id}`}
- type="项目"
- id={`${item._id}`}
- groupId={`${item.groupId}`}
- >
- {`项目: ${item.name}`}
- </Option>
- );
- break;
- case 'interface':
- dataSource.push(
- <Option
- key={`接口${item._id}`}
- type="接口"
- id={`${item._id}`}
- projectId={`${item.projectId}`}
- >
- {`接口: ${item.title}`}
- </Option>
- );
- break;
- default:
- break;
- }
- });
- }
- this.setState({
- dataSource: dataSource
- });
- } else {
- console.log('查询项目或分组失败');
- }
- })
- .catch(err => {
- console.log(err);
- });
- };
- // getDataSource(groupList){
- // const groupArr =[];
- // groupList.forEach(item =>{
- // groupArr.push("group: "+ item["group_name"]);
- // })
- // return groupArr;
- // }
- render() {
- const { dataSource } = this.state;
- return (
- <div className="search-wrapper">
- <AutoComplete
- className="search-dropdown"
- dataSource={dataSource}
- style={{ width: '100%' }}
- defaultActiveFirstOption={false}
- onSelect={this.onSelect}
- onSearch={this.handleSearch}
- // filterOption={(inputValue, option) =>
- // option.props.children.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1
- // }
- >
- <Input
- prefix={<Icon type="search" className="srch-icon" />}
- placeholder="搜索分组/项目/接口"
- className="search-input"
- />
- </AutoComplete>
- </div>
- );
- }
- }
|