easyui 部分封装方法

/**
 * 包含easyui的扩展和常用的方法
 * @author libin
 * @version 20121013
 */
var sy = $.extend({}, sy); //类似命名空间

/************************** easyui 部分 *********************************/
/**
 * 使panel和datagrid在加载时提示
 */
$.fn.panel.defaults.loadingMessage = '加载中....';
$.fn.datagrid.defaults.loadMsg = '加载中....';

sy.editRow = undefined;

/**
 * 通用错误提示
 * 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作
 */
var easyuiErrorFunction = function(XMLHttpRequest) {
 $.messager.progress('close');
 $.messager.alert('加载错误', '出现异常');
};
$.fn.datagrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.treegrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.tree.defaults.onLoadError = easyuiErrorFunction;
$.fn.combogrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.combobox.defaults.onLoadError = easyuiErrorFunction;
$.fn.form.defaults.onLoadError = easyuiErrorFunction;

/**
 * 为datagrid、treegrid增加表头菜单,用于显示或隐藏列,注意:冻结列不在此菜单中
 */
var createGridHeaderContextMenu = function(e, field) {
 e.preventDefault();
 var grid = $(this);/* grid本身 */
 var headerContextMenu = this.headerContextMenu;/* grid上的列头菜单对象 */
 if (!headerContextMenu) {
  var tmenu = $('<div style="100px;"></div>').appendTo('body');
  var fields = grid.datagrid('getColumnFields');
  for ( var i = 0; i < fields.length; i++) {
   var fildOption = grid.datagrid('getColumnOption', fields[i]);
   if (!fildOption.hidden) {
    $('<div iconCls="icon-ok" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);
   } else {
    $('<div iconCls="icon-empty" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);
   }
  }
  headerContextMenu = this.headerContextMenu = tmenu.menu({
   onClick : function(item) {
    var field = $(item.target).attr('field');
    if (item.iconCls == 'icon-ok') {
     grid.datagrid('hideColumn', field);
     $(this).menu('setIcon', {
      target : item.target,
      iconCls : 'icon-empty'
     });
    } else {
     grid.datagrid('showColumn', field);
     $(this).menu('setIcon', {
      target : item.target,
      iconCls : 'icon-ok'
     });
    }
   }
  });
 }
 headerContextMenu.menu('show', {
  left : e.pageX,
  top : e.pageY
 });
};
$.fn.datagrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;
$.fn.treegrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;

/**
 * 扩展datagrid,添加动态增加或删除Editor的方法
 * 例子如下,第二个参数可以是数组
 * datagrid.datagrid('removeEditor', 'cpwd');
 * datagrid.datagrid('addEditor', [ { field : 'ccreatedatetime', editor : { type : 'datetimebox', options : { editable : false } } }, { field : 'cmodifydatetime', editor : { type : 'datetimebox', options : { editable : false } } } ]);
 *
 */
$.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 = {};
  }
 }
});

/**
 * 扩展datagrid的editor
 * 增加带复选框的下拉树
 * 增加日期时间组件editor
 * 增加多选combobox组件
 */
$.extend($.fn.datagrid.defaults.editors, {
 combocheckboxtree : {
  init : function(container, options) {
   var editor = $('<input />').appendTo(container);
   options.multiple = true;
   editor.combotree(options);
   return editor;
  },
  destroy : function(target) {
   $(target).combotree('destroy');
  },
  getValue : function(target) {
   return $(target).combotree('getValues').join(',');
  },
  setValue : function(target, value) {
   $(target).combotree('setValues', sy.getList(value));
  },
  resize : function(target, width) {
   $(target).combotree('resize', width);
  }
 },
 datetimebox : {
  init : function(container, options) {
   var editor = $('<input />').appendTo(container);
   editor.datetimebox(options);
   return editor;
  },
  destroy : function(target) {
   $(target).datetimebox('destroy');
  },
  getValue : function(target) {
   return $(target).datetimebox('getValue');
  },
  setValue : function(target, value) {
   $(target).datetimebox('setValue', value);
  },
  resize : function(target, width) {
   $(target).datetimebox('resize', width);
  }
 },
 multiplecombobox : {
  init : function(container, options) {
   var editor = $('<input />').appendTo(container);
   options.multiple = true;
   editor.combobox(options);
   return editor;
  },
  destroy : function(target) {
   $(target).combobox('destroy');
  },
  getValue : function(target) {
   return $(target).combobox('getValues').join(',');
  },
  setValue : function(target, value) {
   $(target).combobox('setValues', sy.getList(value));
  },
  resize : function(target, width) {
   $(target).combobox('resize', width);
  }
 }
});

