header.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React, { forwardRef, useImperativeHandle, useRef } from 'react';
  2. import Style from './index.less';
  3. import { Col, Form, Row } from 'antd';
  4. import type { TimeType } from './timePicker';
  5. import RangePicker from './timePicker';
  6. export interface HeaderProps {
  7. title: string;
  8. /**
  9. * 参数发生变化时的回调
  10. * @param data
  11. */
  12. onParamsChange: (data: any) => void;
  13. extraParams?: {
  14. key: string;
  15. Children: React.ReactNode;
  16. };
  17. initialValues?: any;
  18. /**
  19. * true 关闭初始化时触发onParamsChange
  20. */
  21. closeInitialParams?: boolean;
  22. defaultTime?: TimeType;
  23. showTime?: boolean;
  24. }
  25. export default forwardRef((props: HeaderProps, ref) => {
  26. const [form] = Form.useForm();
  27. const isCloseInitial = useRef<boolean>(false);
  28. const change = async (data: any) => {
  29. if (props.onParamsChange) {
  30. props.onParamsChange(data);
  31. }
  32. };
  33. useImperativeHandle(ref, () => ({
  34. getValues: form.getFieldsValue,
  35. }));
  36. return (
  37. <div className={Style.header}>
  38. <div className={Style.title}>{props.title}</div>
  39. <div className={Style.form}>
  40. <Form
  41. form={form}
  42. colon={false}
  43. layout={'inline'}
  44. preserve={false}
  45. initialValues={props.initialValues}
  46. onValuesChange={(_, allValue) => {
  47. if (props.closeInitialParams && !isCloseInitial.current) {
  48. isCloseInitial.current = true;
  49. } else {
  50. change(allValue);
  51. }
  52. }}
  53. >
  54. <Row style={{ width: '100%' }}>
  55. {props.extraParams && (
  56. <Col span={6}>
  57. <Form.Item name={props.extraParams.key}>{props.extraParams.Children}</Form.Item>
  58. </Col>
  59. )}
  60. <Col span={props.extraParams ? 18 : 24}>
  61. <div style={{ display: 'flex', justifyContent: 'flex-end' }}>
  62. <Form.Item noStyle name={'time'}>
  63. <RangePicker defaultTime={props.defaultTime} showTime={props.showTime} />
  64. </Form.Item>
  65. </div>
  66. </Col>
  67. </Row>
  68. </Form>
  69. </div>
  70. </div>
  71. );
  72. });