var web = {}; var btns = []; var dictMap = {}; var paramMap = {}; var loginuser = {}; $(document).ready(function () { //按钮权限 if (web.getUrlVars("menuId")) { $.post(base + "/sysRoleBtn/getRoleBtns", {menuId: web.getUrlVars("menuId")}, function (json) { if (json.data) { $.each(json.data, function (id, item) { btns.push(item.btn_code); }); web.hideBtns(); } }); } else { btns=parent.btns; web.hideBtns(); } //查询-更多 $('#btn-more').on('click', function (e) { $('.query-more').toggle(); if ($('.query-more').css('display') == 'none') { $(this).html('更多'); } else { $(this).html('隐藏'); } }); //table 双击单击添加样式 $(".layui-table").on('dblclick','tr',function(){ $(this).addClass("selected"); $(this).siblings().removeClass("selected"); }); $(".layui-table").on('click','tr',function(){ $(this).addClass("selected"); $(this).siblings().removeClass("selected"); }); $(".layui-colla-content .form-group:last").css("margin-bottom","0"); }); /** * DataTable公用属性 */ $.extend(true,$.fn.dataTable.defaults, { "dom": '<"top">rt<"bottom"flip><"clear">', "autoWidth": true, // 自适应宽度 "stateSave": true, // 刷新后保存页数 "ordering" :false, "searching": false, // 本地搜索 "info": true, // 控制是否显示表格左下角的信息 "stripeClasses": ["odd", "even"], // 为奇偶行加上样式,兼容不支持CSS伪类的场合 "pagingType": "simple_numbers", // 分页样式 simple,simple_numbers,full,full_numbers "language": { // 国际化 "url":base+'/static/web/frame/jquery/language.json' }, "serverSide":true, //开启服务器模式 "deferRender": true, // 当处理大数据时,延迟渲染数据,有效提高Datatables处理能力 "sServerMethod" : "POST" }); /** * form赋值 */ web.toForm = function (form,data) { if(data){ $.each(data,function(key,value){ if($('#'+key)){ $('#'+key).val(web.nullToSpace(value)); } }); } form.render('select'); } /** * flag 当子窗口取不到是否不取父窗口的值,默认取父窗口 */ web.getUrlVars = function (name, flag) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); //modify by zhengwei if (flag) { if (r == null) { r = window.parent.location.search.substr(1).match(reg); } } if (r != null) return decodeURI(r[2]); return null; }; //把null转为空 web.nullToSpace = function (param) { if (param == null || typeof param == 'undefined') { param = ''; } return param; } //ajax post web.ajaxPost = function (url, params, callback) { var index = null; return $.ajax({ type: "POST", url: url, data: params, dataType: "json", timeout: 10000, beforeSend: function () { index = layer.load("加载中..."); }, success: function (data) { if (index) { layer.close(index); } if (typeof callback == 'function') { callback(data); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (index) { layer.close(index); } if (XMLHttpRequest.responseText && XMLHttpRequest.responseText.indexOf("") != -1) { layer.confirm('登录超时,请重新登录', { btn: ['确定', '取消'] //按钮 }, function () { location.href = base + "/admin"; }); } else { switch (XMLHttpRequest.status) { case(500): layer.msg("服务异常"); break; case(408): layer.msg("请求超时"); break; case(403): layer.msg("无权限执行此操作"); break; case(0): layer.msg("网络连接异常"); break; default: layer.msg("请求失败,请联系管理人员"); } } }, complete: function (XHR, TS) { XHR = null; } }); }; //保留两位小数 web.toDecimal = function (x) { var f = parseFloat(x); if (isNaN(f)) { return; } f = Math.round(x * 100) / 100; return f; } //table 获取选中Ids web.getIds = function (o, str) { var obj = o.find('tbody tr td:first-child input[type="checkbox"]:checked'); var list = []; obj.each(function (index, elem) { list.push($(elem).attr(str)); }); return list; } //table 获取当前页Ids web.getAllIds = function (o, str) { var obj = o.find('tbody tr td:first-child input[type="checkbox"]'); var list = []; obj.each(function (index, elem) { list.push($(elem).attr(str)); }); return list; } //table 获取选中行数据 web.getRows = function (table, o) { var obj = o.find('tbody tr td:first-child input[type="checkbox"]:checked'); var list = []; obj.each(function (index, elem) { list.push(table.row($(elem).parents("tr")).data()); }); return list; } // table rows获取指定属性值集合 web.getPropValueFromRows = function (rows, fieldName) { var data = []; for (var i = 0; i < rows.length; i++) { data.push(rows[i][fieldName]); } return data; }; //table 按钮权限 web.hideTableBtns = function (table) { $("" + table + " a").each(function (i) { if ($(this).attr("code")) { if (!btns.contains($(this).attr("code"))) { $(this).remove(); } } }); } //按钮权限 web.hideBtns = function () { $(".layui-btn").each(function (i) { if ($(this).attr("code")) { if (!btns.contains($(this).attr("code"))) { if($(this).parent().children().length==1){ $(this).parent().remove(); }else{ $(this).remove(); } } } }); } //日期格式化 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; } //数组移除 Array.prototype.removeAt = function (Index) { if (isNaN(Index) || Index > this.length) { return false; } for (var i = 0, n = 0; i < this.length; i++) { if (this[i] != this[Index]) { this[n++] = this[i] } } this.length -= 1 } //数组是否包含某项 Array.prototype.contains = function (needle) { for (i in this) { if (this[i] == needle) return true; } return false; } /** * 根据字典类型获取items * @param d_key * @returns */ web.getDictMap = function (key) { if (dictMap[key]) { return dictMap[key]; } }; /** * 根据系统参数 * @param code * @returns */ web.getParam = function (code) { if (paramMap[code]) { return paramMap[code]; } else { return ""; } }; /** * 根据代码和字典类型获取下拉选项的名称item{value:'1',label:'测试'} * @param d_key * @param code * @returns */ web.getDictVal = function (key, code) { var items = dictMap[key]; if (items && items.length > 0) { for (var i = 0; i < items.length; i++) { item = items[i]; if (item.dict_code == code) { return item.dict_name; break; } } } return ""; } /** * 弹出框 弹出界面必须包含 data * @param url * @param title * @param width * @param hight * @param id * @param name * @param callback * @returns */ web.popWin = function (url, title, width, hight,callback,flag) { layer.open({ title: [title], type: 2, content: url, area: [width + 'px', hight + 'px'], shade: 0.4, skin: 'layer-popup', btn: ['确定', '关闭'], yes: function (index) { var res = window["layui-layer-iframe" + index].getData(); if(!res){ layer.msg("请选择记录"); return; } if(res.length<1){ layer.msg("请选择记录"); return; } if(!flag&&res.length!=1){ layer.msg("只能选择一条记录") return; } if (typeof callback === 'function') { if(!flag){ callback(res[0]); }else{ callback(res); } } layer.close(index); } }); } /** * 设置复选框的值 */ web.setCheckBoxVal = function (id, v) { var obj = document.getElementById(id); if (obj) { obj.checked = v; } } /** * 获取复选框的值 */ web.getCheckBoxVal = function (id) { var obj = document.getElementById(id); if (obj && obj.checked) { return 1; } else { return 0; } } //日期区间 web.daterange = function (laydate,startFieldId, endFieldId, format) { var start = { elem: '#'+startFieldId, trigger: 'click', done: function(value, date){ end.min = value; //开始日选好后,重置结束日的最小日期 } }; laydate.render(start); var end = { elem: '#'+endFieldId, trigger: 'click', done: function(value, date){ start.max = value; //结束日选好后,重置开始日的最大日期 } }; laydate.render(end); } //下拉选择树 //objId 点击的inputID //treeId 树形ID //url 获取数据url地址 //params 参数 //check 是否多选 web.treeSelect = function (objId, treeId, url,params,check) { $('#'+objId+'').on('click',function(){ var obj = $(this); var objOffset = $(this).offset(); var setting = { check: { enable: check, chkboxType: {"Y":"", "N":""} }, data: { simpleData: { enable: true } }, view: { showIcon: false, showLine: false }, callback: { onCheck: onCheck, onClick: zTreeOnClick } }; //判断树是否要重新加载 if($('#'+treeId+' li').length>0){ $('#'+treeId+'').parent().css({left:objOffset.left + "px", top:objOffset.top + obj.outerHeight() + "px"}).slideDown("fast"); $(document).bind("mousedown", onBodyDown); }else{ web.ajaxPost(base+url,params,function(json){ $.fn.zTree.init($('#'+treeId+''), setting, json.data); $('#'+treeId+'').parent().css({left:objOffset.left + "px", top:objOffset.top + obj.outerHeight() + "px"}).slideDown("fast"); $(document).bind("mousedown", onBodyDown); }); } function onBodyDown(event) { if (!(event.target.id == obj.id || event.target.id == $('#'+treeId+'').parent().id || $(event.target).parents(".treeContent").length>0)) { hideMenu(); } } //选择事件 function onCheck(e, treeId, treeNode) { var zTree = $.fn.zTree.getZTreeObj(treeId), nodes = zTree.getCheckedNodes(true), n = ""; v = ""; for (var i=0, l=nodes.length; i 0 ) n = n.substring(0, n.length-1); if (v.length > 0 ) v = v.substring(0, v.length-1); $('#'+objId+'').val(n); $('#'+objId+'').siblings("input[type=hidden]").val(v); } //树点击事件 function zTreeOnClick(event, treeId, treeNode) { if(check){ return; } var zTree = $.fn.zTree.getZTreeObj(treeId), nodes = zTree.getSelectedNodes(), n = ""; v = ""; nodes.sort(function compare(a,b){return a.id-b.id;}); for (var i=0, l=nodes.length; i 0 ) n = n.substring(0, n.length-1); if (v.length > 0 ) v = v.substring(0, v.length-1); $('#'+objId+'').val(n); $('#'+objId+'').siblings("input[type=hidden]").val(v); hideMenu(); }; //隐藏树 function hideMenu() { $('#'+treeId+'').parent().fadeOut("fast"); $(document).unbind("mousedown", onBodyDown); } }); } /** * 设置行政区划选中器的值 * @param addrselectorId 界面行政区划的Id * @param params 行政区划数组 */ web.setAddressSelectorValue = function (addrselectorId, params) { // 行政区划数组prams值如下: /* var address ={}; address['provinceCode'] = '320000'; address['provinceName'] = '江苏省'; address['cityCode'] = '320900'; address['cityName'] = '盐城市'; address['countyCode'] = '320923'; address['countyName'] = '阜宁县'; */ var addressSelect = '#' + addrselectorId; var $hideInputs = $(addressSelect).find('input:hidden').not('.em'); if ($hideInputs) { $hideInputs.eq(0).val(params.provinceCode); $hideInputs.eq(1).val(params.provinceName); $hideInputs.eq(2).val(params.cityCode); $hideInputs.eq(3).val(params.cityName); $hideInputs.eq(4).val(params.countyCode); $hideInputs.eq(5).val(params.countyName); var $dd = $(addressSelect).find('dd'), $provinceName = $hideInputs.eq(1), $cityName = $hideInputs.eq(3), $countyCode = $hideInputs.eq(4), $countyName = $hideInputs.eq(5); var addrTxt = ''; // 获取显示的标签的地址 if ($provinceName.val() == $cityName.val()) { addrTxt = $provinceName.val(); } else { addrTxt = $provinceName.val() + $cityName.val(); } if ($countyName.val()) { addrTxt += $countyName.val(); } // 填充回显的地址 $(addressSelect).find('.em').val(addrTxt); } } web.fileUploader = function(filePicker,callback,options,params){ //添加删除事件结束 var imgUploadUrl = base+'/common/upload'; if(typeof params!='undefined'){ imgUploadUrl = imgUploadUrl+"?"+params; } var opt={ auto: true, // swf文件路径 swf: base+'/static/frame/webuploader/Uploader.swf', // 文件接收服务端。 server : imgUploadUrl, // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick : { id : '#'+filePicker, multiple : false }, //fileSingleSizeLimit: 5*1024*1024, //最大5M // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! resize : false, multiple : false, duplicate :true }; if(typeof options!='undefined'){ opt = $.extend(opt,options); } var uploader = WebUploader.create(opt); // 文件上传过程中提示。 uploader.on( 'uploadProgress', function( file, percentage ) { //layer.msg }); uploader.on( 'uploadError', function( file ) { layer.msg("上传失败"); uploader.reset(); }); uploader.onError = function( code ) { switch(code){ case 'F_EXCEED_SIZE': layer.msg('文件大小超出最大值'); break; case 'Q_EXCEED_NUM_LIMIT': layer.msg('超过最大上传数量'); break; case 'Q_EXCEED_SIZE_LIMIT': layer.msg('文件大小超出最大值'); break; case 'Q_TYPE_DENIED': layer.msg('文件类型不允许'); break; default: layer.msg('未知错误:'+code); break; } }; //如果服务器端返回的code不为0,那么也是没有成功,会触发uploadError事件 uploader.on("uploadAccept", function(file,data){ if(!data.success){ return false; } }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 uploader.on( 'uploadSuccess', function(file,data) { if(typeof callback=='function'){ callback(data); } uploader.reset(); }); // 完成上传完了,成功或者失败,先删除进度条。 uploader.on( 'uploadComplete', function(file,data) { }); } /** * 图片预览 * @param data 数组类型或者字符串 */ web.showImage = function (data,index) { if(!index){ index=0; } var photos=[]; if(typeof(data) == "string"){ var obj = new Object(); obj.src=data; photos.push(obj); }else{ $.each(data,function(id,item){ var obj = new Object(); obj.src=item; photos.push(obj); }); } layer.photos({ photos: { "start": index, "data": photos } }); } /** * 加载图片 * @param fileList 容器ID * @param data 数组类型或者字符串 * @param width 图片宽度 * @param height 图片高度 */ web.loadImage = function(fileList,data,width,height,editFlag){ if(!width){//如果没有设置,默认为100px width=100; } if(!height){ height=100; } var $list = $('#'+fileList); var arr=[]; if(typeof(data) == "string"){ var $li = $( '
' + '' + '
' ); if(editFlag){ var $btns = $('
' + '删除' + '
').appendTo( $li ); } arr.push(data); $list.append( $li ); }else{ $.each(data,function(id,item){ if(typeof(item) == "string"){ var $li = $( '
' + '' + '
' ); arr.push(item); }else{ var $li = $( '
' + '' + '
"'+item.imgName+'"
' + '
' ); arr.push(item.imgUrl); } if(editFlag){ var $btns = $('
' + '删除' + '
').appendTo( $li ); } $list.append( $li ); }); } $list.find("img").on('click',function(){ web.showImage(arr,$(this).parent().index()); }); } /** * 上传图片 * @param fileList 容器ID * @param filePicker 上传按钮ID * @param callback 返回方法 * @param options 自定义上传 * @param params 参数 */ web.imageUploader = function(fileList,filePicker,callback,options,params){ $('#'+fileList).on('mouseover','.file-item',function(){ $(this).find('.file-panel').css('height','30px'); }); $('#'+fileList).on('mouseout','.file-item',function(){ $(this).find('.file-panel').css('height','0'); }); $('#'+fileList).on('click','.cancel',function(){ var obj = $(this); setTimeout(function () { $(obj).parents('.file-item').remove(); },100); }); //添加删除事件结束 var imgUploadUrl = base+'/common/upload'; if(typeof params!='undefined'){ imgUploadUrl = imgUploadUrl+"?"+params; } var opt={ auto: true, // swf文件路径 swf: base+'/static/frame/webuploader/Uploader.swf', // 文件接收服务端。 server : imgUploadUrl, // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick : { id : '#'+filePicker, multiple : true }, fileSingleSizeLimit: 5*1024*1024, //最大5M // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! resize : false, duplicate :true, fileNumLimit:10, accept: { title: 'Images', extensions: 'gif,jpg,bmp,png', mimeTypes: 'image/*' } }; if(typeof options!='undefined'){ opt = $.extend(opt,options); } if(!opt.thumbnailWidth){//如果没有设置,默认为100px opt.thumbnailWidth=100; } if(!opt.thumbnailHeight){ opt.thumbnailHeight=100; } var $list = $('#'+fileList); var uploader = WebUploader.create(opt); uploader.on( 'fileQueued', function( file ) { if($list.find('.file-item').length>=opt.maxLength){ layer.msg('最多上传'+opt.maxLength+'张图片'); uploader.cancelFile( file ); return; } var $li = $( '
' + '' + '
' + file.name + '
' + '
' ); var $img = $li.find('img'); var $btns = $('
' + '删除' + '
').appendTo( $li ); // $list为容器jQuery实例 if(opt.pick.multiple){ $list.append( $li ); }else{ $list.html( $li ); } // 创建缩略图 // 如果为非图片文件,可以不用调用此方法。 // thumbnailWidth x thumbnailHeight 为 100 x 100 uploader.makeThumb( file, function( error, src ) { if ( error ) { $img.replaceWith('不能预览'); return; } $img.attr( 'src', src ); }, opt.thumbnailWidth, opt.thumbnailHeight); }); // 文件上传过程中创建进度条实时显示。 uploader.on( 'uploadProgress', function( file, percentage ) { var $li = $( '#'+file.id ); var $percent = $li.find('.progress span'); // 避免重复创建 if ( !$percent.length ) { $percent = $('

') .appendTo( $li ) .find('span'); } $percent.css( 'width', percentage * 100 + '%' ); }); uploader.on( 'uploadError', function( file ,reason) { var $li = $( '#'+file.id ); var $error = $li.find('div.error'); // 避免重复创建 if ( !$error.length ) { $error = $('
').appendTo( $li ); } $error.text('上传失败'); }); uploader.onError = function( code ) { switch(code){ case 'F_EXCEED_SIZE': layer.msg('文件大小超出最大值'); break; case 'Q_EXCEED_NUM_LIMIT': layer.msg('超过最大上传数量'); break; case 'Q_EXCEED_SIZE_LIMIT': layer.msg('文件大小超出最大值'); break; case 'Q_TYPE_DENIED': layer.msg('文件类型不允许'); break; default: layer.msg('未知错误:'+code); break; } }; //如果服务器端返回的code不为0,那么也是没有成功,会触发uploadError事件 uploader.on("uploadAccept", function(file,data){ if(!data.success){ return false; } }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 uploader.on( 'uploadSuccess', function(file,data) { if(!opt.hideDoneImg){ $( '#'+file.id ).addClass('upload-state-done'); } if(typeof callback=='function'){ callback(data); } }); // 完成上传完了,成功或者失败,先删除进度条。 uploader.on( 'uploadComplete', function(file,data) { $( '#'+file.id ).find('.progress').remove(); }); } $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name] !== undefined) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; web.num = function (obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符 console.info(obj.value); obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字而不是 console.info(obj.value); obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个. 清除多余的 console.info(obj.value); obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$","."); console.info(obj.value); obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数 console.info(obj.value); }