/**
* 通用方法封装处理
* copyright (c) 2019 ruoyi
*/
var startlaydate;
var endlaydate;
$(function() {
// layer扩展皮肤
if (window.layer !== undefined) {
layer.config({
extend: 'moon/style.css',
skin: 'layer-ext-moon'
});
}
// 回到顶部绑定
if ($.fn.totop !== undefined) {
$('#scroll-up').totop();
}
// select2复选框事件绑定
if ($.fn.select2 !== undefined) {
$.fn.select2.defaults.set( "theme", "bootstrap" );
$("select.form-control:not(.noselect2)").each(function () {
$(this).select2().on("change", function () {
$(this).valid();
})
})
}
// icheck单选框及复选框事件绑定
if ($.fn.icheck !== undefined) {
$(".check-box:not(.noicheck),.radio-box:not(.noicheck)").each(function() {
$(this).icheck({
checkboxclass: 'icheckbox-blue',
radioclass: 'iradio-blue',
})
})
}
// 取消回车自动提交表单
$(document).on("keypress", ":input:not(textarea):not([type=submit])", function(event) {
if (event.keycode == 13) {
event.preventdefault();
}
});
// laydate 时间控件绑定
if ($(".select-time").length > 0) {
layui.use('laydate', function() {
var laydate = layui.laydate;
startlaydate = laydate.render({
elem: '#starttime',
max: $('#endtime').val(),
theme: 'molv',
type: $('#starttime').attr("data-type") || 'date',
trigger: 'click',
done: function(value, date) {
// 结束时间大于开始时间
if (value !== '') {
endlaydate.config.min.year = date.year;
endlaydate.config.min.month = date.month - 1;
endlaydate.config.min.date = date.date;
} else {
endlaydate.config.min.year = '';
endlaydate.config.min.month = '';
endlaydate.config.min.date = '';
}
}
});
endlaydate = laydate.render({
elem: '#endtime',
min: $('#starttime').val(),
theme: 'molv',
type: $('#endtime').attr("data-type") || 'date',
trigger: 'click',
done: function(value, date) {
// 开始时间小于结束时间
if (value !== '') {
startlaydate.config.max.year = date.year;
startlaydate.config.max.month = date.month - 1;
startlaydate.config.max.date = date.date;
} else {
startlaydate.config.max.year = '2099';
startlaydate.config.max.month = '12';
startlaydate.config.max.date = '31';
}
}
});
});
}
// laydate time-input 时间控件绑定
if ($(".time-input").length > 0) {
layui.use('laydate', function () {
var com = layui.laydate;
$(".time-input").each(function (index, item) {
var time = $(item);
// 控制控件外观
var type = time.attr("data-type") || 'date';
// 控制回显格式
var format = time.attr("data-format") || 'yyyy-mm-dd';
// 控制日期控件按钮
var buttons = time.attr("data-btn") || 'clear|now|confirm', newbtnarr = [];
// 日期控件选择完成后回调处理
var callback = time.attr("data-callback") || {};
if (buttons) {
if (buttons.indexof("|") > 0) {
var btnarr = buttons.split("|"), btnlen = btnarr.length;
for (var j = 0; j < btnlen; j++) {
if ("clear" === btnarr[j] || "now" === btnarr[j] || "confirm" === btnarr[j]) {
newbtnarr.push(btnarr[j]);
}
}
} else {
if ("clear" === buttons || "now" === buttons || "confirm" === buttons) {
newbtnarr.push(buttons);
}
}
} else {
newbtnarr = ['clear', 'now', 'confirm'];
}
com.render({
elem: item,
theme: 'molv',
trigger: 'click',
type: type,
format: format,
btns: newbtnarr,
done: function (value, data) {
if (typeof window[callback] != 'undefined'
&& window[callback] instanceof function) {
window[callback](value, data);
}
}
});
});
});
}
// tree 关键字搜索绑定
if ($("#keyword").length > 0) {
$("#keyword").bind("focus", function focuskey(e) {
if ($("#keyword").hasclass("empty")) {
$("#keyword").removeclass("empty");
}
}).bind("blur", function blurkey(e) {
if ($("#keyword").val() === "") {
$("#keyword").addclass("empty");
}
$.tree.searchnode(e);
}).bind("input propertychange", $.tree.searchnode);
}
// tree表格树 展开/折叠
var expandflag;
$("#expandallbtn").click(function() {
var dataexpand = $.common.isempty(table.options.expandall) ? true : table.options.expandall;
expandflag = $.common.isempty(expandflag) ? dataexpand : expandflag;
if (!expandflag) {
$.btttable.bootstraptreetable('expandall');
} else {
$.btttable.bootstraptreetable('collapseall');
}
expandflag = expandflag ? false: true;
})
// 按下esc按钮关闭弹层
$('body', document).on('keyup', function(e) {
if (e.which === 27) {
$.modal.closeall();
}
});
});
(function ($) {
'use strict';
$.fn.totop = function(opt) {
var elem = this;
var win = (opt && opt.hasownproperty('win')) ? opt.win : $(window);
var doc = (opt && opt.hasownproperty('doc')) ? opt.doc : $('html, body');
var options = $.extend({
autohide: true,
offset: 50,
speed: 500,
position: true,
right: 15,
bottom: 5
}, opt);
elem.css({
'cursor': 'pointer'
});
if (options.autohide) {
elem.css('display', 'none');
}
if (options.position) {
elem.css({
'position': 'fixed',
'right': options.right,
'bottom': options.bottom,
});
}
elem.click(function() {
doc.animate({
scrolltop: 0
}, options.speed);
});
win.scroll(function() {
var scrolling = win.scrolltop();
if (options.autohide) {
if (scrolling > options.offset) {
elem.fadein(options.speed);
} else elem.fadeout(options.speed);
}
});
};
})(jquery);
/** 刷新选项卡 */
var refreshitem = function(){
var topwindow = $(window.parent.document);
var currentid = $('.page-tabs-content', topwindow).find('.active').attr('data-id');
var target = $('.ruoyi_iframe[data-id="' + currentid + '"]', topwindow);
var url = target.attr('src');
target.attr('src', url).ready();
}
/** 关闭选项卡 */
var closeitem = function(dataid){
var topwindow = $(window.parent.document);
if($.common.isnotempty(dataid)){
window.parent.$.modal.closeloading();
// 根据dataid关闭指定选项卡
$('.menutab[data-id="' + dataid + '"]', topwindow).remove();
// 移除相应tab对应的内容区
$('.maincontent .ruoyi_iframe[data-id="' + dataid + '"]', topwindow).remove();
return;
}
var panelurl = window.frameelement.getattribute('data-panel');
$('.page-tabs-content .active i', topwindow).click();
if($.common.isnotempty(panelurl)){
$('.menutab[data-id="' + panelurl + '"]', topwindow).addclass('active').siblings('.menutab').removeclass('active');
$('.maincontent .ruoyi_iframe', topwindow).each(function() {
if ($(this).data('id') == panelurl) {
$(this).show().siblings('.ruoyi_iframe').hide();
return false;
}
});
}
}
/** 创建选项卡 */
function createmenuitem(dataurl, menuname, isrefresh) {
var panelurl = window.frameelement.getattribute('data-id'),
dataindex = $.common.random(1, 100),
flag = true;
if (dataurl == undefined || $.trim(dataurl).length == 0) return false;
var topwindow = $(window.parent.document);
// 选项卡菜单已存在
$('.menutab', topwindow).each(function() {
if ($(this).data('id') == dataurl) {
if (!$(this).hasclass('active')) {
$(this).addclass('active').siblings('.menutab').removeclass('active');
scrolltotab(this);
$('.page-tabs-content').animate({ marginleft: ""}, "fast");
// 显示tab对应的内容区
$('.maincontent .ruoyi_iframe', topwindow).each(function() {
if ($(this).data('id') == dataurl) {
$(this).show().siblings('.ruoyi_iframe').hide();
return false;
}
});
}
if (isrefresh) {
refreshtab();
}
flag = false;
return false;
}
});
// 选项卡菜单不存在
if (flag) {
var str = '';
$('.menutab', topwindow).removeclass('active');
// 添加选项卡对应的iframe
var str1 = '';
$('.maincontent', topwindow).find('iframe.ruoyi_iframe').hide().parents('.maincontent').append(str1);
window.parent.$.modal.loading("数据加载中,请稍候...");
$('.maincontent iframe:visible', topwindow).on('load', function() {
window.parent.$.modal.closeloading();
});
// 添加选项卡
$('.menutabs .page-tabs-content', topwindow).append(str);
scrolltotab($('.menutab.active', topwindow));
}
return false;
}
// 刷新iframe
function refreshtab() {
var topwindow = $(window.parent.document);
var currentid = $('.page-tabs-content', topwindow).find('.active').attr('data-id');
var target = $('.ruoyi_iframe[data-id="' + currentid + '"]', topwindow);
var url = target.attr('src');
target.attr('src', url).ready();
}
// 滚动到指定选项卡
function scrolltotab(element) {
var topwindow = $(window.parent.document);
var marginleftval = calsumwidth($(element).prevall()),
marginrightval = calsumwidth($(element).nextall());
// 可视区域非tab宽度
var tabouterwidth = calsumwidth($(".content-tabs", topwindow).children().not(".menutabs"));
//可视区域tab宽度
var visiblewidth = $(".content-tabs", topwindow).outerwidth(true) - tabouterwidth;
//实际滚动宽度
var scrollval = 0;
if ($(".page-tabs-content", topwindow).outerwidth() < visiblewidth) {
scrollval = 0;
} else if (marginrightval <= (visiblewidth - $(element).outerwidth(true) - $(element).next().outerwidth(true))) {
if ((visiblewidth - $(element).next().outerwidth(true)) > marginrightval) {
scrollval = marginleftval;
var tabelement = element;
while ((scrollval - $(tabelement).outerwidth()) > ($(".page-tabs-content", topwindow).outerwidth() - visiblewidth)) {
scrollval -= $(tabelement).prev().outerwidth();
tabelement = $(tabelement).prev();
}
}
} else if (marginleftval > (visiblewidth - $(element).outerwidth(true) - $(element).prev().outerwidth(true))) {
scrollval = marginleftval - $(element).prev().outerwidth(true);
}
$('.page-tabs-content', topwindow).animate({ marginleft: 0 - scrollval + 'px' }, "fast");
}
// 计算元素集合的总宽度
function calsumwidth(elements) {
var width = 0;
$(elements).each(function() {
width += $(this).outerwidth(true);
});
return width;
}
// 返回当前激活的tab页面关联的iframe的windows对象
function activewindow() {
var topwindow = $(window.parent.document);
var currentid = $('.page-tabs-content', topwindow).find('.active').attr('data-id');
if (!currentid) {
return window.parent;
}
return $('.ruoyi_iframe[data-id="' + currentid + '"]', topwindow)[0].contentwindow;
}
/** 密码规则范围验证 */
function checkpwd(chrtype, password) {
if (chrtype == 1) {
if(!$.common.numvalid(password)){
$.modal.alertwarning("密码只能为0-9数字");
return false;
}
} else if (chrtype == 2) {
if(!$.common.envalid(password)){
$.modal.alertwarning("密码只能为a-z和a-z字母");
return false;
}
} else if (chrtype == 3) {
if(!$.common.ennumvalid(password)){
$.modal.alertwarning("密码必须包含字母以及数字");
return false;
}
} else if (chrtype == 4) {
if(!$.common.charvalid(password)){
$.modal.alertwarning("密码必须包含字母、数字、以及特殊符号~!@#$%^&*()-=_+");
return false;
}
}
return true;
}
// 日志打印封装处理
var log = {
log: function(msg) {
console.log(msg);
},
info: function(msg) {
console.info(msg);
},
warn: function(msg) {
console.warn(msg);
},
error: function(msg) {
console.error(msg);
}
};
// 本地缓存处理
var storage = {
set: function(key, value) {
window.localstorage.setitem(key, value);
},
get: function(key) {
return window.localstorage.getitem(key);
},
remove: function(key) {
window.localstorage.removeitem(key);
},
clear: function() {
window.localstorage.clear();
}
};
// 主子表操作封装处理
var sub = {
editrow: function() {
var datacolumns = [];
for (var columnindex = 0; columnindex < table.options.columns.length; columnindex++) {
if (table.options.columns[columnindex].visible != false) {
datacolumns.push(table.options.columns[columnindex]);
}
}
var params = new array();
var data = $("#" + table.options.id).bootstraptable('getdata');
var count = data.length;
for (var dataindex = 0; dataindex < count; dataindex++) {
var columns = $('#' + table.options.id + ' tr[data-index="' + dataindex + '"] td');
var obj = new object();
for (var i = 0; i < columns.length; i++) {
var inputvalue = $(columns[i]).find('input');
var selectvalue = $(columns[i]).find('select');
var textareavalue = $(columns[i]).find('textarea');
var key = datacolumns[i].field;
if ($.common.isnotempty(inputvalue.val())) {
obj[key] = inputvalue.val();
} else if ($.common.isnotempty(selectvalue.val())) {
obj[key] = selectvalue.val();
} else if ($.common.isnotempty(textareavalue.val())) {
obj[key] = textareavalue.val();
} else {
if (key == "index" && $.common.isnotempty(data[dataindex].index)) {
obj[key] = data[dataindex].index;
} else {
obj[key] = "";
}
}
}
var item = data[dataindex];
var extendobj = $.extend({}, item, obj);
params.push({ index: dataindex, row: extendobj });
}
$("#" + table.options.id).bootstraptable("updaterow", params);
},
delrow: function(column) {
sub.editrow();
var subcolumn = $.common.isempty(column) ? "index" : column;
var ids = $.table.selectcolumns(subcolumn);
if (ids.length == 0) {
$.modal.alertwarning("请至少选择一条记录");
return;
}
$("#" + table.options.id).bootstraptable('remove', { field: subcolumn, values: ids });
},
delrowbyindex: function(value) {
sub.editrow();
$("#" + table.options.id).bootstraptable('remove', { field: "index", values: [value] });
sub.editrow();
},
addrow: function(row, tableid) {
var currentid = $.common.isempty(tableid) ? table.options.id : tableid;
table.set(currentid);
var count = $("#" + currentid).bootstraptable('getdata').length;
sub.editrow();
$("#" + currentid).bootstraptable('insertrow', { index: count + 1, row: row });
}
};
// 动态加载css文件
function loadcss(file, headelem) {
var link = document.createelement('link');
link.href = file;
link.rel = 'stylesheet';
link.type = 'text/css';
if (headelem) headelem.appendchild(link);
else document.getelementsbytagname('head')[0].appendchild(link);
}
// 动态加载js文件
function loadjs(file, headelem) {
var script = document.createelement('script');
script.src = file;
script.type = 'text/javascript';
if (headelem) headelem.appendchild(script);
else document.getelementsbytagname('head')[0].appendchild(script);
}
// 禁止后退键(backspace)
window.onload = function() {
document.getelementsbytagname("body")[0].onkeydown = function() {
// 获取事件对象
var elem = event.relatedtarget || event.srcelement || event.target || event.currenttarget;
// 判断按键为backspace键
if (event.keycode == 8) {
// 判断是否需要阻止按下键盘的事件默认传递
var name = elem.nodename;
var classname = elem.classname;
// 屏蔽特定的样式名称
if (classname.indexof('note-editable') != -1)
{
return true;
}
if (name != 'input' && name != 'textarea') {
return _stopit(event);
}
var type_e = elem.type.touppercase();
if (name == 'input' && (type_e != 'text' && type_e != 'textarea' && type_e != 'password' && type_e != 'file' && type_e != 'search' && type_e != 'number' && type_e != 'email' && type_e != 'url')) {
return _stopit(event);
}
if (name == 'input' && (elem.readonly == true || elem.disabled == true)) {
return _stopit(event);
}
}
};
};
function _stopit(e) {
if (e.returnvalue) {
e.returnvalue = false;
}
if (e.preventdefault) {
e.preventdefault();
}
return false;
}
/** 设置全局ajax处理 */
$.ajaxsetup({
complete: function(xmlhttprequest, textstatus) {
if (textstatus == 'timeout') {
$.modal.alertwarning("服务器超时,请稍后再试!");
$.modal.enable();
$.modal.closeloading();
} else if (textstatus == "parsererror" || textstatus == "error") {
$.modal.alertwarning("服务器错误,请联系管理员!");
$.modal.enable();
$.modal.closeloading();
}
}
});