',
'
',
'',
'',
''),
trackOver: true,
overItemCls: 'x-navitem-over',
selectedItemCls: '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 (navView, record, navItem, index, e, eOpts) {
var me = this,
recData = record.data,
menuItems = recData.items || [],
itemBox = navItem.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', 'ctype'],
data: menuItems
}),
tpl: new Ext.XTemplate(''),
trackOver: true,
overItemCls: 'menuitem-over',
selectedItemCls: '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 + me.menuPadding * 2,
menuViewHeight = menuBox.height + me.menuPadding * 2,
menuItem = menuView.getElementsByClassName('menuitem');
menu.setWidth(menuViewWidth);
menu.setHeight(menuViewHeight);
menu.updateLayout();
view.el.dom.addEventListener('mouseenter', function (e) {
menu.show();
menu.navItem.classList.add(menu.navView.overItemCls);
});
view.el.dom.addEventListener('mouseleave', function (e) {
menu.navItem.classList.remove(menu.navView.overItemCls);
menu.hide();
// var ex = e.clientX,
// ey = e.clientY,
// box = menuView.getBoundingClientRect(),
// navItem = menu.navItem,
// navBox = navItem.getBoundingClientRect();
// if ((ex <= box.left && (ey <= (navBox.top - 5) || ey >= (navBox.top + navBox.height))) || ey <= (box.top - 5) || ex >= (box.left + box.width + 5) || ey >= (box.top + box.height + 5)) {
// menu.navItem.classList.remove(menu.navView.overItemCls);
// 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,
viewType = dataset.viewtype,
type = dataset.type,
text = dataset.text,
config = dataset.config,
id = dataset.id,
componentType = dataset.ctype || 'Tab';
var tabTitle = text,
tabId = 'maintab-' + type + '-' + id;
menu.navItem.classList.remove(menu.navView.overItemCls);
// saas.util.BaseUtil.openTab(viewType, tabTitle, tabId,config);
saas.util.BaseUtil['open' + componentType](viewType, tabTitle, tabId,config);
menu.hide();
});
});
Ext.Array.each(menuItemIcon, function (item) {
item.addEventListener('click', function (e) {
var target = e.target,
dataset = target.dataset,
viewType = dataset.viewtype,
type = dataset.type,
text = dataset.text,
id = dataset.id,
componentType = dataset.ctype || 'Tab';
var tabTitle ='新增' + text,
tabId = viewType + '-add';
menu.navItem.classList.remove(menu.navView.overItemCls);
// saas.util.BaseUtil.openTab(viewType, tabTitle, tabId);
saas.util.BaseUtil['open' + componentType](viewType, tabTitle, tabId);
menu.hide();
});
});
});
},
}
});
var menu = Ext.create('Ext.menu.Menu', {
navView: navView,
navItem: navItem,
id: menuId,
width: window.innerWidth,
cls: 'x-nav-menu',
layout: 'fit',
shadow: 'drop',
bodyPadding: me.menuPadding,
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) && cx <= (itemBox.left + itemBox.width - 10))) {
if (menu) {
menu.hide();
}
}
}
});