日期控件有没有办法设置每个月只能选择1号5号10号

image.png

FineReport yzmiFMhw3943802 发布于 2024-8-2 15:28
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
HHHHH123Lv7中级互助
发布于2024-8-2 15:40(编辑于 2024-8-2 17:06)

https://bbs.fanruan.com/thread-134119-1-1.html

this._createCalendar = function() {

    var o = this.options;

    var self = this;

    if (this.options.need2BuildConfig === true && this.options.data) {

        this.options.data.resetStatus(this.createDependencePara4Data());

        var data = this.options.data.getData();

        if (data[0].data) {

            if (data[0].data.startDate) {

                var sd = new Date(data[0].data.startDate);

                if (!FR.isInvalidDate(sd)) {

                    o.startDate = FR.date2Str(sd, 'yyyy-MM-dd');

                    this.std = this._createStartDate(o.startDate, o.format, this.viewMode);

                }

            }

            if (data[0].data.endDate) {

                var ed = new Date(data[0].data.endDate);

                if (!FR.isInvalidDate(ed)) {

                    o.endDate = FR.date2Str(ed, 'yyyy-MM-dd');

                    this.edd = this._createEndDate(o.endDate, o.format, this.viewMode);

                }

            }

        }

        this.options.rebuildConfig = false;

    }

    this.datepicker = new FR.DatePicker({

        renderEl: this.$view,

        viewMode: this.viewMode,

        date: FR.str2Date(this.editComp.val(), o.format),

        dateFormat: o.format,

        startDate: this.std,

        endDate: this.edd,

        onDateUpdate: function() {

            if ($(':focus').length === 0) {

                self.editComp.focus();

            }

            self.editComp.val(FR.date2Str(this.getValue(), o.format));

            self.isValidateInput();

            self.fireEvent(FR.Events.AFTEREDIT);

        }

    });

    this.datepicker._loadDateData = function(table, date) {

        if (!date) {

            return;

        }

        var year = date.getFullYear(),

            month = date.getMonth(),

            day = date.getDate();

        var today = new Date(),

            TY = today.getFullYear(),

            TM = today.getMonth(),

            TD = today.getDate();

        this.cache.showYear = year;

        this.cache.showMonth = month;

        var std = this.options.startDate,

            edd = this.options.endDate;

        table.$title.text(Date._MN[month] + ", " + year);

        var nextDay = new Date(date);

        nextDay.setDate(nextDay.getMonthDays() + 1);

        if ((edd && nextDay > edd) || nextDay.getFullYear() > this.CONSTS.MAXYEAR) {

            table.$nextm.addClass('disabled').removeClass('hover').data('disabled', true);

        } else {

            table.$nextm.removeClass('disabled').data('disabled', false);

        }

        var prevDay = new Date(date);

        prevDay.setDate(0);

        if ((std && prevDay < std) || prevDay.getFullYear() < this.CONSTS.MINYEAR) {

            table.$prevm.addClass('disabled').removeClass('hover').data('disabled', true);

        } else {

            table.$prevm.removeClass('disabled').data('disabled', false);

        }

        date.setDate(1);

        var day1 = (date.getDay() - this.CONSTS.FIRSTDAY) % 7;

        date.setDate(0 - day1);

        date.setDate(date.getDate() + 1);

        var $frow = table.find('tbody').children().eq(0);

        const ALLOWED_DAYS = [1, 5, 10]; 

        for (var i = 0; i < 6; i++) {

            if (!$frow.length) {

                break;

            }

            var $cell = $frow.children().eq(0);

            $cell.addClass('week wn').text(date.getWeekNumber());

            var iday;

            for (var j = 0; j < 7; ++j, date.setDate(iday + 1)) {

                $cell = $cell.next();

                $cell.removeClass().data('nav', this.CONSTS.NAV['day']);

                if (!$cell.length) {

                    break;

                }

                iday = date.getDate();

                $cell.text(iday);

                var current_month = (date.getMonth() == month);

                if (!current_month) {

                    $cell.addClass('oday').data('disabled', true);

                    continue;

                }

                var disabled = false;

                if ((std != null && std > date) || (edd != null && edd < date) || !ALLOWED_DAYS.includes(iday)) {

                    $cell.addClass('day disabled');

                    disabled = true;

                } else {

                    $cell.addClass('day');

                }

                $cell.data('disabled', disabled);

                if (!disabled) {

                    if (current_month && iday == day) {

                        this.cache.selectedDate && this.cache.selectedDate.removeClass('selected');

                        $cell.addClass('selected');

                        this.cache.selectedDate = $cell;

                        this.cache.showDay = iday;

                    }

                    if (date.getFullYear() == TY &&

                        date.getMonth() == TM &&

                        iday == TD) {

                        $cell.addClass('today');

                    }

                    var wday = date.getDay();

                    if ([0, 6].indexOf(wday) != -1) {

                        $cell.addClass("weekend");

                    }

                }

            }

            $frow = $frow.next();

        }

    }

    if (FR.Browser.isIE8() && this.$view.css('visibility') == 'hidden') {

        this.$view.css("visibility", "visible");

    } else {

        this.$view.show();

    }

    $(document).bind('mousedown', this, this.collapseIf);

    this.modifyPosition();

    // 日设置

    const ALLOWED_DAYS = [1, 5, 10];

    const ODAY_CLASS = 'oday';

    function disableNonAllowedDays($days) {

        for (let j = 0; j < $days.length; j++) {

            let $day = $($days[j]);

            let dayNumber = parseInt($day.text(), 10);

            if (!ALLOWED_DAYS.includes(dayNumber) && !$day.hasClass(ODAY_CLASS)) {

                $day.data("disabled", true);

                $day.attr('class', ODAY_CLASS);

            }

        }

    }

    let tr = $('tbody>tr', this.datepicker.$datetable);

    for (let i = 0; i < tr.length; i++) {

        let $days = $('td[class!="week wn"]', tr);

        disableNonAllowedDays($days);

    }

}

最佳回答
0
snrtuemcLv8专家互助
发布于2024-8-2 15:28

这个目前没有现成案例

可以直接用下拉框代替

最佳回答
0
华莉星宸Lv7资深互助
发布于2024-8-2 15:29

用下拉框做最简单

在数据库里面建一个表  存对应的日期

  • 4关注人数
  • 239浏览人数
  • 最后回答于:2024-8-2 17:06
    请选择关闭问题的原因
    确定 取消
    返回顶部