zoukankan      html  css  js  c++  java
  • react+antd 开始时间与截止时间的验证

    <Form.Item label="开始时间">
                                {getFieldDecorator('planStartTime', {
                                    rules: [
                                        {
                                            validator(_, value, callback) {
                                                if (value && form.getFieldValue('planEndTime')) {
                                                    const endTime = form
                                                        .getFieldValue('planEndTime')
                                                        .format(
                                                            endMode === 'date'
                                                                ? 'YYYY-MM-DD 23:59:59'
                                                                : 'YYYY-MM-DD HH:mm:ss'
                                                        );
                                                    const newValue = value.format(
                                                        startMode === 'date' ? 'YYYY-MM-DD 00:00:00' : 'YYYY-MM-DD HH:mm:ss'
                                                    );
                                                    if (endTime && moment(newValue) > moment(endTime)) {
                                                        return callback('不可大于截止时间');
                                                    }
                                                    return callback();
                                                }
                                                return callback();
                                            }
                                        }
                                    ],
                                    initialValue: getPath(state, 'taskParam.planStartTime')
                                        ? moment(getPath(state, 'taskParam.planStartTime'))
                                        : null
                                })(
                                    <DatePicker
                                        style={{  '100%' }}
                                        showTime
                                        placeholder="请输入开始时间"
                                        format={startMode === 'date' ? 'MM-DD' : 'MM-DD HH:mm'}
                                        onOk={e => handleTime(e, 'start')}
                                        onChange={(e1, e2) => handleTimeChange(e1, e2, 'start')}
                                        onPanelChange={(e1, e2) => handleTimePanel(e1, e2, 'start')}
                                    />
                                )}
                            </Form.Item>
                            <Form.Item label="截止时间">
                                {getFieldDecorator('planEndTime', {
                                    rules: [
                                        {
                                            required: true,
                                            message: '请输入截止时间'
                                        },
                                        {
                                            validator(_, value, callback) {
                                                if (value && form.getFieldValue('planStartTime')) {
                                                    const startTime = form
                                                        .getFieldValue('planStartTime')
                                                        .format(
                                                            startMode === 'date'
                                                                ? 'YYYY-MM-DD 00:00:00'
                                                                : 'YYYY-MM-DD HH:mm:ss'
                                                        );
                                                    const newValue = value.format(
                                                        endMode === 'date' ? 'YYYY-MM-DD 23:59:59' : 'YYYY-MM-DD HH:mm:ss'
                                                    );
                                                    if (startTime && moment(newValue) < moment(startTime)) {
                                                        return callback('不可小于开始时间');
                                                    }
                                                    return callback();
                                                }
                                                return callback();
                                            }
                                        }
                                    ],
                                    initialValue: getPath(state, 'taskParam.planEndTime')
                                        ? moment(getPath(state, 'taskParam.planEndTime'))
                                        : null
                                })(
                                    <DatePicker
                                        style={{  '100%' }}
                                        showTime
                                        placeholder="请输入截止时间"
                                        format={endMode === 'date' ? 'MM-DD' : 'MM-DD HH:mm'}
                                        onOk={e => handleTime(e, 'end')}
                                        onChange={(e1, e2) => handleTimeChange(e1, e2, 'end')}
                                        onPanelChange={(e1, e2) => handleTimePanel(e1, e2, 'end')}
                                    />
                                )}
                            </Form.Item>
    

      ↑表单项内判断开始时间是否小于结束时间

    ↓两个日期表单项需要有两种展示方式【当用户只选择到日期-展示日期;当用户选择到时间-展示时间】

        const handleTime = (value, type) => {
            if (type === 'start') {
                setStartDate(value.format(startMode === 'date' ? 'YYYY-MM-DD 00:00:00' : 'YYYY-MM-DD HH:mm:ss'));
            } else {
                setEndDate(value.format(endMode === 'date' ? 'YYYY-MM-DD 23:59:59' : 'YYYY-MM-DD HH:mm:ss'));
            }
        };
        const handleTimePanel = (value, mode, type) => {
            if (type === 'start') {
                setStartMode(mode);
            } else {
                setEndMode(mode);
            }
        };
    
        const handleTimeChange = (date, dateString, type) => {
            if (!dateString) {
                if (type === 'start') {
                    setStartDate('');
                } else {
                    setEndDate('');
                }
            }
        };
    

      ↓相关hooks

        const [startMode, setStartMode] = useState(
            getPath(state, 'taskParam.planStartTime') &&
                getPath(state, 'taskParam.planStartTime').indexOf('00:00:00') === -1
                ? 'time'
                : 'date'
        );
        const [endMode, setEndMode] = useState(
            getPath(state, 'taskParam.planEndTime') && getPath(state, 'taskParam.planEndTime').indexOf('23:59:59') === -1
                ? 'time'
                : 'date'
        );
        const [startDate, setStartDate] = useState('');
        const [endDate, setEndDate] = useState('');
    

      ↓提交表单时param修改

    const params = {
                            ...values,
                            id: 0,
                            planStartTime:
                                startDate ||
                                (values.planStartTime &&
                                    values.planStartTime.format(
                                        startMode === 'date' ? 'YYYY-MM-DD 00:00:00' : 'YYYY-MM-DD HH:mm:ss'
                                    )) ||
                                '',
                            planEndTime:
                                endDate ||
                                (values.planEndTime &&
                                    values.planEndTime.format(
                                        endMode === 'date' ? 'YYYY-MM-DD 23:59:59' : 'YYYY-MM-DD HH:mm:ss'
                                    )) ||
                                ''
                        };
    

      

  • 相关阅读:
    windows下安装部署RocketMQ
    Windows安装RabbitMQ
    HttpClient工具类
    Docker部署Spring Boot项目
    在Docker中安装Redis以及主从环境搭建
    df命令得到一个诡异的现象
    一个“稍后再读”的软件 POCKET
    也是关于 Stay Hungry. Stay Foolish.
    改用thebrain做思维导图
    文件系统只读,一个没有解决的问题(续)
  • 原文地址:https://www.cnblogs.com/nangras/p/13161681.html
Copyright © 2011-2022 走看看