
Bootstrap modal makes scrollbar disappear after closing
$(document).on('hidden.bs.modal', '.modal', function () {
$('.modal:visible').length && $(document.body).addClass('modal-open');
});

$(document).on('hidden.bs.modal', '.modal', function () {
$('.modal:visible').length && $(document.body).addClass('modal-open');
});
jQuery.validator.addMethod("nulldate", function (value, element, params) {
if (value.length == 0)
return false;
return true;
}, 'Từ ngày phải nhỏ hơn hoặc bằng đến ngày, vui lòng kiểm tra lại');
jQuery.validator.addMethod("beetwenTime", function (value, element, params) {
var formDateTime = moment($(element).parent().data("DateTimePicker").date(), 'MM/DD/YYYY HH:mm');
var toDateTime = moment($(params).parent().data("DateTimePicker").date(), 'MM/DD/YYYY HH:mm');
if (toDateTime.diff(formDateTime, 'minutes') > 0) {
$(params).removeClass('border-error');
return true;
} else {
$(params).addClass('border-error');
return false;
}
}, 'Thời gian từ không được lớn hơn thời gian tới, vui lòng kiểm tra lại!');
jQuery.validator.addMethod("LimitTime", function (value, element, params) {
if ($("#txtTDate").val().length > 0) {
var formDateTime = moment($(params).parent().data("DateTimePicker").date(), 'MM/DD/YYYY HH:mm');
var toDateTime = moment($(element).parent().data("DateTimePicker").date(), 'MM/DD/YYYY HH:mm');
return toDateTime.diff(formDateTime, 'days') > -92;
} else
return true;
}, 'Chỉ tìm kiếm được tối đa 92 ngày');
HTML
<div class="col-sm-12">
<div class="col-sm-6">
<!--#region Từ ngày-->
<div class="form-group form-group-sm">
<label class="col-sm-4 control-label">Từ ngày</label>
<div class="col-sm-8">
<div class="input-group input-group-sm input-datetime" id="divFromDate">
<input type="text" id="txtFDate" name="d1"
class="form-control input-sm datetime-mask" style="margin-top: 0">
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<!--#endregion-->
</div>
<div class="col-sm-6">
<!--#region Đến ngày-->
<div class="form-group form-group-sm">
<label class="col-sm-4 control-label">Đến ngày</label>
<div class="col-sm-8">
<div class="input-group input-group-sm input-datetime" id="divToDate">
<input type="text" id="txtTDate" name="d2"
class="form-control input-sm datetime-mask" style="margin-top: 0">
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<!--#endregion-->
</div>
</div>
INIT
$('#divFromDate').data("DateTimePicker").date(Sv.DefaultDate().FormDate);
$('#divToDate').data("DateTimePicker").date(Sv.DefaultDate().ToDate);
////Max date
$('#divFromDate').data("DateTimePicker").maxDate(Sv.DefaultDate().MaxDate);
$('#divToDate').data("DateTimePicker").maxDate(Sv.DefaultDate().MaxDate);
HOW TO USE
$('#btnSearch').on('click', function () {
$('#txtTDate').rules('add', {
required: true,
messages: {
required: 'Bạn phải nhập/ chọn ngày để tìm kiếm',
}
});
$('#txtFDate').rules('add', {
required: true,
beetwenTime: '#txtTDate',
LimitTime: '#txtTDate',
messages: {
required: 'Bạn phải nhập/ chọn ngày để tìm kiếm',
beetwenTime: 'Từ ngày phải nhỏ hơn hoặc bằng đến ngày.',
//LimitTime: 'Bạn phải nhập/ chọn ngày để tìm kiếm'
}
});
//$('#txtFDate').rules('add', {
// required: true,
// LimitTime: '#txtTDate',
// messages: {
// required: 'Bạn phải nhập/ chọn ngày để tìm kiếm'
// }
//});
if (!$('#frmReport').valid()) return;
$table.bootstrapTable('refresh');
});
$table.bootstrapTable({
locale: 'vi',
classes: 'table table-condensed',
pagination: true,
height: 'auto',
pageSize: 15,
pageList: [10, 15, 20, 30, 50, 100],
paginationFirstText: 'Trang đầu',
paginationPreText: 'Trước',
paginationNextText: 'Sau',
paginationLastText: 'Trang cuối',
showHeader: true,
showFooter: true,
formatShowingRows: function (pageFrom, pageTo, totalRows) {
return 'Tổng:' + totalRows;
},
formatRecordsPerPage: function (pageNumber) {
return 'Hiển thị' + pageNumber + ' bản ghi trên trang';
},
formatNoMatches: function () {
return 'Dữ liệu trống';
},
method: 'post',
sidePagination: 'server',
url: '/Admin/ReportCashSuplier/GetAllReportCashSupplier',
queryParams: function (p) {
return {
offset: p.offset,
limit: p.limit,
search : {
FromDate: $('#txtFDate').parent().data("DateTimePicker").date(),
ToDate: $("#txtTDate").parent().data("DateTimePicker").date(),
SupplierCode: $('#txtPartnerCode option:selected').val(),
VendorId: $('#txtProductCode option:selected').val()
}
};
},
responseHandler: function (res) {
$total = res.total;
$statistic = res.statistic;
return {
total: res.total,
rows: res.data == null ? [] : res.data
};
},
columns: [
{
field: 'SupplierName',
title: 'NCCDV',
titleTooltip: 'Nhà cung cấp dịch vụ',
valign: 'middle',
width: '120px',
footerFormatter: function (data) {
return 'Tổng:'.bold();
}
},{
field: 'CategoryName',
title: 'Sản phẩm',
valign: 'middle',
width: '120px',
}, {
field: 'SumAmount',
title: 'Doanh số',
width: '100px',
align: 'right',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.TotalAmount != null ? $statistic.TotalAmount.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}, {
field: 'SumCount10',
title: '10.000',
width: '100px',
align: 'center',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.SumCount10 != null ? $statistic.SumCount10.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}, {
field: 'SumCount20',
title: '20.000',
width: '100px',
align: 'center',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.SumCount20 != null ? $statistic.SumCount20.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}, {
field: 'SumCount30',
title: '30.000',
width: '100px',
align: 'center',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.SumCount30 != null ? $statistic.SumCount30.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}, {
field: 'SumCount50',
title: '50.000',
width: '100px',
align: 'center',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.SumCount50 != null ? $statistic.SumCount50.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}, {
field: 'SumCount100',
title: '100.000',
width: '100px',
align: 'center',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.SumCount100 != null ? $statistic.SumCount100.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}, {
field: 'SumCount200',
title: '200.000',
width: '100px',
align: 'center',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.SumCount200 != null ? $statistic.SumCount200.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}, {
field: 'SumCount500',
title: '500.000',
width: '100px',
align: 'center',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.SumCount500 != null ? $statistic.SumCount500.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}, {
field: 'SumCount1000',
title: '1.000.000',
width: '100px',
align: 'center',
valign: 'middle',
formatter: function (value) {
return value != null ? value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
},
footerFormatter: function (data) {
return $statistic.SumCount1000 != null ? $statistic.SumCount1000.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') : 0;
}
}
]
});
=>>> USE
$btnSearch.on("click", function(){
$table.bootstrapTable('resetView');
if($formSearch.valid())
$table.bootstrapTable('refresh');
});