const shared = { ViewFunc: { ClearInput: function (_control) { $(_control + ' input').val(''); $(_control + ' textarea').val(''); }, ScrollTop: function () { $("html, body").animate({scrollTop: 0}, "slow"); }, DisableScroll: function (_control) { if (_control == null) _control = 'body'; $(_control).addClass('none-overflow'); }, EnableScroll: function (_control) { if (_control == null) _control = 'body'; $(_control).removeClass('none-overflow'); }, ScrollId: function (_control, _padding) { try { if (_padding === undefined) _padding = 100; $('html, body').animate({ scrollTop: $(_control).offset().top - _padding }, 500); } catch (e) { console.log(e); } }, ViewScroll: function (_control, _padding) { try { if (_padding === undefined) _padding = 100; $(_control).animate({ scrollTop: _padding }, 500); } catch (e) { console.log(e); } }, LoadValueSelectFirst: function (_control) { if (_control === undefined) _control = 'select'; const cc = $(_control); for (let i = 0; i < cc.length; i++) { try { let dd_item = cc[i]; let dd_value = ''; if (dd_item.length > 0) dd_value = dd_item[0].value; if (dd_value.length < 1 && dd_item.length > 1) dd_value = dd_item[1].value; if (dd_value != null) { $(dd_item).val(dd_value); $(dd_item).selectpicker('refresh'); } } catch (e) { // } } }, LoadValueSelect: function (_control, _key) { if (_control === undefined) _control = 'select'; if (_key === undefined) _key = 'value'; const cc = $(_control); for (let i = 0; i < cc.length; i++) { try { const item = cc[i]; const vv = shared.GetInput.Attributes(item, _key); if (vv != null) { $(item).val(vv); $(item).selectpicker('refresh'); } } catch (e) { // } } }, LoadValueSelectId: function (_control, _key, _itemId) { if (_control === undefined) _control = 'select'; if (_key === undefined) _key = 'value'; const cc = $(_control); for (let i = 0; i < cc.length; i++) { try { const item = cc[i]; const vv = shared.GetInput.Attributes(item, _key); if (vv != null && item.id === _itemId) { $("#" + item.id).val(vv); $("#" + item.id).selectmenu("refresh"); } } catch (e) { // } } }, LoadValueSelectByClass: function (_class, _key) { const elements = document.getElementsByClassName(_class); if (_key === undefined) _key = 'value'; for (let i = 0; i < elements.length; i++) { const item = elements[i]; const value = shared.GetInput.Attributes(item, _key); if (value != null) { $(item).val(value); $(item).selectpicker('refresh'); } } }, LoadSelectPickerByClass: function (_class) { const elements = document.getElementsByClassName(_class); for (let i = 0; i < elements.length; i++) { $("#" + elements[i].id).selectpicker(); } }, LoadValueSelectPickerByClass: function (_class) { const elements = document.getElementsByClassName(_class); for (let i = 0; i < elements.length; i++) { $("#" + elements[i].id).val(elements[i].getAttribute("value")); $("#" + elements[i].id).selectpicker(); } }, LoadValueSelectPickerById: function (_control) { const element = document.getElementById(_control); $("#" + _control).val(element.getAttribute("value")); $("#" + _control).selectpicker(); }, ReloadPage: function () { window.location.reload(true) }, Get_Only_Number_By_Class: function (_class) { const elements = document.getElementsByClassName(_class); for (let i = 0; i < elements.length; i++) { shared.Other.onlyGetNumber("#" + elements[i].id); } }, Get_Fortmat_Curency_By_Class: function (_class) { const elements = document.getElementsByClassName(_class); for (let i = 0; i < elements.length; i++) { Format.FormatNumberCurrency("#" + elements[i].id); } }, SelectPicker_Single_Remove_Option: function (_control) { const groupFilter = $("#" + _control); groupFilter.selectpicker('val', ''); groupFilter.find('option').remove(); groupFilter.selectpicker("refresh"); }, SelectPicker_Multi_Remove_Option: function (_control) { const teamPositionFilter = $(_control); teamPositionFilter.selectpicker('deselectAll'); teamPositionFilter.find('option').remove(); teamPositionFilter.find('li').remove(); teamPositionFilter.selectpicker('refresh'); }, SelectPickerAddOptionByClass: function (_json, _class) { const elements = $('.' + _class + ' select'); for (let i = 0; i < elements.length; i++) { for (let j = 0; j < _json.length; j++) { if (_json[j].code === elements[i].name) { shared.ViewFunc.SelectPicker_Single_Add_Option(elements[i].id, _json[j].id, _json[j].name); } } $("#" + elements[i].id).selectpicker("refresh"); } }, SelectPickerAddOption: function (_json, _code, _control) { const groupFilter = $("#" + _control); groupFilter.selectpicker('val', ''); groupFilter.find('option').remove(); groupFilter.selectpicker("refresh"); for (let i = 0; i < _json.length; i++) { if (_json[i].code === _code) { shared.ViewFunc.SelectPicker_Single_Add_Option(_control, _json[i].id, _json[i].name); } } $("#" + _control).selectpicker("refresh"); }, SelectPickerAddOptionConfig: function (_json, _code, _control) { const groupFilter = $("#" + _control); groupFilter.selectpicker('val', ''); groupFilter.find('option').remove(); groupFilter.selectpicker("refresh"); //$("#" + _control).selectpicker(); for (let i = 0; i < _json.length; i++) { if (_json[i].code === _code) { $("#" + _control).append(''); } } $("#" + _control).selectpicker("refresh"); }, SelectPicker_Single_Add_Option: function (_control, _val, _name, _auto_reload) { $("#" + _control).append(''); if (_auto_reload) $("#" + _control).selectpicker("refresh"); }, LoadCheckbox: function (_control, _attribute) { if (_attribute == null) _attribute = 'value'; const elements = document.getElementsByClassName(_control); for (let i = 0; i < elements.length; i++) { const value_i = elements[i].getAttribute(_attribute); if (value_i == '1') { $("#" + elements[i].id).prop('checked', true); } else { $("#" + elements[i].id).prop('checked', false); } } }, SelectPicker: { Make: function (_control) { $(_control).selectpicker(); }, ClearOption: function (_control) { $(_control).children().remove(); this.Refresh(_control); }, Refresh: function (_control) { $(_control).selectpicker("refresh"); }, AddOption: function (_control, _value, _name, _auto_reload) { $(_control).append(''); if (_auto_reload) this.Refresh(_control); }, AddOptionList: function (_control, _list_data) { if (_list_data != null && _list_data.length > 0) { for (let i = 0; i < _list_data.length; i++) { let item = _list_data[i]; let dd_name = item.name; if (item.kind != undefined) dd_name = "[" + item.kind + "] " + item.name; this.AddOption(_control, item.value, dd_name, false); } this.Refresh(_control); } } }, Attr: { Set: function (_cc, _key, _value) { try { _cc = shared.Other.CheckID(_cc); $(_cc).attr(_key, _value); } catch (e) { } }, Get: function (_cc, _key) { try { _cc = shared.Other.CheckID(_cc); return $(_cc).attr(_key); } catch (e) { } } } }, GetInput: { Div: function (_id) { if (_id !== null && _id[0] !== '#') _id = '#' + _id; const dd_control = []; const dd_filter = ['input', 'select', 'textarea']; dd_filter.forEach(function (value) { const dd_cc = $(_id + ' ' + value); if (dd_cc.length > 0) for (let i = 0; i < dd_cc.length; i++) { dd_control.push(dd_cc[i]); } }); return shared.GetInput.MakeData(dd_control); }, MultiDiv: function (_class) { const dd_control = []; const dd_filter = ['input', 'select', 'textarea']; let div_list = document.getElementsByClassName(_class); for (let i = 0; i < div_list.length; i++) { let div_id = "#" + div_list[i].id; dd_filter.forEach(function (value) { const dd_cc = $(div_id + ' ' + value); if (dd_cc.length > 0) for (let i = 0; i < dd_cc.length; i++) { dd_control.push(dd_cc[i]); } }); } return shared.GetInput.MakeData(dd_control); }, From: function (_fmId) { if (_fmId !== null && _fmId[0] !== '#') _fmId = '#' + _fmId; //-------------------------- const dd = {}; const form_data = $(_fmId)[0]; if (form_data != null) { for (let i = 0; i < form_data.length; i++) { const item = form_data[i]; if (item.name.length > 0) { switch (item.type) { case 'radio': { if (item.checked === true) dd[item.name] = item.value; break; } case 'checkbox': { //if (item.checked === true) dd[item.name] = $('#' + item.id).is(':checked');//item.value; break; } case 'select-multiple': { let item_value = ""; if (item.selectedOptions != undefined) { for (let j = 0; j < item.selectedOptions.length; j++) { if (item_value != "") item_value = item_value + "," + item.selectedOptions[j].value; else item_value = item.selectedOptions[j].value; } } dd[item.name] = item_value; break; } default: { dd[item.name] = item.value; break; } } } } return dd;//JSON.stringify(); } return dd; }, JsonKey: function (_json) { return Object.keys(_json); }, AttrSelect: function (_id, _key) { const dd_id = shared.Other.CheckID(_id); return $(dd_id).find(':selected').attr(_key); }, Attributes: function (_this, _key) { try { if (_key === undefined) _key = 'dd-value'; if (_this.attributes != undefined) return _this.attributes[_key].value; else if (_this.length > 0) { return _this[0].attributes[_key].value; } } catch (e) { // } return null; }, UrlQuery: function () { const url = window.location.href; return url.split('?', 2)[1]; }, UrlParameterByName: function (name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); const regex = new RegExp("[\\?&]" + name + "=([^]*)"), results = regex.exec(location.search); return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); }, MakeData: function (_input) { let dd = {}; if (_input != null) { for (let i = 0; i < _input.length; i++) { const item = _input[i]; if (item.name.length > 0) { switch (item.type) { case 'radio': { if (item.checked === true) dd = shared.GetInput.MakeDataName(dd, item.name, item.value); break; } case 'checkbox': { if (item.checked === true) dd = shared.GetInput.MakeDataName(dd, item.name, item.value); break; } case 'select-multiple': { dd = shared.GetInput.MakeDataName(dd, item.name, $(item).val()); break; } default: { dd = shared.GetInput.MakeDataName(dd, item.name, item.value); break; } } } } return dd; } return dd; }, MakeDataName: function (_object, _name, _value) { let dd_check = _object[_name]; if (dd_check !== undefined) { if (!Array.isArray(dd_check)) dd_check = [dd_check]; dd_check.push(_value); } else dd_check = _value; //---------------------------- _object[_name] = dd_check; return _object; }, }, Loading: { ID_VIEW: '.__loading', Show: function () { shared.ViewFunc.DisableScroll(); $(this.ID_VIEW).show(); }, Hide: function () { shared.ViewFunc.EnableScroll(); $(this.ID_VIEW).hide(); } }, Other: { MakeControlID: function (_input) { let id = ''; for (let i = 0; i < _input.length; i++) { id += _input[i] + ' '; } return id.trim(); }, CheckID: function (_id) { if (shared.Valid.String(_id) && _id[0] != '#' && _id[0] != '.') { _id = '#' + _id; } return _id; }, ChangeUrlPath: function (_path) { window.location.href = _path; }, RunJs: function (_js) { try { if (_js !== undefined && _js.length > 0) eval(_js); } catch (e) { console.log(e); } }, CallFunction: function (_func, _params) { try { if (_func !== undefined && _func.length > 0) { let dd_func = new Function(_func); dd_func.call(_params); } } catch (e) { console.log(e); } }, ClearEventJS: function (_control, _children) { //console.log('event clear id: ', _control); if (_children) $(_control).children().unbind(); $(_control).unbind(); }, formatNumberCurrencyVND: function (nStr, _currency) { if (_currency == null) _currency = ' đ'; nStr += ''; let x = nStr.split(','); let x1 = x[0]; let x2 = x.length > 1 ? ',' + x[1] : ''; const rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + '.' + '$2'); } return x1 + x2 + _currency; }, ReCapcha: function (_controlId, _callback) { $("#" + _controlId).html(""); grecaptcha.render(document.getElementById(_controlId), { //'callback': _callback, 'sitekey': '6LcrgBUUAAAAAO6soiVlvX8p7Rb0eEdLhJgnuxQf' }); }, SetCheckInput: function (_control, _check) { if (_check) { $(_control).prop("checked", true); } else { $(_control).prop("checked", false); } }, isNumber: function (text) { let reg = new RegExp('[0-9]+$'); if (text) { return reg.test(text); } return false; }, onlyGetNumber: function (_control) { const text = $(_control).val(); if (text) { let result = ""; for (let i = 0; i < text.length; ++i) { if (shared.Other.isNumber(text[i])) { result += text[i]; } } $(_control).val(result); } return ''; }, GetNumberOnly: function (_str, _decimal) { try { let ll_data = _str.split(_decimal); let dd_l1 = ''; let dd_l2 = ''; if (ll_data.length > 1) { dd_l2 = ll_data.last(); dd_l1 = ll_data.slice(ll_data.length - 1, 1).join(); } else dd_l1 = ll_data.join(); dd_l1 = dd_l1.replace(/\D/g, ""); dd_l2 = dd_l2.replace(/\D/g, ""); return dd_l2.length > 0 ? dd_l1 + _decimal + dd_l2 : dd_l1; } catch { return _str; } }, removeSpecialCharacter: function (_control) { const text = $(_control).val(); if (text) { const lower = text.toLowerCase(); const upper = text.toUpperCase(); let result = ""; for (let i = 0; i < lower.length; ++i) { if (shared.Other.isNumber(text[i]) || (lower[i] !== upper[i]) || (lower[i].trim() === '')) { result += text[i]; } } $(_control).val(result); } return ''; }, ClearSubmitForm: function (_control) { _control ??= 'form'; if (shared.Valid.String(_control, 1)) { shared.Other.ClearEventJS(_control); $(_control).on('keyup keypress', function (e) { const keyCode = e.keyCode || e.which; if (keyCode === 13) { e.preventDefault(); return false; } }); } }, LoadScript: function (_url, _callback) { const head = document.head; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = _url; script.onreadystatechange = _callback; script.onload = _callback; head.appendChild(script); }, Input: { SetClick: function (_controlId) { try { document.getElementById(_controlId).click(); } catch (e) { } }, GetValueByName: function (_name) { return $('input[name=' + _name + ']').val(); }, SetValueByName: function (_name, _value) { $('input[name=' + _name + ']').val(_value); } } }, DateTimeFunc: { date_add_day: function (_value, _number) { if (!shared.DateTimeFunc.isDate(_value)) return null; if (!shared.DateTimeFunc.isNumeric(_number)) _number = 1; _value.setDate(_value.getDate() + _number); return _value; }, getValueAttr: function (_control, _attr) { return $(_control).attr(_attr); }, date_add_year: function (_value, _number) { if (!shared.DateTimeFunc.isDate(_value)) return null; if (!shared.DateTimeFunc.isNumeric(_number)) _number = 1; _number += _value.getFullYear(); _value.setFullYear(_number); return _value; }, date_add_month: function (_value, _number) { if (!shared.DateTimeFunc.isDate(_value)) return null; if (!shared.DateTimeFunc.isNumeric(_number)) _number = 12; const d = _value.getDate(); _value.setMonth(_value.getMonth() + _number); if (_value.getDate() != d) { _value.setDate(0); } return _value; }, control_input_lock: function (_control, _islock) { if (_islock) { $(_control).prop('disabled', true); } else { $(_control).prop('disabled', false); } }, stringToDate: function (_date, _format, _delimiter) { try { if (!shared.DateTimeFunc.isValidString(_date)) return null; if (!shared.DateTimeFunc.isValidString(_format)) _format = "dd/MM/yyyy"; if (!shared.DateTimeFunc.isValidString(_delimiter)) _delimiter = "/"; //--------------------------------------- let dd_time_data = ''; let ll_datetime = _date.split(' '); if (ll_datetime.length > 1) { _date = ll_datetime[0]; dd_time_data = ll_datetime[1]; } //--------------------------------------- let formatLowerCase = _format.toLowerCase(); let ll_fm_datetime = formatLowerCase.split(' '); let dd_fm_time = ''; if (ll_fm_datetime.length > 1) { formatLowerCase = ll_fm_datetime[0]; dd_fm_time = ll_fm_datetime[1]; } //--------------------------------------- let formatItems = formatLowerCase.split(_delimiter); let dateItems = _date.split(_delimiter); let monthIndex = formatItems.indexOf("mm"); let dayIndex = formatItems.indexOf("dd"); let yearIndex = formatItems.indexOf("yyyy"); let month = parseInt(dateItems[monthIndex]); month -= 1; //--------------------------------------- xu ly time let dd_hour = 0; let dd_minute = 0; if (dd_fm_time.length > 0) { let ll_fm_time = dd_fm_time.split(':'); let ll_time_date = dd_time_data.split(':'); dd_hour = parseInt(ll_time_date[ll_fm_time.indexOf('hh')]); dd_minute = parseInt(ll_time_date[ll_fm_time.indexOf('mm')]); } //--------------------------------------- let formatedDate = new Date(dateItems[yearIndex], month, dateItems[dayIndex].substring(0, 2), dd_hour, dd_minute); return formatedDate; } catch (e) { return null; } }, convertDatetoString: function (_value, _format) { if (!shared.DateTimeFunc.isValidString(_format)) _format = "DD/MM/YYYY"; return moment(_value).format(_format); }, isValidString: function (_data, _length) { if (shared.DateTimeFunc.isEmpty(_data)) return false; if (shared.DateTimeFunc.isEmpty(_length)) _length = 0; if (_data.length < 1 || _data.length < _length) return false; return true; }, isDate: function (d) { if (shared.DateTimeFunc.isEmpty(d)) return false; if (Object.prototype.toString.call(d) === "[object Date]") { // it is a date if (isNaN(d.getTime())) { // d.valueOf() could also work return false; } else { return true; } } else { return true; } }, isEmpty: function (_n) { if (_n === null || _n === undefined) return true; return false; }, isNumeric: function (n) { return !isNaN(parseFloat(n)) && isFinite(n); }, subtractionDate: function (_fromDate, _toDate, _format) { if (!shared.DateTimeFunc.isValidString(_format)) _format = "dd/MM/yyyy"; const start_date = shared.DateTimeFunc.stringToDate(_fromDate, _format).getTime(); const end_date = shared.DateTimeFunc.stringToDate(_toDate, _format).getTime(); const result = Math.round((end_date - start_date) / (1000 * 60 * 60 * 24)); return result; }, subtractionYear: function (_fromDate, _toDate, _format) { if (!shared.DateTimeFunc.isDate(_toDate)) { _toDate = new Date(); _toDate = _toDate.getDate() + "/" + (_toDate.getMonth() + 1) + "/" + _toDate.getFullYear(); } if (!shared.DateTimeFunc.isValidString(_format)) _format = "dd/MM/yyyy"; const start_date = shared.DateTimeFunc.stringToDate(_fromDate, _format).getTime(); const end_date = shared.DateTimeFunc.stringToDate(_toDate, _format).getTime(); const result = Math.floor((end_date - start_date) / (1000 * 60 * 60 * 24 * 365)); return result; }, addDays: function (_date, _days) { const dd_new_time = _date.getTime() + _days * 86400000; const dd_date_new = new Date(dd_new_time); return dd_date_new; }, loadValueByClass: function (_class) { const elements = document.getElementsByClassName(_class); for (let i = 0; i < elements.length; i++) { const value = elements[i].getAttribute("value"); $("#" + elements[i].id).val(value); shared.CreateControl.DatePicker("#" + elements[i].id, value); } } }, CreateControl: { FormCustom: function (_control, _this) { let dd_class = '.f121ede6-3f19-4139-b04b-72aa0d41e666'; let dd_control = dd_class; if (_control != null) dd_control = _control.concat(' ', dd_class); if (_control != null && _this) dd_control = _control; shared.Other.ClearEventJS(dd_control, true); let dd_label = dd_control + ' .label'; dd_control += ' input'; $(dd_control).focusin(function () { try { let dd_parent = $(this).parent()[0]; $(dd_parent).addClass('forcus'); //$(dd_parent).find('.label').addClass('forcus'); //$(dd_parent).find('input').addClass('forcus'); } catch (e) { //console.log(e); } }).focusout(function () { try { let dd_parent = $(this).parent()[0]; let dd_input = $(dd_parent).find('input')[0]; if ($(dd_input).val().length < 1) { $(dd_parent).removeClass('forcus'); //$(dd_parent).find('.label').removeClass('forcus'); //$(dd_parent).find('input').removeClass('forcus'); } } catch (e) { //console.log(e); } }); try { let ll_control = $(_control).find(dd_class); if (_this) ll_control = $(_control); //console.log(ll_control); ll_control.each(function (_index, _this) { try { let dd_input = $(_this).find('input')[0]; let dd_value = $(dd_input).val(); if (dd_value !== null && dd_value !== undefined && dd_value.length > 0) { $(_this).addClass('forcus'); //$(_this).find('.label').addClass('forcus'); //$(_this).find('input').addClass('forcus'); } } catch (e) { console.log(e); } }); } catch (e) { console.log(e); } try { const ll_label = $(dd_label); if (ll_label.length > 0) { for (let i = 0; i < ll_label.length; i++) { let item = ll_label[i]; new bootstrap.Tooltip(item); } } } catch (e) { console.log(e); } shared.Other.ClearSubmitForm(); }, DatePicker_LOCK: function (_control, _callback) { let minDate = new Date(); //minDate.setDate(minDate.getDate() + 1); minDate = shared.DateTimeFunc.convertDatetoString(minDate); shared.CreateControl.DateRangePicker(_control, _callback, true, minDate, minDate); }, DatePicker: function (_control, _startDate, _callback) { let minDate = new Date(); minDate = shared.DateTimeFunc.convertDatetoString(minDate); shared.CreateControl.DateRangePicker(_control, _callback, true, minDate, _startDate); }, DateSearchPicker: function (_control, _startDate, _callback) { shared.CreateControl.DateRangePicker(_control, _callback, true, "01/01/2000", _startDate); }, BirthdayPicker: function (_control, _callback) { const ids = $(_control).map(function () { return $(this).attr('id'); }); for (let i = 0; i < ids.length; i++) { shared.CreateControl.DateRangePicker("#" + ids[i], _callback, true, "01/01/1900"); } }, DateRangePicker_LOCK: function (_control, _callback, _singleDatePicker, _minDate) { if (_singleDatePicker == null) _singleDatePicker = false; if (_control == null) return; shared.Other.ClearEventJS(_control); $(_control).daterangepicker({ "singleDatePicker": _singleDatePicker, "showDropdowns": true, "showWeekNumbers": true, "autoApply": true, "minDate": _minDate, //"startDate": _startDate, //"endDate": "07/09/2018", "locale": { "format": "DD/MM/YYYY", "separator": " - ", "applyLabel": "Apply", "cancelLabel": "Cancel", "fromLabel": "From", "toLabel": "To", "customRangeLabel": "Custom", "weekLabel": "W", "daysOfWeek": [ "CN", "T2", "T3", "T4", "T5", "T6", "T7" ], "monthNames": [ "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12" ], "firstDay": 1 } }, function (start, end, label) { if (_callback != null) { _callback(start, end, label); }// else //console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); }); }, DateRangePicker: function (_control, _callback, _singleDatePicker, _minDate, _startDate) { const dd_control = document.querySelector(_control); if (dd_control == null || _control == null) return; const startDateDefault = dd_control.value; if (startDateDefault !== "" && startDateDefault != null) _startDate = startDateDefault; if (_singleDatePicker == null) _singleDatePicker = false; if (_control == null) return; shared.Other.ClearEventJS(_control); $(_control).daterangepicker({ "singleDatePicker": _singleDatePicker, "showDropdowns": true, "showWeekNumbers": true, "autoApply": true, "minDate": _minDate, "startDate": _startDate, //"endDate": "07/09/2018", "locale": { "format": "DD/MM/YYYY", "separator": " - ", "applyLabel": "Apply", "cancelLabel": "Cancel", "fromLabel": "From", "toLabel": "To", "customRangeLabel": "Custom", "weekLabel": "W", "daysOfWeek": [ "CN", "T2", "T3", "T4", "T5", "T6", "T7" ], "monthNames": [ "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12" ], "firstDay": 1 } }, function (start, end, label) { if (_callback != null) { _callback(start, end, label); } //else console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); }); }, Number: function (_control) { $(_control).focusin(function () { this.select(); }); $(_control).focusout(function () { let v = $(this).val(); v = StringFunc.ClearNotNumber(v); $(this).val(v); }); }, DataTable: { Render: function (_control) { let dd_file_name = $(_control).attr('export-file-name'); $(_control).bootstrapTable({ exportTypes: ['xlsx', 'csv'], exportOptions: { fileName: dd_file_name }, formatLoadingMessage: function () { return 'Vui lòng đợi...'; }, formatRecordsPerPage: function (pageNumber) { return pageNumber + ' dòng / 1 trang'; }, formatShowingRows: function (pageFrom, pageTo, totalRows) { return 'Hiển thị từ ' + pageFrom + ' đến ' + pageTo + ' dòng / tổng ' + totalRows + ' dòng'; }, formatSearch: function () { return 'Tìm kiếm'; }, formatNoMatches: function () { return 'Không tìm thấy dữ liệu'; }, formatPaginationSwitch: function () { return 'Ẩn/Hiện phân trang'; }, formatRefresh: function () { return 'Làm mới lại'; }, formatToggle: function () { return 'Chuyển đổi'; }, formatColumns: function () { return 'Cột'; }, formatAllRows: function () { return 'Tất cả'; } }); $("input[type='search']").wrap("