/**
 * 增加formatString功能
 * 使用方法:sy.fs('字符串{0}字符串{1}字符串','第一个变量','第二个变量');
 * @returns 格式化后的字符串
 */
sy.formatString = function(str) {
 for ( var i = 0; i < arguments.length - 1; i++) {
  str = str.replace("{" + i + "}", arguments[i + 1]);
 }
 return str;
};

/**
 * 将form表单元素的值序列化成对象
 * @returns object
 */
sy.serializeObject = function(form) {
 var o = {};
 $.each(form.serializeArray(), function(index) {
  if (o[this['name']]) {
   o[this['name']] = o[this['name']] + "," + this['value'];
  } else {
   o[this['name']] = this['value'];
  }
 });
 return o;
};
/**
 * 编辑行,用于选择多行
 */
sy.datagridEditSelections = function(jq) { 
 var rows = jq.datagrid('getSelections');
 if (rows.length == 1) { // 只选择了一行
  if (sy.editRow != undefined) { 
   sy.ensureUniqueEditRow(jq, sy.editRow);
  }
  if (sy.editRow == undefined) {   
   sy.editRow = jq.datagrid('getRowIndex', rows[0]);
   jq.datagrid('beginEdit', sy.editRow);
   jq.datagrid('selectRow', sy.editRow);  
  }
 } else {
  $.messager.show({ msg : '请选择一项进行修改!', title : '错误' });
 }
};
/**
 * 只能选择一行进行编辑
 */
sy.datagridEditSelected = function(jq) { 
 var row = jq.datagrid('getSelected');
 if(row){
  var rowIndex = jq.datagrid('getRowIndex',row);
  if(sy.editRow != rowIndex){
   jq.datagrid('endEdit', sy.editRow);
   jq.datagrid('beginEdit', rowIndex);
  }
  sy.editRow = rowIndex;
 }else{ 
  $.messager.alert('提示信息','请选择要编辑的行!','info');
 }
};
/**
 * 根据行的索引进行编辑
 */
sy.datagridEditByRowIndex = function(jq,rowIndex) { 
 if(sy.editRow != rowIndex){
  jq.datagrid('endEdit', sy.editRow);
  jq.datagrid('beginEdit', rowIndex);
 }
 sy.editRow = rowIndex;
};

/**
 * 判断当前是否只有一行在编辑
 */
sy.ensureUniqueEditRow = function(jq){
 if (sy.editRow != undefined ) {
  $.messager.alert('提示信息','请先保存当前的数据在进行其他操作!','info');
  return ;
 }
};
/**
 * 添加行
 * @param jq  table的id,转化成jquery对象
 * @param row 添加行初始化时的行数据
 * @param editRow 当前是否有行在编辑
 */
sy.datagridAdd =function(jq,row,flag) {
 if(!jq.datagrid('validateRow',sy.editRow)){
  return ;
 }
 if (sy.editRow != undefined) {
  if(flag == "edit"){
   sy.ensureUniqueEditRow(jq, sy.editRow);
  }else{
   jq.datagrid('endEdit', sy.editRow);
   sy.editRow = undefined;
  }
 }
 if(sy.editRow == undefined){
  jq.datagrid('unselectAll');
  jq.datagrid('appendRow', row);
  sy.editRow = jq.datagrid('getRows').length - 1;
  jq.datagrid('selectRow', sy.editRow);
  jq.datagrid('beginEdit', sy.editRow);
 }
 return sy.editRow;
};


