时间至少选一对

怎么实现时间至少选一对   

1、选择生成开始时间和生成结束时间    归档时间为空

2、选择归档开始时间和归档结束时间    生成时间为空

3、四个都选择

image.png

FineReport 槲寄生 发布于 2025-6-17 11:28 (编辑于 2025-6-17 11:28)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
2
snrtuemcLv8专家互助
发布于2025-6-17 11:31(编辑于 2025-6-17 11:34)

直接查询按钮点击事件写js控制

js如下

var a=this.options.form.getWidgetByName("生成开始时间").getValue();

var b=this.options.form.getWidgetByName("生成结束时间").getValue();

var c=this.options.form.getWidgetByName("归档开始时间").getValue();

var d=this.options.form.getWidgetByName("归档结束时间").getValue();

if(a.lenght==0&&b.lenght==0||c.lenght==0&&d.lenght==0)

{

retrun false;

alert("请选择一对时间");

}

最佳回答
1
FR-LeonLv4初级互助
发布于2025-6-17 13:44
1. 添加时间控件

首先需要在参数面板添加四个日期控件:

  • 生成开始时间

  • 生成结束时间

  • 归档开始时间

  • 归档结束时间

20.png

2. 编写JS验证逻辑

使用JavaScript实现以下验证规则:


// 获取控件值

var genStart = this.options.form.getWidgetByName("生成开始时间").getValue();

var genEnd = this.options.form.getWidgetByName("生成结束时间").getValue();

var archiveStart = this.options.form.getWidgetByName("归档开始时间").getValue();

var archiveEnd = this.options.form.getWidgetByName("归档结束时间").getValue();



// 验证逻辑

if((!genStart && !genEnd && !archiveStart && !archiveEnd) ||

(genStart && !genEnd) ||

(!genStart && genEnd) ||

(archiveStart && !archiveEnd) ||

(!archiveStart && archiveEnd)){

alert("请至少选择完整的一对时间(生成时间或归档时间)");

return false;

}



// 检查时间范围

if(genStart && genEnd){

var days = (new Date(genEnd) - new Date(genStart))/(1000*60*60*24);

if(days > 30){

alert("生成时间范围不能超过30天");

return false;

}

}

if(archiveStart && archiveEnd){

var days = (new Date(archiveEnd) - new Date(archiveStart))/(1000*60*60*24);

if(days > 30){

alert("归档时间范围不能超过30天");

return false;

}

}
3. 设置控件事件

将上述JS代码添加到查询按钮的点击事件中,或设置为参数面板的提交校验逻辑。

动画9.gif

注意事项
  1. 确保日期控件格式统一(建议使用yyyy-MM-dd)

  2. 空值判断要同时考虑null和空字符串

  3. 时间差计算时注意日期对象的转换

  4. 可扩展添加开始时间不能大于结束时间的校验

如需更复杂的交互逻辑,可以参考FineReport的日期控件API文档进行扩展开发。

  • 3关注人数
  • 55浏览人数
  • 最后回答于:2025-6-17 13:44
    请选择关闭问题的原因
    确定 取消
    返回顶部