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: 'inquiry', text: '采购询价单', addType: 'purchase-inquiry-formpanel', viewType: 'purchase-inquiry-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-shopping-cart', items: [{ text: '制单', items: [{ id: 'sale', text: '销售订单', addType: 'sale-sale-formpanel', viewType: 'sale-sale-querypanel' }, { id: 'saleOut', text: '销售出货单', addType: 'sale-saleout-formpanel', viewType: 'sale-saleout-querypanel' }, { id: 'saleIn', text: '销售退货单', addType: 'sale-salein-formpanel', viewType: 'sale-salein-querypanel' }, { id: 'saleToPur', text: '以销定购', addType: 'sale-saletopur-formpanel', viewType: 'sale-saletopur-querypanel' }] }, { text: '报表', items: [{ text: '销售明细表' }, { text: '销售收款一览表' }, { text: '销售利润表' }] }] }, { text: '库存', iconCls: 'x-fa fa-shopping-cart', items: [{ text: '制单', items: [{ id: 'appropriationInOut', text: '调拨单', addType: 'stock-appropriationinout-formpanel', viewType: 'stock-appropriationinout-querypanel' }, { id: 'make', text: '制造单', addType: 'stock-make-formpanel', viewType: 'stock-make-querypanel' }, { id: 'otherIn', text: '其它入库单', addType: 'stock-otherin-formpanel', viewType: 'stock-otherin-querypanel' }, { id: 'otherOut', text: '其它出库单', addType: 'stock-otherout-formpanel', viewType: 'stock-otherout-querypanel' }, { id: 'inventory', text: '盘点单', addType: 'stock-inventory-formpanel', viewType: 'stock-inventory-querypanel' }] }, { text: '报表', items: [{ text: '物料出入库明细表' }, { text: '物料收发汇总表' }, { text: '物料库存数量金额表' }] }] }, { text: '资金', iconCls: 'x-fa fa-shopping-cart', items: [{ text: '制单', items: [{ id: 'payBalance', text: '付款单', addType: 'money-paybalance-formpanel', viewType: 'money-paybalance-querypanel' }, { id: 'recBbalance', text: '收款单', addType: 'money-recbalance-formpanel', viewType: 'money-recbalance-querypanel' }, { id: 'verification', text: '核销单', addType: 'money-verification-formpanel', viewType: 'money-verification-querypanel' }, { id: 'othReceipts', text: '其它收支单', addType: 'money-othreceipts-formpanel', viewType: 'money-othreceipts-querypanel' }, { id: 'fundTransfer', text: '资金转存', addType: 'money-fundtransfer-formpanel', viewType: 'money-fundtransfer-querypanel' }] }, { text: '报表', items: [{ text: '供应商对账单' }, { text: '应付账款明细表' }, { text: '客户对账单' }, { 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(); } } } });