根据选择的日期控制时间段是否可选

请教一下大佬们,我有四个时间段,分别对应数据库中存储的ID的A、B、C、D,我想实现根据选择的日期刷新还有哪些时间段可以选,例如3.25日有人选择了09:00-10:00,10:30-11:30,那么这两个日期则就不能选择,只能选择后面两个。我已经将数据库中存储的值放到了参数面板的lable里面,里面显示的内容是A,B

FineReport Guohc6806 发布于 2025-3-17 20:43 (编辑于 2025-3-17 20:46)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Guohc6806Lv4见习互助
发布于2025-3-19 00:13

// 获取参数面板中的 label 控件

var labelWidget = _g().parameterEl.getWidgetByName("lbtime");

var labelValue = labelWidget.getValue();

// 将值转换为数组(例如 ["A", "B"])

var reservedTimeSlots = labelValue ? labelValue.split(',') : [];

console.log("已禁用的选项值:", reservedTimeSlots);

// 获取横向扩展的单选按钮组实例数组

var radioWidgets = _g().getWidgetsByName("radioGroup");

var radioInstances = radioWidgets.buttonArray; // 关键:从 buttonArray 获取实例

// 遍历每个实例

for (var i = 0; i < radioInstances.length; i++) {

    var radioInstance = radioInstances[i];

    

    // 获取当前实例的选项值和 DOM 元素

    var optionValue = radioInstance.options.fieldValue; // 选项值(例如 "A")

    var $btn = radioInstance.$btn; // 获取按钮的 DOM 元素(关键!)

    var $input = $btn.find('input[type="radio"]'); // 获取 input 元素

    

    // 检查是否需要禁用

    if (reservedTimeSlots.indexOf(optionValue) > -1) {

        // 禁用当前选项(直接操作 DOM)

        $input.prop('disabled', true); // 禁用 input

        $btn.css('opacity', '0.5'); // 置灰样式

        $btn.css('pointer-events', 'none'); // 禁用鼠标事件

        $btn.attr('title', '已禁用'); // 添加提示

        

        // 添加“已预约”文本

        if (!$btn.find('.reserved-text').length) {

            $btn.append('<span class="reserved-text" style="color: red; margin-left: 5px;">已预约</span>');

        }

        

        console.log("已禁用选项:", optionValue);

    } else {

        $input.prop('disabled', false);

        $btn.css('opacity', '');

        $btn.css('pointer-events', 'auto'); // 恢复鼠标事件

        $btn.attr('title', '');

        

        // 移除“已预约”文本

        $btn.find('.reserved-text').remove();

    }

}

// 监听参数面板的值变化

labelWidget.on('valueChange', function() {

    var labelValue = this.getValue();

    var reservedTimeSlots = labelValue ? labelValue.split(',') : [];

    

    for (var i = 0; i < radioInstances.length; i++) {

        var radioInstance = radioInstances[i];

        var optionValue = radioInstance.options.fieldValue;

        var $btn = radioInstance.$btn;

        var $input = $btn.find('input[type="radio"]');

        

        if (reservedTimeSlots.indexOf(optionValue) > -1) {

            $input.prop('disabled', true);

            $btn.css('opacity', '0.5');

            $btn.css('pointer-events', 'none');

            $btn.attr('title', '已禁用');

            

            // 添加“已预约”文本

            if (!$btn.find('.reserved-text').length) {

                $btn.append('<span class="reserved-text" style="color: red; margin-left: 5px;">已预约</span>');

            }

        } else {

            $input.prop('disabled', false);

            $btn.css('opacity', '');

            $btn.css('pointer-events', 'auto');

            $btn.attr('title', '');

            

            // 移除“已预约”文本

            $btn.find('.reserved-text').remove();

        }

    }

});

最佳回答
0
用户k6280494Lv6资深互助
发布于2025-3-18 08:03(编辑于 2025-3-18 08:03)
  • 1关注人数
  • 51浏览人数
  • 最后回答于:2025-3-19 00:13
    请选择关闭问题的原因
    确定 取消
    返回顶部