define(['fast', 'template', 'moment'], function (Fast, Template, Moment) {
var Backend = {
api: {
sidebar: function (params) {
colorArr = ['red', 'green', 'yellow', 'blue', 'teal', 'orange', 'purple'];
$colorNums = colorArr.length;
badgeList = {};
$.each(params, function (k, v) {
$url = Fast.api.fixurl(k);
if ($.isArray(v)) {
$nums = typeof v[0] !== 'undefined' ? v[0] : 0;
$color = typeof v[1] !== 'undefined' ? v[1] : colorArr[(!isNaN($nums) ? $nums : $nums.length) % $colorNums];
$class = typeof v[2] !== 'undefined' ? v[2] : 'label';
} else {
$nums = v;
$color = colorArr[(!isNaN($nums) ? $nums : $nums.length) % $colorNums];
$class = 'label';
}
//必须nums大于0才显示
badgeList[$url] = $nums > 0 ? '' + $nums + '' : '';
});
$.each(badgeList, function (k, v) {
var anchor = top.window.$("li a[addtabs][url='" + k + "']");
if (anchor) {
top.window.$(".pull-right-container", anchor).html(v);
top.window.$(".nav-addtabs li a[node-id='" + anchor.attr("addtabs") + "'] .pull-right-container").html(v);
}
});
},
addtabs: function (url, title, icon) {
var dom = "a[url='{url}']"
var leftlink = top.window.$(dom.replace(/\{url\}/, url));
if (leftlink.size() > 0) {
leftlink.trigger("click");
} else {
url = Fast.api.fixurl(url);
leftlink = top.window.$(dom.replace(/\{url\}/, url));
if (leftlink.size() > 0) {
var event = leftlink.parent().hasClass("active") ? "dblclick" : "click";
leftlink.trigger(event);
} else {
var baseurl = url.substr(0, url.indexOf("?") > -1 ? url.indexOf("?") : url.length);
leftlink = top.window.$(dom.replace(/\{url\}/, baseurl));
//能找到相对地址
if (leftlink.size() > 0) {
icon = typeof icon !== 'undefined' ? icon : leftlink.find("i").attr("class");
title = typeof title !== 'undefined' ? title : leftlink.find("span:first").text();
leftlink.trigger("fa.event.toggleitem");
}
var navnode = top.window.$(".nav-tabs ul li a[node-url='" + url + "']");
if (navnode.size() > 0) {
navnode.trigger("click");
} else {
//追加新的tab
var id = Math.floor(new Date().valueOf() * Math.random());
icon = typeof icon !== 'undefined' ? icon : 'fa fa-circle-o';
title = typeof title !== 'undefined' ? title : '';
top.window.$("").append(' ' + title + '').prop("href", url).attr({
url: url,
addtabs: id
}).addClass("hide").appendTo(top.window.document.body).trigger("click");
}
}
}
},
closetabs: function (url) {
if (typeof url === 'undefined') {
top.window.$("ul.nav-addtabs li.active .close-tab").trigger("click");
} else {
var dom = "a[url='{url}']"
var navlink = top.window.$(dom.replace(/\{url\}/, url));
if (navlink.size() === 0) {
url = Fast.api.fixurl(url);
navlink = top.window.$(dom.replace(/\{url\}/, url));
if (navlink.size() === 0) {
} else {
var baseurl = url.substr(0, url.indexOf("?") > -1 ? url.indexOf("?") : url.length);
navlink = top.window.$(dom.replace(/\{url\}/, baseurl));
//能找到相对地址
if (navlink.size() === 0) {
navlink = top.window.$(".nav-tabs ul li a[node-url='" + url + "']");
}
}
}
if (navlink.size() > 0 && navlink.attr('addtabs')) {
top.window.$("ul.nav-addtabs li#tab_" + navlink.attr('addtabs') + " .close-tab").trigger("click");
}
}
},
replaceids: function (elem, url) {
//如果有需要替换ids的
if (url.indexOf("{ids}") > -1) {
var ids = 0;
var tableId = $(elem).data("table-id");
if (tableId && $("#" + tableId).size() > 0 && $("#" + tableId).data("bootstrap.table")) {
var Table = require("table");
ids = Table.api.selectedids($("#" + tableId)).join(",");
}
url = url.replace(/\{ids\}/g, ids);
}
return url;
},
refreshmenu: function () {
top.window.$(".sidebar-menu").trigger("refresh");
},
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;
},
},
init: function () {
//公共代码
//添加ios-fix兼容iOS下的iframe
if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
$("html").addClass("ios-fix");
}
//配置Toastr的参数
Toastr.options.positionClass = Config.controllername === 'index' ? "toast-top-right-index" : "toast-top-right";
//点击包含.btn-dialog的元素时弹出dialog
$(document).on('click', '.btn-dialog,.dialogit', function (e) {
var that = this;
var options = $.extend({}, $(that).data() || {});
var url = Backend.api.replaceids(that, $(that).data("url") || $(that).attr('href'));
var title = $(that).attr("title") || $(that).data("title") || $(that).data('original-title');
var button = Backend.api.gettablecolumnbutton(options);
if (button && typeof button.callback === 'function') {
options.callback = button.callback;
}
if (typeof options.confirm !== 'undefined') {
Layer.confirm(options.confirm, function (index) {
Backend.api.open(url, title, options);
Layer.close(index);
});
} else {
window[$(that).data("window") || 'self'].Backend.api.open(url, title, options);
}
return false;
});
//点击包含.btn-addtabs的元素时新增选项卡
$(document).on('click', '.btn-addtabs,.addtabsit', function (e) {
var that = this;
var options = $.extend({}, $(that).data() || {});
var url = Backend.api.replaceids(that, $(that).data("url") || $(that).attr('href'));
var title = $(that).attr("title") || $(that).data("title") || $(that).data('original-title');
var icon = $(that).attr("icon") || $(that).data("icon");
if (typeof options.confirm !== 'undefined') {
Layer.confirm(options.confirm, function (index) {
Backend.api.addtabs(url, title, icon);
Layer.close(index);
});
} else {
Backend.api.addtabs(url, title, icon);
}
return false;
});
//点击包含.btn-ajax的元素时发送Ajax请求
$(document).on('click', '.btn-ajax,.ajaxit', function (e) {
var that = this;
var options = $.extend({}, $(that).data() || {});
if (typeof options.url === 'undefined' && $(that).attr("href")) {
options.url = $(that).attr("href");
}
options.url = Backend.api.replaceids(this, options.url);
var success = typeof options.success === 'function' ? options.success : null;
var error = typeof options.error === 'function' ? options.error : null;
delete options.success;
delete options.error;
var button = Backend.api.gettablecolumnbutton(options);
if (button) {
if (typeof button.success === 'function') {
success = button.success;
}
if (typeof button.error === 'function') {
error = button.error;
}
}
//如果未设备成功的回调,设定了自动刷新的情况下自动进行刷新
if (!success && typeof options.tableId !== 'undefined' && typeof options.refresh !== 'undefined' && options.refresh) {
success = function () {
$("#" + options.tableId).bootstrapTable('refresh');
}
}
if (typeof options.confirm !== 'undefined') {
Layer.confirm(options.confirm, function (index) {
Backend.api.ajax(options, success, error);
Layer.close(index);
});
} else {
Backend.api.ajax(options, success, error);
}
return false;
});
$(document).on('click', '.btn-click,.clickit', function (e) {
var that = this;
var options = $.extend({}, $(that).data() || {});
var row = {};
if (typeof options.tableId !== 'undefined') {
var index = parseInt(options.rowIndex);
var data = $("#" + options.tableId).bootstrapTable('getData');
row = typeof data[index] !== 'undefined' ? data[index] : {};
}
var button = Backend.api.gettablecolumnbutton(options);
var click = typeof button.click === 'function' ? button.click : $.noop;
if (typeof options.confirm !== 'undefined') {
Layer.confirm(options.confirm, function (index) {
click.apply(that, [options, row, button]);
Layer.close(index);
});
} else {
click.apply(that, [options, row, button]);
}
return false;
});
//修复含有fixed-footer类的body边距
if ($(".fixed-footer").size() > 0) {
$(document.body).css("padding-bottom", $(".fixed-footer").outerHeight());
}
//修复不在iframe时layer-footer隐藏的问题
if ($(".layer-footer").size() > 0 && self === top) {
$(".layer-footer").show();
}
//tooltip和popover
if (!('ontouchstart' in document.documentElement)) {
$('body').tooltip({selector: '[data-toggle="tooltip"]'});
}
$('body').popover({selector: '[data-toggle="popover"]'});
}
};
Backend.api = $.extend(Fast.api, Backend.api);
//将Template渲染至全局,以便于在子框架中调用
window.Template = Template;
//将Moment渲染至全局,以便于在子框架中调用
window.Moment = Moment;
//将Backend渲染至全局,以便于在子框架中调用
window.Backend = Backend;
Backend.init();
return Backend;
});