(function ($) { // 增加Array扩展 if (!$.isFunction(Array.prototype.filter)) { Array.prototype.filter = function (callback, thisObject) { if ($.isFunction(callback)) { var res = new Array(); for (var i = 0; i < this.length; i++) { callback.call(thisObject, this[i], i, this) && res.push(this[i]); } return res; } }; } // 增加String扩展 if (!$.isFunction(String.prototype.trim)) { String.prototype.trim = function () { if (this === null) return ""; var trimLeft = /^\s+/, trimRight = /\s+$/; return this.replace(trimLeft, "").replace(trimRight, ""); }; } // 扩展Date if (!$.isFunction(Date.prototype.format)) { Date.prototype.format = function (format) { var o = { "M+": this.getMonth() + 1, "d+": this.getDate(), "h+": this.getHours() % 12 === 0 ? 12 : this.getHours() % 12, "H+": this.getHours(), "m+": this.getMinutes(), "s+": this.getSeconds(), "q+": Math.floor((this.getMonth() + 3) / 3), "S": this.getMilliseconds() }; var week = { 0: "日", 1: "一", 2: "二", 3: "三", 4: "四", 5: "五", 6: "六" }; if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); if (/(E+)/.test(format)) format = format.replace(RegExp.$1, (RegExp.$1.length > 1 ? RegExp.$1.length > 2 ? "星期" : "周" : "") + week[this.getDay()]); for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); return format; }; } // 扩展format $.extend({ "format": function (source, params) { if (params === undefined) { return source; } if (arguments.length > 2 && params.constructor !== Array) { params = $.makeArray(arguments).slice(1); } if (params.constructor !== Array) { params = [params]; } $.each(params, function (i, n) { source = source.replace(new RegExp("\\{" + i + "\\}", "g"), function () { return n; }); }); return source; } }); // enhance window.console.log if (!window.console) { window.console = { log: function () { } }; } window.console = window.console || {}; console.log || (console.log = opera.postError); // client jQuery.browser = { versions: function () { var u = navigator.userAgent; return { //移动终端浏览器版本信息 trident: u.indexOf('Trident') > -1, //IE内核 presto: u.indexOf('Presto') > -1, //opera内核 webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1, //火狐内核 mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端 ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端 android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器 iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器 iPod: u.indexOf('iPod') > -1, //是否为iPod或者QQHD浏览器 iPad: u.indexOf('iPad') > -1, //是否iPad webApp: u.indexOf('Safari') === -1 //是否web应该程序,没有头部与底部 }; }(), language: (navigator.browserLanguage || navigator.language).toLowerCase() }; $.extend({ fullScreenStatus: function fullScreenStatus(value) { if (value !== undefined) window.fullscreen = value; return document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || window.fullscreen || false; }, bc: function (options) { options = $.extend({ id: "", url: "", data: {}, htmlTemplate: '
', title: "", modal: false, loading: false, loadingTimeout: 10000, callback: false, cors: false, contentType: 'application/json', dataType: 'json', method: 'get', autoFooter: false }, options); if (!options.url || options.url === "") { toastr.error('未设置请求地址Url', '参数错误'); return; } var loadFlag = "loading"; var loadingHandler = null; if (options.loading && options.modal) { var $modal = $(options.modal); $modal.on('shown.bs.modal', function () { var $this = $(this); if (loadingHandler !== null) { window.clearTimeout(loadingHandler); loadingHandler = null; } if ($this.hasClass(loadFlag)) return; $this.modal('hide'); }); loadingHandler = window.setTimeout(function () { $(options.modal).addClass(loadFlag).modal('show'); }, 300); var loadTimeoutHandler = setTimeout(function () { $(options.modal).find('.close').removeClass('d-none'); clearTimeout(loadTimeoutHandler); }, options.loadingTimeout); } var data = options.method === 'get' ? options.data : JSON.stringify(options.data); var url = options.id !== '' ? options.url + '/' + options.id : options.url; if (options.query) { var qs = []; for (var key in options.query) { qs.push($.format("{0}={1}", key, options.query[key])); } url = url + "?" + qs.join('&'); } function success(result) { if (options.modal && (result || options.loading)) { if (loadingHandler !== null) { // cancel show modal event window.clearTimeout(loadingHandler); loadingHandler = null; } else $(options.modal).removeClass(loadFlag).modal('hide'); } if (options.title) toastr[result ? 'success' : 'error'](options.title + (result ? "成功" : "失败")); if ($.isFunction(options.callback)) { options.callback.call(options, result); } if (options.autoFooter === true) { $.footer(); } } var ajaxSettings = { url: $.formatUrl(url), data: data, method: options.method, contentType: options.contentType, dataType: options.dataType, crossDomain: false, success: function (result) { success(result); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (window.toastr) toastr.error(XMLHttpRequest.status === 500 ? '后台应用程序错误' : errorThrown, '程序错误'); success(false); } }; if (options.cors) $.extend(ajaxSettings, { xhrFields: { withCredentials: true }, crossDomain: true }); if ($.isArray($.logData) && !$.isEmptyObject(options.data) && options.method !== 'delete') $.logData.push({ url: url, data: options.data }); $.ajax(ajaxSettings); }, lgbSwal: function (options) { if ($.isFunction(swal)) { swal($.extend({ html: true, showConfirmButton: false, showCancelButton: false, timer: 1000, title: '未设置', type: "success" }, options)); } }, getUID: function (prefix) { if (!prefix) prefix = 'lgb'; do prefix += ~~(Math.random() * 1000000); while (document.getElementById(prefix)); return prefix; }, footer: function (options) { var op = $.extend({ header: "header", content: ".main-content", ele: 'footer' }, options); var $ele = $(op.ele); return $(op.header).outerHeight() + $(op.content).outerHeight() + $ele.outerHeight() > $(window).height() ? $ele.removeClass('position-fixed') : $ele.addClass('position-fixed'); }, formatUrl: function (url) { if (!url) return url; if (url.substr(0, 4) === "http") return url; var base = $('#pathBase').attr('href'); return base + url; }, safeHtml: function (text) { return $('
').text(text).html(); }, syntaxHighlight: function (json) { if (typeof (json) === 'string') { json = JSON.parse(json); } json = JSON.stringify(json, undefined, 2); json = json.replace(/&/g, '&').replace(//g, '>'); return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { var cls = 'number'; if (/^"/.test(match)) { if (/:$/.test(match)) { cls = 'key'; } else { cls = 'string'; } } else if (/true|false/.test(match)) { cls = 'boolean'; } else if (/null/.test(match)) { cls = 'null'; } return '' + match + ''; } ); } }); window.lgbSwal = $.lgbSwal; $.fn.extend({ autoCenter: function (options) { options = $.extend({ top: 0 }, options); var that = this; var defaultVal = parseFloat(that.css('marginTop').replace('px', '')); var getHeight = function () { return Math.max(defaultVal, ($(window).height() - options.top - that.outerHeight()) / 2 + $(document).scrollTop()); }; $(window).resize(function () { that.css({ marginTop: getHeight() }); }); that.css({ marginTop: getHeight(), transition: "all .5s linear" }); return this; }, lgbTable: function (options) { var bsa = new DataTable($.extend(options.dataBinder, { url: options.url })); var settings = $.extend(true, { url: options.url, checkbox: true, editButtons: { id: "#tableButtons", events: {}, formatter: false }, editTitle: "操作", editField: "Id", queryButton: false }, options.smartTable); var $editButtons = $(settings.editButtons.id); if ($editButtons.find('button').length > 0) settings.columns.push({ title: settings.editTitle, field: settings.editField, events: $.extend({}, bsa.idEvents(), settings.editButtons.events), formatter: function (value, row, index) { if ($.isFunction(settings.editButtons.formatter)) { return settings.editButtons.formatter.call($editButtons, value, row, index); } return $editButtons.html(); } }); if (settings.checkbox) settings.columns.unshift({ checkbox: true }); return this.smartTable(settings); }, smartTable: function (options) { var settings = $.extend({ toolbar: '#toolbar', //工具按钮用哪个容器 striped: true, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) sortOrder: "asc", //排序方式 sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 20, //每页的记录行数(*) pageList: [20, 40, 80, 120], //可供选择的每页的行数(*) showExport: true, exportTypes: ['csv', 'txt', 'excel'], showColumns: true, //是否显示所有的列 showRefresh: true, //是否显示刷新按钮 showToggle: true, //是否显示详细视图和列表视图的切换按钮 cardView: $(window).width() < 768, //是否显示详细视图 queryButton: '#btn_query', onLoadSuccess: function (data) { $.footer(); if (data.IsSuccess === false) { toastr.error(data.HttpResult.Message, data.HttpResult.Name); } }, onToggle: function () { $.footer(); } }, options); settings.url = $.formatUrl(settings.url); $.each(settings.columns, function (index, value) { if (!$.isFunction(value.formatter)) { value.formatter = function (value, row, index, field) { return $.safeHtml(value); } } else { var formatter = value.formatter; value.formatter = function (value, row, index, field) { return formatter.call(this, $.safeHtml(value), row, index, field); } } }); this.bootstrapTable(settings); $('.bootstrap-table .fixed-table-toolbar .columns .export .dropdown-menu').addClass("dropdown-menu-right"); var $gear = $(settings.toolbar).removeClass('d-none').find('.gear'); if ($gear.find('.dropdown-menu > a').length === 0) $gear.addClass('d-none'); $gear.on('click', 'a', function (e) { e.preventDefault(); $('#' + $(this).attr('id').replace('tb_', 'btn_')).trigger("click"); }); if (settings.queryButton) { $(settings.queryButton).on('click', this, function (e) { e.data.bootstrapTable('refresh'); }); } return this; }, lgbPopover: function (options) { this.each(function (index, ele) { var $ele = $(ele); var data = $ele.data($.fn.popover.Constructor.DATA_KEY); if (data) { $.extend(data.config, options); } else { $ele.popover(options); } }); return this; }, lgbTooltip: function (options) { this.each(function (index, ele) { var $ele = $(ele); var data = $ele.data($.fn.tooltip.Constructor.DATA_KEY); if (data) { $.extend(data.config, options); } else { $ele.tooltip(options); } }); return this; }, lgbDatePicker: function (options) { if (!$.isFunction(this.datetimepicker)) return this; var option = $.extend({ language: 'zh-CN', weekStart: 1, todayBtn: 1, autoclose: 1, todayHighlight: 1, startView: 2, minView: 2, forceParse: 0, format: 'yyyy-mm-dd', pickerPosition: 'bottom-left', fontAwesome: true }, options); this.datetimepicker(option); return this; }, getTextByValue: function (value) { var text = this.children().filter(function () { return $(this).val() === value; }).text(); if (text === "") text = value; return text; }, lgbInfo: function (option) { this.each(function () { var $element = $(this); $element.append($.format('')); }); var container = this.attr('data-container') || '#dialogNew'; this.find('[data-toggle="popover"]').popover($.extend({ title: function () { return $(this).parent().text(); }, content: function () { return $(this).parent().attr('data-content'); }, trigger: 'focus', html: true, container: container, placement: function () { return $(this.element).parent().attr('data-placement') || 'auto'; } }, option)); return this; }, notifi: function (options) { var op = $.extend({ url: '', method: 'rev', invoke: false, callback: false }, options); var connection = new signalR.HubConnectionBuilder().withUrl($.formatUrl(op.url)).build(); var that = this; connection.on(op.method, function () { if ($.isFunction(op.callback)) op.callback.apply(that, arguments); }); connection.start().catch(function (err) { if ($.isFunction(op.callback)) op.callback.apply(that, arguments); return console.error(err.toString()); }).then(function () { if (op.invoke) op.invoke(connection).then(function (result) { console.log(result); }).catch(function (err) { console.error(err.toString()); }); }); return this; } }); //extend dropdown method $.extend($.fn.dropdown.Constructor.prototype, { val: function () { var $element = $(this._element); var $op = $(this._menu).find('[data-val="' + $element.val() + '"]:first'); $element.text($op.text()); }, select: function () { var $element = $(this._element); $(this._menu).on('click', 'a', function (event) { event.preventDefault(); var $op = $(this); $element.text($op.text()).val($op.attr('data-val')); }); } }); $(function () { // fix bug bootstrap-table 1.12.1 showToggle if ($.fn.bootstrapTable) { $.extend($.fn.bootstrapTable.defaults.icons, { toggle: 'fa-toggle-off', export: 'fa-download' }); } if (window.NProgress) { $(document).ajaxStart(function () { return NProgress.start(); }); $(document).ajaxComplete(function (e) { return NProgress.done(); }); } if (window.toastr) toastr.options = { "closeButton": true, "debug": false, "progressBar": true, "positionClass": "toast-bottom-right", "onclick": null, "showDuration": "600", "hideDuration": "2000", "timeOut": "4000", "extendedTimeOut": "1000", "showEasing": "swing", "hideEasing": "linear", "showMethod": "fadeIn", "hideMethod": "fadeOut" }; $('.collapse').on('shown.bs.collapse', function () { $.footer().removeClass('d-none'); }).on('hidden.bs.collapse', function () { $.footer().removeClass('d-none'); }).on('hide.bs.collapse', function () { $('footer').addClass('d-none'); }).on('show.bs.collapse', function () { $('footer').addClass('d-none'); }); $(window).on('resize', function () { $.footer(); }); $("#gotoTop").on('click', function (e) { e.preventDefault(); $('html, body, .main-content').animate({ scrollTop: 0 }, 200); }); $('[data-toggle="dropdown"].dropdown-select').dropdown('select'); $('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="popover"]').popover(); $('[data-toggle="lgbinfo"]').lgbInfo(); $('.date').lgbDatePicker(); }); })(jQuery);