Ext.define('erp.view.plm.project.ReviewForm',{
extend: 'Ext.form.Panel',
alias: 'widget.ReviewPanel',
id: 'form',
region: 'north',
frame : true,
layout : 'column',
autoScroll : true,
defaultType : 'textfield',
labelSeparator : ':',
buttonAlign : 'center',
fieldDefaults : {
margin : '2 2 2 2',
fieldStyle : "background:#FFFAFA;color:#515151;",
focusCls: 'x-form-field-cir',
labelAlign : "right",
msgTarget: 'side',
blankText : $I18N.common.form.blankText
},
FormUtil: Ext.create('erp.util.FormUtil'),
saveUrl: '',
updateUrl: '',
deleteUrl: '',
auditUrl: '',
resAuditUrl: '',
submitUrl: '',
resSubmitUrl: '',
bannedUrl: '',
resBannedUrl: '',
postUrl:'',
printUrl: '',
getIdUrl: '',
keyField: '',
codeField: '',
statusField: '',
params: null,
caller: null,
Contextvalue:null,
LastValue:null,
enableTools: true,
enableKeyEvents: true,
initComponent : function(){
formCondition = getUrlParam('formCondition');//从url解析参数
formCondition = (formCondition == null) ? "" : formCondition.replace(/IS/g,"=");
var param = {caller: this.caller || caller, condition: formCondition};
this.getItemsAndButtons(this, 'common/singleFormItems.action', this.params || param);//从后台拿到formpanel的items
this.callParent(arguments);
//加prev、next、refresh等tool
if(this.enableTools) {
this.setTools();
}
//给页面加上ctrl+alt+s键盘事件,自动跳转form配置界面
if(this.enableKeyEvents) {
this.addKeyBoardEvents();
}
},
getItemsAndButtons: function(form, url, param){
var me = this;
me.FormUtil.getActiveTab().setLoading(true);
Ext.Ajax.request({//拿到form的items
url : basePath + url,
params: param,
method : 'post',
callback : function(options,success,response){
me.FormUtil.getActiveTab().setLoading(false);
var res = new Ext.decode(response.responseText);
if(res.exceptionInfo != null){
showError(res.exceptionInfo);return;
}
form.fo_id = res.fo_id;
form.fo_keyField = res.fo_keyField;
form.tablename = res.tablename;//表名
if(res.keyField){//主键
form.keyField = res.keyField;
}
if(res.statusField){//状态
form.statusField = res.statusField;
}
if(res.statuscodeField){//状态码
form.statuscodeField = res.statuscodeField;
}
if(res.codeField){//Code
form.codeField = res.codeField;
}
form.fo_detailMainKeyField = res.fo_detailMainKeyField;//从表外键字段
var grids = Ext.ComponentQuery.query('gridpanel');
//如果该页面只有一个form,而且form字段少于8个,则布局改变
if(grids.length == 0 && res.items.length <= 8){
Ext.each(res.items, function(item){
item.columnWidth = 0.5;
});
form.layout = 'column';
}
//data&items
var items = me.setItems(form, res.items, res.data, res.limits);
form.add(items);
//title
if(res.title && res.title != ''){
form.setTitle(res.title);
}
//解析buttons
me.FormUtil.setButtons(form, res.buttons);
//form第一个可编辑框自动focus
me.FormUtil.focusFirst(form);
}
});
},
setItems: function(form, items, data, limits){
var edit = true,hasData = true,limitArr = new Array();
if(limits != null && limits.length > 0) {//权限外字段
limitArr = Ext.Array.pluck(limits, 'lf_field');
}
if (data) {
data = Ext.decode(data);
if(form.statuscodeField && data[form.statuscodeField] != null && data[form.statuscodeField] != '' &&
!(data[form.statuscodeField] == 'ENTERING' || data[form.statuscodeField] == 'UNAUDIT')){//非在录入和已提交均设置为只读// && data[form.statuscodeField] != 'COMMITED'
form.readOnly = true;
edit = false;
}
if(form.statusCode && data[form.statusCode] != null && (data[form.statusCode] == 'POSTED')){//存在单据状态 并且单据状态不等于空 并且 单据状态等于已过账
form.readOnly = true;
edit = false;
}
// statusCode
} else {
hasData = false;
}
var bool = false;
if(items.length > 110){
bool = true;
}
Ext.each(items, function(item){
if(screen.width < 1280){//根据屏幕宽度,调整列显示宽度
if(item.columnWidth > 0 && item.columnWidth <= 0.25){
item.columnWidth = 1/3;
} else if(item.columnWidth > 0.25 && item.columnWidth <= 0.5){
item.columnWidth = 2/3;
} else if(item.columnWidth >= 1){
item.columnWidth = 1;
}
} else {
if(item.columnWidth > 0.25 && item.columnWidth < 0.5){
item.columnWidth = 1/3;
} else if(item.columnWidth > 0.5 && item.columnWidth < 0.75){
item.columnWidth = 2/3;
}
}
if(item.name != null) {
if(item.name == form.statusField){//状态加特殊颜色
item.fieldStyle = item.fieldStyle + ';font-weight:bold;';
} else if(item.name == form.statuscodeField){//状态码字段强制隐藏
item.xtype = 'hidden';
}
}
if(item.xtype == 'hidden') {
item.columnWidth = 0.1;
}
if (hasData) {
item.value = data[item.name];
if(item.secondname){//针对合并型的字段MultiField
item.secondvalue = data[item.secondname];
}
if(!edit){
form.readOnly = true;
item.fieldStyle = item.fieldStyle + ';background:#f1f1f1;';
item.readOnly = true;
}
if(item.xtype == 'checkbox' && Math.abs(item.value || 0) == 1){
item.checked = true;
}
}
if(limitArr.length > 0 && Ext.Array.contains(limitArr, item.name)) {
item.hidden = true;
}
if(bool) {
item.columnWidth = item.columnWidth*0.83;
}
});
return items;
},
/**
* FormHeader Tools
* 包括:查看日志、查看流程、查看列表、最大化、最小化、刷新、关闭、上一条、下一条
*/
setTools: function(){
var datalistId = getUrlParam('datalistId');
if(datalistId){
this.tools = [{
type: 'search',
tooltip: '查看单据日志',
listeners:{
click: function(btn){
var form = btn.up('form');
var id = Ext.getCmp(form.keyField).value;
if(id != null && id != 0){
form.getLogs(id);
}
}
}
},{
type: 'save',
tooltip: '导出Excel',
listeners:{
click: function(btn){
var form = btn.ownerCt.ownerCt;
var id = Ext.getCmp(form.keyField).value;
form.saveAsExcel(id,caller);
}
}
},{
type: 'expand',
tooltip: '查看流程处理',
listeners:{
click: function(btn){
var form = btn.ownerCt.ownerCt;
if(!form.statuscodeField){
btn.disable(true);
} else {
var f = form.statuscodeField;
if(!Ext.getCmp(f) || Ext.getCmp(f).value == 'ENTERING'){
btn.disable(true);
} else {
var id = Ext.getCmp(form.keyField).value;
if(id != null && id != 0){
form.getProcess(id);
}
}
}
}
}
},{
type: 'gear',
tooltip: '设置流程处理人',
listeners:{
click: function(btn){
var form = btn.ownerCt.ownerCt;
if(!form.statuscodeField){
btn.disable(true);
} else {
var f = form.statuscodeField;
if(!Ext.getCmp(f) || Ext.getCmp(f).value == 'ENTERING'){
btn.disable(true);
} else {
var id = Ext.getCmp(form.keyField).value;
if(id != null && id != 0){
form.SetNodeDealMan(id);
}
}
}
}
}
},{
type: 'collapse',
tooltip: '查看列表',
listeners:{
click: function(btn){
var datalist = parent.Ext.getCmp(datalistId);
if(!datalist){
var form = btn.ownerCt.ownerCt;
var url = 'jsps/common/datalist.jsp?whoami=' + caller;
if(btn.urlcondition){
url += '&urlcondition=' + btn.urlcondition;
}
form.FormUtil.onAdd(caller + '_scan', parent.Ext.getCmp('content-panel').getActiveTab().title + 'DataList', url);
} else {
datalist.ownerCt.setActiveTab(datalist);
}
}
}
},{
type: 'maximize',
tooltip: '最大化',
listeners:{
render: function(btn){
var datalist = parent.Ext.getCmp(datalistId);
if(!datalist){
btn.disable(true);
}
},
click: function(btn){
var height = window.screen.height*0.87;
var width = window.screen.width;
//弹出框显示,可以锁定住地址栏和工具栏,防止用户不合理操作
window.open(window.location.href, '', 'width=' + width + ',height=' + height + ',top=0,left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
}
}
},{
type: 'minus',
tooltip: '最小化',
listeners:{
render: function(btn){
var datalist = parent.Ext.getCmp(datalistId);
if(!datalist){
btn.disable(true);
}
},
click: function(btn){
var p = parent.Ext.getCmp('content-panel');
if(p){
var t = p.getActiveTab();
var b = parent.Ext.getCmp('bottom');
if(b){
b.insert(1, {
text: t.title,
tooltip: t.tabConfig.tooltip,
tab: t,
handler: function(btn){
p.add(btn.tab);
var a = p.add(btn.tab);
p.setActiveTab(a);
btn.destroy();
}
});
p.remove(t, false);//并不销毁
}
}
}
}
},{
type: 'refresh',
tooltip: '刷新',
listeners:{
click: function(btn){
window.location.href = window.location.href;
}
}
},{
type: 'close',
tooltip: '关闭',
listeners:{
click: function(btn){
var p = parent.Ext.getCmp('content-panel');
if(p){
p.getActiveTab().close();
} else {
window.close();
}
}
}
},{
type:'prev',
id: 'prev',
tooltip: '上一条',
listeners:{
render: function(btn){
var datalist = parent.Ext.getCmp(datalistId);
if(datalist){
var datalistStore = datalist.currentStore;
Ext.each(datalistStore, function(){
if(this.selected == true){
if(this.prev == null){
btn.disable(true);
}
}
});
} else {
btn.disable(true);
}
},
click: function(btn){
var datalist = parent.Ext.getCmp(datalistId);
if(datalist){
var datalistStore = datalist.currentStore;
var form = btn.up('form');
var newId = 0;
var idx = 0;
Ext.each(datalistStore, function(s, index){
if(this.selected == true){
if(this.prev != null){
newId = this.prev;
idx = index;
}
}
});
form.FormUtil.loadNewStore(form, {caller: caller, condition: form.keyField + "=" + newId});
var grid = Ext.getCmp('grid');
if(grid){
grid.GridUtil.loadNewStore(grid, {caller: caller, condition: grid.mainField + "=" + newId});
}
datalistStore[idx].selected = false;
datalistStore[idx-1].selected = true;
if(datalistStore[idx-1].prev == null){
btn.disable(true);
} else {
btn.setDisabled(false);
}
Ext.getCmp('next').setDisabled(false);
}
}
}
},{
type: 'next',
id: 'next',
tooltip: '下一条',
listeners:{
render: function(btn){
var datalist = parent.Ext.getCmp(datalistId);
if(datalist){
var datalistStore = datalist.currentStore;
Ext.each(datalistStore, function(){
if(this.selected == true){
if(this.next == null){
btn.disable(true);
}
}
});
} else {
btn.disable(true);
}
},
click: function(btn){
var datalist = parent.Ext.getCmp(datalistId);
if(datalist){
var datalistStore = datalist.currentStore;
var form = btn.up('form');
var newId = 0;
var idx = 0;
Ext.each(datalistStore, function(s, index){
if(s.selected == true){
if(s.next != null){
newId = s.next;
idx = index;
}
}
});
form.FormUtil.loadNewStore(form, {caller: caller, condition: form.keyField + "=" + newId});
var grid = Ext.getCmp('grid');
if(grid){
grid.GridUtil.loadNewStore(grid, {caller: caller, condition: grid.mainField + "=" + newId});
}
datalistStore[idx].selected = false;
datalistStore[idx+1].selected = true;
if(datalistStore[idx+1].next == null){
btn.disable(true);
} else {
btn.setDisabled(false);
}
Ext.getCmp('prev').setDisabled(false);
}
}
}
}];
}
},
saveAsExcel:function(id,caller){
window.location.href=basePath+'excel/savePanelAsExcel.action?id='+id+"&caller="+caller+"&_noc=1";
},
/**
* 监听一些事件,
* 如Ctrl+Alt+S
*/
addKeyBoardEvents: function(){
var me = this;
if(Ext.isIE){
document.body.attachEvent('onkeydown', function(){//ie的事件名称不同,也不支持addEventListener
if(window.event.altKey && window.event.ctrlKey && window.event.keyCode == 83){
if(Ext.ComponentQuery.query('gridpanel').length > 0){//有grid
me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', "jsps/ma/multiform.jsp?formCondition=fo_idIS" + me.fo_id +
"&gridCondition=fd_foidIS" + me.fo_id + "&whoami=" + caller);
} else {
me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', "jsps/ma/form.jsp?formCondition=fo_idIS" + me.fo_id +
"&gridCondition=fd_foidIS" + me.fo_id);
}
}
});
document.body.attachEvent("onmouseover", function(){
if(window.event.ctrlKey){
var e = window.event;
me.Contextvalue = e.target.textContent == "" ? e.target.value : e.target.textContent;
textarea_text = parent.document.getElementById("textarea_text");
textarea_text.value = me.Contextvalue;
textarea_text.focus();
textarea_text.select();
}
});
} else {
document.body.addEventListener("keydown", function(e){
if(Ext.isFF5){//firefox不支持window.event
e = e || window.event;
}
if(e.altKey && e.ctrlKey && e.keyCode == 83){
if(Ext.ComponentQuery.query('gridpanel').length > 0){//有grid
me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', "jsps/ma/multiform.jsp?formCondition=fo_idIS" + me.fo_id +
"&gridCondition=fd_foidIS" + me.fo_id + "&whoami=" + caller);
} else {
me.FormUtil.onAdd('form' + caller, 'Form配置维护(' + caller + ')', "jsps/ma/form.jsp?formCondition=fo_idIS" + me.fo_id +
"&gridCondition=fd_foidIS" + me.fo_id);
}
}
});
document.body.addEventListener("mouseover", function(e){
if(Ext.isFF5){
e = e || window.event;
}
if(e.ctrlKey){
me.Contextvalue = e.target.textContent == "" ? e.target.value : e.target.textContent;
textarea_text = parent.document.getElementById("textarea_text");
textarea_text.value = me.Contextvalue;
textarea_text.focus();
textarea_text.select();
}
});
}
},
/**
* 拿到操作日志
*/
getLogs: function(id){
if(Ext.getCmp('win' + id)){
Ext.getCmp('win' + id).show();
} else {
Ext.Ajax.request({//拿到grid的columns
url : basePath + 'common/getMessageLogs.action',
async: false,
params: {
caller: caller,
id: id
},
method : 'post',
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
if(res.exception || res.exceptionInfo){
showError(res.exceptionInfo);
return;
}
var logs = res.logs;
logs = logs.length == 0 ? [{ml_date: $I18N.common.grid.emptyText, ml_man: $I18N.common.grid.emptyText,
ml_content: $I18N.common.grid.emptyText, ml_result: $I18N.common.grid.emptyText}] : logs;
Ext.create('Ext.window.Window', {
id : 'win' + id,
title: '操作日志',
iconCls: 'x-button-icon-set',
closeAction: 'hide',
height: "100%",
width: "80%",
maximizable : true,
buttonAlign : 'center',
layout : 'anchor',
items: [{
anchor: '100% 100%',
xtype: 'gridpanel',
bodyStyle: 'background:#f1f1f1;',
autoScroll: true,
store: Ext.create('Ext.data.Store', {
fields: ['ml_date', 'ml_man', 'ml_content', 'ml_result'],
data: logs
}),
columnLines: true,
columns: [
{ header: '时间', dataIndex: 'ml_date', flex: 1.5 , renderer: function(val){
if(val != '无数据'){
return Ext.Date.format(new Date(val), 'Y-m-d H:i:s');
}
}},
{ header: '操作人员', dataIndex: 'ml_man', flex: 1 ,renderer: function(val){
if(val == em_name){
return '' + val + '';
} else {
return val;
}
}},
{ header: '操作', dataIndex: 'ml_content', flex: 1.5},
{ header: '结果', dataIndex: 'ml_result', flex: 3}
]
}],
buttons : [{
text : '关 闭',
iconCls: 'x-button-icon-close',
cls: 'x-btn-gray',
handler : function(){
Ext.getCmp('win' + id).close();
}
}]
}).show();
}
});
}
},
/**
* 拿到流程处理情况
*/
getProcess: function(id){
var me = this;
//先获取jprocess的nodeId
Ext.Ajax.request({
url : basePath + 'common/getJProcessByForm.action',
async: false,
params: {
caller: caller,
keyValue: id,
_noc:1
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
showError(localJson.exceptionInfo);return;
}
if(localJson.node && localJson.node != -1){
//再根据nodeId调取流程信息
if(Ext.getCmp('win-flow' + id)){
Ext.getCmp('win-flow' + id).show();
} else {
var form = Ext.create('Ext.form.Panel', {
layout: 'column',
defaultType: 'textfield',
anchor: '100% 20%' ,
bodyStyle: 'background:#f1f1f1;',
fieldDefaults: {
columnWidth: 0.33,
readOnly: true,
cls : "form-field-allowBlank",
fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;'
},
items: [{
id: 'jp_name',
name: 'jp_name',
fieldLabel: '流程名称',
columnWidth: 0.33
},{
columnWidth: 0.33,
xtype: 'textfield',
fieldLabel: '发起时间',
name: 'jp_launchTime',
id:'jp_launchTime',
readOnly: true,
fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;'
},{
fieldLabel: '发起人',
columnWidth: 0.33,
xtype: 'textfield',
id:'jp_launcherName',
name: 'jp_launcherName',
readOnly: true,
fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;'
},{
fieldLabel: '节点名称',
id: 'jp_nodeName',
name: 'jp_nodeName',
xtype: 'textfield',
readOnly: true,
fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;'
},{
fieldLabel: '处理人',
id: 'jp_nodeDealMan',
name: 'jp_nodeDealMan',
xtype: 'textfield',
fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;',
readOnly: true,
listeners:{
change:function(field){
var em=Ext.getCmp('jp_nodeDealMan').getValue();
var btn=Ext.getCmp('dealbutton');
if(em!=em_code) btn.setDisabled(true);
}
}
},{
fieldLabel: '审批状态',
id:'jp_status',
name:'jp_status',
xtype: 'textfield',
fieldStyle: 'background:#f0f0f0;border: 1px solid #8B8970;',
readOnly: true,
}],
loader: {
url: basePath + 'common/getCurrentNode.action',
renderer: function(loader, response, active) {
var res = Ext.decode(response.responseText);
if(res.info.currentnode.jp_nodeDealMan){
res.info.currentnode.jp_nodeDealMan=res.info.dealmanname+"("+res.info.currentnode.jp_nodeDealMan+")";
}else res.info.currentnode.jp_nodeDealMan=res.info.dealmanname+"("+res.info.currentnode.jp_candidate+")";
res.info.currentnode.jp_launchTime = Ext.Date.format(new Date(res.info.currentnode.jp_launchTime), 'Y-m-d H:i:s');
this.target.getForm().setValues(res.info.currentnode);
return true;
},
autoLoad: true,
params: {
jp_nodeId: localJson.node,
_noc:1
}
},
buttonAlign: 'center',
buttons: [{
text: $I18N.common.button.erpFlowButton,
iconCls: 'x-button-icon-scan',
cls: 'x-btn-gray',
id:'dealbutton',
handler: function(btn){
me.FormUtil.onAdd(caller + '_flow', '流程处理', 'jsps/common/jprocessDeal.jsp?formCondition=jp_nodeidIS' + localJson.node);
}
},{
text : '关 闭',
iconCls: 'x-button-icon-close',
cls: 'x-btn-gray',
handler : function(){
Ext.getCmp('win-flow' + id).close();
}
}]
});
Ext.create('Ext.window.Window', {
id : 'win-flow' + id,
title: '流程处理情况',
iconCls: 'x-button-icon-set',
closeAction: 'hide',
height: "100%",
width: "90%",
maximizable : true,
buttonAlign : 'center',
layout : 'fit',
items:[{
xtype:'tabpanel',
frame:true,
layout:'fit',
items:[{
title:'处理明细',
layout:'anchor',
frame:true,
items:[form, Ext.create("erp.view.common.JProcess.GridPanel",{
anchor: '100% 80%' ,
nodeId: localJson.node
})]
},{
title : '节点信息',
items:[{
tag : 'iframe',
style:{
background:'#f0f0f0',
border:'none'
},
frame : true,
border : false,
layout : 'fit',
height:window.innerHeight*0.9,
iconCls : 'x-tree-icon-tab-tab',
html : ''
}]
}]
}]
}).show();
}
} else {
showMessage("提示", "当前单据无流程处理!");
}
}
});
},
SetNodeDealMan:function(id){
var me=this;
var nodewin=Ext.getCmp('win-nodeflow'+id);
if(nodewin){
nodewin.show();
}else {
Ext.create('Ext.window.Window', {
id : 'win-nodeflow' + id,
title: '设置节点处理人',
iconCls: 'x-button-icon-set',
closeAction: 'hide',
height: "100%",
width: "90%",
maximizable : true,
buttonAlign : 'center',
layout : 'fit',
items:[{
anchor: '100% 90%' ,
xtype:'SetNodeGridPanel',
keyValue: id,
FlowCaller:caller
}],
buttons:['->',{
text:'保 存',
iconCls: 'x-button-icon-save',
cls: 'x-btn-gray',
width : 65,
style: {
marginLeft: '10px'
},
handler:function(btn){
var win=btn.ownerCt.ownerCt;
var grid=win.items.items[0];
var msg=grid.GridUtil.checkGridDirty(grid);
if(msg==''){
Ext.Msg.alert('提示','无任何修改!');
}else {
var param= grid.GridUtil.getGridStore(grid);
param= unescape("[" + param.toString().replace(/\\/g,"%") + "]");
me.FormUtil.setLoading(true);
Ext.Ajax.request({
url : basePath + 'common/updateJnodePerson.action?_noc=1',
params: {
param:param,
caller:caller,
keyValue:id
},
method : 'post',
callback : function(options,success,response){
me.FormUtil.setLoading(false);
var localJson = new Ext.decode(response.responseText);
if(localJson.sucess){
showMessage('提示', '保存成功!', 1000);
grid.loadNewStore(grid,caller,id);
}else if(localJson.exceptionInfo != null){
showError(res.exceptionInfo);return;
}
}
});
}
}
},{
text:'关 闭',
iconCls: 'x-button-icon-close',
cls: 'x-btn-gray',
width: 65,
style: {
marginLeft: '10px'
},
handler:function(btn){
btn.ownerCt.ownerCt.close();
}
},'->']
}).show();
}
}
});