jeecgboot / JeecgBoot

🔥「企业级低代码平台」前后端分离架构SpringBoot 2.x/3.x,SpringCloud,Ant Design&Vue3,Mybatis,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领新的开发模式OnlineCoding->代码生成->手工MERGE,帮助Java项目解决70%重复工作,让开发更关注业务,既能快速提高效率,帮助公司节省成本,同时又不失灵活性。
http://www.jeecg.com
Apache License 2.0
40.08k stars 14.7k forks source link

当RangePicker组件值允许开始/结束为空时,表单的fieldMapToTime处理异常 #7216

Open q060831 opened 5 days ago

q060831 commented 5 days ago

版本号:3.7.1

问题描述: 当RangePicker组件值允许开始/结束为空时,表单的fieldMapToTime处理转参数时并未考虑是否允许为,导致如果时间为空时将"Invalid Date"传入后台导致后台报错: ERROR org.jeecg.common.system.query.QueryGenerator:215 - Unparseable date: "Invalid Date"

src/components/Form/src/utils/formUtils.ts

/**
 * 处理时间转换成2个字段
 * @param props
 * @param values
 */
export function handleRangeTimeValue(props, values) {
  const fieldMapToTime = unref(props).fieldMapToTime;
  if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) {
    return values;
  }
  for (const [field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD'] of fieldMapToTime) {
    if (!field || !startTimeKey || !endTimeKey || !values[field]) {
      continue;
    }

    // 【issues/I53G9Y】 日期区间组件有可能是字符串
    let timeValue = values[field];
    if (!Array.isArray(timeValue)) {
      timeValue = timeValue.split(',');
    }
    const [startTime, endTime]: string[] = timeValue;
   // 这里建议加上判断是否有值
    startTime && (values[startTimeKey] = dateUtil(startTime).format(format));
    endTime && (values[endTimeKey] = dateUtil(endTime).format(format));
    Reflect.deleteProperty(values, field);
  }
  return values;
}
zhangdaiscott commented 5 days ago

两个都为空?

q060831 commented 5 days ago

例如:我想查询2024-01-01之前的数据,那么直接选择结束时间,不选开始时间.这个时候startTime就是Invalid Date的,endTime值就是2024-01-01了

zhangdaiscott commented 5 days ago

jl