菜单体系
模块a-ssr提供了通用的 SSR 菜单体系。事实上可以完全忽略这个菜单体系,提供自己的菜单获取逻辑。但是,使用系统约定的菜单体系有利于在社区中分享和复用代码资源,显著提升系统的扩展性和可维护性。
bean.ssr
模块a-ssr提供了全局 Bean bean.ssr,可以通过统一的方式获取菜单。
以模块home-base为例:
src/suite/a-home/modules/home-base/src/service/menu.ts
typescript
class ServiceMenu {
async retrieveMenus(publicPath?: string): Promise<IMenus> {
const res = await this.bean.ssr.retrieveMenus(publicPath);
if (res) return res;
return this._getMenusDefault();
}
private _getMenusDefault(): IMenus {
return {
menus: [
{ name: 'home', title: this.$scope.homeIndex.locale.Home(), icon: '::home', link: '/' },
],
};
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bean.ssr.retrieveMenus: 获取 SSR 菜单_getMenusDefault: 提供缺省菜单
Menu API
模块home-base提供了获取菜单的 API,实现开箱即用
src/suite/a-home/modules/home-base/src/controller/menu.ts
typescript
class ControllerMenu {
@Web.get(':publicPath?')
@Api.body(v.object(DtoMenus))
async retrieveMenus(@Arg.param('publicPath', v.optional()) publicPath?: string): Promise<IMenus> {
return await this.scope.service.menu.retrieveMenus(publicPath);
}
}1
2
3
4
5
6
7
2
3
4
5
6
7