easyui扩展

根据业务进行的扩展,easyui版本1.4.2


var sy = sy || {};

/**
* 扩展validatebox,修改默认值
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
$.extend($.fn.validatebox.defaults, {
inputEvents:{
focus:function(e){
var t=$(e.data.target);
window.setTimeout(function(){t.textbox('textbox').select();},100);
},click:function(e){
var t=$(e.data.target);
if(!t.is(":focus")){
t.trigger("focus");
}
}
}
});
/**
* 扩展textbox,修改默认值
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
$.extend($.fn.textbox.defaults, {
width:173,
onChange:function(p){
if(p!=undefined&&typeof p == 'string'){
p = p.replace(",",",")+'';//将中文逗号替换成英文逗号
if ($(this).textbox('options').prompt.indexOf('*')<0) {//替换特殊字符,根据提示中是否包含*决定是否替换*
$(this).textbox("setValue",p.replace(/[<>!=\|\+\^\s\/\\\'\"\?\[\]\(\)\*]/g,''));
}else{
$(this).textbox("setValue",p.replace(/[<>!=\|\+\^\s\/\\\'\"\?\[\]\(\)]/g,''));
}
}
}
});
/**
* 更改easyui加载grid时的提示文字
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
$.extend($.fn.datagrid.defaults, {
loadMsg : '数据加载中....',
title: '',
striped: true, //显示斑马线效果
rownumbers: true, //如果为true,则显示一个行号列。
fit: true, //自适应宽度
autoRowHeight: false, //自适应高度
rownumbers: true, //如果为true,则显示一个行号列。
pagination: true, //分页
pageSize: 50,
pageList: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500],
onBeforeLoad: function(param) {
loadProgress($,true);
},
onLoadSuccess : function(data) {
$(this).datagrid('clearChecked');
$('.iconImg').attr('src', sy.pixel_0);
loadProgress($,false);
}
});

/**
* panel关闭时回收内存,主要用于layout使用iframe嵌入网页时的内存泄漏问题
*
* @author Ray
*
* @requires jQuery,EasyUI
*
*/
$.extend($.fn.panel.defaults, {
loadingMessage : '加载中....',
onBeforeDestroy : function() {
var frame = $('iframe', this);
try {
if (frame.length > 0) {
for (var i = 0; i < frame.length; i++) {
frame[i].src = '';
frame[i].contentWindow.document.write('');
frame[i].contentWindow.close();
}
frame.remove();
if (navigator.userAgent.indexOf("MSIE") > 0) {// IE特有回收内存方法
try {
CollectGarbage();
} catch (e) {
}
}
}
} catch (e) {
}
}
});

/**
* 防止panel/window/dialog组件超出浏览器边界
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
sy.onMove = {
onMove : function(left, top) {
var l = left;
var t = top;
if (l < 1) {
l = 1;
}
if (t < 1) {
t = 1;
}
var width = parseInt($(this).parent().css('width')) + 14;
var height = parseInt($(this).parent().css('height')) + 14;
var right = l + width;
var buttom = t + height;
var browserWidth = $(window).width();
var browserHeight = $(window).height();
if (right > browserWidth) {
l = browserWidth - width;
}
if (buttom > browserHeight) {
t = browserHeight - height;
}
$(this).parent().css({/* 修正面板位置 */
left : l,
top : t
});
}
};
$.extend($.fn.dialog.defaults, sy.onMove);
$.extend($.fn.window.defaults, sy.onMove);
$.extend($.fn.panel.defaults, sy.onMove);

