Files
fc/dev/project/assets/Scripts/mod/common/cmp.com.menu.wnd.js
T
2026-05-23 22:10:14 +08:00

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 );
},
} );