sy.datagridOperatorAjaxMethod = function(jq,rows, optname,url,data) {
 if (rows.length > 0) {
  $.messager.confirm('提示信息', '您确定要'+optname+'当前所选行吗?', function(r) {
   if (r) {
    $.ajax({
     url : url,
     data : data,
     dataType : 'json',
     success : function(data) {
      if(data.success == true){
       jq.datagrid('load');
       $.messager.show({ title : '提示信息', msg :data.message });
      }else{
       $.messager.show({ title : '提示', msg : data.message });
      }
     }
    });
   }
  });
 } else {
  $.messager.alert('提示信息', '请选择要'+optname+'的记录!', 'error');
 }
};
/** 结束编辑 */
sy.datagridEndEdit = function(jq){
 if (sy.editRow != undefined) {
  jq.datagrid('endEdit', sy.editRow);
  sy.editRow = undefined;
 }
};
/** 取消当前行编辑 */
sy.datagridCancelRowEdit = function(jq){
 if (sy.editRow != undefined) {
  jq.datagrid('cancelEdit', sy.editRow);
   sy.editRow = undefined;
 }
};
/** 取消所有编辑 */
sy.datagridCancelAllRowsEdit = function(jq){
 jq.datagrid('rejectChanges');
 sy.editRow = undefined;
};
/** 取消所有编辑 */
sy.datagridCancelAllRowsEdit2 = function(jq){
 jq.datagrid('rejectChanges');
 sy.editRow = undefined;
};
//加载字典
sy.loadDictionary = function(id,typeid){
 $("#"+id+"").combobox({  
     url:root+"/base/doCodeAct!getCodeValueByType?codeTypeId="+typeid,  
     valueField:'codeNum',
  textField:'codeName'
 });
};
//加载字典
sy.loadAllDictionary = function(map){
 $.each( map, function(i, n){
  sy.loadDictionary(i,n); 
 });
};
/**
 * 屏蔽非法的操作
 * @param jq 当前在操作的datagrid
 * @param field 行的字段
 * @param enablevalue 对应行字段操作的有效值
 * @param operator 操作符合,< = >,>= ...
 * @param message 当出现非法操作时的提示信息,不包括编辑行
 * @returns {Boolean}
 */
function judgeOperatorItemIsEnabled(jq,field,enablevalue,operator,message){
 var selected = jq.datagrid('getSelections');
 if(selected.length >0){ 
  for(var i=0;i<selected.length;i++){
   var up = selected[i].field;
   if(operator == "="){
    if(up != enablevalue){
     $.messager.alert('提示信息',message,'warning'); return false;
    } 
   }else if(operator == ">"){
    if(up < enablevalue){
     $.messager.alert('提示信息',message,'warning'); return false;
    } 
   }
   else if(operator == "<"){
    if(up > enablevalue){
     $.messager.alert('提示信息',message,'warning'); return false;
    } 
   }  
  }  
 }else{
  $.messager.alert('提示信息','请先选中要操作的记录!','warning');
  return false;
 }
 return true;
}
/**
 * 判断编辑的行是否唯一
 * @returns {Boolean}
 */
function judgeUniqueItemInSels(){
 var selected = emEquipmentSupplierGrid.datagrid('getSelections');
 if(selected.length >1){
  $.messager.alert('提示信息','请选择一项进行编辑!','warning');
  emEquipmentSupplierGrid.datagrid('clearSelections');
 }else if(selected.length == 0 ){
  $.messager.alert('提示信息','请先选中要操作的记录!','warning');
 }else{
  return true;
 }
 return false;
}

/**
 * 将数据转化成json时确定数据类型的返回值
 * @param value 值
 * @returns 返回它原来的值或带引号的默认值
 */
sy.ensureDataGridFieldTypeToJson = function(value) {
 if (typeof value == "string") {
  if(value){
   return '"'+value+'"';
  }else{
   return '"'+'"';
  }
 }
 if (typeof value == "number") {
  if(value){
   return value;
  }else{
   return 0;
  }
 }
};
/**
 * 将数据转化成json时确定数据类型的返回值
 * @param value 值
 * @returns 返回它原来的值或带引号的默认值
 */
