import { useEffect } from 'react'; import { Form, Input, Row, Col, Select, DatePicker, Space, Button } from 'antd'; import { objectMapper, at } from '@/utils/commons'; import { DATE_FORMAT, SMALL_DATETIME_FORMAT } from '@/config'; import useFormStore from '@/stores/Form'; import {useDatePresets} from '@/hooks/useDatePresets'; import { useTranslation } from 'react-i18next'; import { fetchJSON } from '@/utils/request'; import { HT_HOST } from '@/config'; import SearchInput from './SearchInput'; import AuditStateSelector from './AuditStateSelector'; //供应商列表 export const fetchVendorList = async (q) => { const { errcode, result } = await fetchJSON(`${HT_HOST}/Service_BaseInfoWeb/VendorList`, { q }) return errcode !== 0 ? [] : result } const { RangePicker } = DatePicker; const SearchForm = ({ initialValue, onSubmit, onReset, confirmText, formName, loading, ...props }) => { const { t } = useTranslation(); const presets = useDatePresets(); const [formValues, setFormValues] = useFormStore((state) => [state.formValues, state.setFormValues]); const [formValuesToSub, setFormValuesToSub] = useFormStore((state) => [state.formValuesToSub, state.setFormValuesToSub]); const [form] = Form.useForm(); const { sort, hides, shows, fieldProps, fieldComProps } = { sort: '', // initialValue: '', fieldProps: '', fieldComProps: '', hides: [], shows: [], ...props.fieldsConfig, }; const readValues = { ...initialValue, ...formValues }; const formValuesMapper = (values) => { const destinationObject = { 'keyword': { key: 'keyword', transform: (value) => value || '' }, 'referenceNo': { key: 'referenceNo', transform: (value) => value || '' }, 'dates': [ { key: 'startdate', transform: (arrVal) => (arrVal ? arrVal[0].format(DATE_FORMAT) : '') }, { key: 'enddate', transform: (arrVal) => (arrVal ? arrVal[1].format(DATE_FORMAT) : '') }, { key: 'starttime', transform: (arrVal) => (arrVal ? arrVal[0].format(DATE_FORMAT) : '') }, { key: 'endtime', transform: (arrVal) => (arrVal ? arrVal[1].format(SMALL_DATETIME_FORMAT) : '') }, ], 'invoiceStatus': { key: 'invoiceStatus', transform: (value) => value?.value || value?.key || '', default: '' }, 'audit_state': { key: 'audit_state', transform: (value) => value?.value || value?.key || '', default: '' }, 'agency': { key: 'agency', transform: (value) => { return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.value : ''; }, }, 'year': [ { key: 'year', transform: (arrVal) => (arrVal ? arrVal.format('YYYY') : '') }, ], }; let dest = {}; const { dates, ...omittedValue } = values; dest = { ...omittedValue, ...objectMapper(values, destinationObject) }; for (const key in dest) { if (Object.prototype.hasOwnProperty.call(dest, key)) { dest[key] = typeof dest[key] === 'string' ? (dest[key] || '').trim() : dest[key]; } } // omit empty // Object.keys(dest).forEach((key) => (dest[key] == null || dest[key] === '' || dest[key].length === 0) && delete dest[key]); return dest; }; useEffect(() => { const dest = formValuesMapper(formValues); setFormValuesToSub(dest); return () => {}; }, []); const onFinish = (values) => { console.log('Received values of form, origin form value: \n', values); const dest = formValuesMapper(values); console.log('form value send to onSubmit:\n', dest); const str = new URLSearchParams(dest).toString(); setFormValues(values); setFormValuesToSub(dest); if (typeof onSubmit === 'function') { onSubmit(null, dest, values, str); } }; const handleReset = () => { form.setFieldsValue({ // 'DateType': undefined, }); if (typeof onReset === 'function') { onReset(); } }; const onValuesChange = (changedValues, allValues) => { const dest = formValuesMapper(allValues); setFormValues(allValues); setFormValuesToSub(dest); // console.log('form onValuesChange', Object.keys(changedValues), args); }; return ( <>
{/* */} {getFields({ sort, initialValue: readValues, hides, shows, fieldProps, fieldComProps, form, presets, t })} {/* 'textAlign': 'right' */} {/* */} {/* */}
); }; function getFields(props) { const { fieldProps, fieldComProps, form, presets, t } = props; const bigCol = 4 * 2; const midCol = 6; const layoutProps = { // gutter: { xs: 8, sm: 8, lg: 16 }, lg: { span: 4 }, md: { span: 8 }, sm: { span: 12 }, xs: { span: 24 }, }; const item = (name, sort = 0, render, col) => { const customCol = col || 4; const mdCol = customCol * 2; return { 'key': '', sort, name, render, 'hide': false, 'col': { lg: { span: customCol }, md: { span: mdCol < 8 ? 10 : mdCol }, flex: mdCol < 8 ? '1 0' : '' }, }; }; let baseChildren = []; baseChildren = [ item( 'keyword', 99, , fieldProps?.keyword?.col || 6 ), item( 'referenceNo', 99, , fieldProps?.referenceNo?.col || 6 ), item( 'PNR', 99, , fieldProps?.PNR?.col || 4 ), item( 'invoiceStatus', 99, , fieldProps?.username?.col || 4 ), item( 'realname', 99, , fieldProps?.realname?.col || 4 ), /** * */ item( 'year', 99, , fieldProps?.year?.col || 3 ), item( 'agency', 99, , fieldProps?.agency?.col || 6 ), item( 'audit_state', 99, , fieldProps?.audit_state?.col || 3 ), ]; baseChildren = baseChildren .map((x) => { x.hide = false; if (props.sort === undefined) { return x; } const tmpSort = props.sort; for (const key in tmpSort) { if (Object.prototype.hasOwnProperty.call(tmpSort, key)) { if (x.name === key) { x.sort = tmpSort[key]; } } } return x; }) .map((x) => { if (props.hides.length === 0 && props.shows.length === 0) { return x; } if (props.hides.length === 0) { x.hide = !props.shows.includes(x.name); } else if (props.shows.length === 0) { x.hide = props.hides.includes(x.name); } return x; }) .filter((x) => !x.hide) .sort((a, b) => { return a.sort < b.sort ? -1 : 1; }); const children = []; const leftStyle = {}; // { borderRight: '1px solid #dedede' }; for (let i = 0; i < baseChildren.length; i++) { let style = {}; // { padding: '0px 2px' }; style = i % 2 === 0 && baseChildren[i].col === 12 ? { ...style, ...leftStyle } : style; style = !baseChildren[i].hide ? { ...style, display: 'block' } : { ...style, display: 'none' }; const Item = ( {baseChildren[i].render} ); children.push(Item); } return children; } export default SearchForm;