import React, { useState } from 'react'; import { Input, Button, Select, Radio, DatePicker } from 'antd'; import { SearchOutlined } from '@ant-design/icons'; import styles from './announce.less'; import moment from 'moment'; const { Option } = Select; const { RangePicker } = DatePicker; // 定义搜索表单数据类型 export interface SearchFormData { searchKeyword: string; announceType: string; projectUnit: string; projectLocation: string; publishTime: string; projectType: string; currentProvince: string; dateRange?: [moment.Moment, moment.Moment] | null; } interface SearchProps { initialValues?: SearchFormData; onChange?: (formData: SearchFormData) => void; onSearch?: (formData: SearchFormData) => void; isShowAnnounceType?: boolean; isShowSearch?: boolean; isShowProjectUnit?: boolean; } // 公告类型选项 const announceTypeOptions = [ { label: '全部', value: '全部' }, { label: '采购需求公示', value: '采购需求公示' }, { label: '招标采购公告', value: '招标采购公告' }, { label: '非招标采购公告', value: '非招标采购公告' }, { label: '资格预审公告', value: '资格预审公告' }, { label: '招募公告', value: '招募公告' }, { label: '变更公告', value: '变更公告' }, { label: '中标(中选)候选人公示', value: '中标(中选)候选人公示' }, { label: '中标(中选)结果公示', value: '中标(中选)结果公示' }, { label: '采购失败(流标)公告', value: '采购失败(流标)公告' }, ]; // 第一行省份 const firstRowProvinces = [ '全部', '北京', '天津', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '上海', '江苏', '浙江', '安徽', '福建', '江西', ]; // 发布时间选项 const publishTimeOptions = [ { label: '不限', value: '不限' }, { label: '今天', value: '今天' }, { label: '最近三天', value: '最近三天' }, { label: '最近一周', value: '最近一周' }, { label: '最近一月', value: '最近一月' }, { label: '自定义', value: '自定义' }, ]; // 项目类型选项 const projectTypeOptions = [ { label: '全部', value: '全部' }, { label: '货物', value: '货物' }, { label: '工程', value: '工程' }, { label: '服务', value: '服务' }, { label: '其他', value: '其他' }, ]; const Search: React.FC = ({ initialValues, onChange, onSearch, isShowAnnounceType = true, isShowSearch = true, isShowProjectUnit = true, }) => { // 内部状态管理 const [formData, setFormData] = useState( initialValues || { searchKeyword: '', announceType: '全部', projectUnit: '全选', projectLocation: '中国', publishTime: '不限', projectType: '全部', currentProvince: '全部', dateRange: null, }, ); // 更新表单数据并通知父组件 const updateFormData = (key: keyof SearchFormData, value: any) => { const newFormData = { ...formData, [key]: value }; setFormData(newFormData); if (onChange) { onChange(newFormData); } }; // 处理搜索按钮点击 const handleSearch = () => { if (onSearch) { onSearch(formData); } }; return (
{/* 公告搜索 */} {isShowSearch && (
公告搜索
)} {/* 公告类型 */} {isShowAnnounceType && (
公告类型
updateFormData('announceType', e.target.value)} buttonStyle="solid" > {announceTypeOptions.map((option) => ( {option.label} ))}
)} {/* 项目所属单位 */} {isShowProjectUnit && (
所属单位
)} {/* 项目所在地 */}
项目所在地
updateFormData('currentProvince', e.target.value)} buttonStyle="solid" >
{firstRowProvinces.map((province) => ( {province} ))}
{/* 发布时间 */}
发布时间
updateFormData('publishTime', e.target.value)} buttonStyle="solid" > {publishTimeOptions.map((option) => ( {option.label} ))} {formData.publishTime === '自定义' && ( updateFormData('dateRange', dates)} /> )}
{/* 项目类型 */}
项目类型
updateFormData('projectType', e.target.value)} buttonStyle="solid" > {projectTypeOptions.map((option) => ( {option.label} ))}
); }; export default Search;