define(['jquery', 'bootstrap', 'layer','lightyear'], function ($, undefined, Layer,lightyear) { var Fast = { config: { }, events: { //请求成功的回调 onAjaxSuccess: function (ret, onAjaxSuccess) { var data = typeof ret.data !== 'undefined' ? ret.data : null; var msg = typeof ret.msg !== 'undefined' && ret.msg ? ret.msg : __('Operation completed'); if (typeof onAjaxSuccess === 'function') { var result = onAjaxSuccess.call(this, data, ret); if (result === false) return; } lightyear.notify(msg, 'success'); }, //请求错误的回调 onAjaxError: function (ret, onAjaxError) { var data = typeof ret.data !== 'undefined' ? ret.data : null; if (typeof onAjaxError === 'function') { var result = onAjaxError.call(this, data, ret); if (result === false) { return; } } lightyear.notify(ret.msg, 'danger'); }, //服务器响应数据后 onAjaxResponse: function (response) { try { var ret = typeof response === 'object' ? response : JSON.parse(response); if (!ret.hasOwnProperty('code')) { $.extend(ret, {code: -2, msg: response, data: null}); } } catch (e) { var ret = {code: -1, msg: e.message, data: null}; } return ret; } }, api: { replaceids: function (elem, url) { //如果有需要替换ids的 if (url.indexOf("{ids}") > -1) { var ids = 0; var tableId = $(elem).data("table-id"); if (tableId && $("#" + tableId).length > 0 && $("#" + tableId).data("bootstrap.table")) { var Table = require("table"); ids = Table.api.selectedids($("#" + tableId)).join(","); } url = url.replace(/\{ids\}/g, ids); } return url; }, gettablecolumnbutton: function (options) { if (typeof options.tableId !== 'undefined' && typeof options.fieldIndex !== 'undefined' && typeof options.buttonIndex !== 'undefined') { var tableOptions = $("#" + options.tableId).bootstrapTable('getOptions'); if (tableOptions) { var columnObj = null; $.each(tableOptions.columns, function (i, columns) { $.each(columns, function (j, column) { if (typeof column.fieldIndex !== 'undefined' && column.fieldIndex === options.fieldIndex) { columnObj = column; return false; } }); if (columnObj) { return false; } }); if (columnObj) { return columnObj['buttons'][options.buttonIndex]; } } } return null; }, //发送Ajax请求 ajax: function (options, success, error) { options = typeof options === 'string' ? {url: options} : options; if (typeof options.loading === 'undefined' || options.loading) { lightyear.loading('show'); // 显示 } options = $.extend({ type: "POST", dataType: "json", xhrFields: { withCredentials: true }, complete:function(){ lightyear.loading('hide'); // 隐藏 }, success: function (ret) { lightyear.loading('hide'); // 隐藏 ret = Fast.events.onAjaxResponse(ret); if (ret.code === 0) { Fast.events.onAjaxSuccess(ret, success); } else { Fast.events.onAjaxError(ret, error); } }, error: function (xhr) { lightyear.loading('hide'); // 隐藏 var ret = {code: xhr.status, msg: xhr.statusText, data: null}; Fast.events.onAjaxError(ret, error); } }, options); options.url = Fast.api.fixurl(options.url); return $.ajax(options); }, //修复URL fixurl: function (url) { if (url.substr(0, 1) == "/") { return url; } if (url.substr(0, 4) == "http") { return url; } var r = new RegExp('^(?:[a-z]+:)?//', 'i'); if (!r.test(url)) { url = Config.moduleurl + "/" + url; } return url; }, //获取修复后可访问的cdn链接 cdnurl: function (url, domain) { if(!url){return "";} if(url.substring(0,4) == 'http'){ return url; } url = url.substring(0,1)==='/' ? url:'/'+url; var rule = new RegExp("^((?:[a-z]+:)?\\/\\/|data:image\\/)", "i"); var cdnurl = Config.cdnurl; if (typeof domain === 'undefined' || domain === true || cdnurl.indexOf("/") === 0) { url = rule.test(url) || (cdnurl && url.indexOf(cdnurl) === 0) ? url : cdnurl + url; } if (domain && !rule.test(url)) { domain = typeof domain === 'string' ? domain : location.origin; url = domain + url; } return url; }, //查询Url参数 query: function (name, url) { if (!url) { url = window.location.href; } name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&/]" + name + "([=/]([^&#/?]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, " ")); }, //打开一个弹出窗口 open: function (url, title, options) { if(options && options.area && (typeof options.area == 'string' && options.area.indexOf(','))){ options.area = options.area.split(','); } title = options && options.title ? options.title : (title ? title : ""); url = Fast.api.fixurl(url); url = url + (url.indexOf("?") > -1 ? "&" : "?") + "dialog=1"; //var area = Fast.config.openArea != undefined ? Fast.config.openArea : [$(window).width() > 800 ? '800px' : '95%', $(window).height() > 600 ? '600px' : '95%']; var area = Fast.config.openArea != undefined ? Fast.config.openArea : (options.area || ['95%', '90%']); //console.log(options,area) options = $.extend({ type: 2, title: title, shadeClose: true, shade: false, maxmin: true, moveOut: true, area: area, content: url, zIndex: Layer.zIndex, success: function (layero, index) { var that = this; //存储callback事件 $(layero).data("callback", that.callback); //$(layero).removeClass("layui-layer-border"); Layer.setTop(layero); try { var frame = Layer.getChildFrame('html', index); var layerfooter = frame.find(".layer-footer"); Fast.api.layerfooter(layero, index, that); //绑定事件 if (layerfooter.length > 0) { // 监听窗口内的元素及属性变化 // Firefox和Chrome早期版本中带有前缀 var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; if (MutationObserver) { // 选择目标节点 var target = layerfooter[0]; // 创建观察者对象 var observer = new MutationObserver(function (mutations) { Fast.api.layerfooter(layero, index, that); mutations.forEach(function (mutation) { }); }); // 配置观察选项: var config = {attributes: true, childList: true, characterData: true, subtree: true} // 传入目标节点和观察选项 observer.observe(target, config); // 随后,你还可以停止观察 // observer.disconnect(); } } } catch (e) { } if ($(layero).height() > $(window).height()) { //当弹出窗口大于浏览器可视高度时,重定位 Layer.style(index, { top: 0, height: $(window).height() }); } } }, options ? options : {}); if ($(window).width() < 480 || (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream && top.$(".tab-pane.active").length > 0)) { if (top.$(".tab-pane.active").length > 0) { options.area = [top.$(".tab-pane.active").width() + "px", top.$(".tab-pane.active").height() + "px"]; options.offset = [top.$(".tab-pane.active").scrollTop() + "px", "0px"]; } else { options.area = [$(window).width() + "px", $(window).height() + "px"]; options.offset = ["0px", "0px"]; } } //console.log((parent ? parent.location. : '')); return Layer.open(options); }, //关闭窗口并回传数据 close: function (data) { var index = parent.Layer.getFrameIndex(window.name); var callback = parent.$("#layui-layer" + index).data("callback"); //再执行关闭 parent.Layer.close(index); //再调用回传函数 if (typeof callback === 'function') { callback.call(undefined, data); } }, layerfooter: function (layero, index, that) { var frame = Layer.getChildFrame('html', index); var layerfooter = frame.find(".layer-footer"); if (layerfooter.length > 0) { $(".layui-layer-footer", layero).remove(); layerfooter.hide(); var footer = $("
").addClass('layui-layer-btn layui-layer-footer'); footer.html(layerfooter.html()); if ($(".row", footer).length === 0) { $(">", footer).wrapAll("
"); } footer.insertAfter(layero.find('.layui-layer-content')); //绑定事件 footer.on("click", ".btn", function () { if ($(this).hasClass("disabled") || $(this).parent().hasClass("disabled")) { return; } var index = footer.find('.btn').index(this); $(".btn:eq(" + index + ")", layerfooter).trigger("click"); }); var titHeight = layero.find('.layui-layer-title').outerHeight() || 0; var btnHeight = layero.find('.layui-layer-btn').outerHeight() || 0; //重设iframe高度 $("iframe", layero).height(layero.height() - titHeight - btnHeight); } //修复iOS下弹出窗口的高度和iOS下iframe无法滚动的BUG if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) { var titHeight = layero.find('.layui-layer-title').outerHeight() || 0; var btnHeight = layero.find('.layui-layer-btn').outerHeight() || 0; $("iframe", layero).parent().css("height", layero.height() - titHeight - btnHeight); $("iframe", layero).css("height", "100%"); } }, success: function (options, callback) { var index, timeout = 2000; if(typeof options === 'string'){ index= lightyear.notify(options, 'success', timeout, 'mdi mdi-emoticon-happy', 'top', 'center'); }else if(typeof options == 'object'){ index= lightyear.notify(options.msg ||"操作完成", 'success', timeout, 'mdi mdi-emoticon-happy', 'top', 'center'); callback = options.callback; }else{ callback = typeof options === 'function' ? options : function(){}; index= lightyear.notify(options.msg ||"操作完成", 'success', timeout, 'mdi mdi-emoticon-happy', 'top', 'center'); } if(callback){ setTimeout(function(){ callback && callback.call(this) },timeout); } return index; }, error: function (options, callback) { var index; if(typeof options === 'string'){ index= lightyear.notify(options, 'danger', 3000, 'mdi mdi-emoticon-sad', 'top', 'center'); }else if(typeof options == 'object'){ index= lightyear.notify(options.msg ||"操作失败", 'danger', 3000, 'mdi mdi-emoticon-sad', 'top', 'center'); callback = options.callback; }else{ callback = typeof options === 'function' ? options : function(){}; index= lightyear.notify(options.msg ||"操作失败", 'danger', 3000, 'mdi mdi-emoticon-sad', 'top', 'center'); } if(callback){ setTimeout(function(){ callback && callback.call(this) },3000); } return index; }, msg: function (message, url) { var callback = typeof url === 'function' ? url : function () { if (typeof url !== 'undefined' && url) { location.href = url; } }; Layer.msg(message, { time: 2000 }, callback); }, layer: Layer, closeTopPopWindow:function(){ if ($(".layui-layer").length > 0) { var index = 0; $(".layui-layer").each(function () { index = Math.max(index, parseInt($(this).attr("times"))); }); if (index) { Layer.close(index); return true; } } return false; } }, isTopWindow:function(){ return self == parent; }, isMainIframe:function(){ return parent.location.pathname.toLocaleLowerCase() == Config.admin_path+'/index/index'; }, isPopIframe:function(){ if(Fast.isTopWindow()){ return false; } //var p = parent.location.pathname.toLocaleLowerCase().split('/'); var s = self.location.pathname.toLocaleLowerCase().split('/'); s.pop();s.push('index') //console.log(p,s); return parent.location.pathname.toLocaleLowerCase() == s.join('/'); }, lang: function () { var args = arguments, string = args[0], i = 1; string = string.toLowerCase(); //string = typeof Lang[string] != 'undefined' ? Lang[string] : string; if (typeof Lang !== 'undefined' && typeof Lang[string] !== 'undefined') { if (typeof Lang[string] == 'object') return Lang[string]; string = Lang[string]; } else if (string.indexOf('.') !== -1 && false) { var arr = string.split('.'); var current = Lang[arr[0]]; for (var i = 1; i < arr.length; i++) { current = typeof current[arr[i]] != 'undefined' ? current[arr[i]] : ''; if (typeof current != 'object') break; } if (typeof current == 'object') return current; string = current; } else { string = args[0]; } return string.replace(/%((%)|s|d)/g, function (m) { // m is the matched format, e.g. %s, %d var val = null; if (m[2]) { val = m[2]; } else { val = args[i]; // A switch statement so that the formatter can be extended. Default is %s switch (m) { case '%d': val = parseFloat(val); if (isNaN(val)) { val = 0; } break; } i++; } return val; }); }, init: function () { // jQuery兼容处理 $.fn.extend({ size: function () { return $(this).length; } }); // 对相对地址进行处理 $.ajaxSetup({ beforeSend: function (xhr, setting) { setting.url = Fast.api.fixurl(setting.url); } }); Layer.config({ skin: 'layui-layer-fast' }); // 绑定ESC关闭窗口事件 $(window).keyup(function (e) { if (e.keyCode == 27) { if(!Fast.api.closeTopPopWindow()){ parent.Fast.api.closeTopPopWindow(); } } }); //公共代码 } }; //将Layer暴露到全局中去 window.Layer = Layer; window.lightyear = lightyear; //将语言方法暴露到全局中去 window.__ = Fast.lang; //将Fast渲染至全局 window.Fast = Fast; //默认初始化执行的代码 Fast.init(); return Fast; });