| | |
| | | import React, { useState } from 'react'; |
| | | import PropTypes from 'prop-types'; |
| | | import { Form, Row, Col, Input, DatePicker, Select, Button, TreeSelect } from 'antd'; |
| | | import { DownOutlined } from '@ant-design/icons'; |
| | | import { DownOutlined, SearchOutlined } from '@ant-design/icons'; |
| | | import * as $$ from '../../utils/utility'; |
| | | import './index.less'; |
| | | |
| | |
| | | * rowNum, // 一行放多少个搜索item |
| | | * handleRest, // 重置 |
| | | * handleSearch, // 搜索 |
| | | * exportButton //导出按钮 |
| | | */ |
| | | const NewTableSearch = ({ form, itemData, labelLength = 5, rowNum = 3, handleReset, handleSearch }) => { |
| | | const NewTableSearch = ({ form, itemData, labelLength = 5, rowNum = 3, handleReset, handleSearch, exportButton }) => { |
| | | const [searchMore, setSearchMore] = useState(false); |
| | | |
| | | const span = 24 / rowNum; |
| | |
| | | |
| | | return ( |
| | | <Form form={form} labelAlign="right" className="tableSearch"> |
| | | <Row gutter={[24, 16]}> |
| | | {itemData.map((x, t) => { |
| | | let placeholder = x.placeholder || setPlaceholder(x.name, x.type); |
| | | let allowClear = x.allowClear || true; |
| | | let dom = null; |
| | | let rules = {}; |
| | | if (x.type === 'Input') { |
| | | dom = <Input placeholder={placeholder} allowClear {...x} />; |
| | | rules = { max: x.max || 32, message: '搜索内容过长' }; |
| | | } |
| | | if (x.type === 'Select') { |
| | | dom = ( |
| | | <Select allowClear placeholder={placeholder} {...x}> |
| | | {x.selectdata?.map((y) => ( |
| | | <Option key={y.value}>{y.label}</Option> |
| | | ))} |
| | | </Select> |
| | | ); |
| | | } |
| | | if (x.type === 'RangePicker') { |
| | | rules = { type: 'array' }; |
| | | dom = ( |
| | | <RangePicker |
| | | style={{ width: '100%' }} |
| | | ranges={{ |
| | | '今日': [$$.myMoment(), $$.myMoment()], |
| | | '本月': [$$.myMoment().startOf('month'), $$.myMoment().endOf('month')], |
| | | }} |
| | | allowClear |
| | | {...x} |
| | | /> |
| | | ); |
| | | } |
| | | if (x.type === 'TreeSelect') { |
| | | dom = ( |
| | | <TreeSelect |
| | | showSearch |
| | | placeholder={placeholder} |
| | | dropdownStyle={{ maxHeight: 500, overflow: 'auto' }} |
| | | treeData={x.treedata} |
| | | treeDefaultExpandAll |
| | | allowClear |
| | | filterTreeNode={(inputValue, treeNode) => (treeNode.label.indexOf(inputValue) !== -1 ? true : false)} |
| | | {...x} |
| | | /> |
| | | ); |
| | | } |
| | | return ( |
| | | <> |
| | | <Col span={8} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }} key={t + 1}> |
| | | <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> |
| | | {dom} |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={8}></Col> |
| | | <Col span={8}></Col> |
| | | </> |
| | | |
| | | {itemData.map((x, t) => { |
| | | let placeholder = x.placeholder || setPlaceholder(x.name, x.type); |
| | | let allowClear = x.allowClear || true; |
| | | let dom = null; |
| | | let rules = {}; |
| | | if (x.type === 'Input') { |
| | | dom = <Input placeholder={placeholder} allowClear {...x} />; |
| | | rules = { max: x.max || 32, message: '搜索内容过长' }; |
| | | } |
| | | if (x.type === 'Select') { |
| | | dom = ( |
| | | <Select allowClear placeholder={placeholder} {...x}> |
| | | {x.selectdata?.map((y) => ( |
| | | <Option key={y.value}>{y.label}</Option> |
| | | ))} |
| | | </Select> |
| | | ); |
| | | })} |
| | | </Row> |
| | | } |
| | | if (x.type === 'RangePicker') { |
| | | rules = { type: 'array' }; |
| | | dom = ( |
| | | <RangePicker |
| | | style={{ width: '100%' }} |
| | | ranges={{ |
| | | '今日': [$$.myMoment(), $$.myMoment()], |
| | | '本月': [$$.myMoment().startOf('month'), $$.myMoment().endOf('month')], |
| | | }} |
| | | allowClear |
| | | {...x} |
| | | /> |
| | | ); |
| | | } |
| | | if (x.type === 'TreeSelect') { |
| | | dom = ( |
| | | <TreeSelect |
| | | showSearch |
| | | placeholder={placeholder} |
| | | dropdownStyle={{ maxHeight: 500, overflow: 'auto' }} |
| | | treeData={x.treedata} |
| | | treeDefaultExpandAll |
| | | allowClear |
| | | filterTreeNode={(inputValue, treeNode) => (treeNode.label.indexOf(inputValue) !== -1 ? true : false)} |
| | | {...x} |
| | | /> |
| | | ); |
| | | } |
| | | return ( |
| | | <Row className='tableSearch-searchMore-row' gutter={[24, 16]} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }}> |
| | | <Col span={x.span || 8} key={t + 1}> |
| | | <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> |
| | | {dom} |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> |
| | | // <div> |
| | | // <Col span={8} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }} key={t + 1}> |
| | | // <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> |
| | | // {dom} |
| | | // </Form.Item> |
| | | // </Col> |
| | | // <Col span={8}></Col> |
| | | // <Col span={8}></Col> |
| | | // </div> |
| | | ); |
| | | })} |
| | | <Row style={{ marginTop: '16px' }}> |
| | | <Col span={24} style={{ textAlign: 'right' }}> |
| | | <Button className="public-buttonMargin" onClick={handleReset}> |
| | | 重置 |
| | | </Button> |
| | | <Button type="primary" htmlType="submit" onClick={handleSearch}> |
| | | <Col span={24} style={{ textAlign: 'left' }}> |
| | | <Button className="public-buttonMargin" type="primary" htmlType="submit" icon={<SearchOutlined />} onClick={handleSearch}> |
| | | 查询 |
| | | </Button> |
| | | <Button className="public-buttonMargin" type="primary" ghost htmlType="submit" onClick={exportButton}> |
| | | 导出查询结果 |
| | | </Button> |
| | | <Button onClick={handleReset}> |
| | | 重置条件 |
| | | </Button> |
| | | {display && ( |
| | | <span className="tableSearch-searchMore" onClick={() => setSearchMore(!searchMore)}> |
| | | {!searchMore ? '展开' : '折叠'} |
| | | {!searchMore ? '展开更多' : '收起更多'} |
| | | <DownOutlined className={`tableSearch-searchMore-icon ${searchMore && 'tableSearch-searchMore-iconRotate'}`} /> |
| | | </span> |
| | | )} |
| | |
| | | rowNum: PropTypes.number, |
| | | handleReset: PropTypes.func, |
| | | handleSearch: PropTypes.func, |
| | | exportButton: PropTypes.func, |
| | | }; |
| | | |
| | | export default NewTableSearch; |