Ext.QuickTips.init();
Ext.define('erp.controller.sys.Feedback', {
extend: 'Ext.app.Controller',
FormUtil: Ext.create('erp.util.FormUtil'),
BaseUtil: Ext.create('erp.util.BaseUtil'),
currentManfield:null,
views:[
'core.form.Panel','sys.Feedback','core.form.MultiField','core.button.Reply',
'core.button.Add','core.button.Submit','core.button.ResSubmit','core.button.Audit','core.button.Save','core.button.Close','core.button.Print',
'core.button.Upload','core.button.Update','core.button.Delete','core.button.ResAudit','core.button.ForBidden',
'core.button.ResForBidden','core.form.FileField','core.button.TurnProject','core.button.TurnBuglist','core.button.Checktask','core.button.Endfeedback',
'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.form.YnField','core.trigger.AutoCodeTrigger','core.button.Canceltask','core.button.Back','core.button.Confirm',
'core.button.ChangeHandler'
],
RelativeFields:{
TechnicalService:{
remarkField:'fb_descriptiontecservice',
plandateField:'fb_plandatetecservice',
resultField:'fb_resulttecservice'
},
ProductDept:{
remarkField:'fb_descriptionpro',
plandateField:'fb_plandatepro',
resultField:'fb_resultpro'
},
'R&D':{
remarkField:'fb_descriptionrd',
plandateField:'fb_plandaterd',
resultField:'fb_resultrd'
},
Test:{
remarkField:'fb_testdescription',
resultField:'fb_resulttest'
}
},
init:function(){
var me = this;
this.control({
'erpFormPanel': {
afterrender:function(form){
Ext.defer(function(){
var _k=form.down('#fb_kind').getValue(),
_p=form.down('#fb_position').getValue(),
fbid=form.down('#fb_id').getValue(),
_status=form.down('#fb_statuscode').getValue(),info=null,hasfocused=false,handmanid=null;
if(_status!='ENTERING' && _status!='REPLYED'){
info=me.getCurrentFlow(_k,_p);
if(_p=='End'){
var datalistId = getUrlParam('datalistId');
var datalist = parent.Ext.getCmp(datalistId);
if(datalist){
var record = datalist.currentRecord;
if (record.get('fb_position')=='End')handmanid=record.get('em_id');
}
}else {
handmanid=form.down('#'+info['ff_handmanfield']).getValue();
me.currentManfield=info['ff_handmanfield'];
Ext.getCmp(info['ff_handmanfield']).on('change',function(){
var buttons=Ext.ComponentQuery.query('erpChangeHandlerButton');
if(buttons) buttons[0].setDisabled(false);
});
}
if(handmanid==emid){
Ext.Array.each(form.items.items,function(item){
if(item.groupName==info['ff_caption']){
if(item.fieldLabel=='处理时间' || item.fieldLabel=='回复时间' ){
item.setValue(new Date());
item.setReadOnly(false);
}else if(item.fieldLabel=='预计完成时间' && item.value){
}else if(item.name=='fb_backman'){
item.setValue(em_name);
}else {
if(!hasfocused) {item.focus(false, 200); hasfocused=true;} item.setReadOnly(false);
item.setFieldStyle("background:#fffac0;color:#515151;");
if(me.RelativeFields[_p] && item.name==me.RelativeFields[_p].remarkField) item.setValue(null);
}
}
});
}else {
form.down('erpConfirmButton').hide();
form.down('erpChangeHandlerButton').hide();
form.down('erpBackButton').hide();
}
}
//插入处理日志
if(fbid){
var data= me.loadNewStore(fbid);
var index=me.getInsertIndex();
form.insert(index,{
xtype: 'fieldset',
title: '
处理明细
',
collapsible: true,
//collapsed: true,
columnWidth:1,
layout: 'anchor',
defaults: {
anchor: '100%',
labelStyle: 'padding-left:4px;'
},
items:[{
autoScroll: true,
xtype: 'dataview',
tpl:Ext.create('Ext.XTemplate',
'',
'',
'
{fl_date}
{fl_man}',
'{fl_position:this.formatTitle}
',
'
处理方式 :{fl_kind:this.formatKind} {fl_remark}
',
'
',
{formatKind: function(value){
if(value=='PLAN') return '回复处理';
else if(value=='CHANGEHANDLER') return '变更处理人';
else if(value=='REVIEW') return '确认处理';}
},{
formatTitle:function(value){
if(value=='TechnicalService') return '技术支持部处理信息';
else if(value=='R&D') return '研发部处理信息';
else if(value=='ProductDept') return '产品部处理信息';
else if(value=='Test') return '测试部处理信息';
else if(value=='End') return '回复处理';
}
}),
store: Ext.create('Ext.data.Store', {
fields:[{name: 'fl_man' },
{name: 'fl_date'},
{name: 'fl_position'},
{name: 'fl_remark'},
{name: 'fl_kind'}
],
data:data
})
}]
});
}
},200);
}
},
'erpSaveButton': {
click: function(btn){
var form = me.getForm(btn);
if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
me.BaseUtil.getRandomNumber();//自动添加编号
}
this.FormUtil.beforeSave(this);
}
},
'erpDeleteButton' : {
click: function(btn){
me.FormUtil.onDelete(Ext.getCmp('fb_id').value);
}
},
'erpTurnProject' : {
click: function(btn){
me.FormUtil.onDelete(Ext.getCmp('fb_id').value);
}
},
'erpCanceltaskButton':{
click: function(btn){
Ext.Ajax.request({
url : basePath + '/sys/feedback/canceltask.action',
params: {
id: Ext.getCmp('fb_id').value,
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
var str = localJson.exceptionInfo;
showError(str);
}else{
alert('修改成功!');
}
}
});
}
},
'erpChangeHandlerButton':{
click:function(btn){
var newhandmanid=Ext.getCmp(me.currentManfield);
var oldemid=newhandmanid.originalValue;
var newemid=newhandmanid.value;
var data=me.getDirtyValues(),allowsave=false;
Ext.each(Ext.Object.getKeys(data), function(k){
if(me.FormUtil.contains(k, 'ext-', true)){
delete data[k];
}
if(!me.FormUtil.contains(k, 'fb_man', true) && !me.FormUtil.contains(k, 'fb_description', true)){
delete data[k];
}
});
if(oldemid==newemid){
showError('未做任何处理人修改!'); return;
}
data.fb_id=Ext.getCmp('fb_id').getValue();
data.fb_position=Ext.getCmp('fb_position').getValue();
data.fb_kind=Ext.getCmp('fb_kind').getValue();
me.FormUtil.setLoading(true);
Ext.Ajax.request({
url: basePath + 'sys/feedback/changeHandler.action',
params:{
data:unescape(escape(Ext.JSON.encode(data)))
},
method: 'post',
callback: function(options,success,response){
me.FormUtil.setLoading(false);
var res=Ext.decode(response.responseText);
if(res.exceptionInfo){
showError(localJson.exceptionInfo);return;
}else if(res.success){
showMessage('提示','变更成功!',1000);
window.location.reload();
}
btn.setDisabled(true);
}
});
},
afterrender:function(btn){
var status=Ext.getCmp('fb_statuscode').getValue(),position=Ext.getCmp('fb_position').getValue();
if(status!='AUDITED' || position=='End') btn.hide();
}
},
'erpTurnBuglist' : {
click: function(btn){
var form= Ext.getCmp('form');
Ext.Ajax.request({
url : basePath + form.turnBuglistUrl,
params: {
id: Ext.getCmp('fb_id').value
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
var str = localJson.exceptionInfo;
showError(str);
}else{
window.location.href = basePath + "jsps/plm/test/newchecklist.jsp?formCondition=cl_idIS" + localJson.id+"&gridCondition=cld_clidIS"+localJson.id;
}
}
});
}
},
'erpUpdateButton': {
click: function(btn){
this.FormUtil.onUpdate(this);
}
},
'erpAddButton': {
click: function(){
me.FormUtil.onAdd('addFeedback', '新增系统问题反馈', 'jsps/sys/Feedback.jsp?caller=Feedback');
}
},
'erpCloseButton': {
click: function(btn){
me.FormUtil.beforeClose(me);
}
},
'erpSubmitButton': {
afterrender: function(btn){
var status = Ext.getCmp('fb_statuscode');
if(status && status.value != 'ENTERING'){
btn.hide();
}
},
click: function(btn){
me.FormUtil.onSubmit(Ext.getCmp('fb_id').value);
}
},
'erpResSubmitButton': {
afterrender: function(btn){
var status = Ext.getCmp('fb_statuscode');
if(status && status.value != 'COMMITED'){
btn.hide();
}
},
click: function(btn){
me.FormUtil.onResSubmit(Ext.getCmp('fb_id').value);
}
},
'erpReplyButton': {
afterrender: function(btn){
var status = Ext.getCmp('fb_statuscode');
if(status && status.value != 'AUDITED'){
btn.hide();
}
},
click: function(btn){
var form= Ext.getCmp('form');
Ext.Ajax.request({
url : basePath + form.replyUrl,
params: {
id: Ext.getCmp('fb_id').value,
comment:Ext.getCmp('fb_uasdetail').getValue(),
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
var str = localJson.exceptionInfo;
showError(str);
}else{
alert('回复成功');
window.location.href = basePath + "jsps/sys/Feedback.jsp?caller=UASFeedback&&formCondition=fb_idIS" + Ext.getCmp('ts_id').value;
}
}
});
}
},
'erpAuditButton': {
afterrender: function(btn){
var status = Ext.getCmp('fb_statuscode');
if(status && status.value != 'COMMITED'){
btn.hide();
}
},
click: function(btn){
me.FormUtil.onAudit(Ext.getCmp('fb_id').value);
}
},
'erpBackButton':{
afterrender:function(btn){
var status=Ext.getCmp('fb_statuscode').getValue(),currentposition=Ext.getCmp('fb_position').getValue(),relativefield=null,form=btn.ownerCt;
if(status!='AUDITED' || currentposition=='End' ) btn.hide();
if(status=='AUDITED' && currentposition !='End'){
relativefield=me.RelativeFields[currentposition].plandateField;
if(!relativefield || (relativefield && Ext.getCmp(relativefield).value)){
btn.hide();
}
}
},
click:function(btn){
var data=me.getDirtyValues(),allowsave=false;
Ext.each(Ext.Object.getKeys(data), function(k){
if(me.FormUtil.contains(k, 'ext-', true)){
delete r[k];
}
if(me.FormUtil.contains(k, 'fb_plandate', true)){
allowsave=true;
}
});
if(!allowsave){
showError('回复需设置预计完成时间!'); return;
}
Ext.Ajax.request({
url : basePath + '/sys/feedback/backPlan.action',
params: {
data:unescape(escape(Ext.JSON.encode(data)))
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
var str = localJson.exceptionInfo;
showError(str);
}else{
showMessage('提示','回复成功!',1000);
window.location.reload();
}
}
});
}
},
'erpConfirmButton':{
afterrender:function(btn){
var status=Ext.getCmp('fb_statuscode').getValue();
if(status!='AUDITED') btn.hide();
},
click:function(btn){
var data=me.getDirtyValues();
Ext.each(Ext.Object.getKeys(data), function(k){
if(me.FormUtil.contains(k, 'ext-', true)){
delete r[k];
}
});
Ext.Ajax.request({
url : basePath + '/sys/feedback/confirm.action',
params: {
data:unescape(escape(Ext.JSON.encode(data)))
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
var str = localJson.exceptionInfo;
showError(str);
}else{
showMessage('提示','确认成功!',1000);
window.location.reload();
}
}
});
}
},
'dbfindtrigger[name=fb_module]': {
afterrender: function(f){
f.onTriggerClick = function(){
me.getModuleTree();
};
f.autoDbfind = false;
}
},
'treepanel': {
itemmousedown: function(selModel, record){
var tree = selModel.ownerCt;
me.loadTree(tree, record);
}
},
'erpChecktaskButton':{
click: function(btn){
Ext.Ajax.request({
url : basePath + '/sys/feedback/changestatus.action',
params: {
id: Ext.getCmp('fb_id').value,
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
var str = localJson.exceptionInfo;
showError(str);
}else{
alert('修改成功!');
}
}
});
}
},
'erpEndfeedbackButton':{
click: function(btn){
Ext.Ajax.request({
url : basePath + '/sys/feedback/Endfeedback.action',
params: {
id: Ext.getCmp('fb_id').value,
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
var str = localJson.exceptionInfo;
showError(str);
}else{
alert('修改成功!');
}
}
});
}
},
'erpResAuditButton': {
afterrender: function(btn){
var status = Ext.getCmp('fb_statuscode');
if(status && status.value != 'AUDITED'){
btn.hide();
}
},
click: function(btn){
me.FormUtil.onResAudit(Ext.getCmp('fb_id').value);
}
}
});
},
getForm: function(btn){
return btn.ownerCt.ownerCt;
},
getModuleTree: function(){
var w = Ext.create('Ext.Window',{
title: '查找模板',
height: "100%",
width: "80%",
maximizable : true,
buttonAlign : 'center',
layout : 'anchor',
items: [{
anchor: '100% 100%',
xtype: 'treepanel',
rootVisible: false,
useArrows: true,
store: Ext.create('Ext.data.TreeStore', {
root : {
text: 'root',
id: 'root',
expanded: true
}
})
}],
buttons : [{
text : '关 闭',
iconCls: 'x-button-icon-close',
cls: 'x-btn-gray',
handler : function(btn){
btn.ownerCt.ownerCt.close();
}
},{
text: '确定',
iconCls: 'x-button-icon-confirm',
cls: 'x-btn-gray',
handler: function(btn){
var t = btn.ownerCt.ownerCt.down('treepanel');
if(!Ext.isEmpty(t.title)) {
Ext.getCmp('fb_module').setValue(t.title);
}
btn.ownerCt.ownerCt.close();
}
}]
});
w.show();
this.loadTree(w.down('treepanel'), null);
},
loadTree: function(tree, record){
var pid = 0;
if(record) {
if (record.get('leaf')) {
return;
} else {
if(record.isExpanded() && record.childNodes.length > 0){
record.collapse(true, true);//收拢
return;
} else {
if(record.childNodes.length != 0){
record.expand(false, true);//展开
return;
}
}
}
pid = record.get('id');
}
tree.setLoading(true);
Ext.Ajax.request({
url : basePath + 'common/lazyTree.action?_noc=1',
params: {
parentId: pid,
condition: 'sn_using=1'
},
callback : function(options,success,response){
tree.setLoading(false);
var res = new Ext.decode(response.responseText);
if(res.tree){
if(record) {
record.appendChild(res.tree);
record.expand(false,true);//展开
tree.setTitle(record.getPath('text', '/').replace('root', '').replace('//', '/'));
} else {
tree.store.setRootNode({
text: 'root',
id: 'root',
expanded: true,
children: res.tree
});
}
} else if(res.exceptionInfo){
showError(res.exceptionInfo);
}
}
});
},
getCurrentFlow: function(kind,position) {
var result = false;
Ext.Ajax.request({
url : basePath + 'common/getFieldsData.action',
async: false,
params: {
caller: 'FeedBackFlow',
fields: 'ff_caption,ff_handmanfield',
condition: 'ff_code=\'' + kind + '\' and ff_step=\''+position+'\''
},
method : 'post',
callback : function(opt, s, res){
var r = new Ext.decode(res.responseText);
if(r.exceptionInfo){
showError(r.exceptionInfo);return;
} else if(r.success && r.data){
result = r.data;
}
}
});
return result;
},
getDirtyValues:function(){
var form=Ext.getCmp('form'),values=this.getEditValues(form);
values.fb_id=Ext.getCmp('fb_id').getValue();
values.fb_position=Ext.getCmp('fb_position').getValue();
values.fb_kind=Ext.getCmp('fb_kind').getValue();
return values;
},
getEditValues:function(form){
var values=new Object(),formvalues=form.getForm().getValues();
Ext.Array.each(form.items.items,function(item){
if(!item.readOnly && item.name && item.value){
values[item.name]=formvalues[item.name];
}
});
return values;
},
loadNewStore: function(id){
var data=null;
Ext.Ajax.request({//拿到grid的columns
url : basePath + "common/loadNewGridStore.action",
params: {
caller:'Feedback',
condition:'fl_fbid='+id +' order by fl_id asc'
},
async:false,
method : 'post',
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
if(res.exceptionInfo){
showError(res.exceptionInfo);return;
}
data = res.data;
}
});
return data;
},
getInsertIndex:function(){
var form=Ext.getCmp('form'),i=0;
Ext.Array.each(form.items.items,function(item,index){
if(item.name=='fb_position'){
i=index;
}
});
return i+1;
}
});