/** * 去字符串空格 */ function trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ''); }; function ltrim(str) { return str.replace(/(^\s*)/g, ''); }; function rtrim(str) { return str.replace(/(\s*$)/g, ''); }; /** * 判断开始字符是否是XX */ function startWith(source, str) { var reg = new RegExp("^" + str); return reg.test(source); }; /** * 判断结束字符是否是XX */ function endWith(source, str) { var reg = new RegExp(str + "$"); return reg.test(source); }; /** * iframe自适应高度 * * @param iframe */ function autoIframeHeight(iframe) { iframe.style.height = iframe.contentWindow.document.body.scrollHeight + "px"; }; /** * 设置iframe高度 * * @param iframe */ function setIframeHeight(iframe, height) { iframe.height = height; }; var commfile = function (mappernamespace, id) { this.showUpload = function () { var dialog = top.ext.modalDialog({ title: "上传文件", url: ext.contextPath + "/base/fileupload.do?mappernamespace=" + mappernamespace + "&masterid=" + id, width: 600, height: 400, onClose: function () { new commfile(mappernamespace, id).loadfile(); } }); }; this.loadfile = function () { $.post(ext.contextPath + "/base/getFileList.do?mappernamespace=" + mappernamespace + "&masterid=" + id, function (data) { var filehtml = ""; $.each(data, function (index, item) { filehtml += "
" + "" + item.filename + " " + "删除
"; }); $('#fileList').html(filehtml); }, 'json'); }; this.deletefile = function (itemid) { top.$.messager.confirm('提示', '确定删除此文件?', function (r) { if (r) { $.post(ext.contextPath + "/base/deletefile.do?mappernamespace=" + mappernamespace + "&id=" + itemid, function (data) { top.$.messager.alert("提示", data, "info", function () { if (data.indexOf("成功") > 0) { $("#" + itemid).remove(); } }); }); } }); }; }; /** * 选择人员 * @param recvname 用户名称字段名 * @param recvid 用户名称id字段名 * @param iframeId 当前窗口Id,由父窗口传递过来 */ function selectUsers(recvname, recvid, iframeId) { var dialog = parent.ext.modalDialog({ title: '选择人员', width: 600, height: 480, closeOnEscape: true, url: ext.contextPath + '/user/userForSelect.do?iframeId=' + iframeId + '&recvid=' + recvid, buttons: [ { text: '选中', handler: function () { dialog.find('iframe').get(0).contentWindow.addToSelectMulti(); } }, { text: '全选', handler: function () { dialog.find('iframe').get(0).contentWindow.addToSelectAll(); } }, { text: '清除', handler: function () { dialog.find('iframe').get(0).contentWindow.removeFromSelectAll(); } }, { text: '确定', iconCls: 'icon-ok', handler: function () { var res = dialog.find('iframe').get(0).contentWindow.selectOK(); if (res != null) { dialog.dialog('destroy'); var recvuser = res.split(";"); var recvidstr = ""; var recvnamestr = ""; for (var i = 0; i < (recvuser.length - 1); i++) {//leng-1去空格 recvidstr += recvuser[i].split(",")[0] + ","; recvnamestr += recvuser[i].split(",")[1] + ","; } if (recvidstr.length > 1) { recvidstr = recvidstr.substring(0, recvidstr.length - 1); } if (recvnamestr.length > 1) { recvnamestr = recvnamestr.substring(0, recvnamestr.length - 1); } $("#" + recvname).textbox('setValue', recvnamestr);//easyui textbox赋值jquery不一样 $("#" + recvid).val(recvidstr); } } }, { text: '取消', iconCls: 'icon-cancel', handler: function () { dialog.dialog('destroy'); } }] }); } /** * 选择人员--单选 * @param recvname 用户名称字段名 * @param recvid 用户名称id字段名 * @param iframeId 当前窗口Id,由父窗口传递过来 */ function selectSingleUser(recvname, recvid, iframeId) { var dialog = parent.ext.modalDialog({ title: '选择人员', width: 440, height: 480, closeOnEscape: true, url: ext.contextPath + '/user/userForSingleSelect.do?iframeId=' + iframeId + '&recvid=' + recvid, buttons: [ { text: '确定', iconCls: 'icon-ok', handler: function () { var res = dialog.find('iframe').get(0).contentWindow.selectOK(); if (res != null) { dialog.dialog('destroy'); var recvuser = res.split(","); $("#" + recvname).textbox('setValue', recvuser[1]);//easyui textbox赋值jquery不一样 $("#" + recvid).val(recvuser[0]); } } }, { text: '取消', iconCls: 'icon-cancel', handler: function () { dialog.dialog('destroy'); } }] }); } Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } /** * 获取当前时间 */ function getNowTime() { const myDate = new Date; const year = myDate.getFullYear(); //获取当前年 const mon = myDate.getMonth() + 1; //获取当前月 const day = myDate.getDate(); //获取当前日 const h = myDate.getHours();//获取当前小时数(0-23) const m = myDate.getMinutes();//获取当前分钟数(0-59) const s = myDate.getSeconds();//获取当前秒 const nowTime = year + "-" + (mon < 10 ? "0" + mon : mon) + "-" + (day < 10 ? "0" + day : day) + " " + (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s); return nowTime; } /** * 比较日期大小 1 sdt日期大(sdt在edt后面) -1 sdt日期小(sdt在edt前面) 0 sdt日期与edt一样大 */ function getCompareTime(sdt, edt) { var start_time = sdt; var subsidy_start_time = new Date(start_time.replace("-", "/").replace("-", "/")); var end_time = edt; var subsidy_end_time = new Date(end_time.replace("-", "/").replace("-", "/")); if (subsidy_start_time.getTime() > subsidy_end_time.getTime()) { return "1"; } else if (subsidy_start_time.getTime() == subsidy_end_time.getTime()) { return "0"; } else if (subsidy_start_time.getTime() < subsidy_end_time.getTime()) { return "-1"; } return null; } /** * 日期计算 */ function getPlusTime(date, dateval, type) { var d = new Date(date); var sec = d.getSeconds(); var min = d.getMinutes(); var hour = d.getHours(); if (type == 'min') { d.setMinutes(d.getMinutes() + Number(dateval)); let nowmon = d.getMonth() + 1; if (Number(nowmon) < 10) { nowmon = "0" + nowmon; } let nowday = d.getDate(); if (Number(nowday) < 10) { nowday = "0" + nowday; } let nowhour = d.getHours(); if (Number(nowhour) < 10) { nowhour = "0" + nowhour; } let nowmin = d.getMinutes(); if (Number(nowmin) < 10) { nowmin = "0" + nowmin; } return d.getFullYear() + "-" + nowmon + "-" + nowday + " " + nowhour + ":" + nowmin + ":" + sec; } else if (type == 'hour') { d.setHours(d.getHours() + Number(dateval)); let nowmon = d.getMonth() + 1; if (Number(nowmon) < 10) { nowmon = "0" + nowmon; } let nowday = d.getDate(); if (Number(nowday) < 10) { nowday = "0" + nowday; } let nowhour = d.getHours(); if (Number(nowhour) < 10) { nowhour = "0" + nowhour; } return d.getFullYear() + "-" + nowmon + "-" + nowday + " " + nowhour + ":" + min + ":" + sec; } else if (type == 'day') { d.setDate(d.getDate() + Number(dateval)); let nowmon = d.getMonth() + 1; if (Number(nowmon) < 10) { nowmon = "0" + nowmon; } let nowday = d.getDate(); if (Number(nowday) < 10) { nowday = "0" + nowday; } return d.getFullYear() + "-" + nowmon + "-" + nowday + " " + hour + ":" + min + ":" + sec; } else if (type == 'month') { d.setMonth(d.getMonth() + Number(dateval)); let nowmon = d.getMonth() + 1; if (Number(nowmon) < 10) { nowmon = "0" + nowmon; } let nowday = d.getDate(); if (Number(nowday) < 10) { nowday = "0" + nowday; } return d.getFullYear() + "-" + nowmon + "-" + nowday + " " + hour + ":" + min + ":" + sec; } else if (type == 'year') { d.setFullYear(d.getFullYear() + Number(dateval)); let nowmon = d.getMonth() + 1; if (Number(nowmon) < 10) { nowmon = "0" + nowmon; } let nowday = d.getDate(); if (Number(nowday) < 10) { nowday = "0" + nowday; } return d.getFullYear() + "-" + nowmon + "-" + nowday + " " + hour + ":" + min + ":" + sec; } return null; } function getMonthMaxDay(nowTime) { let nextMonth = getPlusTime(nowTime, "1", "month").substring(0, 7) + "-01"; let endday = getPlusTime(nextMonth, "-1", "day").substring(8, 10); return endday; } /** * 输出数字添加千分符 */ function numOutput(num) { var numpart = String(num).split(".");//将数字通过jq split用小数点分隔为数组对象 numpart[0] = numpart[0].replace(new RegExp('(\\d)(?=(\\d{3})+$)', 'ig'), "$1,"); //将数组对象第一个数据(整数部分)通过正则表达式每三位用逗号分隔 return numpart.join(".");//把数组通过join方法用.进行拼接 } /** * 播读语音 */ function speakText(text) { let to_speak = window.speechSynthesis; to_speak = new SpeechSynthesisUtterance(text); window.speechSynthesis.speak(to_speak); } /** * @param scope 范围 today yesterday week prevweek month prevmonth * @param datestr 如果为null,则直接取当前时间 * @return result (Array) */ function getDateStartEnd(scope, datestr) { datestr = datestr == null ? new Date() : datestr; var nowdate = new Date(datestr); //今天时间 var year = nowdate.getFullYear(); var month = nowdate.getMonth() + 1; var day = nowdate.getDate(); var today = nowdate.Format("yyyy-MM-dd"); //昨天时间 var dd = new Date(nowdate); dd.setDate(dd.getDate() - 1); var yesterday = dd.Format("yyyy-MM-dd"); // 获得本周时间 (周一到当天的时间) var thisWeekStart; //本周周一的时间 if (nowdate.getDay() == 0) { //周天的情况 thisWeekStart = (new Date(today)).getTime() - ((nowdate.getDay()) + 6) * 86400000; } else { thisWeekStart = (new Date(today)).getTime() - ((nowdate.getDay()) - 1) * 86400000; } var weekStartDate = new Date(thisWeekStart).Format("yyyy-MM-dd"); var weekEndDate = nowdate.Format("yyyy-MM-dd"); //获得上周时间 var prevWeekStart = thisWeekStart - 7 * 86400000;//上周周一的时间 var prevWeekEnd = thisWeekStart - 1 * 86400000;//上周周日的时间 var prevweekStartDate = new Date(prevWeekStart).Format("yyyy-MM-dd"); var prevweekEndDate = new Date(prevWeekEnd).Format("yyyy-MM-dd"); //获得本月时间 var currentYear = nowdate.getFullYear(); var currentMonth = nowdate.getMonth(); var monthStartDate = new Date(currentYear, currentMonth, 1).Format("yyyy-MM-dd"); var monthEndDate = weekEndDate; //获得上月时间 var currentYear = nowdate.getFullYear(); var currentMonth = nowdate.getMonth(); var prevCurrentYear = 0, prevCurrentMonth = 0; if (currentMonth == 1) { prevCurrentYear = currentYear - 1; prevCurrentMonth = 12; } else { prevCurrentYear = currentYear; prevCurrentMonth = currentMonth - 1; } var prevmonthLastday = (new Date(currentYear, currentMonth, 1)).getTime() - 86400000; var prevmonthStartDate = new Date(prevCurrentYear, prevCurrentMonth, 1).Format("yyyy-MM-dd"); var prevmonthEndDate = new Date(prevmonthLastday).Format("yyyy-MM-dd"); var result = new Array(); if (scope == "today") { result[0] = today + " 00:00:00"; result[1] = today + " 23:59:59"; } else if (scope == "yesterday") { result[0] = yesterday + " 00:00:00"; result[1] = yesterday + " 23:59:59"; } else if (scope == "week") { result[0] = weekStartDate + " 00:00:00"; result[1] = weekEndDate + " 23:59:59"; } else if (scope == "prevweek") { result[0] = prevweekStartDate + " 00:00:00"; result[1] = prevweekEndDate + " 23:59:59"; } else if (scope == "month") { result[0] = monthStartDate + " 00:00:00"; result[1] = monthEndDate + " 23:59:59"; } else if (scope == "prevmonth") { result[0] = prevmonthStartDate + " 00:00:00"; result[1] = prevmonthEndDate + " 23:59:59"; } return result; } /** * @param tips 提示内容 * @param time 秒 */ function showTips(tips, time) { var windowWidth = document.documentElement.clientWidth; var height = $(document).height(); var loadingDiv = ""; var tipsDiv = '
' + tips + '
'; $('body').append(loadingDiv + tipsDiv); $('#loadingDiv').show(); $('div.tipsClass').css({ 'top': height / 2 + 'px', 'left': (windowWidth / 2) - (tips.length * 13 / 2) + 'px', 'position': 'absolute', 'padding': '10px', 'background': '#fff', 'font-size': 12 + 'px', 'margin': '0 auto', 'text-align': 'center', 'width': 'auto', 'border': '2px solid #95B8E7' }).show(); setTimeout(function () { $('#loadingDiv').fadeOut(); $('div.tipsClass').fadeOut(); }, (time * 1000)); } /** * //测量点可视化图标路径 0:正常,1:错误,2:故障 * */ var Scada_Mp_Pic = new Array(3) Scada_Mp_Pic[0] = "/IMG/mpoint_pic/lg.png" Scada_Mp_Pic[1] = "/IMG/mpoint_pic/lr.png" Scada_Mp_Pic[2] = "/IMG/mpoint_pic/ly.png" function getMpPic() { var str = ""; for (i = 0; i < Scada_Mp_Pic.length; i++) { if (str != "") { str += ","; } str += "{\"id\":\"" + i + "\",\"path\":\"" + Scada_Mp_Pic[i] + "\"}"; } str = "[" + str + "]"; return str; } function initMenu() { var menu = $('#menu'); // 定义一个内部函数来执行DOM操作添加菜单 var appendS223Menu = function() { var $menu = $('#menu'); // 查找“纳管企业清单”所在的菜单项 // 情况1: 一级菜单,名称在 span 中 var $targetSpan = $menu.find("span").filter(function() { return $(this).text().trim() === '纳管企业清单'; }); var $targetLi = null; if ($targetSpan.length > 0) { $targetLi = $targetSpan.closest('li'); } else { // 情况2: 二级菜单,名称直接在 a 标签中(可能是文本节点) var $targetLink = $menu.find('a').filter(function() { // 克隆节点,移除子元素(如图标),只获取自身的文本 return $(this).clone().children().remove().end().text().trim() === '纳管企业清单'; }); if ($targetLink.length > 0) { $targetLi = $targetLink.closest('li'); } } if ($targetLi && $targetLi.length > 0) { var $treeviewMenu = $targetLi.find('> .treeview-menu'); // 确保 treeview-menu 存在 if ($treeviewMenu.length === 0) { $treeviewMenu = $(''); $targetLi.append($treeviewMenu); } // 检查是否已经添加过,防止重复添加 // 注意:新菜单项可能直接是文本,也可能包含 i 标签 var exists = false; $treeviewMenu.find('li').each(function() { // if ($(this).text().indexOf('管道管理') > -1) { // exists = true; // } }); if (!exists) { // 根据层级决定样式,通常二级或三级菜单项不需要 span 包裹文字,或者保持一致 // 这里的样式参考了 menuitems.jsp 中的 Level 3:
  • Name
  • // 使用 addTab 函数而不是 refreshPage,以支持在 tab 页中打开(如果系统支持)或者在当前 iframe 打开 // 检查 addTab 是否存在,如果存在则使用它,否则回退到 refreshPage var newMenuHtml = ''; if (typeof addTab === 'function') { // 假设 addTab(id, name, url) } else { // 如果没有 addTab,尝试使用 iframe 加载或者直接跳转(但在框架内) // refreshPage 通常是 location.replace,这会刷新整个页面。 // 如果目标是内嵌,我们应该寻找 iframe 的加载方式。 // 查看 comm.js 其他部分,发现有 refreshPage(url) 实现为 location.replace(url)。 // 如果要内嵌,通常是设置某个 iframe 的 src。 // 假设主内容区域是一个 iframe,或者支持通过 data-url 加载。 // 暂时使用 refreshPage,但确认它是在当前窗口(iframe)中加载,而不是弹出新窗口。 // 用户反馈说“不要新开特么弹窗”,可能是指 window.open 或者 target="_blank"。 // refreshPage 使用 location.replace,是在当前窗口打开。 // 如果当前窗口是整个 index 页面,那就会刷新整个页面。 // 如果是 SPA 或者 iframe 架构,我们需要找到正确的方法。 // 观察 menuitems.jsp,发现二级菜单使用 addTab('${cumcl2.id}','${cumcl2.name}','${cumcl2.location}') // 所以我们应该优先使用 addTab。 // 如果 addTab 未定义(可能在 index.jsp 中定义),我们尝试模拟它。 // 由于 comm.js 被 index.jsp 引用,addTab 应该可用。 } $treeviewMenu.append(newMenuHtml); // 确保父菜单是展开状态(可选) // $targetLi.addClass('active menu-open'); } } }; if (sessionStorage.menu != undefined) { $('#menu').html(sessionStorage.menu); // 即使是缓存加载,也尝试添加新菜单 appendS223Menu(); if (sessionStorage.m1 != undefined) { $('#' + sessionStorage.m1).addClass('treeview active menu-open') } if (sessionStorage.m2 != undefined) { $('#' + sessionStorage.m2).addClass('treeview active menu-open') } if (sessionStorage.m3 != undefined) { $('#' + sessionStorage.m3).addClass('treeview active menu-open') } //return; } else { $.post(ext.contextPath + "/user/showMenuListByCu.do", {}, function (result) { var bigScreenHtml = '
  • ' + '' + ' 大屏展示' + '' + '' + '' + '' + '' + '
  • '; result = result + bigScreenHtml; // 替换源头GIS管理页面链接为JSP result = result.replace('newSourceGISPage.html', 'newSourceGISPage.jsp'); result = result.replace('newGIS.html', 'newSourceGISPage.jsp'); $('#menu').html(result); // 在设置HTML后执行DOM注入 appendS223Menu(); sessionStorage.setItem("menu", $('#menu').html()); // 保存修改后的HTML到sessionStorage if (sessionStorage.m1 != undefined) { $('#' + sessionStorage.m1).addClass('treeview active menu-open') } if (sessionStorage.m2 != undefined) { $('#' + sessionStorage.m2).addClass('treeview active menu-open') } if (sessionStorage.m3 != undefined) { $('#' + sessionStorage.m3).addClass('treeview active menu-open') } }); } var sidebar = $('.initMenuScroll'); initMenuScroll(sidebar); $(window).resize(function () { initMenuScroll(sidebar); }); } function initMenuScroll(menu) { //菜单滚动条 var windowHeight = $(window).height(); var mainheaderHeight = $('.main-header').outerHeight(true); var userpanelHeight = $('.user-panel').outerHeight(true); var sidebarformHeight = $('.sidebar-form').outerHeight(true); //最大高度计算 var menuHeight = windowHeight - mainheaderHeight - userpanelHeight - sidebarformHeight; menu.slimScroll({ height: menuHeight, color: '#fff', }); } /** 获取浏览器当前缩放比例 * @returns 100为100% */ function detectZoom() { var ratio = 0, screen = window.screen, ua = navigator.userAgent.toLowerCase(); if (window.devicePixelRatio !== undefined) { ratio = window.devicePixelRatio; } else if (~ua.indexOf('msie')) { if (screen.deviceXDPI && screen.logicalXDPI) { ratio = screen.deviceXDPI / screen.logicalXDPI; } } else if (window.outerWidth !== undefined && window.innerWidth !== undefined) { ratio = window.outerWidth / window.innerWidth; } if (ratio) { ratio = Math.round(ratio * 100); } return ratio; }; function initBody() { //还原是否隐藏菜单 /*if(sessionStorage.bodyClass!=undefined){ $('body').addClass(sessionStorage.bodyClass); }*/ } function doforward(url, m1, m2, m3) { url = ext.contextPath + '/' + url; sessionStorage.setItem("bodyClass", $('body')[0].className) sessionStorage.setItem("m1", m1); sessionStorage.setItem("m2", m2); sessionStorage.setItem("m3", m3); // console.info(url); location.replace(url); }; /**获取当前菜单信息*/ /* function getMenuInfo() { if (sessionStorage.m3 != undefined) { var m3 = sessionStorage.m3; $.post(ext.contextPath + "/user/getMenuInfo.do", { id: m3 }, function (result) { if (result.length == 0) { $('#head_title').html('首页'); } else { var res = result[0].name + '' + result[0].description + ''; $('#head_title').html(res); $('#head_firstlevel').attr('onclick', 'refreshPage(\'' + ext.contextPath + '/' + result[0].location + '\')'); $('#head_firstlevel').append(result[0].name); $('#head_firstlevel').children("i").attr("class", "glyphicon glyphicon-refresh"); } }, 'json'); } }; */ function getMenuInfo() { var menuId = ""; if (sessionStorage.m3 != undefined && sessionStorage.m3 != '') { menuId = sessionStorage.m3; } else if (sessionStorage.m2 != undefined && sessionStorage.m2 != '') { menuId = sessionStorage.m2; } else { if (sessionStorage.m1 != undefined && sessionStorage.m1 != '') { menuId = sessionStorage.m1; } else { try { //通过父界面获取子界面菜单id $(".tab-content", parent.document).children(".active").each(function () { var iframeID = $(this).attr("id").split('_'); if (iframeID.length > 1) { menuId = iframeID[1]; } }); } catch (err) { menuId = ''; console.log(err.message); } } } if (menuId != '') { $.post(ext.contextPath + "/user/getMenuInfo.do", {id: menuId}, function (result) { if (result.length == 0) { $('#head_title').html('首页'); $('#head_firstlevel').attr('onclick', 'refreshPage(\'' + ext.contextPath + '/Login/main.do\')'); $('#head_firstlevel').children("i").attr("class", "glyphicon glyphicon-refresh"); } else { var res = result[0].name + '' + result[0].description + ''; $('#head_title').html(res); $('#head_firstlevel').attr('onclick', 'refreshPage(\'' + ext.contextPath + '/' + result[0].location + '\')'); $('#head_firstlevel').append(result[0].name); $('#head_firstlevel').children("i").attr("class", "glyphicon glyphicon-refresh"); } }, 'json'); } }; /** * 显示主页 * */ function goToMainPage() { sessionStorage.setItem("m1", ''); sessionStorage.setItem("m2", ''); sessionStorage.setItem("m3", ''); location.replace(ext.contextPath); } /** * 刷新页面 * */ function refreshPage(url) { sessionStorage.setItem("bodyClass", $('body')[0].className) location.replace(url); }; function clearSession() { sessionStorage.clear(); //清理菜单记录 /*sessionStorage.setItem("m1", ''); sessionStorage.setItem("m2", ''); sessionStorage.setItem("m3", '');*/ }; /** * bootstrapTable 调整初始化显示 * */ function adjustBootstrapTableView(id) { setDataCardView(id); //$(".bs-checkbox").css({'text-align':'center','vertical-align':'middle'}) $("#" + id).find('input[type="checkbox"]').iCheck({ checkboxClass: 'icheckbox_flat-blue', radioClass: 'iradio_flat-blue' //长岗专用 /*checkboxClass: 'icheckbox_square-blue', radioClass: 'iradio_square-blue',*/ }); //操作 var checkAll = $("#" + id + " input[name='btSelectAll']"); //全选的input var checkboxs = $("#" + id + " input[name='btSelectItem']"); //所有单选的input checkAll.on('ifChecked ifUnchecked', function (event) { if (event.type == 'ifChecked') { checkboxs.iCheck('check'); } else { checkboxs.iCheck('uncheck'); } }); checkboxs.on('ifChecked ifUnchecked', function (event) { //ifCreated 事件应该在插件初始化之前绑定 var index = $(this).parents('tr').attr("data-index"); if (event.type == 'ifChecked') { $("#" + id).bootstrapTable('check', index); } else { $("#" + id).bootstrapTable('uncheck', index); } }); checkboxs.on('ifChanged', function (event) { if (checkboxs.filter(':checked').length == checkboxs.length) { checkAll.prop('checked', true); } else { checkAll.prop('checked', false); } checkAll.iCheck('update'); }); $(".bs-checkbox").css({'text-align': 'center', 'vertical-align': 'middle'}) } /** * bootstrapTable封装好的视图切换方法 * */ function setDataCardView(id) { var options = $("#" + id).bootstrapTable('getOptions'); if ($(window).width() < 768) { if (options.cardView === false) { $("#" + id).bootstrapTable('toggleView'); } } else { if (options.cardView === true) { $("#" + id).bootstrapTable('toggleView'); } } } /** * 依赖于adminLTE * id存放alert的div * type为提醒类型 d-danger i-info w-warning s-success * text 提醒内容 * * */ function showAlert(type, text, id) { if (id == null || id == "") id = 'alertDiv'; var ht = ""; switch (type) { case 'd': ht = '
    ' + '' + '

    ' + text + '

    ' + '
    '; break; case 'i': ht = '
    ' + '' + '

    ' + text + '

    ' + '
    '; break; case 'w': ht = '
    ' + '' + '

    ' + text + '

    ' + '
    '; break; case 's': ht = '
    ' + '' + '

    ' + text + '

    ' + '
    '; break; default: ht = '
    ' + '' + '

    ' + text + '

    ' + '
    '; } $('#' + id).html(ht); setTimeout(function () { $('#' + id).empty(); }, 3000); var $objTr = $("#" + id); //找到要定位的地方 var objTr = $objTr[0]; //转化为dom对象 $objTr.parents('.modal').animate({scrollTop: objTr.offsetTop}, "fast"); } /** * 打开modal * * */ function openModal(modalId) { $('#' + modalId).modal({ backdrop: 'static', keyboard: false }); //同一个modal可能在一个页面多个地方调用,所以要清空之前的 $('#' + modalId).on("hidden.bs.modal", function () { $(this).removeData("bs.modal"); //modal重复打开会导致前面的滚动条失去作用 $('.modal').css("overflow", "auto"); }); $('#' + modalId).on('shown.bs.modal', function () { // 执行一些动作... //将多次弹出的modal窗口关闭 var modalDom = $('body').children('#' + modalId); //console.info($(modalDom).length); if (modalDom.length > 0) { $(modalDom).remove(); for (var i = 0; i < modalDom.length; i++) { $('body').children('.modal-backdrop').first().remove(); } } }) }; /** * 关闭modal * * */ function closeModal(modalId) { $('#' + modalId).modal("hide"); }; var mySkins = [ 'skin-blue', 'skin-black', 'skin-red', 'skin-yellow', 'skin-purple', 'skin-green', 'skin-blue-light', 'skin-black-light', 'skin-red-light', 'skin-yellow-light', 'skin-purple-light', 'skin-green-light', 'skin-app-style' ]; var myBgs = [ 'bg-light-blue', 'bg-black', 'bg-red', 'bg-yellow', 'bg-purple', 'bg-green', 'bg-light-blue', 'bg-black', 'bg-red', 'bg-yellow', 'bg-purple', 'bg-green' ]; /** * 设置某一行背景色 * */ function markRow(tableId, id) { var rows = $("#" + tableId).bootstrapTable('getData'); //con $.each(rows, function (index, value) { if (rows[index].id == id) { $("#" + tableId).find("tr").each(function () { var area = $(this).attr("data-index"); //console.info(area) if (area == index) { var bodyClass = $("body").attr("class"); var bgClass = myBgs[0]; $.each(myBgs, function (index_, value_) { if (bodyClass.indexOf(value_.substring(2, value_.length)) != -1) { bgClass = myBgs[index_]; } }); $(this).addClass(bgClass); //$(this).css("background-color","#00c0ef");//将指定行背景设置为浅绿色 $('#' + tableId + ' tbody').find("tr").first().before(this); } }); } }) } var defaultThemeCls = "skin-blue"; function changeSkin(cls) { $.each(mySkins, function (i) { $('body').removeClass(mySkins[i]) }) $('body').addClass(cls) //store('skin', cls) //return false } /** * 默认 * event阻止冒泡 * */ function stopBubbleDefaultEvent() { var event = window.event || arguments.callee.caller.arguments[0]; stopBubble(event); } /** * event阻止冒泡 * */ function stopBubble(e) { //如果提供了事件对象,则这是一个非IE浏览器 if (e && e.stopPropagation) { e.stopPropagation(); //因此它支持W3C的stopPropagation()方法 } else { window.event.cancelBubble = true; //否则,我们需要使用IE的方式来取消事件冒泡 } } /** * 通用的打开下载对话框方法,没有测试过具体兼容性 * @param url 下载地址,也可以是一个blob对象,必选 * @param saveName 保存文件名,可选 */ function openDownloadDialog(url, saveName) { if (typeof url == 'object' && url instanceof Blob) { url = URL.createObjectURL(url); // 创建blob地址 } var aLink = document.createElement('a'); aLink.href = url; aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效 var event; if (window.MouseEvent) event = new MouseEvent('click'); else { event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); } aLink.dispatchEvent(event); } /** * 获取pdf链接 * @param htmlStr html页面字符结果 * */ var doExportPDF = function (htmlStr) { $.post(ext.contextPath + '/base/getPDFUrl.do', {htmlStr: htmlStr}, function (data) { openDownloadDialog(ext.basePath.replace(ext.contextPath, "") + "/" + data.res, ""); }, 'json'); } /** * 适配select2到表单 */ var fixSelect2ToForm = function (id) { $("#" + id).next().css({'height': '34px', 'line-height': '34px'}); $("#" + id).next().find(".select2-selection--single ").css({'height': '34px', 'line-height': '34px'}); $("#" + id).next().find(".select2-selection__arrow ").css({'margin-top': '3px'}); } /** * 适配select2到工具栏 */ var fixSelect2ToTool = function (id) { $("#" + id).next().find(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}); } /** * 巡检记录颜色标注集合 */ var myColors = [ '#00c0ef', '#0073b7', '#3c8dbc', '#39cccc', '#f39c12', '#ff851b', '#00a65a', '#01ff70', '#dd4b39', '#605ca8' ]; /** * 水球图形状 */ var bucketPath = 'path://M209.09,56.997c-0.034-16.849-42.416-30.501-94.707-30.501c-52.291,0-94.662,13.652-94.697,30.501l-0.001,0v165.872c0,22.25,42.398,40.3,94.688,40.3c52.31,0,94.718-18.05,94.718-40.3L209.09,56.997L209.09,56.997z'; $(function () { //initBody(); getMenuInfo(); $("#menu_search_form").attr("onsubmit", "return false;"); $("#searchForm").attr("onsubmit", "return false;"); $("#search_name").keyup(function () { if (event.keyCode == 13) { event.preventDefault(); //回车执行查询 dosearch(); event.stopPropagation(); } }); $("#search_name_menu").keyup(function () { if (event.keyCode == 13) { event.preventDefault(); //回车执行查询 searchMenu(); event.stopPropagation(); } }); //FastClick.attach(document.body); //弹窗关闭触发方法 /*$(".modal").on("hidden.bs.modal", function() { $('.modal').css("overflow","auto"); });*/ }); /** * 判断浏览器为手机端登录还是PC端,true为PC端,false为手机端 * @returns {Boolean} */ function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; } } return flag; } /** * 判断是否为APP进入网页,true为是,flase为否 * @returns {Boolean} */ function IsApp() { var u = navigator.userAgent; var flag = false; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; for (var v = 0; v < Agents.length; v++) { if (u.indexOf('iPhone') > -1 && u.indexOf('Safari') < 0) { flag = true; break; } else if (u.indexOf('Android') > -1 && u.indexOf('wv') > -1) { flag = true; break; } else { } } //alert(flag); return flag; } //限制输入内容为数字(小数) function LimitNumber(num) { num.value = num.value.replace(/[^\d^\.]+/g, ''); } //ie添加Array.from方法 if (!Array.from) { Array.from = (function () { var toStr = Object.prototype.toString; var isCallable = function (fn) { return typeof fn === 'function' || toStr.call(fn) === '[object Function]'; }; var toInteger = function (value) { var number = Number(value); if (isNaN(number)) { return 0; } if (number === 0 || !isFinite(number)) { return number; } return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number)); }; var maxSafeInteger = Math.pow(2, 53) - 1; var toLength = function (value) { var len = toInteger(value); return Math.min(Math.max(len, 0), maxSafeInteger); }; // The length property of the from method is 1. return function from(arrayLike/*, mapFn, thisArg */) { // 1. Let C be the this value. var C = this; // 2. Let items be ToObject(arrayLike). var items = Object(arrayLike); // 3. ReturnIfAbrupt(items). if (arrayLike == null) { throw new TypeError("Array.from requires an array-like object - not null or undefined"); } // 4. If mapfn is undefined, then let mapping be false. var mapFn = arguments.length > 1 ? arguments[1] : void undefined; var T; if (typeof mapFn !== 'undefined') { // 5. else // 5. a If IsCallable(mapfn) is false, throw a TypeError exception. if (!isCallable(mapFn)) { throw new TypeError('Array.from: when provided, the second argument must be a function'); } // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined. if (arguments.length > 2) { T = arguments[2]; } } // 10. Let lenValue be Get(items, "length"). // 11. Let len be ToLength(lenValue). var len = toLength(items.length); // 13. If IsConstructor(C) is true, then // 13. a. Let A be the result of calling the [[Construct]] internal method // of C with an argument list containing the single item len. // 14. a. Else, Let A be ArrayCreate(len). var A = isCallable(C) ? Object(new C(len)) : new Array(len); // 16. Let k be 0. var k = 0; // 17. Repeat, while k < len… (also steps a - h) var kValue; while (k < len) { kValue = items[k]; if (mapFn) { A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k); } else { A[k] = kValue; } k += 1; } // 18. Let putStatus be Put(A, "length", len, true). A.length = len; // 20. Return A. return A; }; }()); } //添加千分位符合 function toThousands(num) { var nums = num; var re = /\d{1,3}(?=(\d{3})+$)/g; var n1 = 0; if (nums != null && nums != '' && nums != undefined) { n1 = nums.toString().replace(/^(\d+)((\.\d+)?)$/, function (s, s1, s2) { return s1.replace(re, "$&,") + s2; }); } return n1; /*var num = (num || 0).toString(), result = ''; while (num.length > 3) { result = ',' + num.slice(-3) + result; num = num.slice(0, num.length - 3); } if (num) { result = num + result; } return result;*/ } //验证是否为数字 function isNumber(value) { var patrn = /^(-)?\d+(\.\d+)?$/; if (patrn.exec(value) == null || value == "") { return false } else { return true } } /* 功能:datepicker时间控件时间段选择初始化 参数:beginSelector:开始时间input的id;endSelector:结束时间input的id, 说明:1.时间格式:yyyy-mm-dd */ function DatePicker(beginSelector, endSelector) { //开始时间 $(beginSelector).datepicker({ todayBtn: "linked", autoclose: true, todayHighlight: true, endDate: new Date(), format: 'yyyy-mm-dd', language: 'zh-CN' }).on('changeDate', function (e) { var startTime = e.date; $(endSelector).datepicker('setStartDate', startTime); }); //结束时间 $(endSelector).datepicker({ todayBtn: "linked", autoclose: true, todayHighlight: true, endDate: new Date(), format: 'yyyy-mm-dd', language: 'zh-CN' }).on('changeDate', function (e) { var endTime = e.date; $(beginSelector).datepicker('setEndDate', endTime); }); } function DatePickerNotNow(beginSelector, endSelector) { //开始时间 $(beginSelector).datepicker({ todayBtn: "linked", autoclose: true, todayHighlight: true, format: 'yyyy-mm-dd', language: 'zh-CN' }).on('changeDate', function (e) { var startTime = e.date; $(endSelector).datepicker('setStartDate', startTime); }); //结束时间 $(endSelector).datepicker({ todayBtn: "linked", autoclose: true, todayHighlight: true, format: 'yyyy-mm-dd', language: 'zh-CN' }).on('changeDate', function (e) { var endTime = e.date; $(beginSelector).datepicker('setEndDate', endTime); }); } /* 功能:datepicker时间控件时间段选择初始化 参数:beginSelector:开始时间input的id;endSelector:结束时间input的id, 说明:1.时间格式:yyyy-mm */ function DatePickerMonth(beginSelector, endSelector) { //开始时间 $(beginSelector).datepicker({ todayBtn: "linked", autoclose: true, todayHighlight: true, endDate: new Date(), startView: 1,//开始显示时间类型 0:天;1:月;2:年; minViewMode: 1,//最小显示时间类型 0:天;1:月;2:年; format: 'yyyy-mm', language: 'zh-CN' }).on('changeDate', function (e) { var startTime = e.date; $(endSelector).datepicker('setStartDate', startTime); }); //结束时间 $(endSelector).datepicker({ todayBtn: "linked", autoclose: true, todayHighlight: true, endDate: new Date(), startView: 1,//开始显示时间类型 0:天;1:月;2:年; minViewMode: 1,//最小显示时间类型 0:天;1:月;2:年; format: 'yyyy-mm', language: 'zh-CN' }).on('changeDate', function (e) { var endTime = e.date; $(beginSelector).datepicker('setEndDate', endTime); }); } // //时间戳转日期 function getLocalTime2(nS) { var out = new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/, ' '); // let date = new Date(parseInt(nS) * 1000); // let year = date.getFullYear(); // let mon = date.getMonth() + 1; // let day = date.getDate(); // let h = date.getHours(); // let m = date.getDate(); // let s = date.getSeconds(); // // let out = year + "-" + (mon < 10 ? "0" + mon : mon) + "-" + (day < 10 ? "0" + day : day) + " " + (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s); return out; } function getLocalTime(nS) { var now = new Date(nS * 1000), y = now.getFullYear(), m = ("0" + (now.getMonth() + 1)).slice(-2), d = ("0" + now.getDate()).slice(-2); return '${y}-${m}-${d} ${now.toTimeString().substr(0, 8)}'; } function createDatetimepicker(id, type) { switch (type) { case "I": $("#" + id).datetimepicker({ language: 'zh-CN', format: 'yyyy-mm-dd hh:ii:ss', startView: "month", //初始化视图 minView: 0, maxView: "year", minuteStep: 1,//分钟间隔1分钟 todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), }).on('changeDate', function () { }); break; case "H": $("#" + id).datetimepicker({ language: 'zh-CN', format: 'yyyy-mm-dd hh:ii', startView: "month", //初始化视图 minView: 1, maxView: "year", todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), }).on('changeDate', function () { }); break; case "D": $("#" + id).datetimepicker({ language: 'zh-CN', format: 'yyyy-mm-dd', startView: "month", //初始化视图 minView: 2, maxView: "year", todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), }).on('changeDate', function () { }); break; case "M": $("#" + id).datetimepicker({ language: 'zh-CN', format: 'yyyy-mm', startView: "year", //初始化视图 minView: 3, maxView: "year", todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), }).on('changeDate', function () { }); break; case "Y": $("#" + id).datetimepicker({ language: 'zh-CN', format: 'yyyy', startView: "decade", //初始化视图 minView: 4, maxView: "year", todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), }).on('changeDate', function () { }); break; default: $("#" + id).datetimepicker({ language: 'zh-CN', format: 'yyyy-mm-dd hh:ii:ss', startView: "month", //初始化视图 minView: 0, maxView: "year", minuteStep: 1,//分钟间隔1分钟 todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), }).on('changeDate', function () { }); } } /* 功能:DateTimePicker时间控件时间段选择初始化 参数:beginSelector:开始时间input的id;endSelector:结束时间input的id,type:时间类型 说明:1.时间格式:•yyyy-mm-dd hh:ii */ function createDatetimepickerTwo(beginSelector, endSelector, type) { switch (type) { case "I": //开始时间 $("#" + beginSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm-dd hh:ii:ss', startView: "month", //初始化视图 minView: 0, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + endSelector).datetimepicker('setStartDate', $("#" + beginSelector).val()) }); //结束时间 $("#" + endSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm-dd hh:ii:ss', startView: "month", //初始化视图 minView: 0, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + beginSelector).datetimepicker('setEndDate', $("#" + endSelector).val()) }); break; case "H": //开始时间 $("#" + beginSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm-dd hh:ii', startView: "month", //初始化视图 minView: 1, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + endSelector).datetimepicker('setStartDate', $("#" + beginSelector).val()) }); //结束时间 $("#" + endSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm-dd hh:ii', startView: "month", //初始化视图 minView: 1, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + beginSelector).datetimepicker('setEndDate', $("#" + endSelector).val()) }); break; case "D": //开始时间 $("#" + beginSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm-dd', startView: "month", //初始化视图 minView: 2, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + endSelector).datetimepicker('setStartDate', $("#" + beginSelector).val()) }); //结束时间 $("#" + endSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm-dd', startView: "month", //初始化视图 minView: 2, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + beginSelector).datetimepicker('setEndDate', $("#" + endSelector).val()) }); break; case "M": //开始时间 $("#" + beginSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm', startView: "year", //初始化视图 minView: 3, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + endSelector).datetimepicker('setStartDate', $("#" + beginSelector).val()) }); //结束时间 $("#" + endSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm', startView: "year", //初始化视图 minView: 3, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + beginSelector).datetimepicker('setEndDate', $("#" + endSelector).val()) }); break; case "Y": //开始时间 $("#" + beginSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy', startView: "decade", //初始化视图 minView: 4, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + endSelector).datetimepicker('setStartDate', $("#" + beginSelector).val()) }); //结束时间 $("#" + endSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy', startView: "decade", //初始化视图 minView: 4, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + beginSelector).datetimepicker('setEndDate', $("#" + endSelector).val()) }); break; default: //开始时间 $("#" + beginSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm-dd hh:ii:ss', startView: "month", //初始化视图 minView: 0, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + endSelector).datetimepicker('setStartDate', $("#" + beginSelector).val()) }); //结束时间 $("#" + endSelector).datetimepicker({ todayBtn: true, clearBtn: true, autoclose: true, todayHighlight: 1,//今天高亮 endDate: new Date(), minuteStep: 5, //分钟间隔为5分 format: 'yyyy-mm-dd hh:ii:ss', startView: "month", //初始化视图 minView: 0, maxView: "year", language: 'zh-CN' }).on('changeDate', function (ev) { $("#" + beginSelector).datetimepicker('setEndDate', $("#" + endSelector).val()) }); } } //获取当月最后一天 function getMonthMaxDay(input) { // const input = "2020-06" const arr = input.split('-'); const maxDay = new Date(arr[0], arr[1], 0).getDate(); // 获取当月最后一日 return maxDay; }