| import React from 'react';  | 
| import { Input, Button, Space, Select, DatePicker } from 'antd';  | 
| import { FormattedMessage, useIntl } from '@umijs/max';  | 
| import Http from '@/utils/http';  | 
| import moment from 'moment';  | 
|   | 
| const NONE_OPTION = -9999;  | 
| const DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';  | 
|   | 
| const TextFilter = (props) => {  | 
|     const intl = useIntl();  | 
|     const [condition, setCondition] = React.useState('');  | 
|   | 
|     return (  | 
|         <div style={{ padding: 8 }}>  | 
|             <Input  | 
|                 style={{ width: 188, marginBottom: 8, display: 'block' }}  | 
|                 placeholder={intl.formatMessage({ id: 'commont.enter', defaultMessage: '请输入' })}  | 
|                 value={condition}  | 
|                 onChange={e => {  | 
|                     props.setSelectedKeys(e.target.value ? [e.target.value] : []);  | 
|                     setCondition(e.target.value)  | 
|                 }}  | 
|             />  | 
|             <Space>  | 
|                 <Button  | 
|                     type="primary"  | 
|                     onClick={() => {  | 
|                         props.confirm();  | 
|                         if (condition === '' || condition === null || condition === undefined) {  | 
|                             props.setSearchParam(prevState => {  | 
|                                 const state = { ...prevState };  | 
|                                 delete state[props.name];  | 
|                                 return state;  | 
|                             })  | 
|                         } else {  | 
|                             props.setSearchParam(prevState => ({  | 
|                                 ...prevState,  | 
|                                 [props.name]: condition  | 
|                             }));  | 
|                         }  | 
|                         props.actionRef.current?.reload();  | 
|                     }}  | 
|                     size="small"  | 
|                     style={{ width: 90 }}  | 
|                 >  | 
|                     <FormattedMessage id='common.submit' defaultMessage='确定' />  | 
|                 </Button>  | 
|                 <Button  | 
|                     onClick={() => {  | 
|                         setCondition('')  | 
|                         props.setSelectedKeys([]);  | 
|                         props.clearFilters()  | 
|   | 
|                         props.confirm();  | 
|                         props.setSearchParam(prevState => {  | 
|                             const state = { ...prevState };  | 
|                             delete state[props.name];  | 
|                             return state;  | 
|                         })  | 
|                         props.actionRef.current?.reload();  | 
|                     }}  | 
|                     size="small"  | 
|                     style={{ width: 90 }}  | 
|                 >  | 
|                     <FormattedMessage id='common.reset' defaultMessage='重置' />  | 
|                 </Button>  | 
|             </Space>  | 
|         </div>  | 
|     );  | 
| }  | 
|   | 
| const SelectFilter = (props) => {  | 
|     const intl = useIntl();  | 
|     const [currentOption, setCurrentOption] = React.useState();  | 
|   | 
|     return (  | 
|         <div style={{ padding: 8 }}>  | 
|             <div>  | 
|                 <Select  | 
|                     style={{ width: 188, marginBottom: 8, display: 'block' }}  | 
|                     placeholder={intl.formatMessage({ id: 'commont.select', defaultMessage: '请选择' })}  | 
|                     value={currentOption === NONE_OPTION ? undefined : currentOption}  | 
|                     onChange={value => {  | 
|                         setCurrentOption(value)  | 
|                         props.setSelectedKeys(value !== undefined && value !== null ? [value] : []);  | 
|                     }}  | 
|                 >  | 
|                     {props.data.map(item => (  | 
|                         <Select.Option key={item.value} value={item.value}>  | 
|                             {item.label}  | 
|                         </Select.Option>  | 
|                     ))}  | 
|                 </Select>  | 
|             </div>  | 
|             <Space>  | 
|                 <Button  | 
|                     type="primary"  | 
|                     onClick={() => {  | 
|                         props.confirm();  | 
|                         if (currentOption === NONE_OPTION) {  | 
|                             props.setSearchParam(prevState => {  | 
|                                 const state = { ...prevState };  | 
|                                 delete state[props.name];  | 
|                                 return state;  | 
|                             })  | 
|                         } else {  | 
|                             props.setSearchParam(prevState => ({  | 
|                                 ...prevState,  | 
|                                 [props.name]: currentOption  | 
|                             }));  | 
|                         }  | 
|                         props.actionRef.current?.reload();  | 
|                     }}  | 
|                     size="small"  | 
|                     style={{ width: 90 }}  | 
|                 >  | 
|                     <FormattedMessage id='common.submit' defaultMessage='确定' />  | 
|                 </Button>  | 
|                 <Button  | 
|                     onClick={() => {  | 
|                         setCurrentOption(NONE_OPTION)  | 
|                         props.setSelectedKeys([]);  | 
|                         props.clearFilters();  | 
|   | 
|                         props.confirm();  | 
|                         props.setSearchParam(prevState => {  | 
|                             const state = { ...prevState };  | 
|                             delete state[props.name];  | 
|                             return state;  | 
|                         })  | 
|                         props.actionRef.current?.reload();  | 
|                     }}  | 
|                     size="small"  | 
|                     style={{ width: 90 }}  | 
|                 >  | 
|                     <FormattedMessage id='common.reset' defaultMessage='重置' />  | 
|                 </Button>  | 
|             </Space>  | 
|         </div>  | 
|     );  | 
| }  | 
|   | 
| const DatetimeRangeFilter = (props) => {  | 
|     const intl = useIntl();  | 
|     const [dates, setDates] = React.useState([null, null]);  | 
|     const [startDate, setStartDate] = React.useState(null);  | 
|     const [endDate, setEndDate] = React.useState(null);  | 
|   | 
|     return (  | 
|         <div style={{ padding: 8 }}>  | 
|             <div>  | 
|                 <Space direction="vertical" size={12}>  | 
|                     <DatePicker.RangePicker  | 
|                         showTime  | 
|                         value={dates}  | 
|                         onChange={changeDates => {  | 
|                             setDates(changeDates);  | 
|                             if (changeDates && changeDates[0] && changeDates[1]) {  | 
|                                 const changeStartStr = moment(changeDates[0]).format(DATE_FORMAT);  | 
|                                 setStartDate(changeStartStr);  | 
|                                 const changeEndStr = moment(changeDates[1]).format(DATE_FORMAT);  | 
|                                 setEndDate(changeEndStr);  | 
|                                 props.setSelectedKeys([changeStartStr + '-' + changeEndStr]);  | 
|                             }  | 
|                         }}  | 
|                     />  | 
|                     <Space>  | 
|                         <Button  | 
|                             type="primary"  | 
|                             onClick={() => {  | 
|                                 props.confirm();  | 
|                                 if (!dates[0] && !dates[1]) {  | 
|                                     props.setSearchParam(prevState => {  | 
|                                         const nextState = { ...prevState };  | 
|                                         delete nextState[props.name + 'Range'];  | 
|                                         return nextState;  | 
|                                     });  | 
|                                 } else {  | 
|                                     props.setSearchParam(prevState => ({  | 
|                                         ...prevState,  | 
|                                         [props.name + 'Range']: [startDate, endDate]  | 
|                                     }));  | 
|                                 }  | 
|                                 props.actionRef.current?.reload();  | 
|                             }}  | 
|                             size="small"  | 
|                         >  | 
|                             <FormattedMessage id='common.submit' defaultMessage='确定' />  | 
|                         </Button>  | 
|                         <Button  | 
|                             onClick={() => {  | 
|                                 setDates([null, null]);  | 
|                                 setStartDate(null);  | 
|                                 setEndDate(null);  | 
|                                 props.setSelectedKeys([]);  | 
|                                 props.clearFilters();  | 
|   | 
|                                 props.confirm();  | 
|                                 props.setSearchParam(prevState => {  | 
|                                     const nextState = { ...prevState };  | 
|                                     delete nextState[props.name + 'Range'];  | 
|                                     return nextState;  | 
|                                 });  | 
|                                 props.actionRef.current?.reload();  | 
|                             }}  | 
|                             size="small"  | 
|                         >  | 
|                             <FormattedMessage id='common.reset' defaultMessage='重置' />  | 
|                         </Button>  | 
|                     </Space>  | 
|                 </Space>  | 
|             </div>  | 
|         </div>  | 
|     );  | 
| }  | 
|   | 
| const LinkFilter = (props) => {  | 
|     const intl = useIntl();  | 
|     const [currentOption, setCurrentOption] = React.useState();  | 
|     const [options, setOptions] = React.useState([]);  | 
|   | 
|     const fetchData = async (value) => {  | 
|         return await Http.doPostForm(`api/${props.major}/query`, { condition: value });  | 
|     }  | 
|   | 
|     async function initOptions(value) {  | 
|         const { data } = await fetchData(value);  | 
|         setOptions(data);  | 
|     }  | 
|   | 
|     React.useEffect(() => {  | 
|         initOptions()  | 
|     }, []);  | 
|   | 
|     const handleSearch = (value) => {  | 
|         initOptions(value)  | 
|     }  | 
|   | 
|     return (  | 
|         <div style={{ padding: 8 }}>  | 
|             <div>  | 
|                 <Select  | 
|                     style={{ width: 188, marginBottom: 8, display: 'block' }}  | 
|                     placeholder={intl.formatMessage({ id: 'commont.select', defaultMessage: '请选择' })}  | 
|                     value={currentOption === NONE_OPTION ? undefined : currentOption}  | 
|                     onChange={value => {  | 
|                         setCurrentOption(value)  | 
|                         props.setSelectedKeys(value !== undefined && value !== null ? [value] : []);  | 
|                     }}  | 
|                     onSearch={handleSearch}  | 
|                     options={options.map(item => ({ value: item.value, label: item.label }))}  | 
|                     filterOption={false}  | 
|                     showSearch={true}  | 
|                 >  | 
|                 </Select>  | 
|             </div>  | 
|             <Space>  | 
|                 <Button  | 
|                     type="primary"  | 
|                     onClick={() => {  | 
|                         props.confirm();  | 
|                         if (currentOption === NONE_OPTION) {  | 
|                             props.setSearchParam(prevState => {  | 
|                                 const state = { ...prevState };  | 
|                                 delete state[props.name];  | 
|                                 return state;  | 
|                             })  | 
|                         } else {  | 
|                             props.setSearchParam(prevState => ({  | 
|                                 ...prevState,  | 
|                                 [props.name]: currentOption  | 
|                             }));  | 
|                         }  | 
|                         props.actionRef.current?.reload();  | 
|                     }}  | 
|                     size="small"  | 
|                     style={{ width: 90 }}  | 
|                 >  | 
|                     <FormattedMessage id='common.submit' defaultMessage='确定' />  | 
|                 </Button>  | 
|                 <Button  | 
|                     onClick={() => {  | 
|                         setCurrentOption(NONE_OPTION)  | 
|                         props.setSelectedKeys([]);  | 
|                         props.clearFilters();  | 
|                         initOptions()  | 
|   | 
|                         props.confirm();  | 
|                         props.setSearchParam(prevState => {  | 
|                             const state = { ...prevState };  | 
|                             delete state[props.name];  | 
|                             return state;  | 
|                         })  | 
|                         props.actionRef.current?.reload();  | 
|                     }}  | 
|                     size="small"  | 
|                     style={{ width: 90 }}  | 
|                 >  | 
|                     <FormattedMessage id='common.reset' defaultMessage='重置' />  | 
|                 </Button>  | 
|             </Space>  | 
|         </div>  | 
|     );  | 
| }  | 
|   | 
|   | 
| export { TextFilter, SelectFilter, DatetimeRangeFilter, LinkFilter }; |