',
'
',
'',
'',
''),
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 (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'],
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('mouseenter', function (e) {
menu.show();
menu.navItem.classList.add(menu.navView.overItemCls);
});
view.el.dom.addEventListener('mouseleave', function (e) {
var ex = e.clientX,
ey = e.clientY,
box = menuView.getBoundingClientRect(),
navItem = menu.navItem,
navBox = navItem.getBoundingClientRect();
if (ey <= box.top || ex >= (box.left + box.width) || ey >= (box.top + box.height) || (ex <= box.left && (ey <= navBox.top || ey >= (navBox.top + navBox.height)))) {
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;
var tabTitle = text + '查询',
tabId = 'maintab-' + type + '-' + id;
menu.navItem.classList.remove(menu.navView.overItemCls);
openTab(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;
var tabTitle ='新增' + text,
tabId = viewType + '-add';
menu.navItem.classList.remove(menu.navView.overItemCls);
openTab(viewType, tabTitle, tabId);
menu.hide();
});
});
});
},
}
});
var menu = Ext.create('Ext.menu.Menu', {
navView: navView,
navItem: navItem,
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) && cx <= (itemBox.left + itemBox.width - 10))) {
if (menu) {
menu.hide();
}
}
}
});