sy.ensureDataGridFieldTypeToString = function(value) {
 if (typeof value == "string") {
  if(value){
   return value;
  }else{
   return '';
  }
 }
 if (typeof value == "number") {
  if(value){
   return value;
  }else{
   return 0;
  }
 }
};
/**
 * 将datagrid行的数据转化成json格式 [{},{}]
 * @param rows 表示行
 * @param colNames 表示需要转换的列名的一个数组
 */
sy.formatRowsToJson = function(rows,colNames){
 var jsonData="[";
 var result="{";
 var json ="";
 if(colNames.length<1 || rows.length<1){
  return jsonData+"]";
 }
 for(var i=0;i<rows.length;i++){
  for(var j=0;j<colNames.length;j++){
   if(rows[i][colNames[j]]){
    json = json + '"'+colNames[j]+'":'+ sy.ensureDataGridFieldTypeToJson(rows[i][colNames[j]])+",";
   }
  }
  if(json.length>0){
   json = json.substring(0, json.length-1);
   result = result + json +"},{";
   json="";
  }else{
   return jsonData+"]";
  } 
 }
 jsonData = jsonData + result.substring(0, result.length-2) + "]";
 return jsonData;
};

/**
 * 将datagrid行的数据转化成json格式,{"name":"tom"}|{}
 * @param rows 表示行
 * @param colNames 表示需要转换的列名的一个数组
 */
sy.formatRowsToJsonBySplit = function(rows,colNames,split){
 var jsonData="";
 var result="{";
 var json ="";
 if(colNames.length<1 || rows.length<1){
  return jsonData;
 }
 for(var i=0;i<rows.length;i++){
  for(var j=0;j<colNames.length;j++){
   if(rows[i][colNames[j]]){
    json = json + '"'+colNames[j]+'":'+ sy.ensureDataGridFieldTypeToJson(rows[i][colNames[j]])+",";
   }
  }
  if(json.length>0){
   json = json.substring(0, json.length-1);
   result = result + json +"}"+split+"{";
   json="";
  }else{
   return jsonData;
  } 
 }
 jsonData = jsonData + result.substring(0, result.length-1);
 return jsonData;
};

/**
 * 将datagrid行的数据转化成字符串格式,a+b+|a+b+|
 * @param rows 表示行
 * @param colNames 表示需要转换的列名的一个数组
 * @param prefix 列名的前缀
 */
sy.formatStringToFillForm = function(rows,colNames,prefix){
 var json ="";
 if(rows.length==1){
  for(var j=0;j<colNames.length;j++){
   if(rows[colNames[j]]){
    json = json +"'"+ prefix+colNames[j]+"':"+rows[colNames[j]]+",";
   }
   json = json.substring(0, json.length-1);
  }
 }
 return json;
};
/**
 * 将datagrid行的数据转化成json格式,{"name":"tom"}|{}
 * @param rows 表示行
 * @param colNames 表示需要转换的列名的一个数组
 */
sy.formatRowsToJsonBySplit = function(rows,colNames,split){
 var jsonData="";
 var result="{";
 var json ="";
 if(colNames.length<1 || rows.length<1){
  return jsonData;
 }
 for(var i=0;i<rows.length;i++){
  for(var j=0;j<colNames.length;j++){
   if(rows[i][colNames[j]]){
    json = json + '"'+colNames[j]+'":'+ sy.ensureDataGridFieldTypeToJson(rows[i][colNames[j]])+",";
   }
  }
  if(json.length>0){
   json = json.substring(0, json.length-1);
   result = result + json +"}"+split+"{";
   json="";
  }else{
   return jsonData;
  } 
 }
 jsonData = jsonData + result.substring(0, result.length-1);
 return jsonData;
};

原文地址:https://www.cnblogs.com/lbangel/p/3045852.html