Navigation.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. scope: me
  79. }
  80. });
  81. Ext.apply(me, {
  82. items: [view]
  83. });
  84. me.view = view;
  85. me.callParent();
  86. },
  87. showNavMenu: function(view, record, item, index, e, eOpts) {
  88. var recData = record.data,
  89. menuItems = recData.items || [],
  90. itemBox = item.getBoundingClientRect(),
  91. pos = [itemBox.left + itemBox.width, itemBox.top],
  92. id = recData.id,
  93. menuId = 'navMenu-' + id,
  94. menu = Ext.getCmp(menuId);
  95. if(!menu) {
  96. var view = new Ext.DataView({
  97. store : Ext.create('Ext.data.Store', {
  98. fields: ['id', 'text', 'formType', 'queryType'],
  99. data: menuItems
  100. }),
  101. tpl: new Ext.XTemplate('<div class="x-navitem-menu">',
  102. '<div class="nav-menu-body">',
  103. '<tpl for=".">',
  104. '<div class="menu">',
  105. '<h3 class="menu-title">{text}</h3>',
  106. '<ul class="menu-content">',
  107. '<tpl for="items">',
  108. '<li class="menuitem">',
  109. '<span class="item-text" data-id="{id}" data-text="{text}" data-type="query" data-queryType="{queryType}">',
  110. '{text}',
  111. '</span>',
  112. '<tpl if="{formType}">',
  113. '<i class="item-icon" data-id="{id}" data-text="{text}" data-type="form" data-formType="{formType}">新增</i>',
  114. '</tpl>',
  115. '</li>',
  116. '</tpl>',
  117. '</ul>',
  118. '</div>',
  119. '</tpl>',
  120. '</div>',
  121. '</div>'),
  122. trackOver: true,
  123. overItemCls : 'menuitem-over',
  124. selectedClass : 'menuitem-selected',
  125. singleSelect : true,
  126. itemSelector : 'menu',
  127. listeners: {
  128. boxready: function(view, width, height, eOpts) {
  129. var menu = view.up('menu'),
  130. menuView = view.el.dom.getElementsByClassName('x-navitem-menu')[0],
  131. menuBox = menuView.getBoundingClientRect(),
  132. menuViewWidth = menuBox.width,
  133. menuViewHeight = menuBox.height,
  134. menuItem = menuView.getElementsByClassName('menuitem');
  135. menu.setWidth(menuViewWidth);
  136. menu.setHeight(menuViewHeight);
  137. menu.updateLayout();
  138. view.el.dom.addEventListener('mouseleave', function() {
  139. menu.hide();
  140. });
  141. Ext.Array.each(menuItem, function(mi) {
  142. var menuItemText = mi.getElementsByClassName('item-text');
  143. var menuItemIcon = mi.getElementsByClassName('item-icon');
  144. Ext.Array.each(menuItemText, function(item) {
  145. item.addEventListener('click', function(e) {
  146. var target = e.target,
  147. dataset = target.dataset;
  148. mainView = Ext.getCmp('mainView'),
  149. controller = mainView.getController();
  150. controller.setActiveTab(dataset);
  151. menu.hide();
  152. });
  153. });
  154. Ext.Array.each(menuItemIcon, function(item) {
  155. item.addEventListener('click', function(e) {
  156. var target = e.target,
  157. dataset = target.dataset;
  158. mainView = Ext.getCmp('mainView'),
  159. controller = mainView.getController();
  160. controller.setActiveTab(dataset);
  161. menu.hide();
  162. });
  163. });
  164. });
  165. },
  166. }
  167. });
  168. var menu = Ext.create('Ext.menu.Menu', {
  169. id: menuId,
  170. width: window.innerWidth,
  171. items: [view]
  172. });
  173. }
  174. menu.showAt(pos);
  175. },
  176. hideNavMenu: function(view, record, item, index, e, eOpts) {
  177. var recData = record.data,
  178. cx = e.browserEvent.clientX,
  179. cy = e.browserEvent.clientY,
  180. itemBox = item.getBoundingClientRect(),
  181. id = recData.id,
  182. menuId = 'navMenu-' + id,
  183. menu = Ext.getCmp(menuId);
  184. if(cx <= itemBox.left || cy <= itemBox.top || cy >= (itemBox.top + itemBox.height)) {
  185. if(menu) {
  186. menu.hide();
  187. }
  188. }
  189. }
  190. });