(function ($) {
|
DataGridHandler = $.fm.handler = Control.subClass({
|
|
template_toolbar: '<div id="tb"></div>',
|
|
template_item: '<a href="#" ></a>',
|
|
init: function(options) {
|
this.gridColumnSetting = {
|
selected:[],
|
clunms :[]
|
};
|
this.filters = null;
|
this.fields = null;
|
//grid
|
this.grid = null;
|
this.columnUrl = null;
|
this.gridUrl = null;
|
//toolbar
|
this.tbOption = null;
|
this.tbFuncParams = null;
|
this.tbFunc = null;
|
//callback
|
this.fieldFormatter = null;
|
this.onBeforeLoad = null;
|
this.onLoadSuccess = null;
|
this.onClickRow = null;
|
this.onSelect = null;
|
|
Control.call(this, options);
|
|
this.createElements();
|
},
|
|
createElements: function() {
|
var me = this;
|
var grid = this.grid;
|
var columnurl = this.columnUrl;
|
|
Server.getColumns(columnurl, function(result) {
|
me.createToolBar();
|
me.createGridBody(result);
|
|
});
|
},
|
|
createGridBody: function(setting) {
|
var me = this;
|
|
var columns = setting.columns;
|
var filters = setting.filters;
|
|
me.filters = filters;
|
me.gridColumnSetting.clunms = columns[0];
|
me.fields = columns;
|
|
me.grid.datagrid({
|
title : setting.title,
|
top : 55,
|
width : setting.width,
|
pageNumber : 1,
|
pageList : [ 10, 20, 30, 40, 50 ],
|
pageSize : setting.pageSize,
|
remoteSort : false,
|
singleSelect : true,
|
collapsible : true,
|
nowrap : true,
|
multiSort : true,
|
striped : true,
|
pagination : true,
|
fitColumns : true,
|
url : me.gridUrl,
|
columns : columns,
|
toolbar: '#tb',
|
onBeforeLoad: function (param) {
|
if (me.onBeforeLoad){
|
me.onBeforeLoad(param, me);
|
}
|
},
|
onLoadSuccess: function () {
|
if (me.onLoadSuccess){
|
me.onLoadSuccess(me);
|
}
|
},
|
onClickRow: function (index, rowdata) {
|
if (me.onClickRow){
|
me.onClickRow(index, rowdata, me);
|
}
|
},
|
onSelect: function (index, rowdata) {
|
if (me.onSelect){
|
me.onSelect(index, rowdata, me);
|
}
|
}
|
});
|
|
if (me.fieldFormatter) {
|
var col = me.grid.datagrid('getColumnOption', me.fieldFormatter.field);
|
col.formatter = me.fieldFormatter.formatter;
|
}
|
|
me.grid.datagrid('enableFilter', me.filters);
|
|
me.fixFilterComboboxData();
|
},
|
|
fixFilterComboboxData: function() {
|
this.filterPointer = 0;
|
this.fixOneFilterCombobox();
|
},
|
|
fixOneFilterCombobox: function() {
|
var me = this;
|
var filter = me.filters[this.filterPointer];
|
|
this.filterPointer++;
|
|
if (this.filterPointer > this.filters.length) {
|
return;
|
}
|
|
//1.
|
if (filter.type != "combobox") {
|
me.fixOneFilterCombobox();
|
return;
|
}
|
|
//2.
|
var component = me.grid.datagrid('getFilterComponent', filter.field);
|
var comboxopt = component.combobox("options");
|
|
Server.call(comboxopt.url , null, function(result){
|
component.combobox("loadData",result.rows);
|
me.fixOneFilterCombobox();
|
});
|
},
|
|
createToolBar: function() {
|
var me = this;
|
if (!this.tbOption) {
|
return;
|
}
|
|
this.toolbar = $(this.template_toolbar);
|
var tbOption = this.tbOption;
|
|
for (var i = 0 ; i < tbOption.length ; i++) {
|
var returnParams = this.convertTbItem(tbOption[i]);
|
var templateItem = $(this.template_item);
|
|
templateItem.linkbutton({
|
iconCls: returnParams.iconclass,
|
plain:true,
|
text:returnParams.name
|
});
|
|
templateItem.attr("idx",i);
|
|
templateItem.click(function (event){
|
var attr = event.currentTarget.attributes;
|
var i = attr.idx.value;
|
var params = null;
|
var returnParams = me.convertTbItem(tbOption[i]);
|
|
if(me.tbFuncParams){
|
params = me.tbFuncParams[i];
|
}
|
|
if(me.tbFunc && me.tbFunc[i]){
|
me.tbFunc[i](params, me);
|
return;
|
}
|
returnParams.method(params, me);
|
|
});
|
this.toolbar.append(templateItem);
|
}
|
|
$("body").append(this.toolbar);
|
},
|
|
convertTbItem: function (tbOption){
|
var me = this;
|
var returnParams = {
|
method: null,
|
name: "",
|
iconclass:""
|
};
|
|
switch (tbOption) {
|
case "export":
|
returnParams.method = me.exportData;
|
returnParams.name = "导出数据";
|
returnParams.iconclass = "icon-export";
|
break;
|
|
case "fieldSetting":
|
returnParams.method = me.fieldSetting;
|
returnParams.name = "隐藏";
|
returnParams.iconclass = "icon-customization";
|
break;
|
|
case "fresh":
|
returnParams.method = me.gridRefresh;
|
returnParams.name = "刷新";
|
returnParams.iconclass = "icon-refresh";
|
break;
|
case "add":
|
returnParams.method = me.gridAddLine;
|
returnParams.name = "添加";
|
returnParams.iconclass = "icon-add";
|
break;
|
case "edit":
|
returnParams.method = me.gridEditLine;
|
returnParams.name = "编辑";
|
returnParams.iconclass = "icon-edit";
|
break;
|
case "upload":
|
returnParams.method = me.upload;
|
returnParams.name = "上传";
|
returnParams.iconclass = "icon-import";
|
break;
|
case "delete":
|
returnParams.method = me.deleteLine;
|
returnParams.name = "删除";
|
returnParams.iconclass = "icon-remove";
|
break;
|
default:
|
break;
|
}
|
|
return returnParams;
|
|
},
|
// fieldSetting
|
fieldSetting: function (tbFuncParams, me) {
|
var url = null;
|
|
if(!(tbFuncParams && tbFuncParams.url)){
|
url = "root/page/pop/fieldsetting.html"
|
}
|
else {
|
url = tbFuncParams.url;
|
}
|
var data = me.gridColumnSetting;
|
|
Win.popup({
|
width: 715,
|
height: 300,
|
url:url,
|
data: me,
|
callback: me.hideColumn
|
});
|
|
},
|
|
hideColumn: function(me) {
|
if(!me){
|
return;
|
}
|
var gridColumnSetting = me.gridColumnSetting;
|
if (!gridColumnSetting) {
|
return;
|
}
|
|
for(var j = 0; j < gridColumnSetting.clunms.length; j++) {
|
me.grid.datagrid('showColumn',gridColumnSetting.clunms[j].field);
|
}
|
|
for(var i = 0; i < gridColumnSetting.selected.length; i++) {
|
me.grid.datagrid('hideColumn',gridColumnSetting.selected[i]);
|
}
|
|
},
|
//gridRefresh
|
gridRefresh: function (tbFuncParams, me) {
|
|
for (var j = 0; j < me.gridColumnSetting.clunms.length; j++){
|
me.grid.datagrid('showColumn', me.gridColumnSetting.clunms[j].field);
|
}
|
|
me.gridColumnSetting.selected = [];
|
|
},
|
//exportData
|
exportData: function (tbFuncParams, me) {
|
var url = null;
|
if (!(tbFuncParams && tbFuncParams.exporturl)){
|
return;
|
}
|
url = tbFuncParams.exporturl;
|
Server.download(url);
|
|
},
|
//addLine
|
gridAddLine: function (tbFuncParams, me) {
|
if (tbFuncParams.table) {
|
return;
|
}
|
var addClunms = me.gridColumnSetting.clunms;
|
var data = {
|
addClunms: addClunms,
|
table: tbFuncParams.table,
|
};
|
|
Win.popup({
|
width: 715,
|
height: 300,
|
url: "root/page/pop/gridelineoperator.html",
|
data: data,
|
callback: me.addLine
|
});
|
|
},
|
|
//editline
|
gridEditLine: function (tbFuncParams, me) {
|
var row = me.grid.datagrid("getSelected");
|
if(!row) {
|
alert("请选择要编辑的行");
|
return;
|
}
|
|
if (!tbFuncParams.table || !tbFuncParams.key) {
|
return;
|
}
|
var addClunms = me.gridColumnSetting.clunms;
|
var data = {
|
addClunms: addClunms,
|
table: tbFuncParams.table,
|
key: tbFuncParams.key,
|
row: row
|
};
|
|
Win.popup({
|
width: 715,
|
height: 300,
|
url:"root/page/pop/gridelineoperator.html",
|
data: data,
|
callback: me.addLine
|
});
|
|
},
|
|
addLine: function (returnParams) {
|
|
if(!returnParams || !returnParams.table || !returnParams.data) {
|
return;
|
}
|
var tablename = returnParams.table;
|
var data = returnParams.data;
|
|
if(returnParams.key){
|
|
Server.addLine("root/data/" + tablename + "/", data, function(result){
|
if (result.success) {
|
alert("添加成功");
|
}else {
|
alert("添加失败");
|
}
|
});
|
}else{
|
var url = "root/data/" + tablename + "/updateByPrimaryKey";
|
|
Server.addLine(url, data, function(result){
|
if (result.success) {
|
alert("更新成功");
|
}else {
|
alert("更新失败");
|
}
|
});
|
}
|
},
|
//deleteByPrimary
|
deleteLine: function (tbFuncParams, me) {
|
|
if(!tbFuncParams.key || !tbFuncParams.tablename) {
|
return;
|
}
|
var url = "root/data/"+ tbFuncParams.tablename+ "/deleteByPrimaryKey";
|
var row = me.grid.datagrid("getSelected");
|
var value = row[tbFuncParams.key];
|
|
Server.deleteByPrimaryKey(url, tbFuncParams.key, value, function(result){
|
if(result.success){
|
alert("删除成功");
|
}
|
});
|
|
},
|
|
resetGridParams: function (obj) {
|
this.grid.datagrid(obj);
|
this.enableGridFilter();
|
this.gridRefresh();
|
},
|
|
enableGridFilter: function () {
|
var me = this;
|
this.grid.datagrid('enableFilter', me.filters);
|
},
|
|
upload: function (tbFuncParams, me) {
|
var url = null;
|
|
if(!(tbFuncParams && tbFuncParams.url)){
|
url = "root/page/pop/upload.html?" + new Date().getTime();
|
}
|
else {
|
url = tbFuncParams.url;
|
}
|
var frompage = tbFuncParams.from;
|
|
Win.popup({
|
url: url,
|
width: 550,
|
height: 300,
|
data:{toDB:tbFuncParams.toDB,from:frompage},
|
callback: me.uploadrecord
|
});
|
},
|
|
uploadrecord: function (data) {
|
if(!data){return;}
|
var path = data.path;
|
var frompage = data.fromPage;
|
|
if(!path) {return;}
|
var FilePath = path;
|
|
var uploadrecord = {
|
filepath: FilePath,
|
source:frompage
|
};
|
|
Server.saveData("root/data/uploadrecord/saveLine", uploadrecord, function(result) {
|
if (!result.success) {
|
Dialog.alert("数据保存时发生错误,请刷新重试");
|
}
|
else {
|
alert("上传成功");
|
|
}
|
});
|
},
|
getFilter: function () {
|
var me = this;
|
var filter = "1=1";
|
var opt = me.grid.datagrid("options");
|
var rules = opt.filterRules;
|
for(var i =0; i < rules.length; i++) {
|
var rule = rules[i];
|
this.addOneFilters(filter, rule);
|
}
|
return filter;
|
},
|
|
addOneFilters: function(filter, rule){
|
filter += " and ";
|
var op = rule.op;
|
if (rule.value == "") {
|
return "1=1";
|
}
|
if (op == "equal") {
|
filter += rule.field + " = '" + rule.value + "'";
|
}
|
else if (op == "contains") {
|
filter += rule.field + " like '%" + rule.value + "%'";
|
}
|
else if (op == "beginwith") {
|
filter += rule.field + " like '%" + rule.value + "'";
|
}
|
else if (op == "endwith") {
|
filter += rule.field + " like '" + rule.value + "%'";
|
}
|
else if (op == "less") {
|
filter += rule.field + " < " + rule.value;
|
}
|
else if (op == "lessorequal") {
|
filter += rule.field + " <= " + rule.value;
|
}
|
else if (op == "greater") {
|
filter += rule.field + " > " + rule.value;
|
}
|
else if (op == "greaterorequal") {
|
filter += rule.field + " >= " + rule.value;
|
}
|
else if (op == "dateequal") {
|
filter += rule.field + " = '" + rule.value + "'";
|
}
|
else if (op == "dateless") {
|
filter += rule.field + " < '" + rule.value + "'";
|
}
|
else if (op == "datelessorequal") {
|
filter += rule.field + " <= '" + rule.value + "'";
|
}
|
else if (op == "dategreater") {
|
filter += rule.field + " > '" + rule.value + "'";
|
}
|
else if (op == "dategreaterorequal") {
|
filter += rule.field + " >= '" + rule.value + "'";
|
}
|
else if (op == "numequal") {
|
num = formatNum(rule.value);
|
filter += rule.field + " = '" + num + "'";
|
}
|
else if (op == "numless") {
|
num = formatNum(rule.value);
|
filter += rule.field + " < '" + num + "'";
|
}
|
else if (op == "numlessorequal") {
|
num = formatNum(rule.value);
|
filter += rule.field + " <= '" + num + "'";
|
}
|
else if (op == "numgreater") {
|
num = formatNum(rule.value);
|
filter += rule.field + " > '" + num + "'";
|
}
|
else if (op == "numgreaterorequal") {
|
num = formatNum(rule.value);
|
filter += rule.field + " >= '" + num + "'";
|
}
|
else if (op == "comboboxequal") {
|
var length = comboboxValue.split(",").length - 1;
|
if(length == 0) {
|
filter += "1=1";
|
}
|
else if (length > 0) {
|
var value = comboboxValue.substring(0, comboboxValue.length - 1);
|
filter += rule.field + " in ("+ value +")";
|
}
|
|
}
|
|
return filter;
|
}
|
|
});
|
|
})(jQuery);
|