基础antdesign的业务型 短时间控件封装(复制即可使用)

{/*
startFieldName 开始时间标识
endFieldName 结束时间标识
label 同form lable
rules 是否开启规则校验 默认开启
detailData 详情数据,用于编辑回显
dateRange 限制结束时间的范围 例如:开始时间选择了 2024-02-05 ,加上 dateRange=3 后 只能选择 2024-02-05到 2024-02-08内的日期
*/}
import React from 'react';
import { Form, DatePicker, Input } from 'antd';
import moment from 'moment';

const { Item } = Form;

const RangeDatePickerShort = ({ form, startFieldName, endFieldName, label, rules = true, detailData={},dateRange}) => {
  const formItemLayout = {
    labelCol: {
      xs: { span: 24 },
      sm: { span: 4 },
    },
    wrapperCol: {
      xs: { span: 24 },
      sm: { span: 16 },
    },
  };

  const handleDateChange = (fieldName, val) => {
    form.setFieldsValue({
      [fieldName]: val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : null,
    });
  };

  return (
    <Item {...formItemLayout} label={label} style={{ marginBottom: 0 }}>
      <Item
        style={{
          display: 'inline-block',
        }}
      >
        {form.getFieldDecorator("startDatePickerFieldName", {
          rules: [{ required: rules, message: '请选择开始时间' }],
          initialValue: detailData && detailData[startFieldName] ? moment(detailData[startFieldName]) : null
        })(
          <DatePicker
            disabledDate={(val) => {
              let endVal = form.getFieldValue("endDatePickerFieldName");
              if (!val || !endVal) {
                return false;
              }
              return val.valueOf() > endVal.valueOf();
            }}
            showTime
            format="YYYY-MM-DD HH:mm:ss"
            onChange={(val) => handleDateChange(startFieldName, val)}
          />
        )}
      </Item>
      <span
        style={{
          display: 'inline-block',
          width: '24px',
          textAlign: 'center',
        }}
      >
        -
      </span>
      <Item
        style={{
          display: 'inline-block',
        }}
      >
        {form.getFieldDecorator("endDatePickerFieldName", {
          rules: [{ required: rules, message: '请选择结束时间' }],
          initialValue: detailData && detailData[endFieldName] ? moment(detailData[endFieldName]) : null
        })(
          <DatePicker
            disabledDate={(val) => {
              let startVal = form.getFieldValue("startDatePickerFieldName");
              if (!val || !startVal) {
                return false;
              }
              if(dateRange){
                const minDate = moment(startVal).add(dateRange, 'days'); // 加上指定的天数范围
                return val.valueOf() <= startVal.valueOf() || val.valueOf() > minDate.valueOf();
              }else{
                return val.valueOf() <= startVal.valueOf() 
              }
            }}
            showTime
            format="YYYY-MM-DD HH:mm:ss"
            onChange={(val) => handleDateChange(endFieldName, val)}
          />
        )}
      </Item>
      <Item {...formItemLayout} style={{ display: "none" }}>
        {form.getFieldDecorator(startFieldName, {
        })(
          <Input />
        )}
      </Item>
      <Item {...formItemLayout} style={{ display: "none" }}>
        {form.getFieldDecorator(endFieldName, {
        })(
          <Input />
        )}
      </Item>
    </Item>
  );
};

export default RangeDatePickerShort;

此组件已经处理好了返回值,可以直接提交 不需要额外处理时间了


         {/*单项时间控件,自带开始时间,结束时间
         import RangeDatePickerShort from "../RangeDatePickerShort";
         */}
         <RangeDatePickerShort
           form={this.props.form}
           startFieldName="startTime"
           endFieldName="endTime"
           detailData={detailData}
           label={<span><span  style={{color:"red",marginRight:"4px",fontFamily:"SimSun,sans-serif"}}>*</span>短时间控件</span>}
         />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值