|
|
@@ -1,8 +1,6 @@
|
|
|
Ext.define('saas.view.main.Navigation', {
|
|
|
- extend: 'Ext.panel.Panel',
|
|
|
+ extend: 'Ext.view.View',
|
|
|
xtype: 'main-navigation',
|
|
|
- ui: 'nav',
|
|
|
-
|
|
|
reference: 'navigationTreeList',
|
|
|
|
|
|
width: 180,
|
|
|
@@ -12,37 +10,38 @@ Ext.define('saas.view.main.Navigation', {
|
|
|
|
|
|
menuPadding: 0,
|
|
|
|
|
|
+ bind: {
|
|
|
+ store: '{navMenu}'
|
|
|
+ },
|
|
|
+
|
|
|
+ renderTpl: [
|
|
|
+ '<div id="{id}-innerCt" data-ref="innerCt" role="presentation">',
|
|
|
+ '{%this.renderContent(out,values)%}',
|
|
|
+ '</div>'
|
|
|
+ ],
|
|
|
+ tpl: ['<ul class="x-navlist">',
|
|
|
+ '<tpl for=".">',
|
|
|
+ '<li class="x-navitem">',
|
|
|
+ '<div class="x-navitem-body">',
|
|
|
+ '<div class="nav-inner-wrap" style="margin-left: 0px;">',
|
|
|
+ '<div class="nav-inner-icon {iconCls}"></div>',
|
|
|
+ '<div class="nav-inner-text">{text}</div>',
|
|
|
+ '</div>',
|
|
|
+ '</div>',
|
|
|
+ '</li>',
|
|
|
+ '</tpl>',
|
|
|
+ '</ul>'
|
|
|
+ ],
|
|
|
+
|
|
|
+ overItemCls: 'x-navitem-over',
|
|
|
+ selectedItemCls: 'x-navitem-selected',
|
|
|
+ singleSelect: true,
|
|
|
+ itemSelector: '.x-navitem',
|
|
|
+
|
|
|
initComponent: function () {
|
|
|
var me = this;
|
|
|
- var view = new Ext.DataView({
|
|
|
- store: Ext.create('Ext.data.Store', {
|
|
|
- autoLoad: true,
|
|
|
- fields: ['text', 'iconCls'],
|
|
|
- proxy: {
|
|
|
- type: 'ajax',
|
|
|
- url: 'resources/json/navigation.json',
|
|
|
- reader: {
|
|
|
- type: 'json'
|
|
|
- }
|
|
|
- }
|
|
|
- }),
|
|
|
- tpl: new Ext.XTemplate('<ul class="x-navlist">',
|
|
|
- '<tpl for=".">',
|
|
|
- '<li class="x-navitem">',
|
|
|
- '<div class="x-navitem-body">',
|
|
|
- '<div class="nav-inner-wrap" style="margin-left: 0px;">',
|
|
|
- '<div class="nav-inner-icon {iconCls}"></div>',
|
|
|
- '<div class="nav-inner-text">{text}</div>',
|
|
|
- '</div>',
|
|
|
- '</div>',
|
|
|
- '</li>',
|
|
|
- '</tpl>',
|
|
|
- '</ul>'),
|
|
|
- trackOver: true,
|
|
|
- overItemCls: 'x-navitem-over',
|
|
|
- selectedItemCls: 'x-navitem-selected',
|
|
|
- singleSelect: true,
|
|
|
- itemSelector: '.x-navitem',
|
|
|
+
|
|
|
+ Ext.apply(me, {
|
|
|
listeners: {
|
|
|
itemmouseenter: function(navView, record, navItem, index, e, eOpts) {
|
|
|
window.clearTimeout(me.Timer);
|
|
|
@@ -63,98 +62,108 @@ Ext.define('saas.view.main.Navigation', {
|
|
|
scope: me
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
- Ext.apply(me, {
|
|
|
- items: [view]
|
|
|
- });
|
|
|
-
|
|
|
- me.view = view;
|
|
|
- me.callParent();
|
|
|
+ me.callParent(arguments);
|
|
|
},
|
|
|
|
|
|
- // 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,
|
|
|
d = recData.items || [],
|
|
|
- menuItems = JSON.parse( JSON.stringify( d ) ),
|
|
|
+ menuItems = JSON.parse(JSON.stringify(d)),
|
|
|
itemBox = navItem.getBoundingClientRect(),
|
|
|
pos = [itemBox.left + itemBox.width, itemBox.top],
|
|
|
- id = recData.id,
|
|
|
- menuId = 'navMenu-' + id,
|
|
|
+ menuId = 'navMenu-' + record.get('id'),
|
|
|
menu = Ext.getCmp(menuId);
|
|
|
|
|
|
//获取b2b权限
|
|
|
var enableB2B = me.ownerCt.ownerCt.getViewModel().get('enableB2B');
|
|
|
|
|
|
- if(enableB2B==null||enableB2B==0||enableB2B=='0'){
|
|
|
- Ext.each(menuItems,function(item,index){
|
|
|
- if(item.items.length>0){
|
|
|
- var l = item.items.length;
|
|
|
- for(var i = 0;i<l;i++){
|
|
|
- if(item.items[i].hasOwnProperty('b2b') && item.items[i].b2b == true){
|
|
|
+ Ext.each(menuItems,function(item,index){
|
|
|
+ if(item.items.length>0){
|
|
|
+ var l = item.items.length;
|
|
|
+ for(var i = 0;i<l;i++){
|
|
|
+ if(item.items[i].hasOwnProperty('b2b')){
|
|
|
+ if(((!enableB2B || enableB2B == '0') && item.items[i].b2b == true) || (!!enableB2B && item.items[i].b2b == false)) {
|
|
|
item.items.splice(i--,1);
|
|
|
l--;
|
|
|
}
|
|
|
- };
|
|
|
- }
|
|
|
- })
|
|
|
- }else {
|
|
|
- Ext.each(menuItems,function(item,index){
|
|
|
- if(item.items.length>0){
|
|
|
- var l = item.items.length;
|
|
|
- for(var i = 0;i<l;i++){
|
|
|
- if(item.items[i].hasOwnProperty('b2b') && item.items[i].b2b == false){
|
|
|
- item.items.splice(i--,1);
|
|
|
- l--;
|
|
|
- }
|
|
|
- };
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
if (!menu) {
|
|
|
- var view = new Ext.DataView({
|
|
|
+ view = new Ext.DataView({
|
|
|
store: Ext.create('Ext.data.Store', {
|
|
|
fields: ['id', 'text', 'addType', 'viewType'],
|
|
|
data: menuItems
|
|
|
}),
|
|
|
tpl: new Ext.XTemplate('<div class="x-navitem-menu">',
|
|
|
'<div class="nav-menu-body">',
|
|
|
- '<tpl for=".">',
|
|
|
- '<div class="menu">',
|
|
|
- '<div class="menu-title">',
|
|
|
- '<span class="menu-title-text">{text}</span>',
|
|
|
- '</div>',
|
|
|
- '<div class="menu-content">',
|
|
|
- '<tpl for="items">',
|
|
|
- '<div class="menuitem">',
|
|
|
- '<div class="item-text" data-config="{config}" data-id="{id}" data-text="{text}" data-type="query" data-viewType="{viewType}">',
|
|
|
- '{text}',
|
|
|
+ '<tpl for=".">',
|
|
|
+ '<div class="menu">',
|
|
|
+ '<div class="menu-title">',
|
|
|
+ '<span class="menu-title-text">{text}</span>',
|
|
|
+ '</div>',
|
|
|
+ '<div class="menu-content">',
|
|
|
+ '<tpl for="items">',
|
|
|
+ '<div class="menuitem">',
|
|
|
+ '<div data-boundView="{id}" data-recordId="{id}" class="item-text" data-config="{config}" data-id="{id}" data-text="{text}" data-type="query" data-viewType="{viewType}">',
|
|
|
+ '{text}',
|
|
|
+ '</div>',
|
|
|
+ '<tpl if="this.hasAddType(addType)">',
|
|
|
+ '<div class="item-icon" data-id="{id}" data-text="{text}" data-type="form" data-viewType="{addType}">新增</div>',
|
|
|
+ '</tpl>',
|
|
|
+ '</div>',
|
|
|
+ '</tpl>',
|
|
|
'</div>',
|
|
|
- '<tpl if="{addType}">',
|
|
|
- '<div class="item-icon" data-id="{id}" data-text="{text}" data-type="form" data-viewType="{addType}">新增</div>',
|
|
|
- '</tpl>',
|
|
|
'</div>',
|
|
|
- '</tpl>',
|
|
|
- '</div>',
|
|
|
- '</div>',
|
|
|
- '</tpl>',
|
|
|
+ '</tpl>',
|
|
|
'</div>',
|
|
|
- '</div>'),
|
|
|
+ '</div>', {
|
|
|
+ disableFormats: true,
|
|
|
+ hasAddType: function(addType) {
|
|
|
+ return !!addType;
|
|
|
+ }
|
|
|
+ }),
|
|
|
trackOver: true,
|
|
|
overItemCls: 'menuitem-over',
|
|
|
selectedItemCls: 'menuitem-selected',
|
|
|
singleSelect: true,
|
|
|
- itemSelector: 'menu',
|
|
|
- listeners: {
|
|
|
- // boxready: function (view, width, height, eOpts) {
|
|
|
- // },
|
|
|
- }
|
|
|
+ itemSelector: '.menu',
|
|
|
+ /** override */
|
|
|
+ updateIndexes: function(startIndex, endIndex) {
|
|
|
+ var self = this,
|
|
|
+ menu = self.up('menu'),
|
|
|
+ nodes = self.all.elements,
|
|
|
+ records = self.getViewRange(),
|
|
|
+ selModel = self.getSelectionModel(),
|
|
|
+ myId = self.id,
|
|
|
+ i, j;
|
|
|
+
|
|
|
+ startIndex = startIndex || 0;
|
|
|
+ endIndex = endIndex || ((endIndex === 0) ? 0 : (nodes.length - 1));
|
|
|
+ for (i = startIndex; i <= endIndex; i++) {
|
|
|
+ let node = nodes[i];
|
|
|
+ let record = records[i];
|
|
|
+
|
|
|
+
|
|
|
+ let cnodes = node.children[1].children;
|
|
|
+
|
|
|
+ for(j = 0; j < cnodes.length; j++) {
|
|
|
+ let cnode = cnodes[j];
|
|
|
+ let crecord = record.data.items[j];
|
|
|
+ !!Ext.get(cnode.children[0]) && Ext.get(cnode.children[0]).on('click', function() {
|
|
|
+ me.openTab('', crecord);
|
|
|
+ menu.hide();
|
|
|
+ });
|
|
|
+ !!Ext.get(cnode.children[1]) && Ext.get(cnode.children[1]).on('click', function() {
|
|
|
+ me.openTab('add', crecord);
|
|
|
+ menu.hide();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
});
|
|
|
var menu = Ext.create('Ext.menu.Menu', {
|
|
|
navView: navView,
|
|
|
@@ -171,17 +180,28 @@ Ext.define('saas.view.main.Navigation', {
|
|
|
menu.items.items[0].store.removeAll();
|
|
|
menu.items.items[0].store.loadData(menuItems);
|
|
|
menu.showAt(pos);
|
|
|
- me.refresh(menu.items.items[0],pos)
|
|
|
+ me.refreshMenu(menu.items.items[0], pos)
|
|
|
+ },
|
|
|
+
|
|
|
+ openTab: function(type, data) {
|
|
|
+ var viewType = data.viewType,
|
|
|
+ text = data.text,
|
|
|
+ config = data.config,
|
|
|
+ id = data.id,
|
|
|
+ addType = data.addType;
|
|
|
+
|
|
|
+ saas.util.BaseUtil.openTab(type == 'add' ? addType : viewType, text, 'maintab-' + type + '-' + id, config);
|
|
|
+
|
|
|
},
|
|
|
|
|
|
- refresh:function(view,pos){
|
|
|
+ refreshMenu: function (view, pos) {
|
|
|
var me = this;
|
|
|
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');
|
|
|
+ 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.setX(pos[0]);
|
|
|
menu.setWidth(menuViewWidth);
|
|
|
@@ -196,57 +216,6 @@ Ext.define('saas.view.main.Navigation', {
|
|
|
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;
|
|
|
-
|
|
|
- var tabTitle = text,
|
|
|
- tabId = 'maintab-' + type + '-' + id;
|
|
|
-
|
|
|
- menu.navItem.classList.remove(menu.navView.overItemCls);
|
|
|
- saas.util.BaseUtil.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);
|
|
|
- saas.util.BaseUtil.openTab(viewType, tabTitle, tabId);
|
|
|
- menu.hide();
|
|
|
- });
|
|
|
- });
|
|
|
});
|
|
|
},
|
|
|
|