Navigation.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. Ext.define('saas.view.main.Navigation', {
  2. extend: 'Ext.panel.Panel',
  3. xtype: 'main-navigation',
  4. ui: 'nav',
  5. reference: 'navigationTreeList',
  6. navCollapsed: false,
  7. cls: 'x-navpanel',
  8. initComponent: function() {
  9. var me = this;
  10. var view = new Ext.DataView({
  11. store : Ext.create('Ext.data.Store', {
  12. fields: ['text', 'iconCls'],
  13. data: [{
  14. text: '采购',
  15. iconCls: 'x-fa fa-shopping-basket',
  16. items: [{
  17. text: '制单',
  18. items: [{
  19. id: 'purchase',
  20. text: '采购单',
  21. formType:'purchase-purchase-formpanel',
  22. queryType: 'purchase-purchase-querypanel'
  23. }, {
  24. id: 'purchaseIn',
  25. text: '采购验收单',
  26. formType:'purchase-purchaseIn-formpanel',
  27. queryType: 'purchase-purchaseIn-querypanel'
  28. },{
  29. id: 'purchaseOut',
  30. text: '采购验退单',
  31. formType:'purchase-purchaseOut-formpanel',
  32. queryType: 'purchase-purchaseOut-querypanel'
  33. },{
  34. id: 'form1',
  35. text: '测试-采购单明细界面',
  36. formType: 'test-order-formpanel'
  37. }, {
  38. id: 'myform',
  39. text: '测试-明细界面',
  40. formType: 'test-myform-formpanel'
  41. }, {
  42. id: 'myquerytest',
  43. text: '测试-采购单查询界面',
  44. queryType: 'test-query-querypanel',
  45. }]
  46. }, {
  47. text: '报表',
  48. items: [{
  49. text: '采购明细表'
  50. }, {
  51. text: '采购付款一览表'
  52. }]
  53. }]
  54. }, {
  55. text: '销售',
  56. iconCls: 'x-fa fa-shopping-cart',
  57. }],
  58. }),
  59. tpl : new Ext.XTemplate('<ul class="x-navlist">',
  60. '<tpl for=".">',
  61. '<li class="x-navitem">',
  62. '<div class="x-navitem-body">',
  63. '<div class="nav-inner-wrap" style="margin-left: 0px;">',
  64. '<div class="nav-inner-icon {iconCls}"></div>',
  65. '<div class="nav-inner-text">{text}</div>',
  66. '</div>',
  67. '</li>',
  68. '</tpl>',
  69. '</ul>'),
  70. trackOver: true,
  71. overItemCls : 'x-navitem-over',
  72. selectedClass : 'x-navitem-selected',
  73. singleSelect : true,
  74. itemSelector : '.x-navitem',
  75. listeners: {
  76. itemmouseenter: me.showNavMenu,
  77. itemmouseleave: me.hideNavMenu,
  78. itemclick: me.menuItemClick,
  79. scope: me
  80. }
  81. });
  82. Ext.apply(me, {
  83. items: [view]
  84. });
  85. me.view = view;
  86. me.callParent();
  87. },
  88. showNavMenu: function(view, record, item, index, e, eOpts) {
  89. var me = this,
  90. recData = record.data,
  91. menuItems = recData.items || [],
  92. itemBox = item.getBoundingClientRect(),
  93. pos = [itemBox.left + itemBox.width, itemBox.top],
  94. id = recData.id,
  95. menuId = 'navMenu-' + id,
  96. menu = Ext.getCmp(menuId);
  97. if(!menu) {
  98. var view = new Ext.DataView({
  99. store : Ext.create('Ext.data.Store', {
  100. fields: ['id', 'text', 'formType', 'queryType'],
  101. data: menuItems
  102. }),
  103. tpl: new Ext.XTemplate('<div class="x-navitem-menu">',
  104. '<div class="nav-menu-body">',
  105. '<tpl for=".">',
  106. '<div class="menu">',
  107. '<h3 class="menu-title">{text}</h3>',
  108. '<ul class="menu-content">',
  109. '<tpl for="items">',
  110. '<li class="menuitem">',
  111. '<span class="item-text" data-id="{id}" data-text="{text}" data-type="query" data-queryType="{queryType}">',
  112. '{text}',
  113. '</span>',
  114. '<tpl if="{formType}">',
  115. '<i class="item-icon" data-id="{id}" data-text="{text}" data-type="form" data-formType="{formType}">新增</i>',
  116. '</tpl>',
  117. '</li>',
  118. '</tpl>',
  119. '</ul>',
  120. '</div>',
  121. '</tpl>',
  122. '</div>',
  123. '</div>'),
  124. trackOver: true,
  125. overItemCls : 'menuitem-over',
  126. selectedClass : 'menuitem-selected',
  127. singleSelect : true,
  128. itemSelector : 'menu',
  129. listeners: {
  130. boxready: function(view, width, height, eOpts) {
  131. var menu = view.up('menu'),
  132. menuView = view.el.dom.getElementsByClassName('x-navitem-menu')[0],
  133. menuBox = menuView.getBoundingClientRect(),
  134. menuViewWidth = menuBox.width,
  135. menuViewHeight = menuBox.height,
  136. menuItem = menuView.getElementsByClassName('menuitem');
  137. menu.setWidth(menuViewWidth);
  138. menu.setHeight(menuViewHeight);
  139. menu.updateLayout();
  140. view.el.dom.addEventListener('mouseleave', function() {
  141. menu.hide();
  142. });
  143. Ext.Array.each(menuItem, function(mi) {
  144. var menuItemText = mi.getElementsByClassName('item-text');
  145. var menuItemIcon = mi.getElementsByClassName('item-icon');
  146. Ext.Array.each(menuItemText, function(item) {
  147. item.addEventListener('click', function(e) {
  148. var target = e.target,
  149. dataset = target.dataset;
  150. mainView = Ext.getCmp('mainView'),
  151. controller = mainView.getController();
  152. controller.setActiveTab(dataset);
  153. menu.hide();
  154. });
  155. });
  156. Ext.Array.each(menuItemIcon, function(item) {
  157. item.addEventListener('click', function(e) {
  158. var target = e.target,
  159. dataset = target.dataset;
  160. mainView = Ext.getCmp('mainView'),
  161. controller = mainView.getController();
  162. controller.setActiveTab(dataset);
  163. menu.hide();
  164. });
  165. });
  166. });
  167. },
  168. }
  169. });
  170. var menu = Ext.create('Ext.menu.Menu', {
  171. id: menuId,
  172. width: window.innerWidth,
  173. items: [view]
  174. });
  175. }
  176. menu.showAt(pos);
  177. },
  178. hideNavMenu: function(view, record, item, index, e, eOpts) {
  179. var recData = record.data,
  180. cx = e.browserEvent.clientX,
  181. cy = e.browserEvent.clientY,
  182. itemBox = item.getBoundingClientRect(),
  183. id = recData.id,
  184. menuId = 'navMenu-' + id,
  185. menu = Ext.getCmp(menuId);
  186. if(cx <= itemBox.left || cy <= itemBox.top || cy >= (itemBox.top + itemBox.height)) {
  187. if(menu) {
  188. menu.hide();
  189. }
  190. }
  191. }
  192. });