/*!
* Copyright 2011 Guangzhou Donghong Software Technology Inc.
* Licensed under the www.jxstar.org
*/
/**
* 表格页面常用事件实现类。
*
* @author TonyTan
* @version 1.0, 2010-01-01
*/
Ext.ns('Jxstar');
Jxstar.GridEvent = function(define) {
this.define = define;
this.grid = null;
//设置业务状态值
this.audit0 = '0';
this.audit1 = '1';
this.audit2 = '2';
this.audit6 = '6';
this.audit_b = '';
this.audit_e = '7';//可以用于终止与注销
if (this.define.status) {
this.audit0 = this.define.status['audit0'];
this.audit1 = this.define.status['audit1'];
this.audit_b = this.define.status['audit_b'];
this.audit_e = this.define.status['audit_e'];
}
this.addEvents(
/**
* @param {Jxstar.GridEvent} this
**/
'beforecreate',
/**
* @param {Jxstar.GridEvent} this
**/
'beforesave',
/**
* @param {Jxstar.GridEvent} this
* @param {JSON[]} data
**/
'aftersave',
/**
* @param {Jxstar.GridEvent} this
* @param {Ext.data.Record[]} records
**/
'beforedelete',
/**
* @param {Jxstar.GridEvent} this
* @param {JSON[]} data
**/
'afterdelete',
/**
* @param {Jxstar.GridEvent} this
**/
'beforeaudit',
/**
* @param {Jxstar.GridEvent} this
* @param {JSON[]} data
**/
'afteraudit',
/**
* @param {Jxstar.GridEvent} this
**/
'beforecopy',
/**
* @param {Jxstar.GridEvent} this
* @param {JSON[]} data
**/
'aftercopy',
/**
* @param {Jxstar.GridEvent} this
* @param eventcode
**/
'beforecustom',
/**
* @param {Jxstar.GridEvent} this
* @param {JSON[]} data
* @param eventcode
**/
'aftercustom',
/**
* @param {Jxstar.GridEvent} this
**/
'beforeimport',
/**
* @param {Jxstar.GridEvent} this
* @param {srcFunId:'', destFunId:'', data:[{impKeyId:'', newKeyId:''}...]} data
**/
'afterimport',
/**
* @param {Jxstar.GridEvent} this
* @param {{reportId:'', printType:'', printScope:'', printMode:''}} data
**/
'beforeprint',
/**
* @param {Jxstar.GridEvent} this
* @param {{reportId:'', printType:'', printScope:'', printMode:''}} data
**/
'afterprint',
/**
* @param {Jxstar.GridEvent} this
* @param eventtype: agree, back, check
**/
'beforecheck'
);
Jxstar.GridEvent.superclass.constructor.call(this, define);
};
(function(){
Ext.extend(Jxstar.GridEvent, Ext.util.Observable, {
/**
* public 销毁事件对象
**/
myDestroy : function() {
this.define = null; delete this.define;
this.grid = null; delete this.grid;
},
/**
* public
* 设置事件对象操作的表格
**/
setPage : function(page) {
this.grid = page;
},
/**
* public
* 设置事件对象操作的表格
**/
openFun : function(funid) {
Jxstar.createNode(funid);
},
/**
* public
* 导入数据权限类别值
**/
impType: function() {
var self = this;
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selected(records)) return;
//取数据类别ID
var rightTypeId = self.grid.rightTypeId;
//取数据权限表格
var rightGrid = self.grid.rightGrid;
//选择的用户ID
var selUserIds = self.grid.selUserIds;
if (!rightGrid || !rightTypeId || !selUserIds) {
JxHint.alert(jx.event.noqxbg);
return;
}
//回调函数,刷新权限数据,并关闭对话框
var endcall = function(data) {
rightGrid.getStore().reload();
self.grid.rightGrid = null; delete self.grid.rightGrid;
self.grid.rightTypeId = null; delete self.grid.rightTypeId;
self.grid.selUserIds = null; delete self.grid.selUserIds;
var win = self.grid.findParentByType('window');
if (win) win.close();
};
//构建请求参数
var params = 'funid='+ self.define.nodeid + '&userids=' + selUserIds;
for (var i = 0; i < records.length; i++) {
params += '&keyid=' + records[i].get(self.define.pkcol);
}
params += '&pagetype=imptype&eventcode=imptype&typeid='+rightTypeId;
Request.postRequest(params, endcall);
},
/**
* public
* 自定义通用事件
**/
customEvent : function(eventCode, notConfirm, notSelected) {
var records = JxUtil.getSelectRows(this.grid);
if (!notSelected) {
if (!JxUtil.selected(records)) return;
}
if (this.fireEvent('beforecustom', this, eventCode) == false) return;
var self = this;
var hdcall = function() {
//取选择记录的主键值
var params = 'funid='+ self.define.nodeid;
if (!notSelected) {
for (var i = 0; i < records.length; i++) {
params += '&keyid=' + records[i].get(self.define.pkcol);
}
}
//设置请求的参数
params += '&pagetype=grid&eventcode='+eventCode;
//执行处理的内容
var endcall = function(data) {
//统计主表中的统计字段值
if (self.grid.gridNode.param.substat) {
self.substat(self.grid);
}
self.fireEvent('aftercustom', self, data, eventCode);
//重新加载数据
self.grid.getStore().reload();
};
//发送请求
Request.postRequest(params, endcall);
};
//确定执行当前操作吗?
if (notConfirm && (notConfirm == '1' || notConfirm == true)) {
hdcall();
} else {
Ext.Msg.confirm(jx.base.hint, jx.event.doyes, function(btn) {
if (btn == 'yes') hdcall();
});
}
},
/**
* public
* 显示表单,表格记录双击时执行
**/
showForm : function() {
var store = this.grid.getStore();
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selectone(records)) return;
//显示表单数据
var items = {define:this.define, grid:this.grid, record:records[0], store:store};
if (this.define.isCloud) {
JxCloud.showForm(items);
} else {
Jxstar.showForm(items);
}
},
/**
* public
* 显示子表单
**/
showSubForm : function() {
var self = this;
var url = self.define.formpage;
if (url == null || url.length == 0) return;
var store = this.grid.getStore();
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selectone(records)) return;
//显示表单数据
Jxstar.openSubForm({
filename: url,
title: self.define.nodetitle,
grid: self.grid,
pagetype: 'subform',
parentNodeId: self.grid.gridNode.parentNodeId,
record: records[0], store: store
});
},
/**
* public
* 新增事件
**/
create : function() {
var self = this;
var store = this.grid.getStore();
//显示表单数据
var items = {define:self.define, grid:self.grid, record:null, store:store};
if (self.define.isCloud) {
JxCloud.showForm(items);
} else {
Jxstar.showForm(items);
}
},
/**
* public
* 子表新增事件
**/
subcreate : function() {
var self = this;
//新建一个初始化的记录对象
var g = this.grid;
//先保存主表单再添加明细
var fkValue = g.fkValue||'';
//如果主表没有保存就执行数据导入,则需要先保存主记录
if (JxUtil.isEmptyFK(fkValue) && g.gridNode.pageType.indexOf('sub') >= 0) {
var fpage = JxUtil.getParentForm(g, true);
if (!fpage) {
JxHint.alert(jx.event.noform);//'没有找到主表单对象!'
return;
} else {
//保存主表单后再执行子表新增方法
var fn = this.subcreate.createDelegate(this);
fpage.formNode.event.save(fn);
return;
}
}
var store = this.grid.getStore();
//显示表单数据
Jxstar.openSubForm({
filename: self.define.formpage,
title: self.define.nodetitle,
grid: self.grid,
pagetype: 'subform',
parentNodeId: self.grid.gridNode.parentNodeId,
record: null, store: store
});
},
/**
* private
* 提交时:检查是否存在已复核的记录;取消时:检查是否存在未复核记录
* auditval -- 1 表示删除、保存、提交检查;0 表示反提交检查
**/
checkAudit: function(auditval) {
if (Ext.isEmpty(auditval)) auditval = this.audit1;
var records = JxUtil.getSelectRows(this.grid);
for (var i = 0; i < records.length; i++) {
var auditcol = this.define.auditcol;
if (Ext.isEmpty(auditcol)) return false;
var state = records[i].get(auditcol);
if (Ext.isEmpty(state)) state = this.audit0;
if (auditval == this.audit0) {
if (state != this.audit1){
JxHint.alert(jx.event.selaudit0); //选择的记录不是已提交的记录,不能操作!
return true;
}
} else if (auditval == this.audit1) {
if (state != this.audit0 && state != this.audit6){
JxHint.alert(jx.event.selaudit1); //选择的记录中存在已提交的记录,不能操作!
return true;
}
}
}
return false;
},
/**
* public
* 删除事件
**/
del : function() {
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selected(records)) return;
if (this.checkAudit()) return;
if (this.fireEvent('beforedelete', this, records) == false) return;
var self = this;
var hdcall = function() {
//取选择记录的主键值
var params = 'funid='+ self.define.nodeid;
for (var i = 0; i < records.length; i++) {
params += '&keyid=' + records[i].get(self.define.pkcol);
}
//设置请求的参数
params += '&pagetype=grid&eventcode=delete';
//删除后要处理的内容
var endcall = function(data) {
//统计主表中的统计字段值
if (self.grid.gridNode.param.substat) {
self.substat(self.grid);
}
self.fireEvent('afterdelete', self, data);
//重新加载数据
self.grid.getStore().reload();
};
//发送请求
Request.postRequest(params, endcall);
};
//确定删除选择的记录吗?
Ext.Msg.confirm(jx.base.hint, jx.event.delyes, function(btn) {
if (btn == 'yes') hdcall();
});
},
/**
* public
* 提交事件
**/
audit : function() {
var eas = Jxstar.systemVar.edit__audit__save||'0';
var store = this.grid.getStore();
var mrow = store.getModifiedRecords();
//启用自动提交、且是可编辑表格、且有修改的数据
if (eas == '1' && this.grid.isXType('editorgrid') && mrow.length > 0) {
var fn = function(){
this.baseAudit(this.audit1, 'audit', true);
};
//记录第一选择的数据
var records = JxUtil.getSelectRows(this.grid);
this.editSave(fn.createDelegate(this), records);
} else {
this.baseAudit(this.audit1, 'audit');
}
},
/**
* public
* 取消提交事件
**/
unaudit : function() {
this.baseAudit(this.audit0, 'unaudit');
},
/**
* public
* 退回事件
**/
auditBack : function() {
if (Ext.isEmpty(this.audit_b)) {
JxHint.alert(jx.event.auditbe); //退回状态值为空,不能操作!
return;
}
this.baseAudit(this.audit_b, 'audit_back');
},
/**
* public
* 注销事件
**/
auditCancel : function() {
if (Ext.isEmpty(this.audit_e)) {
JxHint.alert(jx.event.auditee); //注销或终止状态值为空,不能操作!
return;
}
this.baseAudit(this.audit_e, 'audit_cancel');
},
/**
* private
* 基础提交事件
**/
baseAudit : function(auditval, eventcode, isdir) {
var store = this.grid.getStore();
var mrow = store.getModifiedRecords();
if (mrow.length > 0) {
//记录已被修改,是否需要先保存?
if (confirm(jx.event.saveyes)) {
this.editSave();
return false;
} else {
store.rejectChanges();
}
}
var keyids = [];
var cm = this.grid.getColumnModel();
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selected(records)) return;
//检查必填附件字段的值
if (JxAttach.checkGrid(this.grid) == false) return;
//检查数据是否有效
if (JxUtil.validateGrid(this.grid) == false) return;
//复核事件代码
if (Ext.isEmpty(eventcode)) eventcode = 'audit';
//取复核值
if (Ext.isEmpty(auditval)) auditval = this.audit1;
if (this.checkAudit(auditval)) return;
if (this.fireEvent('beforeaudit', this) == false) return;
var self = this;
var nodeid = self.define.nodeid;
var istmpexe = self.grid.isTmpExe||'0';//标记弹出审批人再继续提交
var iswfedit = JxUtil.processAttr(nodeid, 'wfedituser', '0');
//判断提交前,是否需要生成审批人
if (iswfedit == '1' && istmpexe == '0' && eventcode == 'audit') {
var keyid = records[0].get(self.define.pkcol);
self.grid.isTmpExe = '1';//正在执行
JxUtil.tmpProcess(nodeid, keyid, self.grid);
return;
}
var hdcall = function() {
//取选择记录的主键值
var params = 'funid='+ nodeid;
for (var i = 0; i < records.length; i++) {
params += '&keyid=' + records[i].get(self.define.pkcol);
}
//设置请求的参数
params += '&pagetype=grid&eventcode='+eventcode+'&auditvalue='+auditval;
//提交后要处理的内容
var endcall = function(data) {
//执行成功后才关闭审批人弹窗
if (istmpexe == '1') {
var tgrid = JxUtil.tmpNodeGrid;
if (tgrid) {
var win = tgrid.findParentByType('window');
if (win) win.close();
}
}
self.fireEvent('afteraudit', self, data);
//重新加载数据
self.grid.getStore().reload();
};
//处理检查项提示信息
//result:{success:false, message:'', data:{}, extData:{}}
var errorcall = function(result) {
var extd = result.extData;
if (extd && extd.checkMsg) {
JxUtil.checkResult(extd);
} else {
var msg = result.message;
if (msg.length == 0) msg = jx.req.faild;
JxHint.alert(msg);
}
};
//发送请求
Request.postRequest(params, endcall, {errorcall:errorcall});
};
var shint = '';
if (auditval == self.audit0) {
shint = jx.event.auditno; //确定反复核当前记录吗?
} else if (auditval == self.audit_b) {
shint = jx.event.auditback; //确定退回当前记录吗?
} else if (auditval == self.audit_e) {
shint = jx.event.auditcancel; //确定注销当前记录吗?
} else {
shint = jx.event.audityes; //确定复核当前记录吗?
}
//自动提交
var eas = Jxstar.systemVar.edit__audit__save||'0';
if (eas == '1' && eventcode == 'audit' && isdir) {
hdcall();
} else {
Ext.Msg.confirm(jx.base.hint, shint, function(btn) {
if (btn == 'yes') hdcall();
});
}
},
/**
* public
* GRID编辑新增事件
**/
editCreate : function() {
//新建一个初始化的记录对象
var g = this.grid;
//先保存主表单再添加明细
var fkValue = g.fkValue||'';
//如果主表没有保存就执行数据导入,则需要先保存主记录
if (JxUtil.isEmptyFK(fkValue) && g.gridNode.pageType.indexOf('sub') >= 0) {
var fpage = JxUtil.getParentForm(g, true);
if (!fpage) {
JxHint.alert(jx.event.noform);//'没有找到主表单对象!'
return;
} else {
//保存主表单后再执行子表新增方法
var fn = this.editCreate.createDelegate(this);
fpage.formNode.event.save(fn);
return;
}
}
var record = this.createRecord();
var store = g.getStore();
//添加记录
g.stopEditing();
//表格新增一条记录时:添加到第一行/最后一行
var start = 0;//store.getCount()
store.insert(start, record);
//第一个可编辑列的位置
var col = JxUtil.getEditCol(g);
g.startEditing(start, col);
//标记新增的记录为选择记录,不然表格编辑中取不到当前选择的tagRecord
var sm = g.getSelectionModel();
if (sm.selectRow) {
if (start == 0) {
sm.selectFirstRow();
} else {
sm.selectLastRow();
}
} else {
sm.select(start, col);
}
if (this.fireEvent('beforecreate', this) == false) return;
},
/**
* private
* 新增一个数据记录对象。
**/
createRecord : function() {
//列模型
var cm = this.grid.getColumnModel();
//数据存储
var store = this.grid.getStore();
var record = new (store.reader.recordType)({});
var cols = record.fields.keys;
//给每个字段给缺省值
for (var i = 0; i < cols.length; i++){
var colobj = cm.getColumnById(cols[i]);
var defaultval = (colobj) ? colobj.defaultval : '';
if (typeof defaultval == 'string' && defaultval.indexOf('fun_') == 0) {
var val = eval('JxDefault.' + defaultval.split('fun_')[1]);
record.set(cols[i], val);
} else if (typeof defaultval == 'undefined') {
record.set(cols[i], '');
} else {
record.set(cols[i], defaultval);
}
}
return record;
},
/**
* private
* 明细表格删除、保存记录后统计子表数据更新到主表中。
* 工具方法,与GridEvent类无关。
**/
substat : function(subGrid) {
var params = 'funid=sysevent&pagetype=subgrid&eventcode=substat';
//取外键值
var fkv = subGrid.fkValue ? subGrid.fkValue : '';
if (Ext.isEmpty(fkv)) return;
params += '&fkValue=' + fkv;
//添加主功能ID
var pfunId = subGrid.gridNode.parentNodeId;
if (Ext.isEmpty(pfunId)) return;
params += '&pfunid=' + pfunId;
//把统计结果写到主表单中
var endcall = function(data) {
if (Ext.isEmpty(data)) return;
//取到主表单对象;如果直接切换到明细表,则myRecord还是空
var form = JxUtil.getParentForm(subGrid);
if (!Ext.isEmpty(form) && form.myRecord) {
var record = form.myRecord;
Ext.iterate(data, function(key, value){
form.oset(key, value);
record.set(key, value);
});
record.commit();
} else {
//如果没有Form表单页面,则直接取Grid中的记录修改
var mGrid = JxUtil.getParentGrid(subGrid);
if (mGrid) {
var records = JxUtil.getSelectRows(mGrid);
if (records && records.length > 0) {
var record = records[0];
Ext.iterate(data, function(key, value){
record.set(key, value);
});
record.commit();
}
}
}
};
//发送请求
Request.postRequest(params, endcall);
},
/**
* public
* GRID编辑删除事件
**/
editDelete : function() {
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selected(records)) return;
if (this.checkAudit()) return;
if (this.fireEvent('beforedelete', this, records) == false) return;
var self = this;
var pkcol = self.define.pkcol;
var store = self.grid.getStore();
var fkValue = self.grid.fkValue||'';
var hdcall = function() {
//取选择记录的主键值
var keys = '';
for (var i = 0; i < records.length; i++) {
//如果是一条空记录,直接删除
var k = records[i].get(pkcol);
if (k == null || k.length == 0) {
store.remove(records[i]);
} else {
keys += '&keyid=' + records[i].get(pkcol);
}
}
//如果是空记录,不需要复核后台
if (keys.length == 0) return true;
//设置请求的参数
var params = 'funid='+ self.define.nodeid + keys;
params += '&pagetype=editgrid&eventcode=delete_eg&fkValue='+fkValue;
//删除后要处理的内容
var endcall = function(data) {
//统计主表中的统计字段值
if (self.grid.gridNode.param.substat) {
self.substat(self.grid);
}
self.fireEvent('afterdelete', self, data);
//重新加载数据
self.grid.getStore().reload();
};
//发送请求
Request.postRequest(params, endcall);
};
//确定删除选择的记录吗?
Ext.Msg.confirm(jx.base.hint, jx.event.delyes, function(btn) {
if (btn == 'yes') hdcall();
});
},
/**
* public
* GRID编辑复制事件
**/
editCopy : function() {
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selected(records)) return;
if (this.fireEvent('beforecopy', this) == false) return;
//取选择记录的主键值
var keys = '';
var pkcol = this.define.pkcol;
for (var i = 0; i < records.length; i++) {
keys += '&keyid=' + records[i].get(pkcol);
}
var self = this;
var hdcall = function(text) {
//取选择记录的主键值
var params = 'funid='+ self.define.nodeid;
params += keys + '©num='+text;
//添加树型参数
var attr = self.grid.treeNodeAttr;
if (attr) {
var parentId = attr.id;
var levelCol = attr.node_level;
params += '&parentId=' + parentId + '&levelCol=' + levelCol;
}
//设置请求的参数
params += '&pagetype=grid&eventcode=copy_eg';
//复制后刷新数据
var endcall = function(data) {
//统计主表中的统计字段值
if (self.grid.gridNode.param.substat) {
self.substat(self.grid);
}
self.fireEvent('aftercopy', self, data);
self.grid.getStore().reload();
};
//发送请求
Request.postRequest(params, endcall);
};
//请输入复制记录条数
Ext.MessageBox.prompt(jx.base.hint, jx.event.copynum, function(btn, text) {
if (btn != 'ok') return;
if (text.length == 0 || isNaN(text)) {
JxHint.alert(jx.event.nocopynum);
return;
}
if (text < 1) text = '1';
hdcall(text);
},null,null,'1');
},
/**
* public
* GRID编辑保存事件
**/
editSave : function(auditcall, sel_records) {
var cm = this.grid.getColumnModel();
var store = this.grid.getStore();
var mrow = store.getModifiedRecords();
if (mrow.length == 0) {
//JxHint.alert(jx.event.nomodify); //没有修改记录,不需要保存!
return;
}
if (this.fireEvent('beforesave', this) == false) return;
//取选择记录的主键值
var keys = '';
var pkcol = this.define.pkcol;
var self = this;
for (var i = 0, n = mrow.length; i < n; i++) {
var record = mrow[i];
var fields = record.fields.keys;
//取选择记录的主键值
keys += '&keyid=' + record.get(pkcol);
for (var j = 0; j < fields.length; j++) {
var name = fields[j];
var value = record.data[name];
if (value == null) value = '';
var colIndex = cm.findColumnIndex(name);
var rowIndex = store.indexOfId(record.id);
var editor = cm.getCellEditor(colIndex, rowIndex);
//隐藏字段为空
if (editor == null) continue;
var field = editor.field;
if (field != null && !field.validateValue(value)) {
JxHint.alert(jx.event.datavalid); //请确保输入的数据正确完整。
self.grid.startEditing(rowIndex, colIndex);
return;
}
}
}
var params = 'funid='+ this.define.nodeid;
//添加外键值
var fkn = this.grid.fkName;
if (fkn && fkn.length > 0) {
var fkv = this.grid.fkValue ? this.grid.fkValue : '';
if (fkv.length == 0) {
JxHint.alert(jx.event.nofkv); //当前记录没有外键值,不能保存!
return;
}
params += '&fkValue=' + fkv;
}
//添加主功能ID
var pfunId = this.grid.gridNode.parentNodeId;
if (!Ext.isEmpty(pfunId)) {
params += '&pfunid=' + pfunId;
}
//添加树型参数
var attr = self.grid.treeNodeAttr;
if (attr) {
var parentId = attr.id;
var levelCol = attr.node_level;
params += '&parentId=' + parentId + '&levelCol=' + levelCol;
}
//设置请求的参数
params += keys + '&pagetype=editgrid&eventcode=save_eg';
Ext.each(mrow, function(item) {
params += '&' + Ext.urlEncode(item.data);
});
//保存后要处理的内容
var self = this;
var endcall = function(data) {
//新增记录序号。有可能新增记录与修改记录一起保存,所以单独管理序号
var w = 0;
for (var i = 0, n = mrow.length; i < n; i++) {
var record = mrow[i];
var k = record.get(pkcol);
if (record && Ext.isEmpty(k) && data[w]) {
record.set(pkcol, data[w].keyid);
self.grid.selectKeyId = data[w].keyid;//标记当前选择的记录
w++;
}
}
//如果是自动提交,则把当前修改记录都标记为已选择的记录,方便自动提交
var eas = Jxstar.systemVar.edit__audit__save||'0';
if (eas == '1' && auditcall && typeof auditcall == 'function') {
var sm = self.grid.getSelectionModel();
sm.selectRecords(sel_records);
store.commitChanges();
Ext.Msg.confirm(jx.base.hint, jx.event.auditsave, function(btn) {//'当前数据已保存,需要自动提交吗?'
if (btn == 'yes') {auditcall();}
});
return;
}
//复核数据修改
store.commitChanges();
//统计主表中的统计字段值
if (self.grid.gridNode.param.substat) {
self.substat(self.grid);
}
self.fireEvent('aftersave', self, data);
//支持主从新增直接保存时,取最新的外键值
var fk = self.grid.fkValue;
if (fk && fk.length >= 0 && self.grid.fkName) {
var opts = store.lastOptions;
if (opts && opts.params) {//支持子表保存后,返回当前页
self.grid.subOptions = {start:opts.params.start, limit:opts.params.limit};
}
Jxstar.loadSubData(self.grid, fk);
} else {
self.grid.getStore().reload();
}
Ext.Msg.alert('系统提示', '单据保存成功!');
};
//发送请求
Request.postRequest(params, endcall);
},
/**
* public
* 显示html样式的审批表单
**/
viewHtmlReport : function() {
var self = this;
var funid = self.define.nodeid;
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selectone(records)) return;
var keyid = records[0].get(self.define.pkcol);
var viewReport = function (reportId) {
var pk = self.define.pkcol.replace('__', '.');
var whereSql = pk + ' = ?';
var title = self.define.nodetitle + '-' + jx.wf.form;
var params = 'funid='+ funid +'&reportId='+ reportId +'&isCheck=true&printType=html&whereSql='+
whereSql +'&whereValue='+ keyid +'&whereType=string&user_id=' + Jxstar.session['user_id'];
var url = Jxstar.path + "/report/html/htmlprint.jsp";
window.tmp_print_title = title;
window.tmp_print_params = params;
window.open(url);
};
var hdCall = function(data) {
if (data == null || data.length == 0) {
JxHint.alert(jx.event.funnwf);//当前功能没有审批单定义!
return;
}
viewReport(data[0].report_id);
};
//从后台取报表定义信息
var params = 'funid=rpt_list&pagetype=grid&eventcode=checkrpt&selfunid='+ funid +'&dataid='+ keyid +'&repttype=form&wheresql=';
Request.dataRequest(params, hdCall);
},
/**
* public
* 打开数据导入窗口;支持导入多个来源功能的数据
**/
dataImport : function() {
var self = this;
if (this.fireEvent('beforeimport', this) == false) return;
//取路由定义信息,格式:{srcNodeId:"sys_event",whereSql:"fun_id='sysevent'",whereType:"",whereValue:""}
var routes = RuleData[self.define.nodeid];
if (!routes || routes.length == 0) {
JxHint.alert(jx.event.gridnsql);//没有定义导入SQL、或者没有生成SQL规则文件!
return false;
}
//显示多选区域
self.isImpMore = self.getImpMore(routes[0].srcNodeId);
//创建并显示对话框
var endcall = function(page, srcnode, win) {
//-------------------增加多项的选择区域-------------------
var items = [page], ly = 'fit', w = 750, h = 500;
if (self.isImpMore) {
w = 800; h = 560;
ly = 'border';
items = [
{region:'south', xtype:'box', style:'border-top:1px solid #F0AD4E; background-color:#FFF;', height:68,
id:'xsel_more_data', html:'
'},
{region:'center', xtype:'container', layout:'fit', items:[page]}
];
JxSelect.selectMoreData = {};//初始化数据
}
//----------------------------------------------------
var title = jx.base.imp+'--'+srcnode.nodetitle;
if (win == null) {
win = new Ext.Window({
tbar: tbar,
title: title,
layout: ly,
width: w,
height: h,
constrainHeader: true,
maximizable: true,
border: false,
modal: true,
closeAction: 'close',
//autoScroll: true,//chrome has scroll bar
items: items
});
win.show();
} else {
win.setTitle(title);
win.removeAll(true);
win.add(items);
win.doLayout();
}
};
//如果有多个来源功能,则构建一个单选栏,作为工具栏
var tbar = null;
if (routes.length > 1) {
var items = [];
var showSrcFun = function(radio) {
if (!radio.el.dom.checked) return;
//取到来源功能ID
var srcId = radio.inputValue;
var win = radio.findParentByType('window');
if (win == null) return;
//找到来源定义对象,显示新的表格
for (var i = 0, n = routes.length; i < n; i++) {
if (routes[i].srcNodeId == srcId) {
self.showImpGrid(routes[i], endcall, win);
break;
}
}
};
for (var i = 0, n = routes.length; i < n; i++) {
var srcId = routes[i].srcNodeId;//来源功能ID
var srcnode = Jxstar.findNode(srcId);//来源功能定义
var srcName = srcnode ? srcnode.nodetitle : srcId;//来源功能名称
var item = {xtype:'radio', boxLabel:srcName, name:'impSrcNodeId', inputValue:srcId, handler:showSrcFun};
if (i == 0) {
item.checked = true;
}
items[i] = item;
}
//构建多个来源功能的工具栏
tbar = new Ext.Toolbar({style:'border-bottom-width:1;height:48px;padding:12px 0;', items:items});
}
self.showImpGrid(routes[0], endcall);
},
//private 构建一个数据导入的Grid
//回调方法是处理表格页面加载后的回调
showImpGrid : function(route, endcall, win) {
var self = this;
var fkValue = self.grid.fkValue||'';
//显示多选区域
var ismore = self.isImpMore;
//如果主表没有保存就执行数据导入,则需要先保存主记录
if (JxUtil.isEmptyFK(fkValue) && self.grid.gridNode.pageType.indexOf('sub') >= 0) {
var fpage = JxUtil.getParentForm(self.grid, true);
if (!fpage) {
JxHint.alert(jx.event.noform);//'没有找到主表单对象!'
return;
} else {
//保存主表单后再执行导入方法
var fn = self.dataImport.createDelegate(self);
fpage.formNode.event.save(fn);
return;
}
}
self.srcNodeId=route.srcNodeId;
var srcNodeId = route.srcNodeId;
var srcnode = Jxstar.findNode(srcNodeId);
var layout = route.layout;
if (layout == null || layout.length == 0) {
layout = srcnode.gridpage;
}
var whereSql = route.whereSql||'';
var whereType = route.whereType||'';
var whereValue = route.whereValue||'';
var impExtendParam = '';
//添加括弧
if (whereSql.length > 0) {
whereSql = '(' + whereSql + ')';
}
//解析过滤语句中的外键值,在导入明细记录时有用,注意{FKEYID}必须是第一参数;
var index = whereSql.indexOf('{FKEYID}');
if (index >= 0) {
//如果有多个{FKEYID}则直接替换
if (whereSql.indexOf('{FKEYID}', index+7) >= 0) {
whereSql = whereSql.replace(/\{FKEYID\}/ig, "'"+ fkValue +"'");
} else {
whereSql = whereSql.replace('\{FKEYID\}', '?');
whereType = whereType.length == 0 ? 'string' : 'string;'+whereType;
whereValue = whereValue.length == 0 ? fkValue : fkValue+';'+whereValue;
}
}
var options = null;
//扩展过滤语句与参数
if (typeof self.dataImportParam == 'function') {
options = self.dataImportParam(srcNodeId);
if (!options) return;
if (options.whereSql != null && options.whereSql.length > 0) {
if (whereSql.length > 0) {
whereSql += ' and (' + options.whereSql + ')';
} else {
whereSql = options.whereSql;
}
}
if (options.whereType != null && options.whereType.length > 0) {
if (whereType.length > 0) whereType += ';';
whereType += options.whereType;
}
if (options.whereValue != null && options.whereValue.length > 0) {
if (whereValue.length > 0) whereValue += ';';
whereValue += options.whereValue;
}
//imp方法的扩展参数,格式如:param1=xxxx¶m2=xxxx;在导入SQL可以解析[xxx]类型的参数
if (options.extendParam != null && options.extendParam.length > 0) {
impExtendParam = options.extendParam;
}
}
//JxHint.alert(whereSql);
//加载数据
var loaddata = function(grid) {
//显示数据
JxUtil.delay(500, function(){
//如果自定义了查找导入数据表格的方法,则采用自定义方法
if (typeof self.dataImportGrid == 'function') {
grid = self.dataImportGrid(grid, srcNodeId);
} else {
//如果采用了导入布局页面
if(!grid.isXType('grid')){
var tree = grid.getComponent(0).getComponent(0);
//如果左边是树形页面
if(tree.isXType('treepanel')){
//如果右边是表格页面,处理tree-grid布局
if (grid.getComponent(1).getComponent(0).isXType('grid')) {
grid = grid.getComponent(1).getComponent(0);
}else if(grid.getComponent(1).getComponent(0).isXType('tabpanel')){
//如果右边是tabpanel页面,处理tree-grid+from布局
grid = grid.getComponent(1).getComponent(0).getComponent(0).getComponent(0);
}else{
JxHint.alert(jx.event.gridnt);//找不到表格页面!
}
}
//如果左边不是树形页面
else{
//如果是tabpanel页面,处理grid-from布局
if(grid.isXType('tabpanel')){
grid = grid.getComponent(0).getComponent(0);
}else{
//处理grid-grid布局
grid = grid.getComponent(1).getComponent(0);
if(!grid.isXType('grid')){
grid = grid.getComponent(0).getComponent(0);
if(!grid.isXType('grid'))
JxHint.alert(jx.event.gridnt);//'找不到表格页面!'
}
}
}
}
}
//-----------------多选添加数据,勾选选择、取消清除-----------------
if (ismore) {
var sm = grid.getSelectionModel();
var fieldn = self.getMoreField(grid.gridNode);
sm.on('rowselect', function(xs, index, r){
JxSelect.selRowData(fieldn, srcnode.pkcol, r);
//需要绑定到selRowData的deln.click方法中,用于反向移除表格中的已选择行;暂时不用
/*if (sm) {
var store = sm.grid.store;
var index = store.find(fkey, id);alert(index+';'+id);
if (index >= 0) sm.deselectRow(index);
}*/
});
sm.on('rowdeselect', function(xs, index, r){
JxSelect.delMoreData(fieldn, srcnode.pkcol, r);
});
}//---------------------------------------------------------
//设置外键值与目标功能ID
grid.destParentId = fkValue;
grid.destNodeId = self.define.nodeid;
grid.destGrid = self.grid;
//删除GRID的自定义参数
grid.on('beforedestroy', function(gp){
gp.destParentId = null; delete gp.destParentId;
gp.destNodeId = null; delete gp.destNodeId;
gp.destGrid = null; delete gp.destGrid;
gp = null;
return true;
});
//缺省加载数据
if (grid.isShow == '1') {
Jxstar.loadData(grid, {where_sql:whereSql, where_value:whereValue, where_type:whereType});
} else {
//不做缺省查询,但也要保留导入的where条件,在查询中能带上这个查询条件
grid.jxstarParam.old_wsql = whereSql||'';
grid.jxstarParam.old_wtype = whereType||'';
grid.jxstarParam.old_wvalue = whereValue||'';
}
//添加自定义扩展参数到imp方法的请求参数中
grid.impExtendParam = impExtendParam;
});
};
//异步加载功能对象后再显示
var hdcall = function(f) {
var pagetype = 'import';
var cfg = {pageType:pagetype};//传递树形加载参数到控件中
if (options) cfg.treeLoadParam = options.treeLoadParam;
var page = f(srcnode, cfg);
if (typeof page.showPage == 'function') {
page = page.showPage(pagetype);
}
endcall(page, srcnode, win);
loaddata(page);
};
//异步从JS文件加载功能对象
Request.loadJS(layout, hdcall);
},
// private 查找用于标记的字段名
getMoreField : function(gridNode) {
var first = gridNode.define.first;
if (first.length > 0) {
first = first.replace(/\./g, '__');
return first.split(',')[0];
}
//取查询字段:如果没有设置查询字段,则取第一个字段
var mycols = gridNode.param.cols;
for (var i = 0, c = 0, n = mycols.length; i < n; i++){
var col = mycols[i].col, field = mycols[i].field;
if (col.hidden) continue;
if (field == null || field.name.length == 0) continue;
if (field.type != 'string') continue;
if (field.name.length > 0) {
first = field.name;
break;
}
}
if (first.length == 0) {
alert('没有找到一个显示的字段!');
return;
}
return first;
},
// private 当前数据导入是否要显示多选标签
getImpMore : function(srcFunId) {
//显示多选区域
var ismore = (Jxstar.systemVar.page__import__ismore == '1');
//控制只有哪些功能显示多选区域
var imp_funids = Jxstar.systemVar.page__import__funids||'';
//如果没有设置功能ID,则直接返回ismore
if (imp_funids.length > 0) {
if (ismore) {
if (imp_funids.indexOf(','+srcFunId+',') >= 0) return true;
}
} else {
return ismore;
}
return false;
},
/**
* public
* 执行数据导入事件
**/
imp : function() {
var self = this;
var tb = self.grid.getTopToolbar();
var btn = JxUtil.getButton(tb, 'import');
//如果没有导入按钮,则不执行;因为有时用导入数据窗口做自定义事件
if (!btn) return;
//显示多选区域
var ismore = self.getImpMore(self.define.nodeid);
//取选择记录的主键值
var keys = '';
if (ismore) {
var datas = JxSelect.selectMoreData;
for (k in datas) {
keys += '&keyid=' + k;
}
if (keys.length == 0) {
JxHint.alert(jx.util.selectno);
return;
}
} else {
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selected(records)) return;
var pkcol = self.define.pkcol;
for (var i = 0; i < records.length; i++) {
keys += '&keyid=' + records[i].get(pkcol);
}
}
//按钮不可用
btn.disable();
//目标功能外键值
var parentId = self.grid.destParentId;
//目标功能ID
var destFunId = self.grid.destNodeId;
//设置请求的参数
var params = 'funid='+ self.define.nodeid + '&destfunid=' + destFunId + keys;
params += '&parentId='+ parentId +'&pagetype=import&eventcode=import';
//扩展请求参数
var extparam = self.grid.impExtendParam;
if (extparam && extparam.length > 0) {
if (extparam.charAt(0) != '&') {
extparam = '&'+extparam;
}
params += extparam;
}
//导入后刷新数据
var endcall = function(data) {
//按钮可用
btn.enable();
//反馈数据的格式为:{srcFunId:'', destFunId:'', data:[{impKeyId:'', newKeyId:''}...]}
self.fireEvent('afterimport', self,
{srcFunId:self.define.nodeid, destFunId:destFunId, data:data});
self.grid.getStore().reload();
var destGrid = self.grid.destGrid;
if (destGrid != null) {
//统计主表中的统计字段值
if (destGrid.gridNode.param.substat) {
self.substat(destGrid);
}
//支持主从新增直接保存时,取最新的外键值
var fk = destGrid.fkValue;
if (fk && fk.length >= 0 && destGrid.fkName) {
Jxstar.loadSubData(destGrid, fk);
} else {
destGrid.getStore().reload();
}
}
//导入数据后自动关闭
var win = self.grid.findParentByType('window');
if (win) win.close();
};
//需要恢复按钮状态
var errorcall = function(result){
btn.enable();
var msg = result.message;
if (msg.length == 0) msg = jx.req.faild;
JxHint.alert(msg);
};
//发送请求
Request.postRequest(params, endcall, {errorcall:errorcall});
},
/**
* public
* 清除选择记录,创建一条空记录执行双击事件,
**/
clearRecord: function() {
this.grid.getSelectionModel().clearSelections();
JxSelect.selectMoreData=null;
this.grid.fireEvent('rowclick', this.grid);
this.grid.fireEvent('rowdblclick', this.grid);
},
/**
* public
* 选择记录,执行双击事件
**/
selRecord: function() {
var records = JxUtil.getSelectRows(this.grid);
var datas = JxSelect.selectMoreData;
if (datas.length == 0) {
JxHint.alert(jx.util.selectno);
return;
}
//if (!JxUtil.selected(records)) return;
this.grid.fireEvent('rowclick', this.grid);
this.grid.fireEvent('rowdblclick', this.grid);
},
/**
* public
* 直接添加附件,需要指定附件所属的字段名
* attachField -- 缺省情况Ext会把当前按钮作为参数传递过来;
* 此字段的用途是标示当前附件需要上传到哪个字段中,
* 通过该字段可以在报表中定义输出,一般是用于图片输出
**/
addAttach: function(attachField) {
//缺省是当前按钮
if (attachField != null && attachField.isXType && attachField.isXType('button')) attachField = null;
//需要传递到后台的参数值
var dataId, dataFunId, dataField, tableName;
//取当前功能ID
var nodeid = this.define.nodeid;
var isAttach = this.define.isAttach;
//如果是图文附件功能的新增按钮
if (nodeid == 'sys_attach' || nodeid == 'project_attach' || isAttach) {
//取来源数据记录ID
dataId = this.grid.attachDataId || '';
//取来源数据功能ID
dataFunId = this.grid.attachFunId || '';
//取来源数据字段名称,如图片字段
dataField = attachField || '';
} else {
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selectone(records)) return;
var pkcol = this.define.pkcol;
dataId = records[0].get(pkcol);
dataFunId = nodeid;
dataField = attachField || '';
tableName = this.define.tablename;
}
if (dataId.length == 0) {
JxHint.alert(jx.event.noup); //没有选择上传附件的记录
return;
}
if (dataFunId.length == 0) {
JxHint.alert(jx.event.noupfun); //无法识别上传附件的功能!
return;
}
//-----------------传递参数的判断-------------------
var self = this;
//表单参数
var formItems = [{
xtype: 'fileuploadfield',
useType: 'file',
maxLength: 200,
fieldLabel: jx.event.selfile, //选择文件
name: attachField || 'attach_path',
labelSeparator:'*',
buttonText: '',
buttonCfg: {
iconCls: 'upload_icon'
},
listeners:{
fileselected: function(f, path) {
var len = path.length;
if (len > 0) {
var pos = path.lastIndexOf('\\');
if (pos >= 0) {
path = path.substr(pos+1, len);
}
}
queryForm.getForm().findField('attach_name').setValue(path);
}
}
},{
xtype: 'hidden',
fieldLabel: jx.event.upname, //附件名称
name: 'attach_name',
labelSeparator:'*', maxLength:200
}];
var formHeight = 170;
//自定义资料类型控件
var comboType = this.grid.attachTypeCombo;
if (comboType) {
if (typeof comboType == 'function') {
comboType = comboType();
}
formHeight = 200;
formItems.insert(0, comboType);
};
var queryForm = new Ext.form.FormPanel({
layout:'form',
labelAlign:'right',
labelWidth:80,
border:false,
bodyStyle: 'padding: 20px 10px 0 10px;',
defaults: {
anchor: '95%'
},
items: formItems
});
//创建对话框
var win = new Ext.Window({
title:jx.event.uptitle, //上传附件
layout:'fit',
width:400,
height:formHeight,
resizable: false,
modal: true,
closeAction:'close',
items:[queryForm],
buttons: [{
text:jx.base.ok, //确定
handler:function(){
var form = queryForm.getForm();
if (!form.isValid()) return;
//上传参数
var params = 'funid=sys_attach&pagetype=editgrid';
params += '&attach_field='+ dataField +'&dataid='+ dataId +'&datafunid='+ dataFunId;
//针对字段保存附件
if (dataField && dataField.length > 0) {
params += '&eventcode=fcreate&table_name=' + tableName;
} else {
params += '&eventcode=create';
}
//因为form发送post请求时取的显示值,所以要转换一下
var attach_type = form.get('attach_type_combo');
if (attach_type.length > 0) {
params += '&attach_type=' + attach_type;
}
//上传成功后关闭窗口并刷新数据
var hdCall = function() {
win.close();
if (nodeid == 'sys_attach' || nodeid == 'project_attach' || attachField || isAttach) {
self.grid.getStore().reload();
}
};
//上传附件
Request.fileRequest(form, params, hdCall);
}
},{
text:jx.base.cancel, //取消
handler:function(){win.close();}
}]
});
win.show();
},
/**
* public
* 管理图文资料
**/
upload : function() {
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selectone(records)) return;
var self = this, define = this.define;
var keyid = records[0].get(define.pkcol);
if (keyid == null || keyid.length == 0) {
JxHint.alert(jx.event.nosave);
return;
}
//审批中是否可以添加、删除附件
var editFile = define.editCheckFile||false;
var pageType = self.grid.gridNode.pageType;
if (editFile) editFile = (pageType == 'chkgrid');//只有审批页面类型才有效
//没有状态字段,或未提交状态,附件可编辑
var audit0 = '0';
if (define.status) audit0 = define.status['audit0'];
var state = records[0].get(define.auditcol);
if (state == null || state.length == 0) state = audit0;
var deled = (state == audit0 || state == '6');
if (state == '2' && editFile) deled = true;
//过滤条件,支持扩展方法(个人消息查看功能)
var options = {};
if (typeof self.uploadWhereParam == 'function') {
options = self.uploadWhereParam();
} else {
options.where_sql = 'sys_attach.data_id = ? and sys_attach.table_name = ?';
options.where_type = 'string;string';
options.where_value = keyid+';'+define.tablename;
}
//扩展资料类型控件
var comboType = null;
if (typeof self.grid.attachTypeCombo == 'function') {
comboType = self.grid.attachTypeCombo();
}
//加载数据
var hdcall = function(grid) {
//显示数据
//JxUtil.delay(500, function(){//加延时后,在网络慢时attachDataId没赋值
//设置目标功能信息
grid.attachDataId = keyid;
grid.attachFunId = define.nodeid;
grid.attachDeled = deled;
if (comboType) {//如果有自定义类型,则覆盖
grid.attachTypeCombo = comboType;
}
//删除GRID的自定义参数
grid.on('beforedestroy', function(gp){
gp.attachDataId = null; delete gp.attachDataId;
gp.attachFunId = null; delete gp.attachFunId;
gp.attachDeled = null; delete gp.attachDeled;
gp.attachTypeCombo = null; delete gp.attachTypeCombo;
gp = null;
return true;
});
Jxstar.loadData(grid, options);
//});
};
var srcDefine = Jxstar.findNode('sys_attach');
//显示数据
Jxstar.showData({
filename: srcDefine.gridpage,
title: srcDefine.nodetitle,
pagetype: 'editgrid',
nodedefine: srcDefine,
callback: hdcall
});
},
/**
* public
* 另存结果集为xls文件
**/
expxls : function() {
JxExport.showWindow(this.grid.gridNode);
},
/**
* public
* 构建数据透视表
**/
pivotexp : function() {
JxPivotExp.showWindow(this.grid.gridNode);
},
/**
* public
* 打印当前记录
**/
print : function() {
JxPrint.showWindow(this.grid.gridNode);
},
/**
* public
* 批量审批同意选择的记录。
**/
agree: function() {
if (this.fireEvent('beforecheck', this, 'agree') == false) return;
this.basecheck('Y');
},
/**
* public
* 退回编制人。
**/
chkback: function() {
if (this.fireEvent('beforecheck', this, 'back') == false) return;
this.basecheck('E');
},
//基础审批方法
basecheck: function(checkType) {
var store = this.grid.getStore();
var mrow = store.getModifiedRecords();
if (mrow.length > 0) {
//记录已被修改,是否需要先保存?
if (confirm(jx.event.saveyes)) {
this.editSave();
return false;
} else {
store.rejectChanges();
}
}
var self = this;
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selected(records)) return;
var hdcall = function() {
var params = 'funid=wf_assign&pagetype=chkgrid&eventcode=execheck&check_funid='+ self.define.nodeid;
for (var i = 0; i < records.length; i++) {
params += '&keyid=' + records[i].get(self.define.pkcol);
}
//缺省审批同意
var checkDesc = jx.event.agree; //同意
if (checkType == 'E') checkDesc = jx.wf.advnew; //退回编制人
params += '&check_type='+ checkType +'&check_desc='+ encodeURIComponent(checkDesc);
var endcall = function(data) {
//重新加载数据
self.grid.getStore().reload();
//刷新流程中心的消息
var xt = Ext.getCmp('x_main_tab_work');
if (xt) {
JxPortalExt.contentTypes['portlet_work'].refresh(xt.ownerCt);
}
};
Request.postRequest(params, endcall);
};
//确定审批同意选择的记录吗?
var hintDesc = jx.event.agreeyes;
if (checkType == 'E') hintDesc = jx.event.auditback;
Ext.Msg.confirm(jx.base.hint, hintDesc, function(btn) {
if (btn == 'yes') hdcall();
});
},
/**
* public
* 弹出完成分配任务界面。
**/
check: function() {
var store = this.grid.getStore();
var mrow = store.getModifiedRecords();
if (mrow.length > 0) {
//记录已被修改,是否需要先保存?
if (confirm(jx.event.saveyes)) {
this.editSave();
return false;
} else {
store.rejectChanges();
}
}
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selected(records)) return;
//审批确定后会刷新该表格,在check_work.js文件中用到了这个全局变量。
JxUtil.myCheckGrid = this.grid;
if (this.fireEvent('beforecheck', this, 'check') == false) return;
if (records.length > 1) {
this.checkMore(records);
} else {
this.baseWf('check_work', false);
}
},
//批量审批多条记录
checkMore: function(records) {
var self = this;
var dataId = records[0].get(self.define.pkcol);
var dataIds = '';
for (var i = 0, n = records.length; i < n; i++) {
dataIds += records[i].get(self.define.pkcol);
if (i < n-1) dataIds += ',';
}
var appData = {funId:self.define.nodeid, dataId:dataId, dataIds:dataIds};
if (this.fireEvent('beforecheck', this, 'checkmore', appData) == false) return;
JxUtil.showCheckWindow(appData, 'check_work');
},
/**
* public
* 弹出查看分配任务表格界面。
**/
showassign: function() {
this.baseWf('check_work', true);
},
/**
* public
* 执行审批撤销
**/
takecheck: function() {
var self = this;
var records = JxUtil.getSelectRows(self.grid);
//为了数据安全,一次只能取回一条
if (!JxUtil.selectone(records)) return;
var pkcol = self.define.pkcol;
var funId = self.define.nodeid;
var hdcall = function() {
var params = 'funid=wf_task&pagetype=chkgrid&eventcode=takecheck&check_funid='+ funId;
params += '&keyid=' + records[0].get(pkcol);
//填写任务取回标志
var checkType = 'K', checkDesc = String.format(jx.event.takedesc, JxDefault.getUserName()); //该任务被【{0}】取回!
params += '&check_type='+ checkType +'&check_desc='+ encodeURIComponent(checkDesc);
var endcall = function(data) {
//重新加载数据
self.grid.getStore().reload();
};
Request.postRequest(params, endcall);
};
//确定取回选择的审批记录吗?
Ext.Msg.confirm(jx.base.hint, jx.event.takeyes, function(btn) {
if (btn == 'yes') hdcall();
});
},
//审批催办
tocheck: function() {
var self = this;
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selectone(records)) return;
var pkcol = self.define.pkcol;
var funId = self.define.nodeid;
var params = 'funid=sysevent&eventcode=tocheck&check_funid='+ funId;
params += '&keyid=' + records[0].get(pkcol);
Request.postRequest(params, null);
},
/**
* public
* 查看当前有哪些过程实例。
**/
showlist: function() {
var dataId = '';
var records = JxUtil.getSelectRows(this.grid);
if (records.length > 0) {
var pkcol = this.define.pkcol;
dataId = records[0].get(pkcol) || '';
}
var funId = this.define.nodeid;
var appData = {funId:funId, dataId:dataId};
JxUtil.showCheckWindow(appData, 'check_list');
},
/**
* private
* 查看流程信息的基础函数。
**/
baseWf: function(fileName, hideForm) {
var funId = this.define.nodeid;
this.showWorkFlow(funId, fileName, hideForm);
},
/**
* public
* 查看模拟审批流程执行顺序,显示各节点审批人。
**/
chkTmp: function() {
var self = this;
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selectone(records)) return;
var funId = self.define.nodeid;
var pkcol = self.define.pkcol;
var dataId = records[0].get(pkcol);
self.grid.isTmpExe = '1';//标记弹出审批人正在执行
JxUtil.showTmpNode(funId, dataId, self.grid);
},
/**
* public
* 查看数据修改日志。
**/
editLog: function() {
var records = JxUtil.getSelectRows(this.grid);
if (!JxUtil.selectone(records)) return;
var pkcol = this.define.pkcol;
var nodeid = this.define.nodeid;
var keyid = records[0].get(pkcol);
if (keyid == null || keyid.length == 0) {
JxHint.alert(jx.event.nosave);
return;
}
//过滤条件
var options = {};
options.where_sql = '(fun_id = ? and data_id = ?) or (pfun_id = ? and pdata_id = ?)';
options.where_type = 'string;string;string;string';
options.where_value = nodeid+';'+keyid+';'+nodeid+';'+keyid;
//加载数据
var hdcall = function(grid) {
JxUtil.delay(500, function(){Jxstar.loadData(grid, options);});
};
var df = Jxstar.findNode('sys_log_edit');
//显示数据
Jxstar.showData({
filename: df.gridpage,
title: df.nodetitle,
pagetype: 'editgrid',
nodedefine: df,
pagetype: 'query',
callback: hdcall
});
},
/**
* private
* 查看流程信息的基础函数,支持查询功能中查看业务功能的审批信息。
**/
showWorkFlow: function(funId, fileName, hideForm) {
var self = this;
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selected(records)) return;//如果选择了多条,缺省取第1条记录
var dataId = records[0].get(self.define.pkcol);
var appData = {funId:funId, dataId:dataId, hideForm:hideForm};
JxUtil.showCheckWindow(appData, fileName);
},
/**
* public
* 处理附件中的图片浏览功能
**/
showPicture: function() {
var self = this;
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selected(records)) return;
var funId = self.define.nodeid;
//从附件目录中取图片文件
var url = Jxstar.path + '/commonAction.do?funid=sys_attach&pagetype=editgrid&eventcode=showpic&selfunid='+ funId;
url += '&dataType=json&user_id='+Jxstar.session['user_id'];
for (var i = 0, n = records.length; i < n; i++) {
var keyid = records[i].get(self.define.pkcol);
url += '&keyid=' + keyid;
}
var viewPicture = function (url) {
var tabPanel = self.grid.findParentByType('tabpanel');
var shower = new ImageShower({parentCtl:tabPanel, url:url});
var tab = shower.show();
tabPanel.activate(tab);
};
viewPicture(url);
},
/**
* public
* 导入excel数据
**/
impExcel: function(imp_index) {
var impIndex = '';//功能导入定义序号
if (Ext.isNumber(imp_index) || Ext.isString(imp_index)) {
impIndex = imp_index;
}
var self = this;
var fkValue = self.grid.fkValue||'';
//如果主表没有保存就执行数据导入,则需要先保存主记录
if (JxUtil.isEmptyFK(fkValue) && self.grid.gridNode.pageType.indexOf('sub') >= 0) {
var fpage = JxUtil.getParentForm(self.grid, true);
if (!fpage) {
JxHint.alert(jx.event.noform);//'没有找到主表单对象!'
return;
} else {
//保存主表单后再执行导入方法
var fn = self.impExcel.createDelegate(self);
fpage.formNode.event.save(fn);
return;
}
}
var nodeid = this.define.nodeid;
var queryForm = new Ext.form.FormPanel({
layout:'form',
labelAlign:'right',
labelWidth:80,
border:false,
bodyStyle: 'padding: 20px 10px 0 10px;',
items: [{
anchor: '100%',
xtype: 'fileuploadfield',
useType: 'file',
fieldLabel: jx.event.selfile, //选择文件
name: 'import_file',
buttonText: '',
maxLength: 200,
buttonCfg: {
iconCls: 'upload_icon'
},
listeners: {
afterrender: function(cmp) {
cmp.fileInput.set({
accept: 'application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});
}
}
}]
});
//创建对话框
var self = this;
var win = new Ext.Window({
title:'选择导入文件',
layout:'fit',
width:400,
height:170,
resizable: false,
modal: true,
closeAction:'close',
items:[queryForm],
buttons: [{
text:'下载模板',
handler:function(){
var params = 'funid=imp_list&impFunId='+ nodeid +'&pagetype=grid&eventcode=downtpl&impIndex='+ impIndex;
Request.fileDown(params);
}
},{
text:jx.base.ok,
handler:function(){
var form = queryForm.getForm();
if (!form.isValid()) return;
//当前功能外键值
var fkValue = self.grid.fkValue;
//上传参数
var params = 'funid='+ nodeid +'&pagetype=grid&eventcode=impexcel&fkValue='+ fkValue +'&impFunId='+ nodeid + '&impIndex='+ impIndex;
var hdCall = function(data) {
if (!Ext.isEmpty(data) && !Ext.isEmpty(data.valueInfo)) {
JxHint.alert(data.valueInfo);
}
win.close();
self.grid.getStore().reload();
//导入数据子表汇总
if (self.grid.gridNode.param.substat) {
self.substat(self.grid);
}
};
//上传附件
Request.fileRequest(form, params, hdCall);
}
},{
text:jx.base.cancel,
handler:function(){win.close();}
}]
});
win.show();
},
/**
* public
* 直接打印
* printMode -- 输出模式:0 预览,1 直接打印
* printType -- 输出类型:html|xls
* printScope -- 输出范围:select 选择,query 当前查询结果
* reportId -- 报表定义ID:空表示取缺省报表,非空表示取指定报表
**/
dirPrint: function(printMode, printScope, printType, reportId) {
if (!Ext.isString(printMode)) {
printMode = '0'
}
printMode = printMode||'0';
printScope = printScope||'select';
printType = printType||'html';
reportId = reportId||'';
var pageNode = this.grid.gridNode;
var funId = this.define.nodeid;
//pageNode, funId, reportId, printType, printScope, printMode
JxPrint.exePrint(pageNode, funId, reportId, printType, printScope, printMode);
},
/**
* public
* 批量显示选择记录的图片
**/
showPic: function() {
var self = this;
var records = JxUtil.getSelectRows(self.grid);
if (!JxUtil.selected(records)) return;
//从附件目录中取图片文件
var pkcol = self.define.pkcol;
var funId = self.define.nodeid;
var tablename = self.define.tablename;
var url = Jxstar.path + '/commonAction.do?funid='+ funId +'&pagetype=grid&eventcode=showpic&tablename='+ tablename;
url += '&dataType=json&user_id='+Jxstar.session['user_id'];
for (var i = 0, n = records.length; i < n; i++) {
var keyid = records[i].get(pkcol);
url += '&keyid=' + keyid;
}
var tabid = 'funAttachImgs';
var mainTab = Jxstar.sysMainTab;
//如果已经打开,则直接退出
var tab = mainTab.getComponent(tabid);
if (tab) mainTab.remove(tabid, true);
tab = mainTab.add({
id:tabid,
pagetype:'formpic',
label: jx.base.showpic,//'图片浏览',
border: false,
layout: 'fit',
closable: true,
iconCls: 'function'
});
mainTab.activate(tab);
var shower = new ImageShower({parentCtl:tab, url:url});
shower.show();
},
/**
* public
* 刷新数据
**/
refresh: function() {
this.grid.getStore().reload();
},
/**
* public
* 标签直接打印(无预览窗口)
* 标签分批打印
* caseCode -- 方案编号
* modelNo -- 模板序号
**/
labPrintOut: function(caseCode, modelNo) {
var me = this;
var records = JxUtil.getSelectRows(me.grid);
if (!JxUtil.selected(records)) return;
var datas = [records.length];
for (var i = 0; i < records.length; i++) {
datas[i] = records[i].data;
}
if (typeof JxLabPrint == 'undefined') {
JxUtil.loadJS('/public/layout/ux/lab_print.js', true);
}
var btn = JxUtil.getButton(me.grid.getTopToolbar(), 'labprintout');
var hdcall = function(data) {
if (Ext.isEmpty(data)) {
JxHint.alert(jx.event.gridpn);//没有找到打印模板信息!
return;
}
var dataNum = Jxstar.systemVar.labprint__bat__num || 6;
var pageNum = Math.floor(datas.length/dataNum);
if (dataNum*pageNum < datas.length) {
pageNum = pageNum+1;
}
//数据格式:[{model_index, model_name, width, height, colnum, design_set},{...}]
//如果有多个模板,就构建下拉菜单,否则就是直接执行
if (data.length == 1) {
for (var k = 0; k < pageNum; k++){
var codes = JxLabPrint.buildCodes_page(datas, data[0], k, dataNum);
JxLabPrint.printBarCode(codes)
}
} else {
var items = [];
for (var i = 0; i < data.length; i++){
items[i] = {text:data[i].model_name, data:data[i],
handler:function(obj){
var md = obj.initialConfig.data;
for (var k = 0; k < pageNum; k++){
var codes = JxLabPrint.buildCodes_page(datas, md, k, dataNum);
JxLabPrint.printBarCode(codes);
}
}};
}
var el = btn.getEl();
if (!el) {
JxHint.alert(jx.event.gridnbl);//没有找到标签模板显示位置!
return;
}
var extMenu = new Ext.menu.Menu({items:items});
extMenu.show(el);
}
};
modelNo = modelNo || '';
var params = 'funid=lab_case&eventcode=qrymodel&caseCode='+caseCode+'&modelNo='+modelNo;
Request.postRequest(params, hdcall);
},
/**
* public
* 标签打印
* caseCode -- 方案编号
* modelNo -- 模板序号
**/
labPrint: function(caseCode, modelNo) {
var me = this;
var records = JxUtil.getSelectRows(me.grid);
if (!JxUtil.selected(records)) return;
var datas = [records.length];
for (var i = 0; i < records.length; i++) {
datas[i] = records[i].data;
}
if (typeof JxLabPrint == 'undefined') {
JxUtil.loadJS('/public/layout/ux/lab_print.js', true);
}
var btn = JxUtil.getButton(me.grid.getTopToolbar(), 'labprint');
var hdcall = function(data) {
if (Ext.isEmpty(data)) {
JxHint.alert(jx.event.gridpn);//没有找到打印模板信息!
return;
}
//数据格式:[{model_index, model_name, width, height, colnum, design_set},{...}]
//如果有多个模板,就构建下拉菜单,否则就是直接执行
if (data.length == 1) {
var codes = JxLabPrint.buildCodes(datas, data[0]);
JxLabPrint.showPreView(codes);
} else {
var items = [];
for (var i = 0; i < data.length; i++) {
items[i] = {text:data[i].model_name, data:data[i],
handler:function(obj){
var md = obj.initialConfig.data;
var codes = JxLabPrint.buildCodes(datas, md);
JxLabPrint.showPreView(codes);
}};
}
var el = btn.getEl();
if (!el) {
JxHint.alert(jx.event.gridnbl);//没有找到标签模板显示位置!
return;
}
var extMenu = new Ext.menu.Menu({items:items});
extMenu.show(el);
}
};
modelNo = modelNo || '';
var params = 'funid=lab_case&eventcode=qrymodel&caseCode='+caseCode+'&modelNo='+modelNo;
Request.postRequest(params, hdcall);
},
/**
* public
* PDF标签打印
* caseCode -- 方案编号
* modelNo -- 模板序号
**/
labPDF: function(caseCode, modelNo) {
var me = this;
var records = JxUtil.getSelectRows(me.grid);
if (!JxUtil.selected(records)) return;
var btn = JxUtil.getButton(me.grid.getTopToolbar(), 'pdfnew');
var hdcall = function(data) {
if (Ext.isEmpty(data)) {
JxHint.alert(jx.event.gridpn);//没有找到打印模板信息!
return;
}
//数据格式:[{model_id, model_name}]
//如果有多个模板,就构建下拉菜单,否则就是直接执行
if (data.length == 1) {
JxPrint.printPDF(me.grid, data[0].model_id);
} else {
var items = [];
for (var i = 0; i < data.length; i++) {
items[i] = {text:data[i].model_name, data:data[i].model_id,
handler:function(obj){
var model_id = obj.initialConfig.data;
JxPrint.printPDF(me.grid, model_id);
}};
}
var el = btn.getEl();
if (!el) {
JxHint.alert(jx.event.gridnbl);//没有找到标签模板显示位置!
return;
}
var extMenu = new Ext.menu.Menu({items:items});
extMenu.show(el);
}
};
modelNo = modelNo || '';
var params = 'funid=lab_case&eventcode=qrymd&caseCode='+caseCode+'&modelNo='+modelNo;
Request.postRequest(params, hdcall);
}
});
})();