/**
* 包含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;
};