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'; var cc = $(_control); for (var 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'; var cc = $(_control); for (var i = 0; i < cc.length; i++) { try { var item = cc[i]; var 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'; var cc = $(_control); for (var i = 0; i < cc.length; i++) { try { var item = cc[i]; var 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) { var elements = document.getElementsByClassName(_class); if (_key === undefined) _key = 'value'; for (var i = 0; i < elements.length; i++) { var item = elements[i]; var value = shared.GetInput.Attributes(item, _key); if (value != null) { $(item).val(value); $(item).selectpicker('refresh'); } } }, LoadSelectPickerByClass: function (_class) { var elements = document.getElementsByClassName(_class); for (var i = 0; i < elements.length; i++) { $("#" + elements[i].id).selectpicker(); } }, LoadValueSelectPickerByClass: function (_class) { var elements = document.getElementsByClassName(_class); for (var i = 0; i < elements.length; i++) { $("#" + elements[i].id).val(elements[i].getAttribute("value")); $("#" + elements[i].id).selectpicker(); } }, LoadValueSelectPickerById: function (_control) { var element = document.getElementById(_control); $("#" + _control).val(element.getAttribute("value")); $("#" + _control).selectpicker(); }, ReloadPage: function () { window.location.reload(true) }, Get_Only_Number_By_Class: function (_class) { var elements = document.getElementsByClassName(_class); for (var i = 0; i < elements.length; i++) { shared.Other.onlyGetNumber("#" + elements[i].id); } }, Get_Fortmat_Curency_By_Class: function (_class) { var elements = document.getElementsByClassName(_class); for (var i = 0; i < elements.length; i++) { Format.FormatNumberCurrency("#" + elements[i].id); } }, SelectPicker_Single_Remove_Option: function (_control) { var groupFilter = $("#" + _control); groupFilter.selectpicker('val', ''); groupFilter.find('option').remove(); groupFilter.selectpicker("refresh"); }, SelectPicker_Multi_Remove_Option: function (_control) { var teamPositionFilter = $(_control); teamPositionFilter.selectpicker('deselectAll'); teamPositionFilter.find('option').remove(); teamPositionFilter.find('li').remove(); teamPositionFilter.selectpicker('refresh'); }, SelectPickerAddOptionByClass: function (_json, _class) { var elements = $('.' + _class + ' select'); for (var i = 0; i < elements.length; i++) { for (var 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) { var groupFilter = $("#" + _control); groupFilter.selectpicker('val', ''); groupFilter.find('option').remove(); groupFilter.selectpicker("refresh"); for (var 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) { var groupFilter = $("#" + _control); groupFilter.selectpicker('val', ''); groupFilter.find('option').remove(); groupFilter.selectpicker("refresh"); //$("#" + _control).selectpicker(); for (var 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'; var elements = document.getElementsByClassName(_control); for (var i = 0; i < elements.length; i++) { var 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 (var 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); } } } }, GetInput: { Div: function (_id) { if (_id !== null && _id[0] !== '#') _id = '#' + _id; var dd_control = []; var dd_filter = ['input', 'select', 'textarea']; dd_filter.forEach(function (value) { var dd_cc = $(_id + ' ' + value); if (dd_cc.length > 0) for (var i = 0; i < dd_cc.length; i++) { dd_control.push(dd_cc[i]); } }); return shared.GetInput.MakeData(dd_control); }, MultiDiv: function (_class) { var dd_control = []; var 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) { var dd_cc = $(div_id + ' ' + value); if (dd_cc.length > 0) for (var 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; //-------------------------- var dd = {}; var form_data = $(_fmId)[0]; if (form_data != null) { for (var i = 0; i < form_data.length; i++) { var 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': { var item_value = ""; if (item.selectedOptions != undefined) { for (var 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) { var 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 () { var url = window.location.href; return url.split('?', 2)[1]; }, UrlParameterByName: function (name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); }, MakeData: function (_input) { var dd = {}; if (_input != null) { for (var i = 0; i < _input.length; i++) { var 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) { var 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) { var id = ''; for (var 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] : ''; var 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) { var text = $(_control).val(); if (text) { var result = ""; for (var 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) { var text = $(_control).val(); if (text) { var lower = text.toLowerCase(); var upper = text.toUpperCase(); var result = ""; for (var 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) { var keyCode = e.keyCode || e.which; if (keyCode === 13) { e.preventDefault(); return false; } }); } }, LoadScript: function (_url, _callback) { var head = document.head; var 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; var 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 = "/"; //--------------------------------------- var formatLowerCase = _format.toLowerCase(); var formatItems = formatLowerCase.split(_delimiter); var dateItems = _date.split(_delimiter); var monthIndex = formatItems.indexOf("mm"); var dayIndex = formatItems.indexOf("dd"); var yearIndex = formatItems.indexOf("yyyy"); var month = parseInt(dateItems[monthIndex]); month -= 1; var formatedDate = new Date(dateItems[yearIndex], month, dateItems[dayIndex].substr(0, 2)); 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"; var start_date = shared.DateTimeFunc.stringToDate(_fromDate, _format).getTime(); var end_date = shared.DateTimeFunc.stringToDate(_toDate, _format).getTime(); var 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"; var start_date = shared.DateTimeFunc.stringToDate(_fromDate, _format).getTime(); var end_date = shared.DateTimeFunc.stringToDate(_toDate, _format).getTime(); var result = Math.floor((end_date - start_date) / (1000 * 60 * 60 * 24 * 365)); return result; }, addDays: function (_date, _days) { var dd_new_time = _date.getTime() + _days * 86400000; var dd_date_new = new Date(dd_new_time); return dd_date_new; }, loadValueByClass: function (_class) { var elements = document.getElementsByClassName(_class); for (var i = 0; i < elements.length; i++) { var 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 { var 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) { var 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) { var 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) { var ids = $(_control).map(function () { return $(this).attr('id'); }); for (var 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) { var dd_control = document.querySelector(_control); if (dd_control == null || _control == null) return; var 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 () { var 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("
"); $("input[type='search']").closest("form").attr("autocomplete", "off"); }, TableEvents: { PageChange: function (_control, _callback) { $(_control).on('page-change.bs.table', function (number, size) { _callback(number, size); }); }, AfterDataRendered: function (_control, _callback) { $(_control).on('post-body.bs.table', function (data) { _callback(data); }); }, All: function (_control, _callback) { $(_control).on('all.bs.table', function (name, args) { _callback(name, args); }); } } }, DateBOD: function (_control, _mindate, _maxdate, _callback) { if (_control == null) return; shared.Other.ClearEventJS(_control); const startDateDefault = $(_control).val(); $(_control).daterangepicker({ "singleDatePicker": true, "showDropdowns": true, "showWeekNumbers": true, "autoApply": true, "minDate": _mindate, "maxDate": _maxdate, //"startDate": startDateDefault, "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); } }); }, DateIsNull: function (_control, _mindate, _maxdate, _callback) { if (_control == null) return; shared.Other.ClearEventJS(_control); const startDateDefault = $(_control).val(); $(_control).daterangepicker({ "singleDatePicker": true, "showDropdowns": true, "showWeekNumbers": true, "autoApply": true, "minDate": _mindate, "maxDate": _maxdate, "startDate": startDateDefault, "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); } }); } }, File: { FiletoBase64: function (_evt, _callback) { if (_evt.files.length > 0) { const f = _evt.files[0]; // FileList object const reader = new FileReader(); // Closure to capture the file information. reader.onload = (function (theFile) { return function (e) { const binaryData = e.target.result; //Converting Binary Data to base 64 const base64String = window.btoa(binaryData); //get file type const fileName = f.name; let fileType = ''; let ll_file = fileName.split('.'); if (ll_file.length > 1) fileType = ll_file[ll_file.length - 1]; //showing file converted to base64 if (_callback != null) _callback(base64String, fileType, fileName, f.type); }; })(f); // Read in the image file as a data URL. reader.readAsBinaryString(f); } }, DownloadPDF: function (pdf, file_name) { var linkSource = 'data:application/pdf;base64,' + pdf; var downloadLink = document.createElement("a"); var fileName = file_name + ".pdf"; downloadLink.href = linkSource; downloadLink.download = fileName; downloadLink.click(); } }, ModalFunc: { ModalShow: function (_control) { $('#' + _control).modal({backdrop: 'static', keyboard: false}, 'show'); }, ModalHide: function (_control) { $('#' + _control).modal('hide'); $('.modal-backdrop').hide(); $("body").removeClass("modal-open"); }, }, Cookies: { AddUpdate: function (_key, _value, _liveSeconds) { if (_key == null || _value == null || _liveSeconds == null) return; const d = new Date(); let dd_gmt = Math.abs(d.getTimezoneOffset()) * 60 * 1000; d.setTime(d.getTime() + (_liveSeconds * 1000) + dd_gmt); let expires = "expires=" + d.toUTCString(); document.cookie = _key + "=" + _value + ";" + expires + ";path=/;"; }, Remove: function (_key) { if (_key == null) return; document.cookie = _key + "=;expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; } }, Valid: { String: function (_input, _length) { _length ??= 1; if (_input == null || _input.length < _length) return false; return true; }, Array: function (_input, _length) { _length ??= 1; if (_input == null || _input.length < _length || !Array.isArray(_input)) return false; return true; } }, Convert: { ArrayToString: function (_input, _separator) { let dd_return = ''; if (shared.Valid.Array(_input, 1)) { _separator ??= ','; dd_return = _input[0]; for (let i = 1; i < _input.length; i++) { dd_return += _separator + _input[i]; } } return dd_return; }, Json: function (_input) { try { let dd_json = JSON.parse(_input); if (dd_json == null) return _input; return dd_json; } catch (e) { return _input; } } } }; const Format = { Number: function (amount, decimalCount, decimal, thousands) { try { if (decimalCount == null) decimalCount = 0; if (decimal == null) decimal = "."; if (thousands == null) thousands = ","; decimalCount = Math.abs(decimalCount); decimalCount = isNaN(decimalCount) ? 2 : decimalCount; var negativeSign = amount < 0 ? "-" : ""; var i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString(); var j = (i.length > 3) ? i.length % 3 : 0; return negativeSign + (j ? i.substring(0, j) + thousands : '') + i.substring(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : ""); } catch (e) { console.log(e) } }, FormatPercent: function (_control) { var new_percent = $(_control).val(); if (new_percent) { new_percent += ''; var x = new_percent.split(','); var x0 = x[0]; var result0 = ''; if (x0) { for (var i = 0; i < x0.length; ++i) { if (shared.Other.isNumber(x0[i])) { result0 += x0[i]; } } if (result0.length > 1 && result0[0] == '0') { x0 = ''; for (var i = 1; i < result0.length; ++i) { x0 += result0[i]; } } else x0 = result0; } var result1 = ''; for (var i = 1; i < x.length; ++i) { if (x[i]) { for (var j = 0; j < x[i].length; ++j) { if (shared.Other.isNumber(x[i][j])) { result1 += x[i][j]; } } } } var x1 = x.length > 1 ? '.' + result1 : ''; new_percent = Number(x0 + x1); } $(_control).val(Format.Number(new_percent, 3, ',', ',')); }, FormatNumberCurrency: function (_control) { var nStr = $(_control).val(); //if (_currency == null) _currency = ' đ'; let x; let x1; let x2; if (nStr) { nStr += ''; x = nStr.split(','); x1 = x[0]; x2 = x.length > 1 ? ',' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + '.' + '$2'); } $(_control).val(x1 + x2); return x1 + x2;// + _currency; } else { return ''; } }, FormatNumberCurrencyNoUnit: function (nStr) { nStr += ''; let x = nStr.split(','); let x1 = x[0]; let x2 = x.length > 1 ? ',' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + '.' + '$2'); } return x1 + x2; }, FormatNumberCurrencyVND: function (nStr, _currency) { if (_currency == null) _currency = ' đồng'; nStr += ''; let x = nStr.split(','); let x1 = x[0]; let x2 = x.length > 1 ? ',' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + '.' + '$2'); } return x1 + x2 + _currency; }, }; const support = { orc: function (_data, _type, _name, _callback) { let dd_data = { file_data: _data, file_type: _type, file_name: _name }; dd_data = API.CreateDataSend('shared/ocr', dd_data); API.POST(dd_data, function (e) { if (_callback != null) _callback(e); else Loading.Hide(); }) }, login_check: function () { let dd_account = $('#e17616f2-4995-49db-ab30-e4e6e8f6c4bc').val(); let dd_time_out = $('#f558cb9c-ebfc-476b-a01a-d28b399e4df2').val(); let dd_time = moment(dd_time_out, 'DD/MM/YYYY hh:mm:ss'); let dd_now = moment(); if (dd_now >= dd_time && dd_account.length > 0) { customer_login.Show(dd_account, "Tài khoản đã hết thời gian hiệu lực trên hệ thống, vui lòng nhập mật khẩu đăng nhập lại."); } }, login_time_update: function (_time) { $('#f558cb9c-ebfc-476b-a01a-d28b399e4df2').val(_time); } };