TaskSetGrid.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. Ext.define('erp.view.oa.task.TaskSetGrid',{
  2. extend: 'Ext.grid.Panel',
  3. alias: 'widget.TaskGridPanel',
  4. id: 'taskgrid',
  5. emptyText : '无数据',
  6. columnLines : true,
  7. autoScroll : true,
  8. requires:['erp.view.core.trigger.DbfindTrigger','erp.view.core.form.FileField'],
  9. plugins: Ext.create('Ext.grid.plugin.CellEditing', {
  10. clicksToEdit: 1
  11. }),
  12. viewConfig: {
  13. plugins: {
  14. ptype: 'gridviewdragdrop',
  15. dragGroup: 'taskgrid',
  16. dropGroup: 'taskgrid'
  17. }
  18. },
  19. keyField:'id',
  20. listeners:{
  21. itemclick:function(selModel,record){
  22. if(record.data.handstatus!='已完成') Ext.getCmp('attachfile').setDisabled(false);
  23. selModel.ownerCt.GridUtil.onGridItemClick(selModel, record);
  24. }
  25. },
  26. activemenu:null,
  27. columns:[{
  28. text:'ID',
  29. dataIndex:'id',
  30. width:0,
  31. },{
  32. cls : "x-grid-header-1",
  33. text: '任务名称',
  34. dataIndex: 'name',
  35. flex:1,
  36. readOnly:true
  37. },{
  38. cls : "x-grid-header-1",
  39. text: '责任人编号',
  40. dataIndex: 'resourcecode',
  41. editable:true,
  42. editor:{
  43. xtype:'dbfindtrigger',
  44. hideTrigger: false,
  45. name:'resourcecode',
  46. which:'grid',
  47. dbfind:'Employee|em_code',
  48. listeners:{
  49. focus: function(t){
  50. t.setHideTrigger(false);
  51. t.setReadOnly(false);
  52. var record = Ext.getCmp('taskgrid').selModel.getLastSelected();
  53. var canextra = record.data['handstatus'];
  54. if(handstatus == '已完成'){
  55. showError("当前任务已完成不允许变更!");
  56. t.setHideTrigger(true);
  57. t.setReadOnly(true);
  58. }
  59. }
  60. }
  61. },
  62. flex: 0.5,
  63. },{
  64. cls : "x-grid-header-1",
  65. text:'责任人',
  66. dataIndex: 'resourcename',
  67. flex: 0.5,
  68. readOnly:true
  69. },{
  70. cls : "x-grid-header-1",
  71. text:'责任人ID',
  72. dataIndex: 'resourceemid',
  73. width:0,
  74. readOnly:true
  75. },{
  76. cls:'x-grid-header-1',
  77. text:'激活方式',
  78. width:120,
  79. xtype:'combocolumn',
  80. dataIndex:'triggertype',
  81. editor: {
  82. xtype: 'combo',
  83. store: {
  84. fields: ['display', 'value'],
  85. data :[{
  86. display:'自动触发',value:'AUTO'
  87. },{
  88. display:'提交触发',value:'COMMIT'
  89. },{
  90. display:'审核触发',value:'AUDIT'
  91. },{
  92. display:'节点触发',value:'NODETRIG'
  93. }],
  94. },
  95. displayField: 'display',
  96. valueField: 'value',
  97. queryMode: 'local'
  98. },
  99. // editor: {
  100. // xtype: 'combo',
  101. // listConfig:{
  102. // maxHeight:180
  103. // },
  104. // queryMode: 'local',
  105. // displayField: 'display',
  106. // valueField: 'value',
  107. // store:Ext.create('Ext.data.Store', {
  108. // fields: ['display', 'value'],
  109. // data : [
  110. // {display:'自动触发', "value": 'AUTO'},
  111. // {display:'提交触发', "value": 'COMMIT'},
  112. // {display:'审核触发', "value": 'AUDIT'},
  113. // {display":'节点触发', "value": 'NODETRIG'}
  114. // ]
  115. // }),
  116. //// onTriggerClick:function(e){
  117. //// var me=this;
  118. //// var grid=Ext.getCmp('taskgrid');
  119. //// var selected=grid.getSelectionModel().getSelection()[0];
  120. //// if(grid.activemenu==null){
  121. //// var items=grid.getTiggerProcessNodeItems();
  122. //// grid.activemenu=Ext.create('Ext.menu.Menu', {
  123. //// async:false,
  124. //// id: 'mainMenu',
  125. //// ownerCt : this.ownerCt,
  126. //// renderTo:Ext.getBody(),
  127. //// width:'120',
  128. //// style: {
  129. //// overflow: 'visible',
  130. //// },
  131. //// defaults:{
  132. //// handler:grid.setTriggerType
  133. //// },
  134. //// items: [{
  135. //// text: '提交触发'
  136. //// },{
  137. //// text: '审核触发'
  138. //// },{
  139. //// text: '立即触发'
  140. //// },{
  141. //// text:'节点触发',
  142. //// iconCls:'main-msg',
  143. //// menu: {
  144. //// defaults:{
  145. //// handler:grid.setTriggerType
  146. //// },
  147. //// items: items
  148. //// }
  149. //// }]
  150. //// });
  151. //// }
  152. //// grid.activemenu.alignTo(e.getTarget() , 'tl-bl?',[-105,0]);
  153. //// grid.activemenu.show();
  154. //// if (!me.readOnly && !me.disabled) {
  155. //// if (me.isExpanded) {
  156. //// me.collapse();
  157. //// } else {
  158. //// me.expand();
  159. //// }
  160. //// me.inputEl.focus();
  161. //// }
  162. //// }
  163. // }
  164. },{
  165. cls:'x-grid-header-1',
  166. text:'当前状态',
  167. logic:'ignore',
  168. flex:0.3,
  169. dataIndex:'handstatus',
  170. readOnly:true,
  171. renderer:function(val,mata,record){
  172. if(val=='已完成'){
  173. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png" >' +
  174. '<span style="color:green;padding-left:2px;">' + val + '</span>';
  175. }else if(val=='已启动'){
  176. return '<img src="' + basePath + 'resource/images/renderer/doing.png" >' +
  177. '<span style="color:blue;padding-left:2px;">' + val + '</span>';
  178. }else {
  179. return '<img src="' + basePath + 'resource/images/renderer/key1.png">'+'<span style="color:#8B8B83;padding-left:2px ">' + val + '<a/></span>';
  180. }
  181. }
  182. },{
  183. dataIndex:'attachs',
  184. text:'附件',
  185. width:0
  186. }],
  187. keyValue:null,
  188. FlowCaller:null,
  189. BaseUtil: Ext.create('erp.util.BaseUtil'),
  190. GridUtil: Ext.create('erp.util.GridUtil'),
  191. selModel: Ext.create('Ext.selection.CheckboxModel',{
  192. headerWidth: 0
  193. }),
  194. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  195. clicksToEdit: 1
  196. })],
  197. requires: ['erp.view.core.grid.YnColumn'],
  198. tbar: [{
  199. xtype: 'button',
  200. text: '载入模板',
  201. iconCls: 'x-button-icon-save',
  202. cls: 'x-btn-gray',
  203. scope:this,
  204. handler:function (btn){
  205. var grid=Ext.getCmp('taskgrid'),bool=false;
  206. Ext.Array.each(grid.store.data.items,function(item){
  207. if(item.data.id) {
  208. bool=true;
  209. return
  210. }
  211. });
  212. if(bool){
  213. warnMsg('已载入相应的任务模板,是否要重新生成?', function(button){
  214. if(button == 'yes'){
  215. btn.ownerCt.ownerCt.loadTaskTemplate();
  216. }
  217. });
  218. }else btn.ownerCt.ownerCt.loadTaskTemplate();
  219. }
  220. },{
  221. id:'attachform',
  222. xtype:'form',
  223. layout:'column',
  224. bodyStyle: 'background: transparent no-repeat 0 0;border: none;',
  225. items: [{
  226. xtype: 'filefield',
  227. name: 'file',
  228. buttonOnly: true,
  229. hideLabel: true,
  230. disabled:true,
  231. width: 90,
  232. height: 17,
  233. id:'attachfile',
  234. buttonConfig: {
  235. iconCls: 'x-button-icon-pic',
  236. text: '上传附件',
  237. },
  238. listeners: {
  239. change: function(field){
  240. var filename = '';
  241. if(contains(field.value, "\\", true)){
  242. filename = field.value.substring(field.value.lastIndexOf('\\') + 1);
  243. } else {
  244. filename = field.value.substring(field.value.lastIndexOf('/') + 1);
  245. }
  246. field.ownerCt.getForm().submit({
  247. url: basePath + 'common/upload.action?em_code=' + em_code,
  248. waitMsg: "正在解析文件信息",
  249. success: function(fp,o){
  250. if(o.result.error){
  251. showError(o.result.error);
  252. } else {
  253. Ext.Msg.alert("恭喜", filename + " 上传成功!");
  254. field.setDisabled(true);
  255. var record=Ext.getCmp('grid').selModel.lastSelected;
  256. if(record){
  257. record.set('attachs',filename+";"+o.result.filepath);
  258. }
  259. }
  260. }
  261. });
  262. }
  263. }}]
  264. }],
  265. menu:null,
  266. store: Ext.create('Ext.data.Store', {
  267. fields:[{name:'id',type:'int'},{name:'name',type:'string'},{name:'resourcecode',type:'string'},
  268. {name:'resourcename',type:'string'},{name:'resourceemid',type:'string'},{name:'handstatus',type:'string'},{name:'triggertype',type:'string'}],
  269. data:[]
  270. }),
  271. initComponent : function(){
  272. this.getGridStore(this,this.keyValue,this.FlowCaller);
  273. this.callParent(arguments);
  274. },
  275. dbfinds:[{
  276. dbGridField: "em_code",
  277. field: "resourcecode",
  278. },{
  279. dbGridField: "em_name",
  280. field: "resourcename",
  281. },{
  282. dbGridField: "em_id",
  283. field: "resourceemid",
  284. }],
  285. getGridStore:function(grid,keyValue,caller){
  286. grid.GridUtil.loadNewStore(grid,{
  287. caller:'ProjectMainTask',
  288. condition:"sourcecaller='"+caller+"' and sourceid="+keyValue +" order by detno"
  289. });
  290. },
  291. loadTaskTemplate:function(){
  292. var me=this;
  293. Ext.Ajax.request({
  294. url : basePath + 'oa/task/loadTaskTemplate.action',
  295. params: {
  296. caller:me.FlowCaller,
  297. keyValue:me.keyValue,
  298. _noc:1
  299. },
  300. method : 'post',
  301. callback : function(options,success,response){
  302. var localJson = new Ext.decode(response.responseText);
  303. if(localJson.success){
  304. Ext.create('erp.util.GridUtil').loadNewStore(me,{
  305. caller:'ProjectMainTask',
  306. condition:'sourceid='+me.keyValue+" and sourcecaller='"+me.FlowCaller+"'"+" order by detno"
  307. });
  308. }
  309. }
  310. });
  311. },
  312. getTiggerProcessNodeItems:function(){
  313. var grid=Ext.getCmp('taskgrid');
  314. var tabpanel=grid.ownerCt;
  315. var nodegrid=tabpanel.items.items[0];
  316. var items=new Array();
  317. Ext.Array.each(nodegrid.store.data.items,function(item){
  318. items.push({text:item.data.JP_NODENAME});
  319. });
  320. return items;
  321. },
  322. setTriggerType:function(item){
  323. var grid=Ext.getCmp('taskgrid');
  324. var selected=grid.getSelectionModel().getSelection()[0];
  325. selected.set('triggertype',item.text);
  326. },
  327. loadNewStore:function(grid,caller,id){
  328. grid.GridUtil.loadNewStore(grid,{
  329. caller:'ProjectMainTask',
  330. condition:'sourceid='+id+" and sourcecaller='"+caller+"'" +" order by detno"
  331. });
  332. }
  333. });