/**
*
* 通用错误提示
*
* 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
sy.onLoadError = {
onLoadError : function(XMLHttpRequest) {
if (parent.$ && parent.$.messager) {
parent.$.messager.progress('close');
parent.$.messager.alert('错误', XMLHttpRequest.responseText);
} else {
$.messager.progress('close');
$.messager.alert('错误', XMLHttpRequest.responseText);
}
}
};
$.extend($.fn.datagrid.defaults, sy.onLoadError);
$.extend($.fn.treegrid.defaults, sy.onLoadError);
$.extend($.fn.tree.defaults, sy.onLoadError);
$.extend($.fn.combogrid.defaults, sy.onLoadError);
$.extend($.fn.combobox.defaults, sy.onLoadError);
$.extend($.fn.form.defaults, sy.onLoadError);

/**
* 扩展combobox在自动补全模式时,检查用户输入的字符是否存在于下拉框中,如果不存在则清空用户输入
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
$.extend($.fn.combobox.defaults, {
onShowPanel : function() {
var _options = $(this).combobox('options');
if (_options.mode == 'remote') {/* 如果是自动补全模式 */
var _value = $(this).combobox('textbox').val();
var _combobox = $(this);
if (_value.length > 0) {
$.post(_options.url, {
q : _value
}, function(result) {
if (result && result.length > 0) {
_combobox.combobox('loadData', result);
}
}, 'json');
}
}
},
onHidePanel : function() {
var _options = $(this).combobox('options');
if(_options.editable&&!_options.multiple){
var _data = $(this).combobox('getData');/* 下拉框所有选项 */
var _value = $(this).combobox('getValue');/* 用户输入的值 */
var _b = false;/* 标识是否在下拉列表中找到了用户输入的字符 */
for (var i = 0; i < _data.length; i++) {
if (_data[i][_options.valueField] == _value) {
_b=true;
break;
}
}
if(!_b){
$(this).combobox('setValue', undefined);
}
}
},
panelHeight:200,
showDataSize:20,
editable:true,//可编辑
validate:true,//验证输入的值
formatter:function(record){
var opts = $(this).combobox('options');
return record[opts.valueField]+'-'+record[opts.textField];
},
filter:function(q, row){//当输入数据时会调用该方法进行筛选过滤
var opts = $(this).combobox('options');
return row[opts.valueField].indexOf(q)>=0||row[opts.textField].indexOf(q)>=0;
},
onClickIcon:function(){//使用户点击combobox下拉按钮时也能执行过滤
var opts = $(this).combobox('options');
if(opts.editable){
var q=$(this).combobox("getValues");
$(this).combobox("options").keyHandler.query.call(this,q==undefined?"":q);
$(this).combobox("validate");
}
},
width:173
});
/**
* 扩展numberbox,修改默认值
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
$.extend($.fn.numberbox.defaults, {
min:0,
width:173
});
/**
* 扩展combogrid在自动补全模式时,检查用户输入的字符是否存在于下拉框中,如果不存在则清空用户输入
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
$.extend($.fn.combogrid.defaults, {
onShowPanel : function() {
var _options = $(this).combogrid('options');
if (_options.mode == 'remote') {/* 如果是自动补全模式 */
var _value = $(this).combogrid('textbox').val();
if (_value.length > 0) {
$(this).combogrid('grid').datagrid("load", {
q : _value
});
}
}
},
onHidePanel : function() {
var _options = $(this).combogrid('options');
if (_options.mode == 'remote') {/* 如果是自动补全模式 */
var _data = $(this).combogrid('grid').datagrid('getData').rows;/* 下拉框所有选项 */
var _value = $(this).combogrid('getValue');/* 用户输入的值 */
var _b = false;/* 标识是否在下拉列表中找到了用户输入的字符 */
for (var i = 0; i < _data.length; i++) {
if (_data[i][_options.idField] == _value) {
_b = true;
}
}
if (!_b) {/* 如果在下拉列表中没找到用户输入的字符 */
$(this).combogrid('setValue', '');
}
}
}
});

