127 lines
3.2 KiB
JavaScript
127 lines
3.2 KiB
JavaScript
/******************************************************************
|
|
*
|
|
* 通用菜单多页切换复合窗体
|
|
*
|
|
******************************************************************/
|
|
|
|
const BridgeWindow = require( "bridge.window" );
|
|
const { MENUS } = require( "bridge.panels" );
|
|
|
|
cc.Class( {
|
|
|
|
extends: BridgeWindow,
|
|
|
|
properties: {
|
|
cfgKey: { default: "", displayName: "配置键" },
|
|
defPage: { default: "", displayName: "默认页" },
|
|
menu: { default: null, type: cc.Node },
|
|
pages: { default: null, type: cc.Node },
|
|
},
|
|
|
|
// 载入
|
|
onLoad: function() {
|
|
|
|
// 菜单初始化
|
|
this.menu.children.forEach( _item => {
|
|
nx.gui.setActive( _item, "on", false );
|
|
nx.gui.setActive( _item, "off", true );
|
|
} );
|
|
|
|
},
|
|
|
|
// 重载:参数打开
|
|
onOpenConfigs: function( _params ) {
|
|
|
|
// 配置获取
|
|
this.cfgs = MENUS[ this.cfgKey ];
|
|
if( nx.dt.objEmpty( this.cfgs ) ) {
|
|
nx.error( "$MenuWnd:配置缺失! ", this.cfgKey );
|
|
this.delayClose();
|
|
return;
|
|
}
|
|
|
|
// 起始页
|
|
let pname = _params.page || _params.p1 || _params.fromOther || this.defPage;
|
|
if( nx.dt.strEmpty( pname ) ) {
|
|
for( let name in this.cfgs ) {
|
|
pname = name;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 切换菜单
|
|
this.togMenu( pname );
|
|
},
|
|
|
|
|
|
// 重载:关闭前
|
|
onPreClosed: function() {
|
|
|
|
this.pages.children.forEach( _page => {
|
|
let cmp = _page.getComponent( "cmp.com.menu.page" );
|
|
if( cmp ) {
|
|
cmp.onPreClosed();
|
|
}
|
|
} );
|
|
},
|
|
|
|
// 切换菜单
|
|
togMenu: function( _key ) {
|
|
|
|
// 忽略
|
|
if( nx.dt.strEmpty( _key ) || this.curKey == _key ) {
|
|
return;
|
|
}
|
|
|
|
// 菜单项切换
|
|
this.menu.children.forEach( _item => {
|
|
nx.gui.setActive( _item, "on", _item.name == _key );
|
|
nx.gui.setActive( _item, "off", _item.name != _key );
|
|
} );
|
|
|
|
// 页面切换
|
|
let page = nx.gui.find( this.pages, _key );
|
|
if( page ) {
|
|
this.pages.children.forEach( _page => {
|
|
nx.gui.setActive( _page, "", _page.name == _key );
|
|
} );
|
|
return;
|
|
}
|
|
|
|
// 页配置
|
|
let info = this.cfgs[_key];
|
|
if( nx.dt.objEmpty( info ) ) {
|
|
nx.error( "$MenuWnd:无效配置页!", _key );
|
|
return;
|
|
}
|
|
|
|
// 需要加载
|
|
nx.res.loadPrefab( this.cfgs[_key].prefab, ( _err, _data ) => {
|
|
|
|
if( _err ) {
|
|
return;
|
|
}
|
|
|
|
let page = cc.instantiate( _data );
|
|
page.name = _key;
|
|
page.parent = this.pages;
|
|
// let cmp = node.getComponent( "act.page.base" );
|
|
// if( cmp ) {
|
|
// cmp.build( _item.mdata );
|
|
// }
|
|
|
|
this.pages.children.forEach( _page => {
|
|
nx.gui.setActive( _page, "", _page.name == _key );
|
|
} );
|
|
|
|
}, true );
|
|
|
|
},
|
|
|
|
// 菜单切换
|
|
onTouchMenu: function( _key ) {
|
|
this.togMenu( _key );
|
|
},
|
|
|
|
} );
|