antd RangePicker组件设置默认值

  • Post author:
  • Post category:其他


公司在用react及antd进行后台管理系统开发,有一个表单页需要时间查询,功能类似于下图
在这里插入图片描述

选择每个选项会修改后面的日期选择器的值,比如选择本月,就会加以限制只能在本月范围内选择,且默认值变为本月开始到今天为止的时间。

在这里插入图片描述

官方示例的demo没有相关功能,只能自己扩展,不多BB直接上代码。

表单HTML部分代码:

    <Form
      layout="horizontal"
      name="userForm"
      form={form}
      initialValues={{
        createdDate: 'all'
      }}
      onFinish={onFinish}
    >
      <Row>
            <Col span={10} style={{padding: '0px 12px 0px 24px'}}>
              <Form.Item label="订单日期" name='createdDate'>
                <Radio.Group onChange={chengSelect}>
                  <Radio.Button value="all">全部</Radio.Button>
                  <Radio.Button value="day">今日</Radio.Button>
                  <Radio.Button value="week">本周</Radio.Button>
                  <Radio.Button value="month">本月</Radio.Button>
                  <Radio.Button value="year">本年</Radio.Button>
                </Radio.Group>
              </Form.Item>
            </Col>
           <Col span={6} style={{padding: '0px 12px 0px 12px'}}>
             <Form.Item name='orderData'>
             <RangePicker onChange={onChange} disabledDate={disabledDate} value={[moment(`2020/08/25`, dateFormat), moment(`2020/08/25`, dateFormat)]}/>
             </Form.Item>
           </Col>


        <Col span={8} style={{padding: '0px 24px 0 12px', float: 'right'}}>
          <Form.Item style={{float: 'right'}}>
            <Button type="primary" style={{marginLeft: '10px'}} onClick={handleSearch}>
              查询
            </Button>
          </Form.Item>
        </Col>
      </Row>
    </Form>

js方面代码

// 初始化的一些变量
const [form] = Form.useForm();
const [dateObj, setDateObj] = useState<{}>({});
const [dateFormat, setDateFormat] = useState('YYYY/MM/DD');
const [str, setStr] = useState<string>('');

// 点击查询提交表单
  const handleSearch = () => {
    form.submit();
  }
  
  // 表单提交的方法
  const onFinish = (value: SearchFormParams) => {
    // value是表单内的值,dateObj是开始日期和结束日期
    //setParamsData()是搜索的方法
    setParamsData({...value, ...dateObj });
    actionRef.current.reload();
  }
  
  // 当直接选择rangePicker的时候直接修改开始结束日期就完了
const onChange = (dates, dateStrings) =>{
    setDateObj({
      startDate: dateStrings[0].replace(/-/g, "/"),
      endDate: dateStrings[1].replace(/-/g, "/")
    })
  }

// 设置禁选范围
  const disabledDate = (current)=>{
    return current < moment(new Date(str)) || current > moment().endOf('day')
  }

  // 如果是选择年月周日什么的的方法
  const chengSelect = (e)=>{
    let date = new Date();
    let Y = date.getFullYear();
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
    let D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
    switch(e.target.value){
      case 'day':
        setStr(`${Y}/${M}/${D}`);
        form.setFieldsValue({ orderData: [moment(`${Y}/${M}/${D}`, dateFormat), moment(`${Y}/${M}/${D}`, dateFormat)]});
        setDateObj({
          startDate: `${Y}/${M}/${D}`,
          endDate: `${Y}/${M}/${D}`
        })
        break;
      case 'week':
        let dateWeek = date.getDay();
        if (dateWeek > 0 && dateWeek <6){
          setStr(`${Y}/${M}/${D - dateWeek + 1}`);
          form.setFieldsValue({ orderData: [moment(`${Y}/${M}/${D - dateWeek + 1}`, dateFormat), moment(`${Y}/${M}/${D}`, dateFormat)] });
          setDateObj({
            startDate: `${Y}/${M}/${D - dateWeek + 1}`,
            endDate: `${Y}/${M}/${D}`
          })
        } else if(dateWeek == 0) {
          setStr(`${Y}/${M}/${D - 6}`);
          form.setFieldsValue({ orderData: [moment(`${Y}/${M}/${D - 6}`, dateFormat), moment(`${Y}/${M}/${D}`, dateFormat)] });
          setDateObj({
            startDate: `${ Y } / ${ M } / ${ D - 6}`,
            endDate: `${Y}/${M}/${D}`
          })
        } else if (dateWeek == 6) {
          setStr(`${Y}/${M}/${D - 5}`);
          form.setFieldsValue({ orderData: [moment(`${Y}/${M}/${D - 5}`, dateFormat), moment(`${Y}/${M}/${D}`, dateFormat)] });
          setDateObj({
            startDate: `${Y}/${M}/${D - 5}`,
            endDate: `${Y}/${M}/${D}`
          })
        }
        break;
      case 'month':
        setStr(`${Y}/${M}/01`);
        form.setFieldsValue({ orderData: [moment(`${Y}/${M}/01`, dateFormat), moment(`${Y}/${M}/${D}`, dateFormat)] });
        setDateObj({
          startDate: `${Y}/${M}/01`,
          endDate: `${Y}/${M}/${D}`
        })
        break;
      case 'year':
        setStr(`${Y}/01/01`);
        form.setFieldsValue({ orderData: [moment(`${Y}/01/01`, dateFormat), moment(`${Y}/${M}/${D}`, dateFormat)] });
        setDateObj({
          startDate: `${Y}/01/01`,
          endDate: `${Y}/${M}/${D}`
        })
        break;
      default:
        setStr(``);
        form.setFieldsValue({ orderData: ['', '']});
        setDateObj({
          startDate: ``,
          endDate: ``
        })
        break;
    }

以上就是扩展的全部代码了,如果对你有所帮助,那是最好的。



版权声明:本文为oldpubcat原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。