Ext.define('saas.view.main.Navigation', { extend: 'Ext.panel.Panel', xtype: 'main-navigation', ui: 'nav', reference: 'navigationTreeList', navCollapsed: false, cls: 'x-navpanel', initComponent: function() { var me = this; var view = new Ext.DataView({ store : Ext.create('Ext.data.Store', { fields: ['text', 'iconCls'], data: [{ text: '采购', iconCls: 'x-fa fa-shopping-basket', items: [{ text: '制单', items: [{ id: 'purchase', text: '采购单', addType:'purchase-purchase-formpanel', viewType: 'purchase-purchase-querypanel' }, { id: 'purchaseIn', text: '采购验收单', addType:'purchase-purchaseIn-formpanel', viewType: 'purchase-purchaseIn-querypanel' },{ id: 'purchaseOut', text: '采购验退单', addType:'purchase-purchaseOut-formpanel', viewType: 'purchase-purchaseOut-querypanel' },{ id: 'form1', text: '测试-采购单明细界面', addType: 'test-order-formpanel' }, { id: 'myform', text: '测试-明细界面', addType: 'test-myform-formpanel' }, { id: 'myquerytest', text: '测试-采购单查询界面', viewType: 'test-query-querypanel', }] }, { text: '报表', items: [{ text: '采购明细表' }, { text: '采购付款一览表' }] }] },{ text: '资料', iconCls: 'x-fa fa-book', items: [ { text: '基础资料', items: [ { text: '客户资料', viewType: 'mainlist', leaf: true }, { text: '供应商管理', viewType: 'mainlist', leaf: true }, { text: '商品管理', viewType: 'mainlist', leaf: true }, { text: '仓库管理', viewType: 'mainlist', leaf: true }, { text: '职员管理', viewType: 'mainlist', leaf: true }, { text: '账户管理', viewType: 'mainlist', leaf: true }, { text: '发货地址管理', viewType: 'mainlist', leaf: true }, { text: '新手导航', viewType: 'mainlist', leaf: true } ] }, { text: '辅助资料', items: [ { text: '客户类别', viewType: 'document-kind', leaf: true }, { text: '供应商类别', viewType: 'document-kind', leaf: true }, { text: '商品类别', viewType: 'document-kind', leaf: true }, { text: '支出类别', viewType: 'document-kind', leaf: true }, { text: '收入类别', viewType: 'document-kind', leaf: true }, { text: '计量单位', viewType: 'mainlist', leaf: true }, { text: '结算方式', viewType: 'mainlist', leaf: true }, { text: '辅助属性', viewType: 'mainlist', leaf: true }, { text: '客户物料编码', viewType: 'mainlist', leaf: true }, { text: '单据编码规则', viewType: 'mainlist', leaf: true } ] } ] }] }), tpl : new Ext.XTemplate(''), trackOver: true, overItemCls : 'x-navitem-over', selectedClass : 'x-navitem-selected', singleSelect : true, itemSelector : '.x-navitem', listeners: { itemmouseenter: me.showNavMenu, itemmouseleave: me.hideNavMenu, itemClick: me.clickNavMenu, scope: me } }); Ext.apply(me, { items: [view] }); me.view = view; me.callParent(); }, clickNavMenu: function(view, record, item, index, e, eOpts) { var me = this; this.showNavMenu(view, record, item, index, e, eOpts); }, showNavMenu: function(view, record, item, index, e, eOpts) { var recData = record.data, menuItems = recData.items || [], itemBox = item.getBoundingClientRect(), pos = [itemBox.left + itemBox.width, itemBox.top], id = recData.id, menuId = 'navMenu-' + id, menu = Ext.getCmp(menuId); if(!menu) { var view = new Ext.DataView({ store : Ext.create('Ext.data.Store', { fields: ['id', 'text', 'addType', 'viewType'], data: menuItems }), tpl: new Ext.XTemplate('
', '', '
'), trackOver: true, overItemCls : 'menuitem-over', selectedClass : 'menuitem-selected', singleSelect : true, itemSelector : 'menu', listeners: { boxready: function(view, width, height, eOpts) { var menu = view.up('menu'), menuView = view.el.dom.getElementsByClassName('x-navitem-menu')[0], menuBox = menuView.getBoundingClientRect(), menuViewWidth = menuBox.width, menuViewHeight = menuBox.height, menuItem = menuView.getElementsByClassName('menuitem'); menu.setWidth(menuViewWidth); menu.setHeight(menuViewHeight); menu.updateLayout(); view.el.dom.addEventListener('mouseleave', function(e) { var ex = e.clientX, ey = e.clientY, box = menuView.getBoundingClientRect(); if(ey <= box.top || ex >= (box.left + box.width) || ey >= (box.top + box.height) || (ex <= box.left && ey >= (box.top + 64))) { menu.hide(); } }); Ext.Array.each(menuItem, function(mi) { var menuItemText = mi.getElementsByClassName('item-text'); var menuItemIcon = mi.getElementsByClassName('item-icon'); Ext.Array.each(menuItemText, function(item) { item.addEventListener('click', function(e) { var target = e.target, dataset = target.dataset; mainView = Ext.getCmp('mainView'), controller = mainView.getController(); controller.setActiveTab(dataset); menu.hide(); }); }); Ext.Array.each(menuItemIcon, function(item) { item.addEventListener('click', function(e) { var target = e.target, dataset = target.dataset; mainView = Ext.getCmp('mainView'), controller = mainView.getController(); controller.setActiveTab(dataset); menu.hide(); }); }); }); }, } }); var menu = Ext.create('Ext.menu.Menu', { id: menuId, width: window.innerWidth, style: { borderTopRightRadius: '4px', borderBottomRightRadius: '4px' }, items: [view] }); } menu.showAt(pos); }, hideNavMenu: function(view, record, item, index, e, eOpts) { var recData = record.data, cx = e.browserEvent.clientX, cy = e.browserEvent.clientY, itemBox = item.getBoundingClientRect(), id = recData.id, menuId = 'navMenu-' + id, menu = Ext.getCmp(menuId); if(cx <= itemBox.left || cy <= itemBox.top || cy >= (itemBox.top + itemBox.height)) { if(menu) { menu.hide(); } } } });