/**
* 扩展validatebox,添加新的验证功能
*
* @author Ray
*
* @requires jQuery,EasyUI
*/
$.extend($.fn.validatebox.defaults.rules,
{
eqPwd : {/* 验证两次密码是否一致功能 */
validator : function(value, param) {
return value == $(param[0]).val();
},
message : '密码不一致!'
},
moreThanDate : {/* 验证开始时间是否小于结束时间,应用于结束时间标签,结束时间允许为空 */
validator : function(value, param) {
if (value == undefined || value == "") {
return true;
}
if (param == undefined || param.length == 0) {
return false;
}
var sDate = new Date($(param[0]).datetimebox('getValue'))
.getTime();
var eDate = new Date(value).getTime();
return eDate > sDate;
},
message : '开始时间必须小于结束时间!'
},
multiple : {/* 验证数字是参数N的倍数 */
validator : function(value, param) {
if (param == undefined || param.length == 0) {
return true;
}
if (value != undefined) {
return value % param[0] == 0;
}
return false;
},
message : '必须是 {0}的倍数!'
},
mobile : {/* 验证手机号 */
validator : function(value) {
if (value == undefined || value.length == 0) {
return true;
}
return value.match(/^1\d{10}$/);
},
message : '必须为11位手机号,手机号可不填!'
},
phone : {/* 验证座机号格式 */
validator : function(value) {
if (value == undefined || value.length == 0) {
return true;
}
return value.match(/^(0\d{2,3}\-)?([2-9]\d{6,7})$/);
},
message : '必须为有效的座机号,可不填!'
},
email : {/* 验证email格式 */
validator : function(value) {
if (value == undefined || value.length == 0) {
return true;
}
return value.match(/^.+@.+\..+$/);
},
message : '必须为有效的邮箱号,邮箱号可不填!'
},
decimal : {/* 验证小数 :param:整数位长度,小数位长度,允许为空 */
validator : function(value, param) {
if (param == undefined || param.length == 0) {
return true;
}
var message = "";
var regs = "^";
if (param[0] == 0) {
regs += "\\d+";
message = "必须输入整数位,";
} else {
message = "整数位不能大于" + param[0] + "位,";
regs += "\\d{1," + param[0] + "}";
}
if (param[1] == 0) {
regs += "(\\.\\d+)?$/";
} else {
regs += "(\\.\\d{1," + param[1] + "})?$";
message += "小数位不能大于" + param[1] + "位,";
}
if (value == undefined || value == "") {
return true;
}
$.fn.validatebox.defaults.rules.decimal.message = message;
var reg = new RegExp(regs);
return reg.test(value);
}
},
integer : {/* 验证整数,param:整数位长度,允许为空 */
validator : function(value, param) {
if (param == undefined || param.length == 0) {
return true;
}
var message = "";
var regs = "^";
if (param[0] == 0) {
regs += "\\d+$";
} else {
regs += "\\d{1," + param[0] + "}$";
message = "长度不能大于" + param[0] + "位,";
}
if (param[1]) {
if (value == undefined || value == "") {
return true;
}
;
message += "可不填!";
} else {
message += "必填!";
}
$.fn.validatebox.defaults.rules.integer.message = message;
var reg = new RegExp(regs);
return reg.test(value);
}
},
maxLength:{/* 验证最大长度,param:[0]最大长度,[1]组合value的值,允许为空 */
validator : function(value, param) {
if (value == undefined || value.length == 0) {
return true;
}
return (value+''+(param[1]==undefined?'':param[1])).length<=param[0];
},
message : '长度最大为{0}位!'
},
length:{/* 验证最大长度,param:[0]长度,允许为空 */
validator : function(value, param) {
if (value == undefined || value.length == 0||param==undefined||param.length==0) {
return true;
}
var message = '长度应为';
for (var i = param.length - 1; i >= 0; i--) {
var p = param[i];
if(value.length===p){
return true;
}else{
message+=p+',';
}
};
message = message.substr(0,message.length-1)+'位';
$.fn.validatebox.defaults.rules.length.message = message;
return false;
}
},
lengthThan:{/* 验证最大长度,param:[0]最小长度,[1]最大长度,允许为空 */
validator : function(value, param) {
if (value == undefined || value.length == 0||param==undefined||param.length<2) {
return true;
}
return value.length>=param[0]&&value.length<=param[1];
},
message : '长度应为{0}-{1}位!'
},
moreThanOrEqualsNumber:{/*大于等于参数,参数可直接传值或传递numberbox的id*/
validator : function(value, param) {
if (value == undefined || value == "") {
return true;
}
if (param == undefined || param.length == 0) {
return false;
}

if(typeof param[0] == 'number'){
return value >= param[0];
}else{
var s = $(param[0]).numberbox('getValue');
return value >= s;
}
},
message : '必须大于等于{0}!'
},
moreThanNumber:{/*大于参数,参数可直接传值或传递numberbox的id*/
validator : function(value, param) {
if (value == undefined || value == "") {
return true;
}
if (param == undefined || param.length == 0) {
return false;
}

if(typeof param[0] == 'number'){
return value > param[0];
}else{
var s = $(param[0]).numberbox('getValue');
return value > s;
}
},
message : '必须大于{0}!'
},
lessThanNumber:{
/*小于参数,参数可直接传值或传递numberbox的id*/
validator : function(value, param) {
if (value == undefined || value == "") {
return true;
}
if (param == undefined || param.length == 0) {
return false;
}

if(typeof param[0] == 'number'){
return value < param[0];
}else{
var s = $(param[0]).numberbox('getValue');
return value < s;
}
},
message : '必须小于{0}!'
},
lessThanOrEqualsNumber:{
/*小于参数,参数可直接传值或传递numberbox的id*/
validator : function(value, param) {
if (value == undefined || value == "") {
return true;
}
if (param == undefined || param.length == 0) {
return false;
}

if(typeof param[0] == 'number'){
return value <= param[0];
}else{
var s = $(param[0]).numberbox('getValue');
return value <= s;
}
},
message : '必须小于等于{0}!'
}
});

