forked from gzzfw/frontEnd/gzDyh

zhangyongtian
2024-09-14 52aa9f64e5dea1c0e30bc1094fa580c3851d8f9d
gz-customerSystem/src/components/NewTableSearch/index.jsx
@@ -1,7 +1,7 @@
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';
@@ -16,8 +16,9 @@
 * 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;
@@ -59,77 +60,86 @@
  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>
          )}
@@ -145,6 +155,7 @@
  rowNum: PropTypes.number,
  handleReset: PropTypes.func,
  handleSearch: PropTypes.func,
  exportButton: PropTypes.func,
};
export default NewTableSearch;