import { createContext, useContext, useEffect } from 'react'; import { toJS } from 'mobx'; import { observer } from 'mobx-react'; import { DATE_FORMAT, stores_Context } from './../../config'; import { SearchOutlined } from '@ant-design/icons'; import { Form, Row, Col, Select, Button, Space, DatePicker } from 'antd'; import moment from 'moment'; // import locale from 'antd/es/date-picker/locale/zh_CN'; import BusinessSelect from './BusinessSelect'; import BusinessUnitSelect from './BusinessUnitSelect'; import GroupSelect from './GroupSelect'; import SiteSelect from './SiteSelect'; import DateTypeSelect from './DataTypeSelect'; import DatePickerCharts from './DatePickerCharts'; import YearPickerCharts from './YearPickerCharts'; import SearchInput from './Input'; import { objectMapper, at, empty } from './../../utils/commons'; import './search.css'; const EditableContext = createContext(); const Option = Select.Option; /** * 搜索表单 * @property defaultValue { initialValue, fieldProps, hides, shows, sort } * * {object} initialValue 默认值 * * {object} fieldProps 表单项属性 * * {array} hides 隐藏的表单项 * * {array} shows 显示的表单项 * * {object} sort 表单项排序 * @property onSubmit */ export default observer((props) => { const { date_picker_store: searchFormStore } = useContext(stores_Context); const [form] = Form.useForm(); const { sort, initialValue, hides, shows, fieldProps } = { sort: '', initialValue: '', fieldProps: '', hides: [], shows: [], ...props.defaultValue, }; const { onSubmit, confirmText } = props; const formValuesMapper = (values) => { const destinationObject = { 'DateType': { key: 'DateType', transform: (value) => value?.key || '', default: '', }, 'HTBusinessUnits': { key: 'HTBusinessUnits', transform: (value) => { return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? (!isNaN(parseInt(value.key), 10) ? value.key : '') : ''; }, default: '', }, 'businessUnits': { key: 'businessUnits', transform: (value) => { return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? (!isNaN(parseInt(value.key), 10) ? value.key : '') : ''; }, default: '', }, 'DepartmentList': { key: 'DepartmentList', transform: (value) => { return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.key : ''; }, default: '', }, 'WebCode': { key: 'WebCode', transform: (value) => { return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.key : ''; }, default: '', }, 'IncludeTickets': { key: 'IncludeTickets', transform: (value) => value?.key || '', default: '', }, 'operator': { key: 'operator', transform: (value) => value?.key || '', default: '', }, 'applyDate': [ { key: 'Date1', transform: (value) => (value === '' || !Array.isArray(value) ? undefined : moment(value[0]).format(DATE_FORMAT)), default: '', }, { key: 'Date2', transform: (value) => (value === '' || !Array.isArray(value) ? undefined : moment(value[1]).format(`${DATE_FORMAT} 23:59:59`)), default: '', }, ], 'applyDate2': [ { key: 'DateDiff1', transform: (value) => (value === '' || !Array.isArray(value) ? undefined : value[0] ? moment(value[0]).format(DATE_FORMAT) : undefined), default: '', }, { key: 'DateDiff2', transform: (value) => (value === '' || !Array.isArray(value) ? undefined : value[1] ? moment(value[1]).format(`${DATE_FORMAT} 23:59:59`) : undefined), default: '', }, ], 'year': [ { key: 'Date1', transform: (value) => (value ? moment(value).format(`YYYY-01-01`) : undefined), default: '', }, { key: 'Date2', transform: (value) => (value ? moment(value).format(`YYYY-12-31 23:59:59`) : undefined), default: '', }, ], 'yearDiff': [ { key: 'DateDiff1', transform: (value) => (value ? moment(value).format(`YYYY-01-01`) : undefined), default: '', }, { key: 'DateDiff2', transform: (value) => (value ? moment(value).format(`YYYY-12-31 23:59:59`) : undefined), default: '', }, ], 'country': { key: 'country', transform: (value) => value?.key || '', default: '', }, }; let dest = {}; const { applyDate, applyDate2, year, yearDiff, ...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; }; const onFinish = (values) => { console.log('Received values of form, origin form value: ', values); const dest = formValuesMapper(values); console.log('form value send to onSubmit:', dest); const str = new URLSearchParams(dest).toString(); searchFormStore.setFormValues(values); searchFormStore.setFormValuesToSub(dest); if (typeof onSubmit === 'function') { onSubmit(null, dest, values, str); } }; const onReset = () => { form.setFieldsValue({ // 'DateType': undefined, }); }; const onValuesChange = (...args) => { const [changedValues, allValues] = args; // console.log('form onValuesChange', Object.keys(changedValues), args); const dest = formValuesMapper(allValues); searchFormStore.setFormValues(allValues); searchFormStore.setFormValuesToSub(dest); }; return ( // layout="inline"
); }); function getFields(props) { const { fieldProps, form } = props; const bigCol = 4 * 2; const midCol = 6; const layoutProps = { gutter: { xs: 8, sm: 8, lg: 16 }, lg: { span: 4 }, sm: { span: 12 }, xs: { span: 24 }, }; const item = (name, sort = 0, render, col) => { const customCol = col || 4; return { 'key': '', sort, name, render, 'hide': false, 'col': { lg: { span: customCol } }, }; }; let baseChildren = []; baseChildren = [ item( 'HTBusinessUnits', 99,