/**
* 扩展tree和combotree,使其支持平滑数据格式
*
* @author Ray
*
* @requires jQuery,EasyUI
*
*/
sy.loadFilter = {
loadFilter : function(data, parent) {
var opt = $(this).data().tree.options;
var idField, textField, parentField;
if (opt.parentField) {
idField = opt.idField || 'id';
textField = opt.textField || 'text';
parentField = opt.parentField || 'pid';
var i, l, treeData = [], tmpMap = [];
for (i = 0, l = data.length; i < l; i++) {
tmpMap[data[i][idField]] = data[i];
}
for (i = 0, l = data.length; i < l; i++) {
if (tmpMap[data[i][parentField]]
&& data[i][idField] != data[i][parentField]) {
if (!tmpMap[data[i][parentField]]['children'])
tmpMap[data[i][parentField]]['children'] = [];
data[i]['text'] = data[i][textField];
tmpMap[data[i][parentField]]['children'].push(data[i]);
} else {
data[i]['text'] = data[i][textField];
treeData.push(data[i]);
}
}
return treeData;
}
return data;
}
};
$.extend($.fn.combotree.defaults, sy.loadFilter);
$.extend($.fn.tree.defaults, sy.loadFilter);

/**
* 扩展treegrid,使其支持平滑数据格式
*
* @author Ray
*
* @requires jQuery,EasyUI
*
*/
$.extend($.fn.treegrid.defaults, {
loadFilter : function(data, parentId) {
var opt = $(this).data().treegrid.options;
var idField, treeField, parentField;
if (opt.parentField) {
idField = opt.idField || 'id';
treeField = opt.textField || 'text';
parentField = opt.parentField || 'pid';
var i, l, treeData = [], tmpMap = [];
for (i = 0, l = data.length; i < l; i++) {
tmpMap[data[i][idField]] = data[i];
}
for (i = 0, l = data.length; i < l; i++) {
if (tmpMap[data[i][parentField]]
&& data[i][idField] != data[i][parentField]) {
if (!tmpMap[data[i][parentField]]['children'])
tmpMap[data[i][parentField]]['children'] = [];
data[i]['text'] = data[i][treeField];
tmpMap[data[i][parentField]]['children'].push(data[i]);
} else {
data[i]['text'] = data[i][treeField];
treeData.push(data[i]);
}
}
return treeData;
}
return data;
}
});

/**
* 创建一个模式化的dialog
*
* @author Ray
*
* @requires jQuery,EasyUI
*
*/
sy.modalDialog = function(options) {
var opts = $.extend({
title : ' ',
width : 640,
height : 480,
modal : true,
onClose : function() {
var that = this;
setTimeout(function() {
$(that).dialog('destroy');
}, 100 );
}
}, options);
// opts.modal = true;// 强制此dialog为模式化,无视传递过来的modal参数
if (options.url) {
opts.content = '<iframe id="" src="'
+ options.url
+ '" allowTransparency="true" scrolling="auto" width="100%" height="98%" frameBorder="0" name=""></iframe>';
}
return $('<div/>').dialog(opts);
};

/**
* 更换主题
*
* @author Ray
* @requires jQuery,EasyUI
* @param themeName
*/
sy.changeTheme = function(themeName) {
var $easyuiTheme = $('#easyuiTheme');
var url = $easyuiTheme.attr('href');
var href = url.substring(0, url.indexOf('themes')) + 'themes/' + themeName
+ '/easyui.css';
$easyuiTheme.attr('href', href);

var $iframe = $('iframe');
if ($iframe.length > 0) {
for (var i = 0; i < $iframe.length; i++) {
var ifr = $iframe[i];
try {
$(ifr).contents().find('#easyuiTheme').attr('href', href);
} catch (e) {
try {
ifr.contentWindow.document.getElementById('easyuiTheme').href = href;
} catch (e) {
}
}
}
}

$.cookie('easyuiTheme', themeName, {
expires : 7
});
};

/**
* 滚动条
*
* @author Ray
* @requires jQuery,EasyUI
*/
sy.progressBar = function(options) {
if (typeof options == 'string') {
if (options == 'close') {
$('#syProgressBarDiv').dialog('destroy');
}
} else {
if ($('#syProgressBarDiv').length < 1) {
var opts = $
.extend(
{
title : ' ',
closable : false,
width : 300,
height : 60,
modal : true,
content : '<div id="syProgressBar" class="easyui-progressbar" data-options="value:0"></div>'
}, options);
$('<div id="syProgressBarDiv"/>').dialog(opts);
$.parser.parse('#syProgressBarDiv');
} else {
$('#syProgressBarDiv').dialog('open');
}
if (options.value) {
$('#syProgressBar').progressbar('setValue', options.value);
}
}
};

