From efa0da93cb5c993c8a7b779b6803b4b4a9678f89 Mon Sep 17 00:00:00 2001 From: Rain&Bus Date: Fri, 12 Jan 2024 02:18:45 +0800 Subject: [PATCH] router --- src/components/management/SearchTable.tsx | 150 ++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 src/components/management/SearchTable.tsx diff --git a/src/components/management/SearchTable.tsx b/src/components/management/SearchTable.tsx new file mode 100644 index 0000000..491869e --- /dev/null +++ b/src/components/management/SearchTable.tsx @@ -0,0 +1,150 @@ +/** + * Created by hao.cheng on 2017/4/16. + */ +import React from 'react'; +import { Table, Input, Button } from 'antd'; +import { SmileOutlined } from '@ant-design/icons'; + +const data = [ + { + key: '1', + name: 'John Brown', + age: 32, + address: 'New York No. 1 Lake Park', + }, + { + key: '2', + name: 'Joe Black', + age: 42, + address: 'London No. 1 Lake Park', + }, + { + key: '3', + name: 'Jim Green', + age: 32, + address: 'Sidney No. 1 Lake Park', + }, + { + key: '4', + name: 'Jim Red', + age: 32, + address: 'London No. 2 Lake Park', + }, +]; + +class SearchTable extends React.Component { + state = { + filterDropdownVisible: false, + data, + searchText: '', + filtered: false, + }; + searchInput: any; + onInputChange = (e: any) => { + this.setState({ searchText: e.target.value }); + }; + onSearch = () => { + const { searchText } = this.state; + const reg = new RegExp(searchText, 'gi'); + this.setState({ + filterDropdownVisible: false, + filtered: !!searchText, + data: data + .map((record) => { + const match = record.name.match(reg); + if (!match) { + return null; + } + return { + ...record, + name: ( + + {record.name + .split(reg) + .map((text, i) => + i > 0 + ? [{match[0]}, text] + : text + )} + + ), + }; + }) + .filter((record) => !!record), + }); + }; + render() { + const columns = [ + { + title: 'Name', + dataIndex: 'name', + key: 'name', + filterDropdown: ( +
+ (this.searchInput = ele)} + placeholder="Search name" + value={this.state.searchText} + onChange={this.onInputChange} + onPressEnter={this.onSearch} + /> + +
+ ), + filterIcon: ( + + ), + filterDropdownVisible: this.state.filterDropdownVisible, + onFilterDropdownVisibleChange: (visible: boolean) => + this.setState({ filterDropdownVisible: visible }, () => + this.searchInput.focus() + ), + }, + { + title: 'Age', + dataIndex: 'age', + key: 'age', + }, + { + title: 'Address', + dataIndex: 'address', + key: 'address', + filters: [ + { + text: 'London', + value: 'London', + }, + { + text: 'New York', + value: 'New York', + }, + ], + onFilter: (value: any, record: any) => record.address.indexOf(value) === 0, + }, + ]; + return ( +
+ + + + ); + } +} + +export default SearchTable;