/** * 通用方法封装处理 * 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 = '' + menuname + ' '; $('.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(); } } });