/**
* 支持datetimebox
*
* @author 雷勇
* @requires jQuery,EasyUI
*/
$.extend($.fn.datagrid.defaults.editors, {
datetimebox : {
init : function(container, options) {
var input = $('<input type="text" class="easyui-datetimebox">')
.appendTo(container);
// 编辑框延迟加载
window.setTimeout(function() {
input.datetimebox($.extend({
editable : false
}, options));
}, 10);
// input.datetimebox($.extend({ editable: false }, options));
return input;
},
getValue : function(target) {
return $(target).datetimebox('getValue');
},
setValue : function(target, value) {
$(target).val(value);
window.setTimeout(function() {
$(target).datetimebox('setValue', value);
}, 150);
},
resize : function(target, width) {
var input = $(target);
if ($.boxModel == true) {
input.width(width - (input.outerWidth() - input.width()));
} else {
input.width(width);
}
}
}
});
/**
* 支持添加删除编辑器
*/
$.extend($.fn.datagrid.methods, {
addEditor : function(jq, param) {
if (param instanceof Array) {
$.each(param, function(index, item) {
var e = $(jq).datagrid('getColumnOption', item.field);
e.editor = item.editor;
});
} else {
var e = $(jq).datagrid('getColumnOption', param.field);
e.editor = param.editor;
}
},
removeEditor : function(jq, param) {
if (param instanceof Array) {
$.each(param, function(index, item) {
var e = $(jq).datagrid('getColumnOption', item);
e.editor = {};
});
} else {
var e = $(jq).datagrid('getColumnOption', param);
e.editor = {};
}
}
});
function addChildMenu(dataset, treegrid) {
var ds = dataset;
var tree = treegrid;
var treeColumn = tree.getTreeColumn();
var currentNode = tree.getCurrentNode();
if (currentNode != null) {
logicCheck(currentNode);
var record = ds.insertRecord();
var node = new RecordTreeNode(record, new SimpleTreeLevel(treeColumn));
node.setHasChild(false);
currentNode.addNode(node);
tree.expandNode(currentNode);
} else {
var record = ds.insertRecord();
var node = new RecordTreeNode(record, new SimpleTreeLevel(treeColumn));
node.setHasChild(false);
tree.addRootNode(node);
}
tree.refresh();
}

function deleteMenu(dataset, treegird) {
var ds = dataset;
var tree = treegird;
var currentNode = tree.getCurrentNode();
if (currentNode != null) {
var currentRecord = currentNode.getRecord();
ds.deleteRecord(currentRecord);
deleteChildMenu(ds, currentNode);
}
tree.refresh();
}

function deleteChildMenu(dataset, parentMenuNode) {
var iter = parentMenuNode.getNodes().iterator();
while (iter.hasNext()) {
var node = iter.next();
var record = node.getRecord();
dataset.deleteRecord(record);
deleteChildMenu(dataset, node);
}
}

/**
* 该方法主要用来检查是否可以在当前节点下添加新的节点
*/
function logicCheck(currentNode) {
var currentRecord = currentNode.getRecord();
var state = currentRecord.getState();
if (state == "new" || state == "insert") {
alert("该节点不是有效节点。");
throw new AbortException();
}
}
/**
* 为所有输入类型添加获取焦点时自动选中
*/
$.extend($.fn.validatebox.defaults.inputEvents, {
focus:function(e){
var t=$(e.data.target);
window.setTimeout(function(){
if(t.validatebox('textbox').filter(":focus").length==1){
t.validatebox('textbox').select();
}
},100);
}
});
$.extend($.fn.textbox.defaults.inputEvents, {
focus:function(e){
var t=$(e.data.target);
if (t.textbox('options').editable) {
window.setTimeout(function(){
if(t.textbox('textbox').filter(":focus").length==1){
t.textbox('textbox').select();
}
},100);
};
}
});
$.extend($.fn.numberbox.defaults.inputEvents, {
focus:function(e){
var t=$(e.data.target);
if (t.numberbox('options').editable) {
window.setTimeout(function(){
if(t.numberbox('textbox').filter(":focus").length==1){
t.numberbox('textbox').select();
}
},100);
};
}
});
$.extend($.fn.combobox.defaults.inputEvents, {
focus:function(e){
var t=$(e.data.target);
if (t.context.className.indexOf('easyui-date')&&t.combobox('options').editable) {
window.setTimeout(function(){
if(t.combobox('textbox').filter(":focus").length==1){
t.combobox('textbox').select();
}
},100);
};
}
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值