Main.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.mobile.Main', {
  3. extend : 'Ext.app.Controller',
  4. views : [ 'mobile.Main' ],
  5. refs : [ {
  6. ref : 'treeroot',
  7. selector : '#treeroot'
  8. } , {
  9. ref : 'tab',
  10. selector : 'tabpanel'
  11. } , {
  12. ref: 'card',
  13. selector: '#card'
  14. }],
  15. init : function() {
  16. Ext.MessageBox.cls = 'custom custom-box';
  17. this.control({
  18. '#logout': {
  19. click: function() {
  20. var me = this;
  21. Ext.Msg.confirm("提示", "确定退出ERP系统?", function(btn){
  22. if (btn == 'yes') {
  23. me.logout();
  24. }
  25. });
  26. }
  27. },
  28. '#treeroot' : {
  29. afterrender : function() {
  30. this.getTreeNode(0, 1);
  31. },
  32. itemclick: function(view, record, el, idx, e) {
  33. if(record.get('leaf')) {
  34. this.addPanel(record.get('text'), record.get('url'), record.get('id'));
  35. } else {
  36. var pid = Number(record.get('id'));
  37. this.getTreeNode(pid, 2, record.get('text'));
  38. }
  39. }
  40. },
  41. 'tabpanel': {
  42. afterrender: function(tab) {
  43. var me = this;
  44. tab.addPanel = function(a, b, c) {
  45. me.addPanel(a, b, c);
  46. };
  47. }
  48. },
  49. /* '#commonuse' : {
  50. afterrender : function(view) {
  51. this.getCommonUse(view);
  52. },
  53. itemclick: function(view, record, el, idx, e) {
  54. this.addPanel(record.get('cu_description'), record.get('cu_url'), record.get('cu_snid'));
  55. }
  56. },*/
  57. '#mychoice' : {
  58. afterrender : function(view) {
  59. var me = this;
  60. setTimeout(function(){
  61. me.getMyChoice(view);
  62. }, 500);
  63. },
  64. itemclick: function(view, record, el, idx, e) {
  65. var id = record.get('id');
  66. if (id) {
  67. var url = 'jsps/common/jtaketask.jsp?formCondition=jp_nodeIdIS' + id;
  68. this.addPanel(record.get('taskname'), url, id);
  69. }
  70. }
  71. },
  72. '#myflow' : {
  73. afterrender : function(view) {
  74. var me = this;
  75. setTimeout(function(){
  76. me.getMyFlow(view);
  77. }, 500);
  78. },
  79. itemclick: function(view, record, el, idx, e) {
  80. var id = record.get('id');
  81. if (id) {
  82. var url = 'jsps/common/jprocessDeal.jsp?formCondition=jp_nodeIdIS' + id;
  83. this.addPanel(record.get('taskname'), url, id);
  84. }
  85. }
  86. },
  87. /*'#mytask' : {
  88. afterrender : function(view) {
  89. var me = this;
  90. setTimeout(function(){
  91. me.getMyTask(view);
  92. }, 500);
  93. },
  94. itemclick: function(view, record, el, idx, e) {
  95. var id = record.get('id');
  96. var url = 'jsps/plm/record/workrecord.jsp?formCondition=ra_idIS' + id + '&gridCondition=wr_raidIS' + id;
  97. this.addPanel(record.get('taskname'), url, id);
  98. }
  99. },*/
  100. 'dataview[level=2]' : {
  101. itemclick: function(view, record, el, idx, e) {
  102. if(record.get('leaf')) {
  103. this.addPanel(record.get('text'), record.get('url'), record.get('id'));
  104. } else {
  105. var pid = Number(record.get('id'));
  106. this.getTreeNode(pid, 3, record.get('text'), record);
  107. }
  108. }
  109. },
  110. 'dataview[level=3]' : {
  111. itemclick: function(view, record, el, idx, e) {
  112. if(record.get('leaf')) {
  113. this.addPanel(record.get('text'), record.get('url'), record.get('id'));
  114. } else {
  115. var pid = Number(record.get('id'));
  116. this.getTreeNode(pid, 4, record.get('text'), record);
  117. }
  118. }
  119. },
  120. 'dataview[level=4]' : {
  121. itemclick: function(view, record, el, idx, e) {
  122. if(record.get('leaf')) {
  123. view.up('window').hide();
  124. this.addPanel(record.get('text'), record.get('url'), record.get('id'));
  125. } else {
  126. var pid = Number(record.get('id'));
  127. this.getTreeNode(pid, 5, record.get('text'), record);
  128. }
  129. }
  130. },
  131. 'dataview[level=5]' : {
  132. itemclick: function(view, record, el, idx, e) {
  133. if(record.get('leaf')) {
  134. view.up('window').hide();
  135. this.addPanel(record.get('text'), record.get('url'), record.get('id'));
  136. }
  137. }
  138. }
  139. });
  140. },
  141. setLoading : function(bool) {
  142. var dom = document.getElementById('loading');
  143. if (bool)
  144. dom.style.display = 'block';
  145. else
  146. dom.style.display = 'none';
  147. },
  148. cacheStore: {},
  149. getTreeNode : function(parentId, level, desc, record) {
  150. if(level == 2) {
  151. var p = Ext.getCmp(this.prefix + parentId);
  152. if(p) {
  153. this.addSecondCard(parentId);return;
  154. }
  155. }
  156. if(level == 3) {
  157. var nodes = this.cacheStore[parentId];
  158. if(nodes) {
  159. this.addThirdCard(parentId, nodes, record);return;
  160. }
  161. }
  162. if(level == 4) {
  163. var p = Ext.getCmp(this.prefix + parentId);
  164. if(p) {
  165. this.addForthWin(parentId);return;
  166. }
  167. }
  168. if(level == 5) {
  169. var nodes = this.cacheStore[parentId];
  170. if(nodes) {
  171. this.addFifthWin(parentId, nodes, record);return;
  172. }
  173. }
  174. var me = this;
  175. Ext.Ajax.request({
  176. url : basePath + 'common/lazyTree.action',
  177. params : {
  178. parentId : parentId
  179. },
  180. callback : function(opt, s, r) {
  181. me.setLoading(false);
  182. var res = new Ext.decode(r.responseText);
  183. if (res.tree) {
  184. var tree = res.tree;
  185. if(parentId == 0)
  186. me.getTreeroot().store.loadData(tree);
  187. else if(level == 2)
  188. me.addSecondCard(parentId, tree, desc);
  189. else if(level == 3)
  190. me.addThirdCard(parentId, tree, record);
  191. else if(level == 4)
  192. me.addForthWin(parentId, tree, desc);
  193. else if(level == 5)
  194. me.addFifthWin(parentId, tree, record);
  195. } else if (res.exceptionInfo) {
  196. alert(res.exceptionInfo);
  197. }
  198. }
  199. });
  200. },
  201. prefix: 'mob-node-',
  202. addSecondCard: function(pid, nodes, desc) {
  203. var me = this, p = Ext.getCmp(this.prefix + pid);
  204. if(!p) {
  205. p = Ext.create('Ext.container.Container', {
  206. id: me.prefix + pid,
  207. margin: '5 0 0 5',
  208. layout: 'border',
  209. height: 1000,
  210. cls: 'custom',
  211. items: [{
  212. xtype: 'toolbar',
  213. region: 'north',
  214. margin: '5 0 0 0',
  215. cls: 'custom-tb',
  216. height: 40,
  217. items: [desc, '->',{
  218. text: '返回»',
  219. cls: 'custom-button',
  220. handler: function(btn){
  221. var p = me.getCard().items.items[0];
  222. if(p){
  223. me.getCard().layout.setActiveItem(p);
  224. } else {
  225. btn.up('panel').hide();
  226. }
  227. }
  228. }]
  229. },{
  230. xtype: 'container',
  231. region: 'center',
  232. layout: 'hbox',
  233. height: 100000,
  234. items: [{
  235. xtype: 'dataview',
  236. cls: 'datalist',
  237. level: 2,
  238. flex: 1,
  239. itemSelector: '.custom-button',
  240. overItemCls : 'tree-node-hover',
  241. selectedItemCls : 'selected',
  242. enableDragDrop: true,
  243. tpl: Ext.create('Ext.XTemplate',
  244. '<tpl for=".">',
  245. '<tpl if="leaf">',
  246. '<div class="custom-button leaf"',
  247. '<font>{text}</font>',
  248. '</div>',
  249. '</tpl>',
  250. '<tpl if="leaf == false">',
  251. '<div class="custom-button"',
  252. '<font>{text}</font>',
  253. '</div>',
  254. '</tpl>',
  255. '</tpl>'
  256. ),
  257. store: new Ext.data.Store({
  258. fields: ['text', 'parentId', {name: 'id', type: 'number'}, 'url', 'leaf']
  259. }),
  260. onItemSelect: function(record) {
  261. var node = this.getNode(record);
  262. if (node) {
  263. Ext.fly(node).addCls(this.selectedItemCls);
  264. }
  265. },
  266. onItemDeselect: function(record) {
  267. var node = this.getNode(record);
  268. if (node) {
  269. Ext.fly(node).removeCls(this.selectedItemCls);
  270. }
  271. }
  272. },{
  273. xtype: 'dataview',
  274. cls: 'datalist',
  275. level: 3,
  276. flex: 2,
  277. itemSelector: '.custom-button',
  278. overItemCls : 'tree-node-hover',
  279. selectedItemCls : 'selected',
  280. enableDragDrop: true,
  281. tpl: Ext.create('Ext.XTemplate',
  282. '<tpl for=".">',
  283. '<tpl if="leaf">',
  284. '<div class="custom-button leaf"',
  285. '<font>{text}</font>',
  286. '</div>',
  287. '</tpl>',
  288. '<tpl if="leaf == false">',
  289. '<div class="custom-button node"',
  290. '<font>{text}</font>',
  291. '</div>',
  292. '</tpl>',
  293. '</tpl>'
  294. ),
  295. store: new Ext.data.Store({
  296. fields: ['text', 'parentId', {name: 'id', type: 'number'}, 'url', 'leaf']
  297. }),
  298. onItemSelect: function(record) {
  299. var node = this.getNode(record);
  300. if (node) {
  301. Ext.fly(node).addCls(this.selectedItemCls);
  302. }
  303. },
  304. onItemDeselect: function(record) {
  305. var node = this.getNode(record);
  306. if (node) {
  307. Ext.fly(node).removeCls(this.selectedItemCls);
  308. }
  309. }
  310. }]
  311. }]
  312. });
  313. me.getCard().add(p);
  314. p.down('dataview').store.loadData(nodes);
  315. }
  316. me.getCard().layout.setActiveItem(p);
  317. },
  318. addThirdCard: function(pid, nodes, record) {
  319. var ca = this.getCard().layout.getActiveItem(),
  320. view = ca.down('dataview[level=3]');
  321. if(view) {
  322. view.store.loadData(nodes);
  323. this.cacheStore[pid] = nodes;
  324. }
  325. },
  326. addForthWin: function(pid, nodes, desc) {
  327. var me = this, p = Ext.getCmp(this.prefix + pid);
  328. if(!p) {
  329. p = Ext.create('Ext.Window', {
  330. modal: true,
  331. id: me.prefix + pid,
  332. width: '100%',
  333. height: '80%',
  334. cls: 'custom',
  335. title: desc,
  336. closeAction: 'hide',
  337. layout: 'anchor',
  338. items: [{
  339. xtype: 'container',
  340. anchor: '100% 100%',
  341. layout: 'hbox',
  342. defaults: {
  343. margin: '4 0 10 0'
  344. },
  345. autoScroll: true,
  346. items: [{
  347. xtype: 'dataview',
  348. cls: 'datalist',
  349. level: 4,
  350. flex: 1,
  351. itemSelector: '.custom-button',
  352. overItemCls : 'tree-node-hover',
  353. selectedItemCls : 'selected',
  354. enableDragDrop: true,
  355. tpl: Ext.create('Ext.XTemplate',
  356. '<tpl for=".">',
  357. '<tpl if="leaf">',
  358. '<div class="custom-button leaf"',
  359. '<font>{text}</font>',
  360. '</div>',
  361. '</tpl>',
  362. '<tpl if="leaf == false">',
  363. '<div class="custom-button node"',
  364. '<font>{text}</font>',
  365. '</div>',
  366. '</tpl>',
  367. '</tpl>'
  368. ),
  369. store: new Ext.data.Store({
  370. fields: ['text', 'parentId', {name: 'id', type: 'number'}, 'url', 'leaf']
  371. }),
  372. onItemSelect: function(record) {
  373. var node = this.getNode(record);
  374. if (node) {
  375. Ext.fly(node).addCls(this.selectedItemCls);
  376. }
  377. },
  378. onItemDeselect: function(record) {
  379. var node = this.getNode(record);
  380. if (node) {
  381. Ext.fly(node).removeCls(this.selectedItemCls);
  382. }
  383. }
  384. },{
  385. xtype: 'dataview',
  386. cls: 'datalist',
  387. level: 5,
  388. flex: 1,
  389. itemSelector: '.custom-button',
  390. overItemCls : 'tree-node-hover',
  391. selectedItemCls : 'selected',
  392. enableDragDrop: true,
  393. tpl: Ext.create('Ext.XTemplate',
  394. '<tpl for=".">',
  395. '<tpl if="leaf">',
  396. '<div class="custom-button leaf"',
  397. '<font>{text}</font>',
  398. '</div>',
  399. '</tpl>',
  400. '<tpl if="leaf == false">',
  401. '<div class="custom-button node"',
  402. '<font>{text}</font>',
  403. '</div>',
  404. '</tpl>',
  405. '</tpl>'
  406. ),
  407. store: new Ext.data.Store({
  408. fields: ['text', 'parentId', {name: 'id', type: 'number'}, 'url', 'leaf']
  409. }),
  410. onItemSelect: function(record) {
  411. var node = this.getNode(record);
  412. if (node) {
  413. Ext.fly(node).addCls(this.selectedItemCls);
  414. }
  415. },
  416. onItemDeselect: function(record) {
  417. var node = this.getNode(record);
  418. if (node) {
  419. Ext.fly(node).removeCls(this.selectedItemCls);
  420. }
  421. }
  422. }]
  423. }]
  424. });
  425. p.down('dataview[level=4]').store.loadData(nodes);
  426. }
  427. p.show();
  428. },
  429. addFifthWin: function(pid, nodes, record) {
  430. var win = Ext.ComponentQuery.query('window[hidden=false]'),
  431. view = win[0].down('dataview[level=5]');
  432. if(view) {
  433. view.store.loadData(nodes);
  434. this.cacheStore[pid] = nodes;
  435. }
  436. },
  437. logout : function() {
  438. Ext.Ajax.request({
  439. url : basePath + 'common/logout.action',
  440. callback : function(opt, s, r) {
  441. var data = Ext.decode(r.responseText);
  442. if (data.success) {
  443. document.location.href = basePath;
  444. } else {
  445. if (data.reason) {
  446. Ext.Msg.alert(data.reason);
  447. } else {
  448. Ext.Msg.alert(data.exceptionInfo);
  449. }
  450. }
  451. }
  452. });
  453. },
  454. getCommonUse: function(view) {
  455. Ext.Ajax.request({
  456. url : basePath + 'common/getCommonUse.action',
  457. method : 'get',
  458. callback : function(opt, s, r){
  459. var res = new Ext.decode(r.responseText);
  460. if(res.exception || res.exceptionInfo){
  461. alert(res.exceptionInfo);
  462. return;
  463. }
  464. view.store.loadData(res.commonuse);
  465. }
  466. });
  467. },
  468. getMyChoice: function(view) {
  469. Ext.Ajax.request({
  470. url : basePath + 'common/datalist.action',
  471. params: {
  472. caller: 'JProCand',
  473. condition: 'jp_candidate=\'' + em_code + '\' AND jp_status=\'待审批'+'\' AND jp_flag=1',
  474. page: 1,
  475. pageSize: 10,
  476. _noc : 1
  477. },
  478. method : 'post',
  479. callback : function(options,success,response){
  480. var res = new Ext.decode(response.responseText);
  481. if(res.exception || res.exceptionInfo){
  482. return;
  483. }
  484. var task = res.data != null ? Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : new Array();
  485. if(task.length > 0){
  486. var data = new Array();
  487. Ext.Array.each(task, function(item){
  488. item.id = item.jp_nodeId;
  489. item.taskname = item.jp_form + " -> " + item.jp_nodeName;
  490. item.status = item.jp_status;
  491. item.type = '可选流程';
  492. item.typecode = 'procand';
  493. data.push(item);
  494. });
  495. view.store.loadData(data);
  496. } else {
  497. view.store.loadData([{status : '无'}]);
  498. }
  499. }
  500. });
  501. },
  502. getMyFlow: function(view) {
  503. Ext.Ajax.request({
  504. url : basePath + 'common/datalist.action',
  505. params: {
  506. caller: 'JProcess!Me',
  507. condition: '(jp_nodedealman=\'' + em_code + '\' AND jp_status=\'待审批'+'\') or (jp_launcherid=\'' + em_code + '\' AND jp_status=\'未通过'+'\') ',
  508. page: 1,
  509. pageSize: 10,
  510. _noc : 1
  511. },
  512. method : 'post',
  513. callback : function(options,success,response){
  514. var res = new Ext.decode(response.responseText);
  515. if(res.exception || res.exceptionInfo){
  516. return;
  517. }
  518. var task = res.data != null ? Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : new Array();
  519. if(task.length > 0){
  520. var data = new Array();
  521. Ext.Array.each(task,function(item){
  522. item.id = item.jp_nodeId;
  523. item.taskname = item.jp_form + " -> " + item.jp_nodeName;
  524. item.status = item.jp_status;
  525. if(item.jp_status == '未通过'){
  526. item.type = '未同意流程';
  527. item.typecode = 'unprocess';
  528. }else{
  529. item.type = '待审批流程';
  530. item.typecode = 'process';
  531. }
  532. data.push(item);
  533. });
  534. view.store.loadData(data);
  535. } else {
  536. view.store.loadData([{status : '无'}]);
  537. }
  538. }
  539. });
  540. },
  541. getMyTask: function(view) {
  542. Ext.Ajax.request({
  543. url : basePath + 'common/datalist.action',
  544. params: {
  545. caller: 'ResourceAssignment',
  546. condition: 'ra_emid=' + em_uu+' AND ra_statuscode!=\'FINISHED'+'\'',
  547. page: 1,
  548. pageSize: 10,
  549. _noc : 1
  550. },
  551. method : 'post',
  552. callback : function(options,success,response){
  553. var res = new Ext.decode(response.responseText);
  554. if(res.exception || res.exceptionInfo){
  555. return;
  556. }
  557. var task = res.data != null ? Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : new Array();
  558. if(task.length > 0){
  559. var data = new Array();
  560. Ext.Array.each(task,function(item){
  561. item.id = item.ra_id;
  562. item.taskname = item.ra_taskname;
  563. item.status = item.ra_status;
  564. item.type = '工作任务';
  565. item.typecode = 'worktask';
  566. data.push(item);
  567. });
  568. view.store.loadData(data);
  569. } else {
  570. view.store.loadData([{status : '无'}]);
  571. }
  572. }
  573. });
  574. },
  575. addPanel: function(text, url, id) {
  576. var me = this;
  577. var tab = me.getTab();
  578. var p = Ext.getCmp(new String(id));
  579. if(p) {
  580. tab.setActiveTab(p);return;
  581. }
  582. if(Ext.isEmpty(url))
  583. return;
  584. url = this.parseUrl(url);
  585. p = Ext.create('Ext.container.Container', {
  586. id: new String(id),
  587. title: text,
  588. closable: true,
  589. autoScroll: true,
  590. html : '<iframe src="' + url +
  591. '" height="100%" width="100%" frameborder="0" style="border: none;" scrolling="auto"></iframe>',
  592. tabConfig: {tooltip: text},
  593. setLoading: function(bool) {
  594. me.setLoading(bool);
  595. },
  596. close: function() {
  597. this.destroy();
  598. },
  599. listeners: {
  600. resize: function(cmp, w, h, opt) {
  601. var width = Ext.getBody().dom.clientWidth, height = Ext.getBody().dom.clientHeight;
  602. var myWidth = (1 + (1366 - width)/1366)*100, myHeight = (1 + (768 - height)/768)*100;
  603. if(width < height) {
  604. myWidth*=1.6;
  605. } else {
  606. myHeight*=2;
  607. }
  608. var iframe = cmp.getEl().down('iframe');
  609. iframe.dom.width = '' + myWidth + '%';
  610. iframe.dom.height = '' + myHeight + '%';
  611. }
  612. }
  613. });
  614. tab.add(p);
  615. tab.setActiveTab(p);
  616. },
  617. parseUrl: function(url){
  618. if(url.indexOf('session:em_uu') != -1){
  619. url = url.replace(/session:em_uu/, em_uu);
  620. }
  621. if(url.indexOf('session:em_code') != -1){
  622. url = url.replace(/session:em_code/, "'" + em_code + "'");
  623. }
  624. if(url.indexOf('sysdate') != -1){
  625. url = url.replace(/sysdate/, "to_date('" + Ext.Date.toString(new Date()) + "','Y-m-d')");
  626. }
  627. if(url.indexOf('session:em_name') != -1){
  628. url = url.replace(/session:em_name/,"'"+em_name+"'" );
  629. }
  630. if(url.indexOf(basePath) == -1) {
  631. url = basePath + url;
  632. }
  633. return url;
  634. }
  635. });